C プログラミング Ⅰ 条件分岐 if~else if~else 文,switch 文
条件分岐 if~else if~else 文 if~else if~else 文 複数の条件で処理を分ける if~else if~else 文の書式 if( 条件式 1){ 文 1-1; 文 1-2; else if( 条件式 2){ 文 2-1; 文 2-2; else { 文 3-1; 文 3-2; 真条件式 1 文 1-1 偽 条件式 2 偽 文 3-1 文 3-2 真 文 2-1 文 2-2 文 1-2 条件分岐 if~else if~ else文, switch文 2
条件分岐 if~else if~else 文 if~else if~else 文 if~else if~else 文の書式 if( 条件式 1){ 文 1; else if( 条件式 2){ 文 2; else { 文 3; 1 条件式 1 の判定 1-1 条件式 1 の判定結果が真の場合, 文 1 を実行し, 次の命令へ 1-2 条件式 1 の判定結果が偽の場合, 文 1 は実行せずに 2 へ 2 条件式 2 の判定 2-1 条件式 2 の判定結果が真の場合, 文 2 を実行し, 次の命令へ 2-2 条件式 2 の判定結果が偽の場合, 文 2 は実行せずに 3 へ 3 else の後の文 3 を実行し, 次の命令へ 条件式 1, 条件式 2 の順に判定を行い, どれも true にならなければ else の後の命令文を実行 条件分岐 if~else if~ else文, switch文 3
条件分岐 if~else if~else 文 if~else if~else 文のプログラム例 複数の条件分岐 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include <stdio.h> int main(void) { int a; printf("a = "); scanf("%d", &a); if(a == 0) { printf("a に代入されているのは 0 n"); else if(a == 1) { printf("a に代入されているのは 1 n"); else if(a == 2) { printf("a に代入されているのは 2 n"); else { printf("0,1,2 以外の値 n"); return 0; 条件分岐 if~else if~ else文, switch文 実行結果の例 a = 1 aに代入されているのは1 1 a に格納されている値が 0 かどうか判定 1-1 0 であるとき " 代入されているのは 0" を表示 1-2 0 でないとき 2 へ (2 の条件判定へ ) 2 a に格納されている値が 1 かどうか判定 2-1 1 であるとき " 代入されているのは 1" を表示 2-2 1 でないとき 3 へ (3 の条件判定へ ) 3 a に格納されている値が 2 かどうか判定 3-1 2 であるとき " 代入されているのは 2" を表示 3-2 2 でないとき "0,1,2 以外の値 " を表示 4
条件分岐 if~else if~else 文 フローチャート start 複数の条件分岐 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include <stdio.h> int main(void) { int a; printf("a = "); scanf("%d", &a); if(a == 0) { printf("a に代入されているのは 0 n"); else if(a == 1) { printf("a に代入されているのは 1 n"); else if(a == 2) { printf("a に代入されているのは 2 n"); else { printf("0,1,2 以外の値 n"); return 0; 条件分岐 if~else if~ else文, switch文 実行結果の例 a = 1 aに代入されているのは1 if if if int a; a = 1; 真 a == 0 偽真 a == 1 偽真 a == 2 偽 0,1,2 以外の値 end プログラムのフローチャート a に代入されているのは 0 a に代入されているのは 1 a に代入されているのは 2 5
条件分岐 if~else if~else 文 フローチャート 複数の条件分岐 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include <stdio.h> int main(void) { int a; printf("a = "); scanf("%d", &a); if(a == 0) { printf("a に代入されているのは 0 n"); else if(a == 1) { printf("a に代入されているのは 1 n"); else if(a == 2) { printf("a に代入されているのは 2 n"); else { printf("0,1,2 以外の値 n"); return 0; 実行結果の例 a = 1 aに代入されているのは1 条件が成り立った場合, それ以降の else if( 条件式 ),else の処理は行わずに, 次の命令 ( 左のプログラムの場合には次の命令はない ) に進む 条件分岐 if~else if~ else文, switch文 6
条件分岐 switch 文 switch 文 式の値で処理を切り替える switch 文の書式 switch( 式 ){ case 値 1 文 1-1; case 値 2 文 2-1; default 文 n-1; コロン ( ) であることに注意 break 文が必ず必要! 式式の値が値 1のとき式の値が値 2のときその他文 n-1 文 1-1 文 2-1 条件分岐 if~else if~ else文, switch文 7
条件分岐 switch 文 switch 文 式の値で処理を切り替える switch 文の書式 switch( 式 ){ case 値 1 文 1; case 値 2 文 2; default 文 n; 1 式の判定 1-1 式の値が値 1であれば文 1を実行 break 文まで実行し,switch 文を終了する 1-2 式の値が値 2であれば文 2を実行 break 文まで実行し,switch 文を終了する 1-n 式の値が値 1, 値 2 のどれでもなければ文 n を実行 switch 文を終了する 式の値 ( 基本的には変数に格納されている値 ) によって実行する文が異なる 条件分岐 if~else if~ else文, switch文 8
条件分岐 switch 文 switch 文のプログラム例 処理の切り替え 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include <stdio.h> int main(void) { int a; printf("a = "); scanf("%d", &a); switch(a) { case 1 printf("a の値は 1 n"); case 2 printf("a の値は 2 n"); case 3 printf("a の値は 3 n"); default printf("1,2,3 以外の値 n"); return 0; 1 a に格納されている値を判定 1-1 1 であるとき "aの値は1" を表示 1-2 2 であるとき "aの値は2" を表示 1-3 3 であるとき "aの値は3" を表示 1-4 1,2,3 以外のとき "1,2,3 以外の値 " を表示実行結果の例 a = 2 aの値は2 条件分岐 if~else if~ else文, switch文 9
条件分岐 switch 文 switch 文のプログラム例 処理の切り替え 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <stdio.h> int main(void) { int a = 2; switch(a) { case 1 printf("a の値は 1 n"); case 2 printf("a の値は 2 n"); case 3 printf("a の値は 3 n"); default printf("1,2,3 以外の値 n"); return 0; start switch a a=1 a=2 a=3 a の値は 1 int a; a = 2; a の値は 2 a の値は 3 end プログラムのフローチャート その他 1,2,3 以外の値 条件分岐 if~else if~ else文, switch文 10
条件分岐 switch 文 switch 文の使用における注意 値 1, 値 2, はひとつの整数値もしくは文字でなければならない ( 式についても, 整数値もしくは文字が格納された変数が望ましい ) caseの後の処理する文の最後に必ずbreak 文を入れる break 文がないと 1 2 3 4 5 6 7 8 9 10 11 12 13 14 int main(void) { int a = 1; switch(a) { case 1 printf("a の値は 1 n"); case 2 printf("a の値は 2 n"); default printf("1,2 以外の値 n"); return 0; 実行結果 aの値は1 aの値は2 1,2 以外の値 すべて出力されてしまう 条件分岐 if~else if~ else文, switch文 11
条件演算子 条件演算子 条件に応じて式の値を変えることができる 構文 条件? 式 1 式 2 条件が真の場合は式 1 の値, 偽の場合は式 2 の値が式全体の値となる if~else 文の使用例 1 2 3 4 5 6 7 8 9 10 11 12 13 int main(void) { int a = 1; char c; if(a == 1) c = 'A'; else c = 'B'; printf("c = %c n", c); return 0; 条件演算子の使用例 1 int main(void) 2 { 3 int a = 1; 4 char c; 5 6 c = (a == 1)? 'A' 'B'; 7 8 printf("c = %c n", c); 9 return 0; 10 if 文よりも簡潔に書ける例 条件分岐 if~else if~ else文, switch文 12
論理演算子 ( 発展編 ) ビット単位の論理演算 整数型のデータは複数のビット (int 型なら 32 ビット ) を持っている ビット単位の論理演算では, それぞれのビット毎に AND や OR の演算を行うことができます. 例 short int 数値のビット単位演算 & 12 4 5 0000000000000101 0000000000001100 0000000000000100 各ビット毎に論理演算を行う 演算子 結果のビットが 1 となる場合 & 2 数のどちらのビットも 1 2 数のどちらかのビットが 1 ^ 2 数のビットが異なる場合 ~ ビットが 0 の場合 ( 単項演算子 ) 普通の論理演算と違って記号 1 つだけ 条件分岐 if~else if~ else文, switch文 13
講義のまとめ 講義内容 if~else if~else 文 switch 文 条件演算子, 論理演算子 ( 発展編 ) ポイント if~else if~else 文,switch 文を使って複数の条件に応じた処理 ( 多分岐 ) を行うことができる switch 文では, 原則として case ごとに break 文を入れること 条件演算子を使って, 式の値の条件によって変更できる 条件分岐 if~else if~ else文, switch文 14