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");
}if と else は必ずどちらか一方だけが実行されます。両方実行されることも、どちらも実行されないこともありません。だから「合格と不合格のどちらかを必ず1回表示する」を確実に書けます。
= と == を取り違えない
C で最も有名な間違いが、比較のつもりで代入を書いてしまうものです。
if (score = 100) {これは score に 100 を代入し、その代入結果である 100 が条件になります。100 は 0 以外なので条件は必ず真、しかも score が書き換わってしまいます。比較は ==、代入は = です。多くのコンパイラは警告を出してくれるので、警告を読み飛ばさない習慣を今のうちに付けてください。
要件
- scanf で整数を1つ読む
- まず「点数は72点です」の形で必ず表示する
- 60点未満のときだけ、続けて「補習の対象です」と表示する
- 60点ちょうどのときは警告を出さない
入出力例
main("72") → "点数は72点です"
main("45") → "点数は45点です
補習の対象です"
main("60") → "点数は60点です"
main("0") → "点数は0点です
補習の対象です"