プログラミングⅡ 第1回 今日の内容 • • • • 変数の型 演算 入力と出力 制御文 – if文 – for文 変数とは • 変数:数値を格納しておく器(入れ物) 98 xyz xyzという変数に,98という整数値を格納(代入) • 変数は,実際にはメモリ上にある. • 器には,色々な大きさや形がある⇒データ型 変数のデータ型 • 変数には,データ型が決まっている データ型 データの種類 サイズ 値の範囲 char 文字型 1バイト -127~128 int 整数型 4バイト -2,147,483,648~2,147,483,647 float 実数型 4バイト -3.4×10-38~3.4×10+38 double 実数型 8バイト -1.7×10-308 ~ 1.7×10+308 char型 int型 float型 double型 必要に応じて 使い分ける 変数の型宣言 • 変数を使うためには,型宣言が必要 – 扱う値に合った器(型)の形・大きさを決める データ型 int x; double w, z; int a = 3; 変数名 [,変数名・・・]; //xという名前の変数をint型で宣言 //wとzという2つの変数を宣言 //変数aを宣言すると同時に3を代入 (⇒「初期化する」という) 変数に値を入れる 65 x xという変数に,65という整数値を格納(代入) x = 65; ① ② ③ ④ ⑤ 30 = x; //間違い x = 10 + 20; //10+20の計算結果をxに代入 x = x + 1; //x + 1の計算結果をxに代入 x = 0x41 //16進数の41をxに代入 x = ‘A’; //x = 0x41と同じこと 式の評価 • 式は評価されて値を持つ 式 評価結果 7 7 3 + 2 5 20 / 10 2 X = 8 8 1 + 2 3 3 * 4 12 (1 + 2) * 4; 3 * 4; 12; 演算 • • • • • • 代入 足し算 引き算 かけ算 割り算 剰余算 「=」 「+」 「ー」 「*」 「/」 「%」 x = 100; y = x + 20; y = 180 – 110; z = x*x; a = b / c; amari = N % 2; 8%3 → 8を3で割った余り(2) 演算の優先順位 • 優先順位の高い演算から順番に計算される 演算子 意味 優先順位 () 括弧 高い * 掛け算 / 割り算 % 剰余算 + 足し算 ― 引き算 = 代入 低い • 同じ優先順位の演算がある場合は,「結合規則」に 従って計算順序が決まる • 優先順位 – 優先順位の高い演算から順に行われる – (例) d = a + b * c (「*」,「+」,「=」の順) • 結合規則 – 同じ優先順位が複数ある場合は,結合規則(方 向)に従って順に演算が行われる – (例)d = a / b * c (「/」と「*」は同じ順位なので, 結合規則に従って,「左から右の順」に演算する) プログラム例 #include <stdio.h> int main() { char x,y,z; x = 10; y = 3; z = x + y; printf(“%d\n”, z); return 0; } 10 3 x yx 1013+ 3 xz 複合演算子 複合演算子 演算子 使用例 意味 算術演算子 += a += b aにbを加えた値をaに代入 a=a+b -= a -= b aからbを引いた値をaに代入 a=a–b *= a *= b aにbを掛けた値をaに代入 a=a*b /= a /= b aをbで割った値をaに代入 a=a/b %= a %= b aをbで割った余りをaに代入 a=a%b 様々な演算 • インクリメント a = a + 1; //aに1を加えて,その結果をaに代入 a++; //aを評価したのちに1を加算 ++a; //aに1を加算したのちにaを評価 様々な演算 • デクリメント a = a - 1; //aから1を減算し,その結果をaに代入 a--; //aを評価したのちに1減算 --a; //aを1減算したのちにaを評価 様々な演算 • 不等号演算子 – 「>」:左辺は右辺より大きい – 「<」:右辺は左辺より大きい – 「>=」:左辺は右辺より大きい,または等しい – 「<=」:右辺は左辺より大きい,または等しい 「5>3」 ⇒ 真(True):値は1 「5<3」 ⇒ 偽(False):値は0 様々な演算 • 等価演算子と非等価演算子 – 「==」:左辺と右辺は等しい – 「!=」:左辺と右辺は等しくない a = 3; 「a == 3」 ⇒ 真(True):値は1 「a != 3」 ⇒ 偽(False):値は0 データ型と計算(同じ型同士) 以下の式を計算(評価)結果はいくらか? 10 / 3 整数型 結果: 3 数学では, 10/3 = 3.33333となる はずなのに… 整数型 整数型になる 同じ型同士の計算を行うと、結果も同じ型になる この場合,結果は整数型のため,小数以下は切り捨てられる データ型と計算(違う型同士) 以下の式を計算(評価)結果はいくらか? 10 * 3.14 整数型 実数型 結果: 31.40 実数型になる 違う型同士の計算では、結果は大きい型(実数型)に 合わせられる(格上げ) 様々な演算 • キャスト演算子 – 型を変換することが目的 – 使い方: (キャストしたい型)変数名; y = (int)x; b = (double)a; 様々な演算 • キャスト演算子 – 型を変換することが目的 int a = 10, b = 3; double c; c = a / b; printf(“%f”, a / b); printf(“%f”, c); int型の値 を%fで表示 切り捨てが発生 printf(“%f”, (double)a / b ); aをdouble型に 変換 printf関数 • 変数の中身を表示することが可能 • 書式指定を指定することが可能 型 意味 例 結果 d 整数を10進数で表示 a = 123; printf(“%d”,a); 123 x 整数を16進数で表示 a = 123; printf(“%x”,a); 7b c 1文字を表示 a = ‘R’; printf(“%c”,a); R s 文字列を表示 char *a=“ABC”; printf(“%s”,a); ABC f 実数を10進数で表示 a = 123.45; printf(“%f”,a); 123.450000 printf関数 printf (“表示したい文字列”, 引数1, 引数2, ・・); 文字列 書式指定文字列 エスケープシーケンス 書式指定文字列 “ ・・・・ % ― 0 5 d ・・・ “ 型の指定 表示する最大桁数 数値の場合(0:ゼロサプレス無) ―:左詰め(省略値は右詰め) +:符号を表示 printf関数(テキストp.51) • 浮動小数点型の値を表示する場合 double pi = 3.14159265358979323; //桁数指定なし(小数点以下6桁で表示) printf(“円周率 = %f”, pi); //全部で5桁、小数点以下は2桁で表示 printf(“円周率 = %5.2f”,pi); scanf関数(テキストp.92) • 機能:標準入力(キーボード)から値を入力させる • 引数:書式(変換指定子)と,変数 • 変換指定子: – – – – – – %d : %f : %lf : %c: %s: %x: 10進整数 float型浮動小数点数 double型浮動小数点数 文字 文字列 16進数整数 • 使い方: scanf(“変換指定子”, &変数); scanf関数 • 例: int x; int型の変数 x に入力 float y; double z; printf(“xに入力してください”); scanf(“%d”,&x); printf(“yに入力してください”);float型の変数 y に入力 scanf(“%f”,&y); printf(“zに入力してください”); doubleの変数 z に入力 scanf(“%lf”,&z); printf関数とscanf関数の書式指定 int型 float型 double型 char型 printf関数 %d %f %lf (%fでもOK) %c scanf関数 %d %f %lf %c 制御文 (プログラムの流れを変える!) 今までのプログラムの流れ(処理手順) • プログラムの処理順序は, 「上から下へ」 開始 変数xとyを宣言 int main() { int x, y; x = 10; y = x * x; printf(“xの2乗は,%d”, y); } xに10を代入 yにx*xを代入 yの値を表示 終了 if文 • ある条件を満たしたときだけ,実行される 制御式という if (条件) { 制御式が真のときだけ,文1,文2,... という具合に中括弧内が実行される 文1; 文2; : } 制御式: 条件を決める評価式 真文: 制御式が真のときに実行される文 a = 3; b = 5; if (a < b) { 文1; 文2; } 文3; if文 a = 8; b = 5; if (a < b) { 文1; 文2; } 文3; 制御式が1 ⇒ 真文が実行される 制御式が0 ⇒ 真文は実行されない (注意)制御式が0以外⇒ 真文は「実行される」 処理の流れ a = 3; b = 5; if (a < b) { 文1; 文2; } 文3; 開始 a←3, b←5 真(TRUE) a<b 偽(FALSE) 文1 文2 文3 終了 if文での良くある間違い aが3のときだけ,真文を実行したい! scanf(“%d”,&a); if (a = 3) { 文1; } 文2; 「==」と「=」 の間違いは深 刻な結果を招く 「a = 3」の評価値は,「3」 制御式が0以外 ⇒ 真文(文1)は「実行される」 if文 • 真文が1つだけの場合は,中括弧{}はなくて もよい if (条件) { 文1; } インデントを付 文2; if (条件) 文1; 文2; けないと見にく くなる この場合,文2は「常に」実行される 例題:if文を使ってプログラミング • 映画の料金を教えるプログラムを作る. – 年齢ageをscanf関数で入力させる – もし,13歳未満ならば,「無料です」と表示 – もし,13歳以上ならば,「1000円です」と表示 例題:if文を使ってプログラミング 13歳未満ならば,「無料です」と表示. 13歳以上ならば,「1000円です」と表示. int main() { int age; printf(“あなたの年齢は?”); scanf(“%d”, &age); if (age < 13) printf(“無料です\n”); if (age >= 13) printf(“1000円です\n”); return 0; } if~else文 ageが13歳未満ならば,「無料です」と表示. ageが13歳以上ならば,「1000円です」と表示. ageが13歳未満ならば,「無料です」と表示, それ以外ならば,「1000円です」と表示 if~else文 ageが13歳未満ならば,「タダです」と表示, それ以外ならば,「料金は1000円です」と表示 if (条件) { 文1; 文2; } else { 文3; 文4; } 条件以外 の場合 処理の流れ if (条件) { 文1; 文2; } else { 文3; 文4; } 条件 真(TRUE) 偽(FALSE) 文3 文1 文4 文2 例題:if~else文でプログラミング ageが13歳未満ならば,「無料です」と表示, それ以外ならば,「1000円です」と表示 int main() { int age; printf(“あなたの年齢は?”); scanf(“%d”, &age); if (age < 13) printf(“無料です\n”); else printf(“1000円です\n”); return 0; } if~else if文 13歳未満ならば,「無料です」と表示, 13歳未満でもなく,学生ならば,「800円です」と表示 13歳未満でもなく,学生でもないならば,「1000円です」と表示 if (条件1) { 文1; 文2; } else if (条件2) { 文3; 文4; } else { 文5; 文6; } 条件1:TRUE 条件1:FALSE 条件2:TRUE 条件1:FALSE 条件2:FALSE 処理の流れ 真(TRUE) if (条件1) { 文1; 文2; } else if (条件2){ 文3; 文4; } else { 文5; 文6; } 条件1 真(TRUE) 文1 偽(FALSE) 条件2 偽(FALSE) 文2 文3 文4 文5 文6 例題:if~else if文でプログラミング 13歳未満ならば,「無料です」と表示, 13歳未満でも,学生ならば,「800円です」と表示 13歳未満でもなく,学生でもないならば,「1000円です」と表示 int main() { int age, is_student; printf(“あなたの年齢は?”); scanf(“%d”, &age); printf(“学生ですか?(Yes:1, No:0)”); scanf(“%d”,&is_student); if (age < 13) printf(“無料です\n”); else if (is_student == 1) printf(“800円です\n”); else printf(“1000円です\n”); return 0; }
© Copyright 2024 ExpyDoc