復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int

Slides:



Advertisements
Similar presentations
プログラミング論 第八回数字の計算,整数の入出力. 本日の内容 前回の課題(続き) 前回の課題(続き) 数字の計算をする 数字の計算をする – 加減乗除を行う – インクリメント演算子とデクリメン ト演算子.
Advertisements

変数とその種類 変数とは何か? → データ ( 数値 ) を入れておく 箱 1000 変数名とは何か? → 箱に付ける名前 xy 変数名 変数の種類 ( 変数の型 ) → 入れるデータによって箱の種類が異なる int char float double その他たくさん integer (
復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
7/10 if 文課題 力作が多くて感心! 演習1:キーボードから2つの整数を入力し、小さい方の数字を 表示せよ。
第6回条件による分岐.
演算、整数型と浮動小数点型 第3回目 [4月27日、H.16(‘04)] 本日のメニュー 1)前回の課題・宿題 2)ファイルサーバの利用
ループで実行する文が一つならこれでもOK
第2章 数値の入力と変数 scanfと変数をやります.
演算、整数型と浮動小数点型 第3回[平成16年4月27日(火)]:PN04ー03.ppt 今日の内容 1 復習 2 加減・乗除演算子
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
x y 復習 変数とその種類 変数名 数学の場合 未知数 「変数xに‥を代入し‥」 x = 5 x = 1.3
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
第7回 条件による繰り返し.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
Cプログラミング演習.
プログラミング応用 printfと変数.
プログラムはどこに保存され,どこで実行されるのか?
プログラミング演習I 2003年5月7日(第4回) 木村巌.
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
04: 式・条件分岐 (if) C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページ を開いておくこと
第7回 条件による繰り返し.
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
プログラムはどこに保存され,どこで実行されるのか?
復習 2次元配列 4列 j = 0 j = 1 j = 2 j = 3 i = 0 i = 1 i = 2 3行
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
2013年度 プログラミングⅡ ~ 計算してみよう ~.
2015年度 プログラミングⅡ ~ 計算してみよう ~.
整数データと浮動小数データ.
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
情報処理Ⅱ 第2回:2003年10月14日(火).
復習 一定回数を繰り返す反復処理の考え方 「ループ」と呼ぶ false i < 3 true i をループ変数あるいはカウンタと呼ぶ
C言語 はじめに 2016年 吉田研究室.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
C言語ファミリー C# 高級言語(抽象的) Java オブジェクト指向 C++ C 機械語(原始的)
地域情報学 C言語プログラミング 第2回 変数・配列、型変換、入力 2017年10月20日
IF文 START もしも宝くじが当たったら 就職活動する 就職活動しない YES END NO.
x y 復習 変数とその種類 変数とは何か? →データ(数値)を入れておく箱 変数名 変数名とは何か?
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
復習 Cにおけるループからの脱出と制御 break ループを強制終了する.if文と組み合わせて利用するのが一般的. continue
復習 if ~ 選択制御文(条件分岐) カッコが必要 true 条件 false 真(true)なら この中が aを2倍する 実行される
C言語講座 制御(選択) 2006年 計算技術研究会.
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
標準入出力、変数、演算子、エスケープシーケンス
知能情報工学演習I 第8回(後半第2回) 課題の回答
第4章 double 小数型の変数;.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
プログラミング演習I 数値計算における計算精度と誤差
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
情報処理Ⅱ 第2回 2004年10月12日(火).
第3回簡単なデータの入出力.
プログラミング1 プログラミング演習I 第2回.
プログラミング序論演習.
printf・scanf・変数・四則演算
第2章 数値の入力と変数 scanfと変数をやります.
C言語講座 四則演算  if ,  switch 制御文.
計算技術研究会 C言語講座 第二回 制御構文 if , switch.
第1章 文字の表示と計算 printfと演算子をやります 第1章 文字の表示と計算.
第1章 文字の表示と計算 printfと演算子をやります.
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int 4バイト もっとも標準的な整数型 2進法で10進実数を表わすので誤差がある (有効数字8桁程度) float 4バイト 単精度実数型(単精度浮動小数点型) double 8バイト 倍精度実数型(倍精度浮動小数点型) floatより高精度(有効数字15桁程度)

