誰でも分かるC言語入門
■第3話:制御構造
(最終更新日:2024.04.14)
(絵が小さい場合はスマホを横に)
「C言語の制御構造を学ぼう!」
第3回では、C言語の制御構造に焦点を当てる。
プログラムの流れを制御するために不可欠なif文、switch文、およびループ構造(for文、while文、do-while文)を詳しく学ぶ。
これらの基本的な構造を通じて、プログラムに条件分岐と繰り返し処理の能力を持たせる方法を理解する。
さらに、これらの制御構造のネストについても掘り下げ、複雑な条件やタスクを効率的に処理する技術を習得する。
これらの知識は、効果的なプログラミングの基礎を形成する。
1.条件分岐(if文、switch文)
第3回では、C言語の基本的な制御構造である条件分岐に焦点を当てる。
条件分岐は、特定の条件に基づいて異なるコードブロックを実行するために使用される。
主にif文とswitch文について詳しく説明する。
■if文
if文は、与えられた条件が真(非ゼロ)である場合にコードブロックを実行する。
elseキーワードを使用して、条件が偽(ゼロ)である場合に実行される別のコードブロックを指定することもできる。
さらに、else ifを使えば複数の条件を連続してチェックすることもできる。
if, else if, elseの使い方
■switch文
switch文は、ある変数の値に基づいて複数のケースの中から一つを選択して実行する。
switch文は主に、同一の変数に対して多数の条件をチェックする場合に使用される。
各caseラベルは、switchに与えられた()内の式の結果と比較される。
一致するcaseが見つかると、そのポイントからコードが実行される。
breakステートメントが遭遇されるまで、またはswitchブロックの末尾に到達するまで、実行は続行される。
defaultラベルは、いずれのcaseも一致しない場合に実行されるコードブロックを指定する。
下記では2番目の「b is 2」が出力される。
switch文の使い方
if文とswitch文は、プログラムの流れを条件に応じて制御する強力なツールだ。 どちらを使用するかは、チェックする条件の数や種類、およびプログラムの明瞭さの要件によって考えよう。
2.ループ(for文、while文、do-while文)
ここでは、C言語におけるループ構造に焦点を当てる。
ループは繰り返し処理を行う際に非常に有用だ。C言語では、for文、while文、do-while文の3つの主要なループ構造がある。
■for文
for文は、初期化、条件評価、反復ステップを一つの場所にまとめることができるループだ。
これは、繰り返し回数が明確な場合に特に便利である。
下記の例では、i は0から始まり、5未満の間、ループの内容が実行される。各反復の後で、i は1ずつ増加する。
for文の使い方
■while文
while文は、与えられた条件が真(非ゼロ)の間、ループ内のコードブロックを実行し続けます。条件は各反復の前に評価される。
下記の例では、j が5未満の間、printf関数が実行され、j はループの中でインクリメントされる。
while文の使い方
■do while文
do-while文は、ループの末尾で条件が評価される点を除けば、while文と似ている。
これは、括弧内の条件を満たさなくても、ループの内容が少なくとも一度は実行されることを保証する。
下記の例では、k の値が先に出力され、その後でインクリメントされ、最後に条件がチェックされます。これにより、k が5未満である限りループが続く。
ちなみに、括弧内の条件を、k < 0、k < 1とした場合、いずれにおいても0だけが一回出力される。
while文の使い方
for、while、do-whileの各ループは、異なるシナリオで最適だ。forループは、繰り返し回数が明確な場合に適している。 whileループやdo-whileループは、反復回数が事前には不明な場合や条件がループの実行後にのみ確定する場合に有効だ。 適切なループを選択することで、プログラムの可読性と効率性を高めよう。
3.制御構造のネスト
if文の中に別のif文を記述することで、より詳細な条件分岐を表現できる。 ネストの使い過ぎは可読性を下げるので注意が必要だが、適度なネストは便利に場合分けを行うことができる。 ちなみに、下記では可読性を挙げるために、オールマンスタイルという書き方で記述した。 条件判定部分と括弧を違う列に記述しているため、どこからどこまでが、その条件に適用する命令かが分かりやすい。 この場合、aは10なので「a is less than b and less than 15」が出力される。
if文のネスト
ループの中に別のループを記述することもできる。これは多次元配列の処理や、他の複数段階の繰り返し処理に使用される。 多次元配列でいえば、時間ごとの予約の空き状況や、画像などの各画素における色の強さを示すのに使えたりする。
for文のネスト
switch文の内部でforループ等を使用することもできるが、この場合はループが特定のケースにのみ適用される点に注意が必要だ。 下記の場合、optionが2の場合、3回の反復を行うforループが実行される。
switch文のネスト
4.まとめ
今回は、C言語の主要な制御構造を学習した。 条件分岐にはif文とswitch文を、繰り返し処理にはfor文、while文、do-while文を用いる方法を詳しく解説した。 これらの構造を使って、プログラムの実行フローを制御する方法を理解出来たと思う。 また、制御構造のネストにより、より複雑なロジックや繰り返し処理を効率的に扱う方法も学んだ。 ただし、早期リターンや関数の分割、ロジックの書き方で過度のネストは避けた方が良い。 可読性が下がり、デバッグがしにくくなるからだ。 これらの制御構造は、プログラムの基本的なビルディングブロックであり、効果的なプログラミングのために不可欠だ。
▼参考図書、サイト
「かんたん C言語」 大川内 隆朗 技術評論社
「12歳からはじめる ゼロからのC言語ゲームプログラミング教室」 リブロワークス