この記事の要点
- if文は条件分岐処理に使い、さらに条件分岐を追加したいときは「else if」や「else」を使う
- 比較演算子と論理演算子を組み合わせると、複雑な条件分岐も記述できる
- ループ制御でもif文はよく使われる
以前、C言語についてどんなプログラミング言語なのか、またどんな業務で利用されるのか、基礎について解説していました。
C言語では、様々な条件によって処理を変えたい場合、if文を使います。
if文は使用頻度が高く、目にする機会や実装する機会も多々あるでしょう。
そこで、当記事ではif文の使い方について整理して解説します。
条件分岐が苦手な方や、複雑な条件式の書き方に自信がない方におすすめの内容です。
目次
C言語でのif文の使い方と書き方
if文は、条件分岐処理に使います。
条件分岐処理とは、「○○が△△なら、××をする(○○が△△でないなら、××をしない)」といった処理のことです。
例えば、「りんごの値段が100円以下なら、購入する」「在庫が品切れでなければ、販売する」といった処理が挙げられます。
if文の構文
if文の構文は以下の通りです。
if( 条件式 ) { 処理 }
条件式の判定結果がtrueなら、{}内の処理を実行します。
条件式の判定結果がfalseなら、{}内の処理を実行しません。
if文の構文のサンプルコード
「入力した数字が5以上なら、画面に出力する」という処理のサンプルコードです。
int num; scanf("%d", &num); // 標準入力から数字を受け取る if(num >= 5){ printf("%d\n", num); }
実行してみると、3を入力した場合画面に何も表示されず、10を入力した場合は画面に「10」が表示されます。
条件分岐「else if」「else」の使い方
「else if」は、さらに条件分岐を追加する時に使います。
「else」は、条件に当てはまらなかった場合の処理に使います。
どちらも単体では使えず、if文と組み合わせて使います。
「else if」「else」の構文
if( 条件式1 ) { 処理1 } else if( 条件式2 ) { 処理2 } else { 処理3 }
条件式1の判定結果がtrueなら、処理1を実行します。
条件式1の判定結果がfalseで、条件式2の判定結果がtrueなら、処理2を実行します。
全ての条件式の判定結果がfalseなら、処理3を実行します。
「else if」「else」の構文のサンプルコード
if文のサンプルコードを以下のように修正します。
- 入力した数字が5以上なら、”5以上の数字です”と画面に出力する
- 入力した数字が2以下なら、”2以下の数字です”と画面に出力する
- どちらにも当てはまらなければ”2より大きく、5より小さい数字です”と画面に出力する
int num; scanf("%d", &num); // 標準入力から数字を受け取る if(num >= 5) { puts("5以上の数字です"); }else if(num <= 2) { puts("2以下の数字です"); }else{ puts("2より大きく、5より小さい数字です"); }
代表値での実行結果は以下のようになります。
入力値 | 出力 |
---|---|
1 | 2以下の数字です |
3 | 2より大きく、5より小さい数字です |
7 | 5以上の数字です |
if文の条件式で使う「比較演算子」一覧
if文やelse ifの中に記述する条件式では、比較演算子を使います。
比較演算子とは、ある値どうしを比較するための処理です。
演算子 | 使用例 | 説明 |
---|---|---|
< | a < b | a が b より小さければtrue、それ以外false |
> | a > b | a が b より大きければtrue、それ以外false |
<= | a <= b | a が b 以下ならtrue、それ以外false |
>= | a >= b | a が b 以上ならtrue、それ以外false |
== | a == b | a が b と等しいならtrue、それ以外false |
!= | a != b | a が b と等しくないならtrue、それ以外false |
複数条件の設定に必要な「論理演算子」一覧
論理演算子を使うと、さらに複雑な条件を設定できるようになります。
論理演算子とは、論理値(true, false)の計算をするための処理です。
演算子 | 意味 | 使用例 | 説明 |
---|---|---|---|
! | 否定 | !a | aを否定する(aがtrueならfalse、falseならtrue) |
&& | AND(かつ) | a && b | a、bの論理積(a、bが共にtrueならtrue、それ以外false) |
|| | OR(または) | a || b | a、bの論理和(a、bが共にfalseならfalse、それ以外true) |
比較演算子と論理演算子を組み合わせたサンプルコード
こちらは、「FIZZBUZZ」という入門者向けの有名な問題です。
- 1から100まで順に出力する
- 3の倍数なら数字の代わりに”FIZZ”と出力する
- 5の倍数なら数字の代わりに”BUZZ”と出力する
- 15の倍数なら数字の代わりに”FIZZBUZZ”と出力する
for(int i = 1;i <= 100; i++){ if(i % 3 == 0 && i % 5 == 0){ puts("FIZZBUZZ"); }else if(i % 3 == 0){ puts("FIZZ"); }else if(i % 5 == 0){ puts("BUZZ"); }else{ printf("%d\n", i); } }
nの倍数は、必ずnで割りきれる(=余りが0になる)数字であることを利用しています。
15の倍数は、「3で割った余りが0」かつ「5で割った余りが0」なので、論理演算子の「&&」を使って判定します。
for文などのループを制御する時のif文
for文などのループ処理中に、条件を満たしたときにループを脱出したりスキップしたりすることをループ制御といいます。
ループ制御 | 説明 |
---|---|
continue | 後続の処理をスキップして、ループを継続 |
break | ループを脱出する |
このループ制御にも、if文はよく使われるのでセットで覚えておくとよいでしょう。
ループ制御を使用したサンプルコード
具体例として、文字列の中から'e'の文字を探すサンプルコードをご紹介します。
char string[] = "If the people have no bread, let them eat cake."; char target = 'e'; int count = 0; int index = 0; while(true){ char c = string[index]; if(c == '\0'){ break; // 文字列の終端に達したら、ループを終了 } index++; if(c != target){ continue; // 文字が'e'で無ければ以降の処理をスキップ } count++; } printf("%d", count); // 実行結果は「9」
文字列から1文字ずつ読み込んで、'e'と一致するかチェックしています。
一致しなければ、後続の処理をスキップして次の文字へ進みます(continue)。
文字列の終端に到達したらこれ以上ループを続ける必要はないので、脱出します(break)。
チェックする文字列や文字を変更しても動作するようになっているので、自由に試してみてください。
またループ処理のwhile文の使い方については、こちらの記事で詳しく解説していますので参考にしてください。
まとめ
当記事では、if文の使い方について解説しました。
if文は使う頻度が高い処理なので、何度も練習してスラスラ記述できるようにしておきましょう。
慣れてきたら、論理演算子を使って少し複雑な条件分岐にもチャレンジしてみるとさらによいです。
条件分岐処理は、プログラミングの基本です。
if文を身に着けると、C言語だけでなく、あらゆるプログラミング言語に応用できます。
この機会にしっかりマスターしておきましょう。
また、if文と同じ条件分岐処理に利用されるswitch文(switch-case文)があります。
switch文の使い方や、if文との使い分け、また応用テクニックとして、enumやフォールスルーについて解説していますので、こちらの記事も参考にしてください。