問題① 次のプログラムの実行結果はどうなりますか?
#include <stdio.h>
int main(void)
{
int value1 = 10;
int value2 = 20;
("%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);
printf}
2種類の等価演算子と、4種類の関係演算子を使って、10 と 20 を比較しています。これらの演算子は、それぞれの意味を満たしていれば 1、満たしていなければ 0 になります。
実行結果:
0
1
1
1
0
0
問題② 次のプログラムの実行結果はどうなりますか?
#include <stdbool.h>
#include <stdio.h>
int main(void)
{
bool value = false;
("%d\n", true);
printf("%d\n", false);
printf("%d\n", value == false);
printf("%d\n", value != false);
printf}
bool、true、false
を使うためには、#include <stdbool>
が必要です。
bool は _Bool の代わりの名前、true は 1、false は 0 の代わりとして使えるというだけのことです。そのため、このプログラムは次のプログラムとまったく同じ意味です。
#include <stdbool.h>
#include <stdio.h>
int main(void)
{
_Bool value = 0;
("%d\n", 1);
printf("%d\n", 0);
printf("%d\n", value == 0);
printf("%d\n", value != 0);
printf}
実行結果は次のようになります。
実行結果:
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; // 最後の '.' の分を加算
("%d\n", count);
printf}
実行結果:
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
の値をインクリメントしておきます。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |