情報ネットワーク導入ユニット Ⅰ C 言語 if 文 switch 文
3 章 : プログラムの流れの分岐 if 文 if( 条件 ) 条件が成立すれば実行 if( 条件 ) ~ else 場合分け ( 成立, 不成立 ) if( 条件 A) ~ else if( 条件 B) ~ else if( 条件 C) ~ else 場合分け ( 複数の条件での場合分け ) 等価演算子 : == ( 等しい ),!= ( 等しくない ) 関係演算子 : > < >= <= 論理演算子 : && (AND, かつ ) (OR, または ) 条件演算子 : a==b? a=10 : a=20; (a と b が等しいなら,a に 10 を, そうでないなら a に 20 を代入 ) 複合文 ( ブロック ) : { ひとつのかたまりとして扱われる switch case 文 : 場合分けに便利な方法
3 章 : プログラムの流れの分岐 if( 条件 ) ~ else ~ C 言語のプログラムの流れの基本と条件分岐, 繰り返し #include <stdio.h> int main(void) { int vx; printf(" 整数を入力 :"); scanf("%d", &vx ); printf("5 で割ったあまり %d n", vx%5 ); 実行の方向 C 言語のプログラムの流れの基本 main から始まり上 下に順番に実行される. 上 下の単純な流れを変えたい場合がある. 例えば, 条件によって実行したり, しなかったり if 文, switch 文 同じようなプログラムを繰返す do 文,while 文,for 文
if( 条件 ) { else { if 文基本形 1 (if ~ else ~ ) 条件が成立した場合に, 実行するプログラムを書く 条件が成立しない場合に, 実行するプログラムを書く #include <stdio.h> int vx; printf(" 整数を入力 :"); scanf("%d", &vx ); if( vx % 2 == 0 ) { printf(" 偶数です %d n",vx ); else { printf(" 奇数です %d n",vx ); printf(" 終了! n"); いろいろな条件 整数を入力 :10 if( x == y ) xとyは等しい if( vx%3 == 0 ) 偶数です. 10 if( x!= y ) xとyは等しくない if( dx%2!= 0 ) 終了! if( x > y ) x は y より大きい if( x1-x2 > 0 ) if( x >= y ) x は y 以上 ( 大きいか等しい ) if( x1 >= 0.5 ) if( x < y ) x は y より小さい if( 0 < sum ) if( x <= y ) x は y 以下 ( 小さいか等しい ) if( sum <= 100 ) 実行結果 1 実行結果 2 整数を入力 :11 奇数です. 11 終了! 整数を読込み, 2 で割った余りが 0 なら偶数ですそうでないなら奇数ですと表示する
if( 条件 ) { 条件が成立した場合に, 実行するプログラムを書く if 文基本形 2(if だけ ) #include <stdio.h> int vx; printf(" 整数を入力 :"); scanf("%d", &vx ); if( vx % 2 == 0 ) { printf(" 偶数です %d n",vx ); 整数を読込み, 2 で割った余りが 0 なら偶数ですと表示する * そうでない場合は何もしない if ~ else ~ if だけ printf(" 終了! n"); 実行結果 1 vx%2は0か? No 奇数です終了 Yes 偶数です vx%2は0か? No 終了 Yes 偶数です 整数を入力 :10 偶数です. 10 終了! 実行結果 2 整数を入力 :11 終了!
if 文基本形 3 (if ~ else if ~ else if ~ else ) #include <stdio.h> if( 条件 1 ) { else if( 条件 2 ){ else if( 条件 3 ){ else { 条件 1 が成立した場合に, 実行するプログラムを書く 条件 1 が成立しないで, 条件 2 が成立する場合に, 実行するプログラムを書く 条件 1 も 2 も成立しないで, 条件 3 が成立する場合に, 実行するプログラムを書く どの条件も成立しない場合に, 実行するプログラムを書く int vx; printf(" 整数を入力 :"); scanf("%d", &vx ); if( vx >= 90 ) { printf("%d は 90 以上です n",vx ); else if( vx >= 80 ) { printf("%d は 80 以上です n",vx ); else if( vx >= 70 ) { printf("%d は 70 以上です n",vx ); else { printf("%d は 69 以下です n",vx ); printf(" 終了! n"); 実行結果 1 整数を入力 :10 10 は 69 以下です. 終了!
教科書 List3-1 if( 式 ) if( 式 ) 式の値が 0 以外なら次のプログラムを実行, 0 なら次をとばす. 教科書 :p.42 の List 3-1 キーボードから読込んだ整数値が 5 で割りきれないかを調べる割り切らないならば 割り切れない 表示して, そうでないなら何もしない. 実行結果 1 整数を入力 :17 その数は 5 で割り切れません int vx; printf(" 整数を入力 :"); scanf("%d", &vx ); if( vx % 5 ) { printf(" その数は 5 で割り切れません n"); 実行結果 2 整数を入力 :15
教科書 List3-2 if( 式 ) if( 式 ) 式の値が0 以外なら次のプログラムを実行, 0なら次をとばす. 教科書 :p.43の List 3-2 キーボードから読込んだ整数値が奇数かを調べる 実行結果 1 整数を入力 :17 その数は奇数です int no; printf(" 整数を入力 :"); scanf("%d", &no ); if( no % 2 ) { // if( no % 2!= 0 ) でも同じ printf(" その数は奇数です n"); 実行結果 2 整数を入力 :10
教科書 List3-3 if( 式 ) ~ else if( 式 )~else 式の値が 0 以外なら次のプログラムを実行, 0 なら else の次を実行. 教科書 :p.44 の List 3-3 キーボードから読込んだ整数値が 5 で割りきれないか, 割り切れるかを調べる 実行結果 1 整数を入力 :17 その数は 5 で割り切れません 実行結果 2 整数を入力 :35 その数は 5 で割り切れます int vx; printf(" 整数を入力 :"); scanf("%d", &vx ); // if( vx % 5 ) { if( vx % 5!= 0) { //5 で割ったあまりが 0 でない printf(" その数は 5 で割り切れません n"); else { printf(" その数は 5 で割り切れます n");
教科書 List3-6 ==,!= if( a==b ) aとbが等しいなら次のプログラムを実行, if( a!=b ) aとbが等しくないなら次のプログラムを実行. 教科書 :p.48 の List 3-6 キーボードから読込んだ 2 つの整数値が等しいかどうか? int x1, x2; 実行結果 1 2 つの整数を入力 : 整数 1:-5 整数 2:-5 それらの値は同じです. 実行結果 2 2つの整数を入力 : 整数 1:40 整数 2:45 それらの値は違います. printf("2つの整数を入力 : n"); printf(" 整数 1:"); scanf("%d", &x1 ); printf(" 整数 2:"); scanf("%d", &x2 ); if( x1 == x2 ) { //x1 と x2 は等しい printf(" それらの値は同じです n"); else { printf(" それらの値は違います n");
教科書 List3-7 ==,!= if( a==b ) aとbが等しいなら次のプログラムを実行, if( a!=b ) aとbが等しくないなら次のプログラムを実行. 教科書 :p.49 の List 3-7 キーボードから読込んだ 2 つの整数値が等しいかどうか? int x1, x2; 実行結果 1 2 つの整数を入力 : 整数 1:-5 整数 2:-5 それらの値は同じです. 実行結果 2 2つの整数を入力 : 整数 1:40 整数 2:45 それらの値は違います. printf("2つの整数を入力 : n"); printf(" 整数 1:"); scanf("%d", &x1 ); printf(" 整数 2:"); scanf("%d", &x2 ); if( x1!= x2 ) { //x1 と x2 は等しくない printf(" それらの値は違います n"); else { printf(" それらの値は同じです n");
教科書 p.48~50 いろいろな条件 教科書 :p.48~50 等価演算子, 関係演算子 if( x == y ) xとyは等しい if( vx%3 == 0 ) if( x!= y ) xとyは等しくない if( dx%2!= 0 ) if( x > y ) xはyより大きい if( x1-x2 > 0 ) if( x >= y ) xはy 以上 ( 大きいか等しい ) if( x1 >= 0.5 ) if( x < y ) xはyより小さい if( 0 < sum ) if( x <= y ) xはy 以下 ( 小さいか等しい ) if( sum <= 100 )
3 章 : プログラムの流れの分岐 if 文 if( 条件 ) 条件が成立すれば実行 if( 条件 ) ~ else 場合分け ( 成立, 不成立 ) if( 条件 A) ~ else if( 条件 B) ~ else if( 条件 C) ~ else 場合分け ( 複数の条件での場合分け ) 等価演算子 : == ( 等しい ),!= ( 等しくない ) 関係演算子 : > < >= <= 論理演算子 : && (AND, かつ ) (OR, または ) 条件演算子 : a==b? a=10 : a=20; (a と b が等しいなら,a に 10 を, そうでないなら a に 20 を代入 ) 複合文 ( ブロック ) : { ひとつのかたまりとして扱われる switch case 文 : 場合分けに便利な方法
教科書 :p.56 条件演算子 a? b : c a? b : c a が 0 でなければ b, そうでなければ c の値 ( 条件 )? b : c 条件が成立すれば b, そうでなければ c の値 教科書 :p.56 List3-14 読込んだ2つの整数値の大きい方を求めて表示 実行結果 1 2 つの整数を入力整数 1:83 整数 2:45 大きい方の値は 83 です int n1, n2, max; printf("2つの整数を入力 n"); printf(" 整数 1:"); scanf("%d", &n1 ); printf(" 整数 2:"); scanf("%d", &n2 ); max = ( n1 > n2 )? n1 : n2; printf(" 大きい方の値は %d です n", max); if( n1 > n2 ) { max = n1; else { max = n2;
教科書 :p.56 条件演算子 a? b : c a? b : c a が 0 でなければ b, そうでなければ c の値 ( 条件 )? b : c 条件が成立すれば b, そうでなければ c の値 n1 と n2 の大きい方から小さい方を引いた値を vx に代入. vx = (n1 > n2)? n1-n2 : n2-n1; if (n1 > n2) { vx = n1 - n2; else { vx = n2 - n1; 条件演算子を使ったプログラムと同じものは, if 文でプログラムできる.
教科書 :p.58 複合文 ( ブロック ) { で囲むことで単一の文とみなされる { { printf("abc n"); printf("def n"); int x; x = 5; printf(" x = %d n", x ); if( 条件 ) 文 1 else 文 2 if( n1 > n2 ) max = n1; else max = n2; if( n1 > n2 ) { max = n1; else { max = n2; 教科書 :p.58 List3-16 条件が成立すれば文 1を実行不成立なら文 2を実行 正しい エラー if( n1 > n2 ) max = n1; min = n2; else max = n2; min = n1; 正しい if( n1 > n2 ) { max = n1; min = n2; else { max = n2; min = n1;
教科書 :p.60 論理演算子 &&, ( 類題 : 教科書 :p.61 List3-17) if( 条件 A && 条件 B ) if( 条件 A 条件 B ) 条件 A, 条件 B ともに成立するなら. AND 条件 A, 条件 B のどちらかが成立するなら. OR 読込んだ整数値 n が 偶数で, かつ 3 で割り切れるならば, 成立 と表示する. そうでなければ 不成立 と表示する. 実行結果 1 整数を入力 :6 成立 整数を入力 :8 不成立 int n; printf(" 整数 n を入力 :"); scanf("%d", &n ); if( (n%2 == 0) && (n %3 == 0) ) { printf(" 成立 n"); else { printf(" 不成立 n"); 整数を入力 :9 不成立
教科書 :p.60 論理演算子 &&, if( 条件 A && 条件 B ) if( 条件 A 条件 B ) 条件 A, 条件 B ともに成立するなら. AND 条件 A, 条件 B のどちらかが成立するなら. OR 読込んだ整数値 n が 偶数または 3 で割り切れるならば, 成立 と表示する. そうでなければ 不成立 と表示する. 実行結果 整数を入力 :6 成立 整数を入力 :8 成立 int n; printf(" 整数 n を入力 :"); scanf("%d", &n ); if( (n%2 == 0) (n %3 == 0) ) { printf(" 成立 n"); else { printf(" 不成立 n"); 整数を入力 :7 不成立
教科書 :p.64 switch 文 (switch~case 文 ) 読込んだ整数値を 3 で割ったあまりで分類 int num; printf(" 整数を入力 :"); scanf("%d", &num ); if 文によるプログラム 実行結果 整数を入力 :6 3 で割切れる 整数を入力 :40 1 余る if( num %3 == 0 ) { printf("3 で割り切れる n"); else if( num % 3 == 1 ) { // 余り 1 printf("1 余る n"); else { // 余り 2 printf("2 余る n"); // 余り 0 割り切れる
教科書 :p.64 switch 文 (switch~case 文 ) 読込んだ整数値を 3 で割ったあまりで分類 int num; printf(" 整数を入力 :"); scanf("%d", &num ); switch 文によるプログラム 実行結果 整数を入力 :6 3 で割切れる 整数を入力 :40 1 余る switch( num % 3 ) { case 0 : printf("3 で割り切れる n"); break; case 1 : printf("1 余る n"); break; default: printf("2 余る n"); break; // この行には break は不要!
switch 文 (switch~case 文 ) switch 文の動作を確認する 実行結果 整数を入力 :1 A B 整数を入力 :2 C D 整数を入力 :3 F 教科書 :p.66 List3-20 int sw; printf(" 整数を入力 :"); scanf("%d", &sw ); switch( sw ) { case 1 : printf("a n"); printf("b n"); break; case 2 : printf("c n"); case 5 : printf("d n"); break; case 6 : case 7 : prnitf("e n"); break; default : printf("f n"); break; // この行はbreak 不要 整数を入力 :5 D 整数を入力 :6 E