読者です 読者をやめる 読者になる 読者になる
【スポンサーリンク】

【C言語解説】 C言語練習 R014 - 点数の評価

こちらのサイト

C言語練習
http://www.geocities.jp/kenji_y0328/crenshu/

の問題を実際に解いていったので、「解説」という形でまとめていこうかと思っています。
ちなみに、こちらのサイトでは解答もありますが、自分の解答を元に解説していきます。

※作者様からの削除依頼がありましたらすぐに削除しますのでご報告頂けると幸いです。

カテゴリの「C言語練習」でまとめています。


【問題】

点数を入力する。点数が100~80のとき評価を"A"、79~60のとき"B"、59~0のとき"C"を表示する。

【コード】

#include<stdio.h>
main(){
    int tensu;
    
    printf("点数="); scanf("%d", &tensu);
    if(tensu>=80){
        printf("評価=A\n");
    }else if(tensu>=60){
        printf("評価=B\n");
    }else{
        printf("評価=C\n");
    }
    return 0;
}

【考え方】

  • int型の「tensu」を宣言する。
  • 標準入力関数で「tensu」に点数の値を入力する。
  • if 関数で3つの処理に分岐する。
  • 3つそれぞれで、標準出力処理を行う。




【個人的な考え】

前回(R013)で3つ以上の処理に分岐するなら「switch関数を使ったほうがいい」といいました。
もちろん switch で分岐したほうがスッキリします。



switch は基本的に「ある値と一致した場合にのみ」実行したい時に記述します。
例えば、「num」の値が1なら「OK」、2なら「NG」、3なら「いいよ」、4なら「だめ」、それ以外は「特になし」と出力する処理だとしましょう。

switch(num){
    case 1: printf("OK\n");
        break;
    case 2: printf("NG\n");
        break;
    case 3: printf("いいよ\n");
        break;
    case 4: printf("だめ\n");
        break;
    default: printf("特になし\n");
}

このように、ある一意の値に一致した場合にのみ実行します。






次に、「num」の値が1と2なら「OK」、3と4なら「NG」、それ以外は「特になし」と出力してみましょうか。

switch(num){
    case 1,2: printf("OK\n");
        break;
    case 3,4: printf("NG\n");
        break;
    default: printf("特になし\n");
}

このような場合なら、「,(カンマ)」をつけて複数の値の時にのみ実行します。






そして、「num」の値が1~5なら「OK」、6~10なら「NG」、11~15なら「YES」、16~20なら「NO」、それ以外は「特になし」としてみましょう。

switch(num){
    case 1,2,3,4,5: printf("OK\n");
        break;
    case 6,7,8,9,10: printf("NG\n");
        break;
    case 11,12,13,14,15: printf("YES\n");
        break;
    case 16,17,18,19,20: printf("NO\n");
        break;
    default: printf("特になし\n");
}

と、ちょっと面倒な処理になってしまいます。
switch関数は「定数」を扱うので一定の値しか出来ないんです。





プログラミング言語の「swift」を使えば、

//<注意>swiftでの記述です
switch(num){
    case 1...5: printf("OK\n");
        break;
    case 6...10: printf("NG\n");
        break;
    case 11...15: printf("YES\n");
        break;
    case 16...20: printf("NO\n");
        break;
    default: printf("特になし\n");
}

このように、「.(ピリオド)」を3つ並べるだけで出来ます。


また、

case a...<b

といった表記も出来ます。
このような表記だと、aから(b-1)までという処理になります。






……ちょっと、swiftの解説になっちゃいましたが、




switch 関数は一致した場合のみ使用できるので注意しましょう。。

【スポンサーリンク】