5.条件分岐

  1. if文

    今までのプログラムはすべて記述された命令を上から順に実行してゆくだけであったが, それだけでは不便なことがある
    値に応じて, 異なる処理を行う必要がある場合, その条件によって処理を分けなければならない

    そこで用いるのがif文
    if文は次のように記述される

    if(条件式){
     命令1;
     命令2;
     ...
    }

    こうすることで, 命令1, 命令2, ...は条件式が真の場合のみ実行され, 偽の場合は無視される

  2. 関係演算子と等値演算子

    条件式には次の演算子が用いられる

    演算子 命題
    == 左辺と右辺の値が等しい
    != 左辺と右辺の値が等しくない
    < 左辺の値が右辺の値より小さい
    > 左辺の値が右辺の値より大きい
    <= 左辺の値が右辺の値以下である
    >= 左辺の値が右辺の値以上である

    実際にプログラムを見てみよう

    #include <stdio.h>
    
    int main()
    {
    	int num;
    
    	printf("整数値を入力 > ");
    	scanf("%d", &num);
    
    	printf("その数値は");
    
    	if(num == 0){
    		printf("0");
    	}
    	if(num < 0){
    		printf("負");
    	}
    	if(num > 0){
    		printf("正");
    	}
    
    	printf("です\n");
    
    	return 0;
    }
    
    入力した数値を0か正か負か判別するプログラムcondition1.c

    このプログラムでは, 3つのif文が存在する
    12行目のif文の中身はnum == 0, つまりnumが0と等しいときのみ実行され,
    同様に, 15行目はnumが0より小さいとき, 18行目はnumが0より大きいときにのみ実行される

    この場合, 各条件の成立は互いに排反のため,

    その数値は0負です
    その数値は0正です
    その数値は負正です

    などの結果になることはない

    しかし, すべての条件が排反とは限らない
    その場合はelseを用いて条件が成立しない場合の処理を記述しよう

    #include <stdio.h>
    
    int main()
    {
    	double num;
    
    	printf("数値を入力 > ");
    	scanf("%lf", &num);
    
    	printf("その数値は");
    
    	if(num == 0){
    		printf("0");
    	}
    	else if(num < 0){
    		printf("負");
    	}
    	else if(num - (int)num == 0){
    		printf("自然数");
    	}
    	else{
    		printf("正");
    	}
    
    	printf("です\n");
    
    	return 0;
    }
    
    入力した数値を判別するプログラムcondition2.c

    この例では12行目から23行目にかけて条件が同時に起こりうるが,
    条件が1つ成立した時点で他は無視されるため, 実行されるprintfは必ず1つである

  3. 論理演算子

    いくつかの条件をすべて, あるいはどれか1つ満たす場合はかつ(and)または(or)をもちいる
    C言語のかつは&&, またはは||

    if(num%2 == 0 && num%3 == 0) printf("numは6の倍数\n");

    というように使うことができる

  4. switch文

    単に式がどの値と等しいかというのであれば, if-elseを書き連ねるより, switch-caseのほうが便利でわかりやすい
    次のプログラムを見てみよう

    #include <stdio.h>
    
    int main()
    {
    	int grade;
    
    	printf("学年を入力 > ");
    	scanf("%d", &grade);
    
    	switch(grade){
    	case 1: printf("専門がなくて大変\n"); break;
    	case 2: printf("専門が入ってきて大変\n"); break;
    	case 3: printf("専門が増えて大変\n"); break;
    	case 4: printf("さらに専門が増えて大変\n"); break;
    	case 5: printf("卒研が大変\n"); break;
    	default: printf("%d年なんてないよ\n", grade); return 1;
    	}
    
    	return 0;
    }
    
    学年ごとの説明を表示するプログラムgrade.c

    このようにswitch文を使うことで, わかりやすいプログラムとなった


    注)各caseの処理の最後にはbreakを忘れないようにしよう
     breakがないとフォールスルーしてしまい,
     それ以下の処理がすべて行われてしまう
     しかし, 仕組みをきちんと理解できれば,
     それを利用して高度なプログラミングも可能だ

    Practice:

    1. grade.cをif-elseを用いて実装してみよう
    2. condition2.cを改造し, 実数, 整数, 自然数を判別するプログラムを作ってみよう
    3. 前回作ったプログラムBMI.cにエラー判定をつけてみよう
       例)身長や体重が負の値の場合, 異常終了する

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です