warning C4244: '=' : 'double' から 'int' に変換しました。データが失われているかもしれません。 浮動小数点数の代入と表示 復習 int型で表すことができない数値はおかしな結果になる int bb = 1300.5; printf("bb = %d\n", bb); int型に不動小数点数を代入すると,少数以下は切り捨て bb = 1300 コンパイラからの メッセージ warning = 警告 int cc = 10.56e20; printf("cc = %d\n", cc); 1344274432 warning C4244: '=' : 'double' から 'int' に変換しました。データが失われているかもしれません。 float xx = 100.56e-20, yy = 10000; printf("xx = %f, yy = %f\n", xx, yy); 変換文字%fは小数点形式で表示 xx = 0.000000, yy = 10000.000000 変換文字%eは指数形式で表示 printf("xx = %e, yy = %e\n", xx, yy); xx = 1.005600e-018, yy = 1.000000e+004 printf("xx = %g, yy = %g\n", xx, yy); 変換文字%gは適切と思われる形式を自動的に選んで表示 xx = 1.0056e-018, yy = 10000

復習 少数以下の2進数による10進数値の表現 (100)2 = 1×22 = 4 (10)2 = 1×21 = 2 (100)2 = 1×22 = 4 (10)2 = 1×21 = 2 (1)2 = 1×20 = 1 (0.1)2 = 1×2-1 = 0.5 (0.01)2 = 1×2-2 = 0.25 (0.001)2 = 1×2-3 = 0.125 (0.0001)2 = 1×2-3 = 0.0625 少数以下の10進数値には,有限桁数の2進法では表せない数値がある. 丸め誤差 問題: 10進数の 0.1 は2進数で正確に表せるか? (0.001)2 = 1×2-3 = 0.125 大きすぎ! (0.0001)2 = 1×2-4 = 0.0625 小さすぎ! (0.00011)2 = 1×2-4 + 1×2-5 = 0.0625 + 0.03125 = 0.09375 まだ小さい! (0.000111)2 = 1×2-4 + 1×2-5 + 1×2-6 = 0.0625 + 0.03125 + 0.015625 = 0.109075 大きすぎ! (0.0001101)2 = 1×2-4 + 1×2-5 + 1×2-7 = 0.0625 + 0.03125 + 0.0078125 = 0.1015625 まだ大きい! (0.00011001)2 = 1×2-4 + 1×2-5 + 1×2-8 = 0.0625 + 0.03125 + 0.00390625 = 0.09765625 惜しい!

復習 定数値でよくある間違い int aa, bb, cc = 1; aa = 1/3*30; bb = cc/3*30; printf("aa = %d bb = %d\n", aa, bb); 1 / 3 * 30 = 0 * 30 = 0 どんな結果になる? 整数同士の演算なので中間結果も整数値 1÷3 = 0.333… = 0 aa = 0 bb = 0 プログラムの世界では… 1.0 浮動小数点数(double型) 1  整数 int aa; aa = 1.0/3*30; printf("aa = %d", aa); 1.0 / 3 * 30 = 0.333... * 30 = 10 aa = 10 浮動小数点数と整数の演算結果はdouble型

x 10 11 10+1 復習 いろいろな演算子(1) 代入演算子 '='は等号ではなく代入の意味 x の解は不定??? = は ← の意味

復習 いろいろな演算子(2) 算術演算子 + 足し算 - 引き算 * 掛け算 / 割り算 + 足し算 - 引き算 * 掛け算 / 割り算 % 剰余算 (例) x = 5 % 3 ⇒ x = 2 割り算の余り 5÷3 = 1 … 2 ++ インクリメント演算子 aa++ は aa = aa+1 と同じ → aaの値を1増やす -- デクリメント演算子 aa-- は aa = aa-1 と同じ → aaの値を1減らす aa = 10; aa++; /* この文を実行後のaaの値は11になる */ aa = aa++; と書くのは誤り!

復習 scanf()関数による数値の入力 整数値の入力では%dとする. 変数名の前には&をつける int x; printf("値を入力してください."); scanf("%d", &x); printf("入力された値は,%dです.\n", x); 値を入力してください. 15 入力された値は,15です. キーボードから入力 整数値の入力では%dとする. int aa; scanf(" %d ", & aa ); 変数名の前には&をつける float bb; scanf("%f", &bb );

