
C言語入門|4章の練習問題
4章では、プログラムに「選択(if)」と「繰り返し(while)」の考え方を導入し、
条件によって動作を変える方法や、ある処理を何度も繰り返す方法を学びました。
コンピュータは、与えられた条件式を 真(true)か偽(false)か で判断し、
その結果に応じて処理を切り替えます。
たとえば「雨が降っていれば傘を持つ」という日常の判断も、
プログラム世界では if 文として表現できます。

条件式は「値と値を比較した結果」であり、
必ず true または false のどちらかになります。

よく使う比較演算子と論理演算子
| 演算子 | 読み方 | 説明 |
|---|---|---|
| == | 等しい | 左右の値が一致するか |
| != | 等しくない | 左右の値が異なるか |
| >, < | 大小比較 | 大きい・小さい |
| >=, <= | 以上・以下 | 境界含む比較 |
| && | かつ | 両方とも true なら true |
| || | または | どちらか true なら true |
| ! | 否定 | true ⇔ false を反転 |
if 文の書式と意味
書式
if (条件式) {
文;
}意味
- 条件式が true → { } 内の処理を実行
- false → 何もしない(または else があればそちらに進む)
while 文の書式と動き
書式
while (条件式) {
文;
}動き
- 条件式を評価
- true なら文を実行 → 再び条件式へ戻る
- false になったら終了
ループ処理を作るのに欠かせません。
短絡評価(ショートサーキット)
例
(age >= 18) && (month == 8)age が 18 未満なら、
前半が false と分かった時点で後半(月の比較)を評価しません。
これが 短絡評価(minimal evaluation) です。
擬似言語との比較
| C言語 | 擬似言語 | 特徴 |
|---|---|---|
| if(条件){文} | if 条件 文 endif | {} の代わりに end を使う |
| while(条件){文} | while 条件 文 endwhile | 同上 |
| do{文}while(条件); | do 文 while 条件 | ほぼ同じ |
| for(3項) | for 条件の説明 endfor | 擬似言語は自然文で指定 |
switch や goto は擬似言語には存在しません。
サンプルプログラム
プロジェクト名:4-9-1 ソースファイル名: sample4-9-1.c
#include <stdio.h>
int main(void) {
int score = 75;
if (score >= 80) {
printf("とても良い成績です!\n");
} else {
printf("次はもっとがんばりましょう。\n");
}
return 0;
}4章の練習問題
【練習4-1】
次の条件式が評価している内容を日本語で答えてください。
不適切な条件式は × と記してください。
(1) score > 90
(2) flag == false
(3) name == "taro"
(4) a % 2 == 0 && b > 10
(5) value
【解答例と解説】
| 番号 | 日本語の説明 | 解説 |
|---|---|---|
| (1) | score が 90 より大きいか調べている | 適切 |
| (2) | flag が false と等しいか | 適切 |
| (3) | × | 文字列比較は == では行えない |
| (4) | a が偶数 かつ b が 10 より大きいか | 適切 |
| (5) | 変数 value の値は true(0以外)か | 適切 |
【練習4-2】
次の内容を判定する条件式を記述してください。
(1) 変数 mode が 'A' と等しい
(2) x と y の差が 5 の倍数
(3) hp が 0 より大きく、かつ alive が true
(4) n の値が 1・3・5 のいずれか
(5) a と b の値が一致しない(否定演算子を使用)
【解答例と解説】
(1) mode == 'A'
(2) (x - y) % 5 == 0
(3) hp > 0 && alive == true
(4) n == 1 || n == 3 || n == 5
(5) !(a == b)
【練習4-3】
次の if 文に、追加した printf が期待通りに動かない原因を説明し、修正してください。
} else
printf("雨の日は読書をします\n");
printf("感想をSNSに書きます\n"); // ←追加
return 0;【解答例と解説】
発生している現象
else のブロックだと思っていた処理が、
実際には 2 行目だけ if/else に属しておらず、常に表示されてしまう。
原因
C言語では、ブロック( { } )を書かなければ、1行だけが if/else の対象になるため。
修正版
} else {
printf("雨の日は読書をします\n");
printf("感想をSNSに書きます\n");
}【練習4-4】
次の内容のプログラムを作成してください。
(1) 「朝ごはんを食べます」と表示する
(2) bool 型 hungry を宣言し、true または false を代入
(3) hungry が true なら「おかわり!」、false なら「もう結構です」と表示
(4) 最後に「いってきます」と表示
【解答例】
プロジェクト名:4-9-2 ソースファイル名: sample4-9-2.c
#include <stdio.h>
#include <stdbool.h>
int main(void) {
printf("朝ごはんを食べます\n");
bool hungry = true;
if (hungry) {
printf("おかわり!\n");
} else {
printf("もう結構です\n");
}
printf("いってきます\n");
return 0;
}【練習4-5】
次を満たす while 文のプログラムを作成してください。
(1) int speed = 100 で開始
(2) speed を表示
(3) 「速度を下げますか? Yes=1 No=0」を表示し入力を受け付ける
(4) 1 が入力されたら speed を 5 下げて (2) に戻る
(5) 0 なら「調整終了」と表示して終了
【解答例】
プロジェクト名:4-9-3 ソースファイル名: sample4-9-3.c
#include <stdio.h>
int main(void) {
int speed = 100;
int ans;
while (1) {
printf("速度:%d\n", speed);
printf("速度を下げますか? Yes=1 No=0\n");
scanf("%d", &ans);
if (ans == 0) {
printf("調整終了\n");
break;
}
speed -= 5;
}
return 0;
}【練習4-6】
次の複雑な条件式について、短絡評価がどのように働くかを説明してください。
(age > 18) && (level / bonus > 2)【解答例と解説】
- age が 18 以下の場合
→ 前半が false と確定するため、
後半の level / bonus は計算されない(短絡評価) - その結果、
bonus が 0 の可能性があっても除算エラーが回避されることがある。
短絡評価は、計算の効率化や安全性にも役立つ。
