カテゴリー
C

C(Step2-1)

分岐処理

ここでは、条件判断を行い、それによって次に行う処理を決定する分岐処理について説明していきます。

If else文を用いた分岐処理

「もし~だったら○○という処理を行い、そうでない場合△△という処理を行う」ということを指示したいときに使う条件文(conditional statement)になります。if と else を用いて分岐処理を表すことができ、if else(イフ エルス)文といいます。

次のプログラムを見ながら、理解を深めましょう。

#include <stdio.h>

int main(){
    int ans1, ans2;
    int total;

    printf("通勤時は(1:車 2:自転車 3:歩き)で行きますか?\n");
    scanf("%d", &ans1);

    printf("運動は(1:していません 2:たまにする 3:良くする)\n");
    scanf("%d", &ans2);

    total = ans1+ans2;

    if(total < 4){
        printf("運動不足です\n");
    }else{
        printf("良く運動しています\n");
    }

    if(total == 2){
        printf("もっと運動してください\n");
    }
    return(0);
}
sample2-1.1実行結果

上のプログラムのアルゴリズムは以下のようになっています。

  1. 1つ目の質問を表示する
  2. 答えを入力する、数値は変数ans1に記憶する
  3. 2つ目の質問を表示する
  4. 答えを入力する、数値は変数ans2に記憶する
  5. 変数totalにans1とans2の合計を代入する
  6. もし、totalが4よりも小さいならば、「運動不足です」と表示、そうでなければ、「良く運動しています」と表示する
  7. もし、totalが2であれば、「もっと運動してください」と表示する

注目すべきは以下の記述です。

 if(total < 4){
        printf("運動不足です\n");
    }else{
        printf("良く運動しています\n");
    }

    if(total == 2){
        printf("もっと運動してください\n");
    }

totalの値を条件に処理内容を変えています。totalが4未満かどうか判断しています。その後、totalが2であるかどうかを比較しています。値の比較には比較演算子を用います。値の大小や等しい、等しくないかを比較する記号でC言語では、「> より大きい」「< より小さい」「>= 以上」「<= 以下」「== 等しい」「!= 等しくない」で指定します。

分岐処理の詳細(if else文)

■if else文の使い方
if(条件)
{
     [処理1]条件が真(成り立っている)時の処理
}else
{
     [処理2]条件が偽(成り立っていない)時の処理
}
  • 条件が成り立っているときは[処理1]に分岐し、成り立っていないときは[処理2]に分岐する
  • 条件には、大小(>, <, >=, <=)や同じ(==)、異なる(!=)などの比較演算子を記述できる
  • 比較演算子には、論理演算子を2つ以上組み合わせて条件を増やして記述できる
  • [処理1][処理2]の内容が1つの演算式、またはひとまとまりの文だけなら{ }を省略できる
  • [処理2]に記述するものが無い時は、else以下を省略できる

switch case文を用いた分岐処理

「もし、A==○ならば処理1を、A==△ならば処理2を、A==□ならば処理3を行う…」といったif else文とは違う方法で分岐処理を行うこともできます。これをswitch 文といいます。

次のプログラムがその例です。

#include <stdio.h>

int main(){
    int ans;

    printf("一日の睡眠時間を入力して下さい\n");
    scanf("%d", &ans);

    switch (ans)
    {
        case 8:
        case 9: printf("健康的です\n"); break;
        case 10: printf("十分な睡眠です\n"); break;
        default: printf("規則正しい生活をしましょう\n");
    }
}
sample2-1.2実行結果

上のプログラムのアルゴリズムは以下のようになっています。

  1. 睡眠時間の質問をする
  2. 時間を入力、ansに記憶
  3. 8,9時間なら「健康的です」と表示する
  4. 10時間なら「十分な睡眠です」と表示する
  5. それ以外なら「規則正しい生活をしましょう」と表示する

注目は以下の記述です。

switch (ans)
    {
        case 8:
        case 9: printf("健康的です\n"); break;
        case 10: printf("十分な睡眠です\n"); break;
        default: printf("規則正しい生活をしましょう\n");
    }

caseの後の数値になった際にその後の処理が実行されます。defaultは、caseの条件に当てはまらなかった場合に実行される処理になります。それぞれのcaseに一致した場合、break以降の処理は実行されません。

分岐処理の詳細(switch文)

■switch文の使い方
switch(判定する変数 X)
{
      case X1:[処理1];
              break;
      case X2:[処理2];
      case X3:[処理3];
              break;
              :
            :
      default:[処理4];
}
  • 判定する変数Xの値がX1なら[処理1]から順に処理を行い、breakまで処理をしたら、switch文の分岐処理を抜け出す。同様にX2なら、[処理2]から順に処理を行う。
  • 定めたXnに当てはまるものがなければ、そのままswitch文の処理を抜け出す。dafaultの記述がある場合、[処理4]を行い、分岐処理を抜け出す。