論理値 解答ページ | Programming Place Plus C言語編 第13章

トップページC言語編第13章

問題① 🔗

問題① 次のプログラムの実行結果はどうなりますか?

#include <stdio.h>

int main(void)
{
    int value1 = 10;
    int value2 = 20;

    printf("%d\n", value1 == value2);
    printf("%d\n", value1 != value2);
    printf("%d\n", value1 < value2);
    printf("%d\n", value1 <= value2);
    printf("%d\n", value1 > value2);
    printf("%d\n", value1 >= value2);
}


2種類の等価演算子と、4種類の関係演算子を使って、10 と 20 を比較しています。これらの演算子は、それぞれの意味を満たしていれば 1、満たしていなければ 0 になります。

実行結果:

0
1
1
1
0
0

問題② 🔗

問題② 次のプログラムの実行結果はどうなりますか?

#include <stdbool.h>
#include <stdio.h>

int main(void)
{
    bool value = false;

    printf("%d\n", true);
    printf("%d\n", false);
    printf("%d\n", value == false);
    printf("%d\n", value != false);
}


bool、true、false を使うためには、#include <stdbool> が必要です。

bool は _Bool の代わりの名前、true は 1、false は 0 の代わりとして使えるというだけのことです。そのため、このプログラムは次のプログラムとまったく同じ意味です。

#include <stdbool.h>
#include <stdio.h>

int main(void)
{
    _Bool value = 0;

    printf("%d\n", 1);
    printf("%d\n", 0);
    printf("%d\n", value == 0);
    printf("%d\n", value != 0);
}

実行結果は次のようになります。

実行結果:

1
0
1
0

問題③ 🔗

問題③ 次の for文はどういう動作になるでしょうか?

for (int i = 0; 1; ++i) {
    // 繰り返す処理
}


for文は、「条件式」の値が 0 と等しくなるまで繰り返されます。しかし、このプログラムの「条件式」はつねに 1 なので、0 と等しくなることはありません。

つまり、ずっと繰り返すことになるので、実行中にこの for文に差し掛かったら、必ず内側に入り、その後、抜け出すことなく、ループし続けることになります。

もし、この for文を含んだプログラムを実行したのなら、実行が終了することなく、プログラムが動き続けます。止めたくなったら、キーボードから Ctrl+C を入力してください。Ctrl+C は実行者が強制的にプログラムの実行を停止させる方法であって、この操作に頼るプログラムを作ってはいけません。

問題④ 🔗

問題④ “I am a programmer.” のように、「.」で終わる文字列があるとします。

この文字列の文字数(空白と最後のピリオドを含む)をカウントして出力するプログラムを作成してください。


たとえば、次のように書けます。

#include <stdio.h>

int main(void)
{
    #define TARGET_STRING "I am a programmer."

    int count = 0;

    for (int i = 0; TARGET_STRING[i] != '.'; ++i) {
        ++count;
    }
    ++count;    // 最後の '.' の分を加算

    printf("%d\n", count);
}

実行結果:

18

for文を使って、変数 i の値を 0 から順に増やしていき、その値を使って TARGET_STRING[i] のようにして文字列内の文字をアクセスします。最後に登場する . を見つけたら for文を終了させるように「条件式」を記述すればいいことになります。

for文の「条件式」はループを続ける条件なので、「TARGET_STRING[i] の位置にある文字が . ではないとき」です。よって、TARGET_STRING[i] != '.' とすればいいことになります。

あとは for文を回しながら、変数 count に文字数をカウントしていけばいいです。for文の外で出力することになるので、変数 count の宣言は for文の外側で行う必要があります。また、TARGET_STRING[i] == '.' になった周回には for文の「繰り返したい文」は実行されないことに注意が必要です。. も文字数に含めるという条件の問題なので、for文を抜けた後で、count の値をインクリメントしておきます。


参考リンク 🔗


更新履歴 🔗



第13章のメインページへ

C言語編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る