scanf()関数がエラーになる場合の対処方法 復習 scanf()関数がエラーになる場合の対処方法 対処方法3 Win32アプリケーションウィザードで「SDLチェック」をオフにする 1) [アプリケーションの設定]を選ぶ 2) [コンソール アプリケーション]を選ぶ 3) [空のプロジェクト]をオンにする 4) [SDLチェック]をオフにする scanf()関数がエラーにならずに警告になるので,この警告を無視する.

フローチャート(1) フローチャート→ プログラム処理の流れを示す図 処理1 処理2 処理3 処理4 a=10 b=a*2 b=a*b 四角形は 一つの処理 処理1 処理2 処理3 処理4 a=10 b=a*2 b=a*b bを表示 矢印で処理の順序を表す 形式 実例

フローチャート(2) 条件分岐→ プログラム処理の流れを変える ひし形は条件分岐 処理1 処理3 条件 処理2 真 偽 Yes true aの値を入力 aの値を表示 a >10 ? aを2倍する true false No false 形式 実例

if ~ 選択制御文(条件分岐) カッコが必要 true 条件 false 真(true)なら この中が aを2倍する 実行される int a; scanf("%d", &a); if ( a > 10 ) { a = 2*a; } printf("aの値は%d\n", a); キーワード カッコが必要 条件 真(true)なら この中が 実行される

if ~ else~選択制御文(条件分岐) aを入力 true false aを2倍する aを3倍する 偽(false)なら この中が int a; scanf("%d", &a); if ( a > 10 ) { a = 2*a; } printf("aの値は%d\n", a); aを3倍する else { a = 3*a; } 偽(false)なら この中が 実行される

いろいろな条件式と関係演算子 半角文字 a > b a ≧ b a < b a ≦ b a = b a ≠ b Cのソース a > b a ≧ b a < b a ≦ b a = b a ≠ b 5 < a かつ a < 10 10 > a または 15 < a 10 > a ではない if (a > b) if (a >= b) if (a < b) if (a <= b) if (a == b) if (a != b) if (5<a && a<10) if (10>a || 15<a) if ( !(10 > a) ) !注意! 等号が二つ かつ これはダメ 5 < a < 10 または 否定

選択制御文の例 dataを入力 true data<0 false カッコ { }が無い! #include <stdio.h> int main(void) { int data; scanf("%d", &data); if ( data < 0 ) printf("負の数です\n"); else printf("正の数です\n"); } data<0 true false 負の数です と表示 正の数です と表示 カッコ { }が無い! 終了

単文と複文 単文 文 → 単文 or 複文 if (条件) 文1 セミコロンが必要 else 複文 文2 printf("負の数です\n"); 文 → 単文 or 複文 C言語の文法 a = 2*a; if (条件) 文1 else 文2 セミコロンが必要 複文 { b = 10; a = 2*b; printf("aは%dである\n",a); } これらの文1と文2は単文でも複文でもOK { a = 2*a; } a = 2*a; と単文で書いても同じ

選択制御文の書き方 こちらがおススメ 単文で書いた場合 複文で書いた場合 #include <stdio.h> int main(void) { int data; scanf("%d", &data); if ( data < 0 ) printf("負の数です\n"); else printf("正の数です\n"); } #include <stdio.h> int main(void) { int data; scanf("%d", &data); if ( data < 0 ) printf("負の数です\n"); } else printf("正の数です\n"); こちらがおススメ

単文と複文(2) if (条件) 文1 else 文2 if (条件1) 文1 else 文2 if (条件1) 文1 else   文2 if (条件1) 文1 else if (条件2) 文2 文3 int main(void) { int x; printf("整数値xを入力してください:"); scanf("%d", &x); if (x < 5) printf("xの値は5未満です\n"); } else if (x >= 5 && x < 10) printf("xの値は5以上10未満です\n"); else printf("xの値は10以上です\n"); 複文 整数値xを入力してください:3 xの値は5未満です 整数値xを入力してください:8 xの値は5以上10未満です 整数値xを入力してください:12 xの値は10以上です