ここから数ページは制御構文になります。第一回目は if 制御構文です。条件判断の構文としては2つ用意されている内の一つです。「もしも〜ならば」こうする、「そうでなければ」こうする、といった感じでしょうか。条件判断以外の制御構文は「繰り返し」の構文ですが、こちらは2つ(ないし3つ)あります。これら4つの使い方を修得すれば、プログラムの流れを完全に作り出すことが出来ます。あとは、見やすさやパフォーマンス性を考えて、関数を作ったり、構造体と呼ばれる変数の集まりを考えたりします。よって、今回からプログラムらしいプログラムになってくると思います。
それでは、if 分の構文を紹介します。
if ( 条件文 ){
条件文が成り立つ時の処理
}
else{
条件文が成り立たない時の処理
}
上の例が基本的な形です。条件文には「1ならば」であったり、「1より小さいとき」等の条件を入れます。処理の所は括弧「{ }」でくくられていますが、単文の時、つまり処理が1行の時は付けなくてもいいことになっています。つまり、
if ( 条件文 )
条件文が成り立つ時の処理(1行)
else
条件文が成り立たない時の処理(1行)
1行の時に括弧を付けても問題ありませんが、複数行の時に括弧を付けないと、コンパイル時にエラーが出たり、エラーが出なくてもプログラムが期待した通りに動かない場合があります。馴れるまではすべて括弧を付けるというやり方をお勧めします。
else が不必要なときは書かなくても問題ないです。たとえば、a という変数に入っている数値の絶対値を求めたいとき、a がマイナスの値であれば、a に「−1」を乗ずれば良く、正の場合は何もしなくて大丈夫と言うことになります。よって、この場合は
if ( a がマイナスの値ならば ){
a に「−1」を乗ずる
}
だけで済ますことが出来ます。このように、else は必要なければ書かなくてもOKです。
条件が複数の時、「a がマイナスの時」、「a が0以上、1未満」、「a が1以上の時」等の場合、次のように「else if」で構文を組むことが出来ます。
if (「a がマイナスの時」){
上の条件文が成り立つときの処理
}
else if (「a が0以上、1未満」){
上の条件文が成り立つときの処理
}
else{
上の2つの条件以外の場合
}
さて、次は「条件文」の書き方を説明します。普通は2つの値が「同じ」か「違う」か「大きい」か「小さい」かを比べることになります。「普通」で無い書き方もあるんですが、ここで説明しても混乱するだけだと思うので、はしょります。比較のやり方は a、b の値に対して(変数でも定数でも同じ)
a == b aとbが同じ値
a != b aとbが違う値
a > b aがbより大きい
a < b aがbより小さい
a >= b aはb以上
a <= b aはb以下
です。最も多い間違いは一番上のケースで必ず、「=」が2つ無いとダメです。1つしかない場合は、普通であれば a に b の値が代入され、比較の結果としては「成り立つ」という判断がなされるようになります。(この辺が先ほど書いた「普通」でないやり方に関係したりするのですが、「普通」で無いやり方は他人には分かりづらくなることが多々あるので、この先、「普通」で無いやり方を知ったとしても、使わない方が賢明です。)
では、実際の例で示しましょう。前回、わり算をするサンプルを作りましたが、あのプログラムには致命的なバグ(間違い)があります。それは、0で割る処理をしてしまうということです。算数の世界では0で割るという考え方は存在しないので、わり算の処理では要注意です。よって、割る数に0の入力があった場合、エラーの表示を出して、プログラムを終了する処理を加えます。
#include
main()
{
double a,b,c; /* 変数の宣言 */
printf("割り算をします。2つの数字を入力してください。\n");
printf("割られる数>");
scanf( "%d", &a );
printf("割る数>");
scanf( "%d", &b );
/* 割る数が0の時はエラー */
if ( b == 0 ){
printf( "0で割ることは出来ません。\n" );
}
else
{
c = a / b; /* 計算 */
printf("結果は %f です。\n", c );
}
return 1;
}
以上、次も「if 文」の「条件」の書き方をもう少し詳しく説明したいと思います。