C言語入門4. 条件分岐
<C言語入門に戻る>
条件を判定して処理を分岐するには、if文を使う。例として, 与えられた整数が偶数(even number)か奇数(odd number)かを判定するプログラムを, 以下に示す。まず, これを入力し, コンパイルして実行してみよう!
1. /* iftest.c */ 2. /* compile: $ gcc iftest.c -o iftest */ 3. /* 2017/02/18 K. Nasahara */ 4. # include <stdio.h> 5. main() 6. {int x; 7. printf("Give me a number!\n"); 8. scanf("%d", &x); 9. if (x%2==0) printf("%d is an even number!\n", x); 10. else printf("%d is an odd number!\n", x); 11. } 注意: 左端の数字(6.など)は打ち込まないで良い。
$ gcc iftest.c -o iftest $ ./iftest Give me a number! 4 4 is an even number! $ ./iftest Give me a number! 7 7 is an odd number! $
では解説しよう。9行目がポイントである。if ( ... )という構文である。これは, ( )の中の条件を調べて, もしそれが成り立つのなら, それ以下の処理(if文と同じ行のコマンド, もしくは, if文の次の1行のコマンド, もしくは, if文に続く{ }で囲まれたコマンド)を実行する。条件が成り立たない場合, elseという文の後にある処理を実行する。
ここで, ifの中の
x%2
は、xを2で割った余りを求める計算である。こういう計算を剰余計算(modulo calculus)という。剰余計算はプログラミングでよく使う。また,
x%2==0
の, 等号を2つ連続させることには大切な意味がある。これが=というふうにひとつだけだとうまくいかない。
課題4-1 上のプログラムの9行目の==を=にすると, 何が起きるか? (やってみよ)
課題4-2 上のプログラムの10行目を削除すると, 何が起きるか? (やってみよ ... ていうか, 以後, 「やってみよ」と書かれてなくても, こういうときは自分から実際に手を動かしてやってみてね! やらずに考えるだけじゃダメだよ。)
別の例を挙げよう。次のプログラムは、「3では割り切れるが2では割り切れない数」を判定する:
1. /* iftest2.c */ 2. /* compile: $ gcc iftest2.c -o iftest2 */ 3. /* 2017/02/18 K. Nasahara */ 4. # include <stdio.h> 5. main() //プログラム本体のはじまり 6. { 7. int x; //変数x の宣言。 8. printf("Give me a number!\n"); //メッセージをコンソールに表示。 9. scanf("%d", &x); //ユーザーから変数xに値を代入する。 10. if (x%3==0 && x%2!=0) //条件の設定。 11. printf("It's my favorite number!\n"); //メッセージをコンソールに表示。 12. else printf("I don't like it...\n"); //条件が成り立たない場合の処理。メッセージをコンソールに表示。 13. } 注意: 左端の数字(6.など)は打ち込まないでよい。 $ gcc iftest2.c -o iftest2 $ ./iftest2 Give me a number! 9 It's my favorite number! $ ./iftest2 Give me a number! 7 I don't like it... $ ./iftest2 Give me a number! 6 I don't like it... $
この10行目:
if (x%3==0 && x%2!=0)
がこのプログラムの最も重要なポイントである。すなわち,
- 2つの条件の「両方を満たすこと」を条件にしたい場合は, それらを「 && 」でつなぐのだ。1個だけの&ではダメである。
- x%2!=0というのもポイントである。「!=」というのはどういう意味を持つか, 考えてみよ(わかるよね)。
課題4-3 上のプログラムの&&を||に書き換えてみよ。何が起きるか? そこから, ||の意味を推測せよ。
課題4-4 昔, 「世界のナベアツ」という芸人が, 「3の倍数と3がつく数でアホになり, 5の倍数で犬っぽくなります」という芸をやっていた。それをプログラミングせよ。すなわち, 以下のような出力をするプログラムである(どの数までやるかはユーザーが入力する):
1: 2: 3: Aho 4: 5: Inu 6: Aho 7: 8: 9: Aho 10: Inu 11: 12: Aho 13: Aho 14: 15: Aho Inu 16: 17: 18: Aho 19: 20: Inu 21: Aho 22: 23: Aho 24: Aho 25: Inu 26: 27: Aho 28: 29: 30: Aho Inu 31: Aho 32: Aho 33: Aho 34: Aho 35: Aho Inu 36: Aho 37: Aho 38: Aho 39: Aho 40: Inu
<C言語入門に戻る>
Keyword(s):
References:[C言語入門]