
C言語基礎|4章のまとめ
はじめに:第4章は「繰り返し」と「書き方の基礎」を一気に身につける章だよ
第4章、おつかれさま!ここまで来たら、C言語の「プログラムらしさ」が一気に増してきたはずです。
第4章では、**繰り返し(do / while / for)を中心に、break / continue、増減演算子、複合代入、文字出力(putchar)、そして読みやすい書式(インデントや自由形式)**まで、実戦で頻出の道具がまとめて登場しました。
この「4章のまとめ」では、要点を整理しながら、それぞれが何をするものか、どう使い分けるかを、表と図で分かりやすくまとめますね。

第4章で学んだこと全体像
まずは章全体の主役たちを、ひと目で一覧にします。
第4章の主要トピック早見表
| 分野 | 学んだ項目 | ひとことで言うと |
|---|---|---|
| 繰り返し | do / while / for | 同じ処理を何度も実行する仕組み。 |
| ループ制御 | break / continue | 途中で抜ける・残りを飛ばす。 |
| カウンタ操作 | ++ / --(前置・後置) | 変数を1増やす・1減らす。 |
| 記述の簡潔化 | 複合代入(+= など) | 演算+代入を1つで書く。 |
| 入力の妥当性 | 範囲チェックなど | 変な値を受け付けない。 |
| 文字の出力 | putchar | 文字を1つだけ出す。 |
| 書式と要素 | キーワード・識別子・区切り子・自由形式 | コードを正しく読みやすく書く。 |
この表の見方
「分野」は学習テーマの分類、「学んだ項目」は登場した文法や機能、「ひとことで言うと」は実務的な役割です。章の復習に便利です。
繰り返し文の基本:真(非0)ならループが回る
繰り返し文は総称で「繰返し文(iteration statement)」です。
どの繰り返し文も共通して、制御式(条件式)を評価した結果が真(0以外)ならループ本体を実行します。
繰り返し文の共通イメージ
制御式を評価する
├─ 真(非0) → ループ本体を実行 → 次の判定へ
└─ 偽(0) → ループを終了して次へ進む
この図の説明
「真なら繰り返す、偽なら終わる」という共通ルールを図にしたものです。
違いは「判定がいつ行われるか」と「頭部に何をまとめられるか」です。
do / while / for の違い(前判定・後判定)
3つの繰り返し文の比較
| 文 | 判定タイミング | ループ本体が0回の可能性 | 向いている場面 |
|---|---|---|---|
| do | 後判定(最後に判定) | ない(必ず1回) | 入力を最低1回は取りたい。 |
| while | 前判定(最初に判定) | ある | 条件が成立する間だけ回したい。 |
| for | 前判定(最初に判定) | ある | 回数やカウンタが明確な繰り返し。 |
この表の説明
「判定タイミング」と「0回の可能性」は使い分けに直結します。
特に、入力のやり直しは do が自然、回数が決まるなら for が読みやすい、という使い分けが基本です。
各命令の書式(構文)と何をするものか
do 文の書式と役割
do
文;
while (式);- 式が真の間、文を繰り返す
- 必ず1回は文が実行される(後判定)
while 文の書式と役割
while (式)
文;- 式が真の間、文を繰り返す
- 最初の判定で偽なら1回も実行されない(前判定)
for 文の書式と役割
for (式A; 式B; 式C)
文;- 式A:最初に1回だけ実行(初期化など)
- 式B:真の間ループ継続(継続条件)
- 式C:毎回最後に実行(増分など)
break と continue:ループを「途中で制御」する
表:break と continue の違い
| 文 | 何をする? | 例えるなら |
|---|---|---|
| break | その繰り返し文を強制終了 | その場でループを脱出 |
| continue | その回の残り処理を飛ばす | 次の周回へスキップ |
この表の説明
break は「ループそのものを終わらせる」、continue は「残りをやらずに次へ行く」。
似てるけど目的が違うので、混ざらないようにこの表で整理しておくと安心です。
++ / --(前置・後置):増やすタイミングが違う
増分演算子 ++、減分演算子 -- は、変数を1増やす/1減らす演算子です。
そして大事なのが 前置と後置で“式としての値”が違うこと。
前置と後置の違い
| 書き方 | 変数の更新 | 式として得られる値 |
|---|---|---|
| ++a | 先に増やす | 増やした後の値 |
| a++ | 後で増やす | 増やす前の値 |
| --a | 先に減らす | 減らした後の値 |
| a-- | 後で減らす | 減らす前の値 |
この表の説明
「変数がどうなるか」だけじゃなく、「式としての値が何になるか」が違うのがポイントです。
printf の引数や条件式に混ぜたときに差が出ます。
複合代入演算子:短く書けて、左辺の評価が1回だけ
複合代入は「演算+代入」を一発で書く演算子です。
複合代入の基本形
| 形 | 意味(ほぼ同じ) |
|---|---|
| a += b | a = a + b |
| a -= b | a = a - b |
| a *= b | a = a * b |
| a /= b | a = a / b |
| a %= b | a = a % b |
重要な性質
複合代入は 左オペランドの評価が1回だけです。
複雑な式(配列、構造体、関数戻り値など)になるほどメリットが大きいです。
式文と空文:; は「何もしない文」になれる
式の後ろにセミコロンを付けると式文になります。
- 例:x = 3; は式文
- そして、式が省略されて ; だけのものが空文
表:式文と空文
| 種類 | 例 | 何をする? |
|---|---|---|
| 式文 | x = x + 1; | 式を評価して実行 |
| 空文 | ; | 何もしない |
空文は for や while の直後にうっかり置くと事故ります(ループ本体が空になる)。
putchar:単一文字を出力する
putchar は「文字を1つ」表示する関数です。
書式と役割
putchar(文字);- 例:putchar('*'); で * を1つ表示
- 例:putchar('\n'); で改行
文字定数は 'A' のように単一引用符で囲みます。
"ABC" は文字列なので別物です。
ド・モルガンの法則:条件式を読みやすく変形できる
「否定して、and と or を入れ替える」やつです。
ド・モルガンの対応
| 変形前 | 変形後(同じ意味) |
|---|---|
| x && y | !( !x || !y ) |
| x || y | !( !x && !y ) |
例:0〜100の範囲外
- x < 0 || x > 100
- !(x >= 0 && x <= 100)
どちらも同じ意味です。
Cの自由形式とインデント:動作より「読みやすさ」を守ろう
Cは自由形式なので改行や空白の位置は基本自由です。
でも、自由だからこそ 読みやすいインデントが大切になります。
- 単語の途中に空白や改行を入れない。
- #include の途中で改行しない。
- 文字列リテラルの途中で改行しない。
- まとまりは { } とインデントで表す。
章のまとめプログラム
例:入力の範囲チェック → カウント表示 → 約数列挙 → 図形表示
プロジェクト名:chap4-21-1 ソースファイル名:chap4-21-1.c
Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。
#include <stdio.h>
int main(void)
{
int x;
/* do:入力を最低1回は受け取り、範囲外ならやり直し */
do {
printf("1〜30の整数を入力してください:");
scanf("%d", &x);
if (x < 1 || x > 30)
puts("範囲外です。もう一度お願いします。");
} while (x < 1 || x > 30);
puts("カウントダウンとカウントアップを表示します。");
/* while:前判定の繰り返し、後置と前置の違いを混ぜて確認 */
int down = x;
int up = x;
while (down >= 0) {
printf("%2d -> %2d\n", down--, ++up);
}
/* for + break + continue:約数を列挙(簡単で分かりやすい題材) */
printf("%d の約数を表示します:\n", x);
int count = 0;
for (int i = 1; i <= x; i++) {
if (x % i != 0) continue; /* 割り切れないものはスキップ */
printf("%d\n", i);
count++;
if (count >= 10) break; /* 念のため多すぎる場合は中断(例として) */
}
printf("表示した約数は %d 個です。\n", count);
/* 多重ループ:x を幅、高さ 3 の簡単な図形を描く */
puts("横に並ぶ記号を表示します。");
for (int r = 1; r <= 3; r++) {
for (int c = 1; c <= x; c++)
putchar('#');
putchar('\n');
}
puts("おつかれさまでした。");
return 0;
}このプログラムで確認できること(対応表)
| 章の要素 | どこで使ってる? | 何の確認? |
|---|---|---|
| do | 範囲チェックの入力 | 後判定で必ず1回実行 |
| while | カウント表示 | 前判定・++/--の違い |
| for | 約数列挙 | カウンタ制御が簡潔 |
| continue | 約数列挙 | 条件に合わない回を飛ばす |
| break | 約数列挙 | 途中で中断する例 |
| putchar | 図形表示 | 文字を1つずつ出力 |
| 多重ループ | 図形表示 | 行×列の繰り返し |
