11章 IF文

http://www.geocities.jp/ky_webid/c/011.html

IF文のお話しに入りました。いわゆる制御構文というやつです。

処理の流れを変えるために役立ちます。

ざっくり全部読んだところで練習問題に入りましょう。

問題1

キーボードから整数を入力させ、その数が奇数か偶数かを表示するプログラムを作って下さい。

奇数かどうかの判定は2で割ったときに余りが出るかどうかで判断できますね。

int main () {
    int num;
    
    scanf("%d", &num );
    if ( num % 2 == 0 ) {
        printf("%d は偶数です",num);
    }
    else {
        printf("%d は奇数です",num);
    }
    return 0;
}
$ main
2
2 は偶数です
$ main
4543
4543 は奇数です

これは簡単ですね。

問題2

キーボードから文字を1文字だけ入力させ、それが小文字のアルファベットなら"OK"と表示させるプログラムを作って下さい。

文字が絡むと途端に難しく感じてしまうのは何でですかね・・・。

アルファベットとか言うからややこしく聞こえるわけですが、文字コードとして考えればいいだけのはずなので頑張るぞ!

例によって例のごとく文字コード表はここを参考に↓

ASCII文字コード - IT用語辞典

小文字の「a」から「z」までは文字コード的に見ると97から122までの連番だということがわかりますね。

これで答えが分かったも同然!

int main () {
    char str;
    
    scanf("%1c",&str);
    if ( str >= 97 && str <= 122 ) {
        printf("OK");
    }
    else {
        printf("NG");
    }
    return 0;
}

できましたー。流石です。

答え合わせ
int main(void){
    char input;

    printf( "1文字だけ入力して下さい\n" );
    scanf( "%c", &input );
    if( input >= 'a' )      /* a以上の文字コードか */
    {
        if( input <= 'z' )  /* z以下の文字コードか */
        {
            printf( "OK\n" );
        }
    }
    return 0;
}

あーそうか。

わざわざ文字コード表見てint型で評価しなくても文字をそのまま使えば文字コードとして評価されるのか。

間違ってはいないけどやられたって感じだ。くそぅ。

問題3

数字を2つ入力させ、1つ目の数字 ÷ 2つ目の数字 の結果を表示させるプログラムを作って下さい(2つ目の数字が0のとき割り算を行うとエラーが発生します。これをうまく回避する方法を考えて、作ってみて下さい)

0の時は計算しないようにすればいいってことですね。

int main () {
    float num1,num2;
    
    scanf("%f",&num1);
    scanf("%f",&num2);
    
    if ( num2 == 0 ) {
        printf("0で割れません");
    }
    else {
        printf("%f / %f = %f",num1,num2,num1 / num2 );
    }
    return 0;
}

どうでしょうか。

答え合わせ

解答例を見てるとfloatじゃなくてint使ってますね。intだと割ったときに小数点以下が捨てられるので一応float型にしたのですが今回の問題ではそこは主眼じゃないということでしょうか。

とりあえずあってるみたいでよかったす。