if文

同じことしか言わないプログラム

前回までで、点数を読み込んで合計や平均を出せるようになりました。ただし今のプログラムは、何点であっても同じことしか言いません。42点でも95点でも「平均は〜点です」と表示して終わりです。成績管理として使うなら、点数が低い学生のときだけ警告を出したいところです。

「あるときだけ実行する」を書くのが if 文です。

if (score < 60) { printf("補習の対象です\n"); }

if のうしろの丸かっこに書くのが条件式です。前回の比較演算子がそのまま使えます。C では条件式が成り立つと 1、成り立たないと 0 という値になり、0 以外を真、0 を偽として扱います。真のときだけ波かっこの中が実行され、偽なら波かっこごと飛ばされます。

波かっこを省略しない

C は、実行する文が1つだけなら波かっこを省略できます。

if (score < 60) printf("補習の対象です\n");

これも正しく動きます。危ないのは、あとから1行足したくなったときです。

if (score < 60) printf("補習の対象です\n"); printf("担当に連絡してください\n");

字下げは揃っているので2行とも条件の中に見えます。しかし if が支配しているのは直後の1文だけなので、2行目は点数に関係なく必ず実行されます。C はコンパイルの前に字下げを取り払って読むので、見た目のインデントには何の意味もありません。最初から波かっこを書いておけば、この事故は起きません。本コースでは1行でも必ず波かっこを付けます。

else でもう一方を書く

条件が偽のときにやることは else に書きます。

if (score >= 60) { printf("合格です\n"); } else { printf("不合格です\n"); }

ifelse は必ずどちらか一方だけが実行されます。両方実行されることも、どちらも実行されないこともありません。だから「合格と不合格のどちらかを必ず1回表示する」を確実に書けます。

= と == を取り違えない

C で最も有名な間違いが、比較のつもりで代入を書いてしまうものです。

if (score = 100) {

これは score に 100 を代入し、その代入結果である 100 が条件になります。100 は 0 以外なので条件は必ず真、しかも score が書き換わってしまいます。比較は ==、代入は = です。多くのコンパイラは警告を出してくれるので、警告を読み飛ばさない習慣を今のうちに付けてください。

要件

  1. scanf で整数を1つ読む
  2. まず「点数は72点です」の形で必ず表示する
  3. 60点未満のときだけ、続けて「補習の対象です」と表示する
  4. 60点ちょうどのときは警告を出さない

入出力例

main("72")"点数は72点です" main("45") → "点数は45点です 補習の対象です" main("60")"点数は60点です" main("0") → "点数は0点です 補習の対象です"

ヒント

生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部
main.c
学習モード

メモ

if文

⌘S で保存