12章 論理関係演算子の使い方

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

というか11章の練習問題で「&&」を使いました。

なのでここの章はざーっとでも大体分かると思います。

ということでさっそく練習問題に入りましょう。

問題1

次の2つのif文を、1つのif文に書き直してください。

if( num > 100 )
{
    if( num < 300 )
    {
        printf( "OK!\n" );
    }
}

前にやってるのでこれは超簡単ですね

if ( num > 100 && num < 300 ) {
    printf( "OK!\n" );
}

問題2

キーボードから入力された整数が、次の条件を全て満たすときに画面に「OK!」と表示するプログラムを作って下さい。

  • 奇数である
  • 200以上である
  • 500未満である

文章で表された物をif文に落とし込むのって簡単そうで結構難しいですよね。ちょっとしたミスが多いです。特に「<」と「<=」を間違っちゃうと境界線が変わってしまうので。

そこら辺に注意しながら実装します。

int main () {
    int num;
    
    scanf("%d", &num );
    if ( num % 2 != 0 && num >= 200 && num < 500 ) {
        printf("OK");
    }
    else {
        printf("NG");
    }
    return 0;
}
$ main
2
NG
$ main
199
NG
$ main
200
NG
$ main
201
OK
$ main
499
OK
$ main
500
NG
$ main
501
NG

色々な値で試してみました。

非常にうまくいってるように思えます。

答え合わせ

3つの条件式を全て、1つのif文にまとめる必要もありません。あまり無理にまとめると、かえって分かりにくくなります。「ある範囲内にあるか」といったことを示すような2つの条件式を、1つのif文にまとめると効果的です。

なるほど。

変にいっぱい詰め込めばいいってもんじゃないんですね。確かにあまり複雑だと後で見たときに分かりにくくなります。

問題3

引数として渡された文字が、アルファベットであるかどうかを判定して、アルファベットであれば画面にそのアルファベットを5文字表示する関数を作って下さい。この判定には、論理関係演算子を使って下さい。さらに、この関数を実際に使ったプログラムを作って下さい。

関数の問題が出てきました。

一見ややこしそうですが、11章で似たような処理を書いてるのでそこまで難しくはないと思います。

void alphabet (char c);

void alphabet(char c) {
    if ( c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z') {
        printf("%c%c%c%c%c",c,c,c,c,c);
    }
}

int main () {
    char c;
    
    scanf("%c",&c);
    alphabet(c);
    
    return 0;
}

とりあえず仕様は満たしていると思います。

解答例がどうなってるか楽しみです。

答え合わせ

まったく同じでした(笑)

あと同じことをしてくれる関数が標準ライブラリにあるみたいです。

isalpha関数というものでctype.hをincludeすれば使えるようです。便利ですね。