3章 変数と式と フローチャート プログラムにおける処理 • • • • • • • 入力 出力 式の計算 変数への代入(値の書き換え) 条件分岐 繰り返し まとまった処理に名前をつけて呼び出す. プログラムにおける処理 • • • • • • • 入力 出力 第1章〜第2章 式の計算 変数への代入(値の書き換え) 条件分岐 第4章 繰り返し 第5章 まとまった処理に名前をつけて呼び出す データの構造 • (単純)変数/定数 – 数値(整数/実数) – 文字,文字の並び(文字列) • 配列 – 同じ種類のデータをまとめて扱う • 構造体 – 異なる種類のデータをまとめて扱う • ポインタ – 異なるデータを結びつけ複雑な構造を表現 する データの構造 • (単純)変数/定数 第3章 – 数値(整数/実数) – 文字,文字の並び(文字列) • 配列 – 同じ種類のデータをまとめて扱う • 構造体 – 異なる種類のデータをまとめて扱う • ポインタ – 異なるデータを結びつけ複雑な構造を表現 する フローチャート プログラムの処理の「流れ」を図で表す. Process : 任意の処理を表す。出入口は1つ。 (2つ以上あるということは内部で条件判断 が行われていることになる) Decision : 一つの入口と複数の出口。 条件にしたがって出口を一つ選ぶ。 (条件判断機能) Terminal : 入口,出口を表す. (プログラムの開始,終了など) 入口は一つ 合流 分岐するときは 条件判断が必要 出口は一つ if (論理式) 文; if (論理式) 文1; else 文2; 変数とは • コンピュータのメモリに確保された領域 • 数値を入れる「箱」と考える • 変数(variable)の名前 – 最初の文字はA-Zまたはa-zおよび_ – 2番目以降は数字(0-9)も使用できる – 最大31文字 – 大文字と小文字は区別される – 途中に空白があってはいけない – キーワード、予約済みの識別子は使えない 変数の型(type) 整数 char int 実数 整数 8bit 32bit short int long int long long 16bit 64bit 64bit 実数 float 32bit double 64bit long double (普通はdoubleを使う) 80bit 長さ(bit数)により表現できる値の範囲に制限がある (P65) int型 宣言(定義) int a = 123; 値の範囲(32bit) 2147483647~0~-2147483648 入力 scanf("%d",&a); 表示 printf("%d\n",a); double型 宣言(定義) double a = 6.02e+23; 値の範囲(絶対値) 最大値 1.79769e+308 最小値 2.22507e-308 精度(桁数) 15 入力 scanf("%lg",&a); 表示 printf("%g\n",a); double型 入力 %lg を使用する 出力 %e、%f、%gが使用できる %e ±d.dddddde±ddd %f ±d.dddddd %g 表示する桁数に応じて%eまた は%f (dは数字0-9) /* 666666 Tachibana Masayoshi */ /* p74 list 3.5X */ #include <stdio.h> int main(void) { const double h = 6.63e-34; const double Na = 6.02e23; printf("h = %f Na = %f\n",h,Na); printf("h = %0.36f Na = %15.0f\n",h,Na); printf("h = %e Na = %e\n",h,Na); printf("h = %0.1e Na = %1.2e\n",h,Na); printf("h = %g Na = %g\n",h,Na); printf("h = %f Na = 15.1g\n",h,Na); return 0; } list35x.c /* 666666 Tachibana Masayoshi */ /* p77 */ #include <stdio.h> int main(void) { double a,b,c; a = 0.1; b = 0.1*0.1*0.1*0.1*1000; c = a-b; if ( (a-b) == 0.0) { printf("誤差がない\n"); } else { printf("誤差が%30.28f である\n",c); } return 0; } p77.c 浮動小数点数の計算での誤差 p77.cの実行結果 誤差が-0.0000000000000000277555756156 である • 桁数が有限であるために誤差を生じる • 丸め誤差 • 誤差を含む数の計算で生じる誤差 • 桁落ち • 桁数の大きな数どうしの差を求めるとき • 情報落ち • 絶対値の大きい数と小さい数の加減算で char型(P67) 宣言(定義) char a = 'x'; 値の範囲(8bit) 127~0~-128 入力 scanf("%c",&a); 表示 printf("%c\n",a); 文字の表現 char (8bit)で表現できるもの 定数は ’a’ のようにシングルクォートでくくる 数値(0-255)で表現することも出来る printfでは %c で文字を表示 日本語の文字は1文字16〜32ビットで 表現しているので、charは使えない。 変数の定義(宣言)と初期化 1. 2. 3. 4. 型名 変数名; 代入されていない変数の値は不定 必ず初期化を行う 実行文の後には定義をおけない 定数(constant) 整数定数 10進数 浮動小数点定数 123.45 1.2345e+2 その他 const double c = 2.99792458e8; 変数の値を固定(定数化) 整数の表現形式を変える unsigned 符号のない整数 unsigned char 0-255 unsigned short int 0-65535 unsigned int 0-4294967295 (約40億) 代入式(P87) 左辺値 代入演算子 右辺値 右辺値の値を計算し、代入演算子の規則に 従って、右辺値に適用する式 代入式も値を持つ 値は代入後の左辺値の値 代入演算子(P87) = , += , -= , *= , /= , %= <<= , >>= , &= , |= , ^= 代入式(2) = += a+=b a=a+b -= a-=b a=a-b *= a*=b a=a*b /= a/=b a=a/b %= a%=b a=a%b 代入式(3) <<= a<<=b a=a<<b >>= a>>=b a=a>>b &= a&=b a=a&b |= a|=b a=a|b ^= a^=b a=a^b 代入式(4) << >> & | ^ 左シフト 右シフト ビットAND ビットOR ビット排他的OR 詳しくは 情報処理概論で... 算術演算子(P90) 整数 +,-,*,/,% 浮動小数点 +,-,*,/ 整数と浮動小数点は同じ記号を使う コンパイラが型に応じて異なる演算器を 使う命令を生成する sizeof データの大きさ(バイト数)を答える演算子 演算子の優先順位-1 • Cにはたくさんの演算子がある – すべてを「今」覚える必要はない • 演算子には優先順位がある – かけ算は足し算より先にやる – すべて覚えるのは大変 • うろ覚えで間違えるよりは表を見ること • 括弧を使って確実に 演算子の優先順位-2 4章までに出てくるものをリストにした 高 括弧 () 単項演算 + - ++ -- (cast) sizeof 乗除 */% 加減 +比較 < > <= => == != 論理的AND && 論理的OR || 代入演算 = *= /= %= -= += など 評価の結合規則 右から左 なし 左から右 低 演算子の優先順位-3 評価の結合規則 左から右 b+c-d+e ((b+c)-d)+e 右から左 a=b=c=0 a=(b=(c=0)) 整数型と浮動小数点型の混合演算 一つの式の中で異なる型の値を混ぜて使う 結果に応じて型の変換を行う 精度の高い方へ型変換が行われる 代入における型変換 代入される左辺値の型にあわす キャスト(cast) 明示的な型変換 整数型と浮動小数点型の混合演算 • 一つの式の中で異なる型の値を混ぜて使う – 型変換が行われる – 精度の高い方へ型変換が行われるが、精度が失われ ることもある • 代入における型変換 – 代入される左辺の型にあわす – (切り捨てが起こることがある) • キャスト(cast) – 明示的な型変換 – 例: (double)i/(double)j i、jがint型でもdoubleに変換して計算 型変換の順序 short int int および long int float double long double float型の変数を使用する場合の注意 int および long int から float に変換すると 精度が失われる場合がある。 (floatの精度は6桁程度)
© Copyright 2024 ExpyDoc