C言語学習ポータル(無料版) 学習コンテンツ 制御構造

🔀 制御構造

全12トピック・無料版に収録

if・switch・for・while。プログラムの流れを自在に操る。フローチャートとトレース表で「流れ」を目に見える形にする。

アプリでこのトラックを学ぶ(無料・登録不要)

収録トピック

流れを変える——制御構造の全体像

プログラムは、書いた順に上から下へ実行されます。カレーのレシピと同じです。 ところが、実際のレシピにはこんな行がありませんか。「まだ固ければ、もう5分煮る」「アクが出なくなるまで、すくい続ける」。この2つは、上から順に読むだけでは表せません。プログラムにも、流れを曲げたり、同じ場所をぐるぐる回ったりする仕組みが要ります。それが制御構造です。 制御構造は、たっ…

if文——もしも、の分かれ道

朝、家を出る前に空を見ます。「雨が降っていたら、傘を持つ」。降っていなければ、何もしない。この「もしも〜なら」をそのままコードにしたのがif文です。 書き方はこうです。 かっこの中に書くのが条件式です。条件式の結果は「真」か「偽」のどちらかになります。C言語では 0 が偽、0以外はすべて真という約束で、C23ではbool型の true / false をその…

else if / else の分かれ道設計

天気予報を見て服を決めます。「雨なら傘、曇りなら折りたたみ、それ以外なら帽子」。道は2本ではなく3本です。分かれ道が3本以上になったらelse ifの出番です。 動きの要点はひとつだけ。上から順に確かめ、最初に真になった枝だけを実行して、残りは見ずに抜ける。これさえ押さえれば else if で迷うことはありません。 成績判定で試しましょう。 72点は >=…

条件式の罠——= と == の悲劇

算数で習った「=」は「等しい」という意味でした。C言語の = は「入れる」です。この1文字の食い違いが、C言語で最も有名な事故を生みます。 仕組みから見ていきましょう。 a = 5 は代入です。そして重要なのは、代入した結果、式全体が「代入した値」を持つという点。つまり a = 5 という式そのものの値は 5 です。 a == 5 は比較です。式の値は真か偽…

論理演算子と短絡評価

遊園地の乗り物に、こんな看板があります。「身長120cm以上、かつ、大人の同伴がある方」。条件が2つ以上あるとき、日本語の「かつ」「または」「〜でない」をCに翻訳するのが論理演算子です。 && は「かつ」。両方が真のときだけ真になります。 || は「または」。どちらかが真なら真になります。 ! は「〜でない」。真と偽をひっくり返します。 実際に使ってみましょ…

switch文とfallthrough

ラーメン屋の券売機を思い浮かべてください。「1番ならラーメン、2番ならチャーハン、3番なら餃子」。範囲ではなく、値がぴったり一致するかどうかで分かれます。こういうときはifを並べるよりswitch文のほうが読みやすくなります。 条件ではなく値で飛び先を選ぶのがポイントです。switch に置けるのは整数として扱える値だけ(int・char・列挙型など)で、文…

for文——回数が決まった繰り返し

ラジオ体操の「深呼吸、4回」。回数が先に決まっている繰り返しはfor文の出番です。 3つの部品が並んでいます。動く順番は、慣れるまで少しややこしいので声に出して覚えてください。 初期化式 — 最初の1回だけ実行する 継続条件 — 真なら中へ、偽なら終わり 処理 — 本体を実行する 更新式 — 1周ぶんの後始末(カウンタを進める) 2へ戻る つまり初期化は1回…

while文——条件が決める繰り返し

お風呂を沸かします。「沸くまで待つ」。何分かかるかは、お湯の量にも季節にもよります。回数が先に読めない繰り返し——それがwhile文の担当です。 条件を確かめてから中へ入り、1周終わるとまた条件を確かめます。偽になった瞬間に抜けます。for から初期化式と更新式を取り去った形、と見ることもできます。 出力は 5 2 1 のあと「終わり」。10を半分にすると5…

do-while文と入力チェック

アンケートを取ります。「まず1回は必ず質問する。答えが変だったら、もう一度聞く」。while だと「聞く前に条件を確かめる」ことになって、少し不自然です。こういうときはdo-while文が素直に書けます。 whileとの違いは1点だけ。条件を確かめるのが後なので、条件が最初から偽でも本体は必ず1回は実行されます。「とりあえずやってみて、駄目ならもう一度」とい…

breakとcontinueの使いどころ

探し物をしています。棚を端から見ていって、見つかったらそこでやめる。これがbreakです。仕分けをしています。対象外のものは飛ばして次へ。これがcontinueです。 break — いま入っているループ(または switch)をその場で抜ける。 continue — 本体の残りを飛ばして、次の周回へ進む。ループ自体は続く。 break から見ましょう。1か…

ループのネストと九九表

アナログ時計を見てください。長針が1周する間に、短針は1目盛りだけ進みます。外側が1回進む間に、内側は最初から最後まで回りきる。これがループのネスト(入れ子)です。 外側3回、内側3回なら、本体が実行されるのは 3×3 = 9回。掛け算になるのがポイントです。 定番中の定番、九九表を作りましょう。 9行9列の表が出ます。%3d は「3桁ぶんの幅で右寄せ」とい…

無限ループとの付き合い方

実行したら、画面が固まって返ってこない。カーソルだけが点滅している。初めてこれに出くわすと「壊した」と思うものですが、たいていは無限ループです。壊れてはいません。怖がるより、原因の型を覚えたほうが早く片付きます。 まず止め方から。実行中のコンソールで Ctrl + C を押せば中断できます。これを知っているだけで恐怖は半分になります。 無限ループの原因は、ほ…

このトラックで出てくる用語

if文 入れ子(ネスト) else else if continue文 条件式 真偽値式 switch文 制御構造 短絡評価 do-while文 反復 for文 フォールスルー break文 ブロック 無限ループ ループ ループカウンタ 論理演算子 while文

ほかのトラック

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版(BOOTH)を見る

📚 姉妹教材:手を動かして覚える Linux 教材 — Linuxとインフラの仕組みを地図で学ぶ

Web版 / BOOTH