PC Technique logo

小学校高学年から中学生を対象にした、無料公開中のC言語の入門講座です。

【10時間目】if文の条件を複数書いてみる

前回は、「はい」か「いいえ」でプログラムが分かれる条件分岐(じょうけんぶんき)、if文を勉強しました。その「はい」か「いいえ」の疑問文のことを「条件文」と言い、AとBが等しいか、とか、AがBよりも大きい、とか、いろいろな条件文があることを勉強しました。

では、その条件が複数ある時はどのようにすればよいでしょうか。たとえば、AはBと等しく、かつBはCよりも大きいとき、などです。前回までのやり方では、まずAとBが等しいことを確かめて、そしてBはCよりも大きいことを確かめる、と2つのif文を書くことになります。しかし、もっとかしこい書き方が存在します。今回はその書き方についてみてみましょう。

「かつ」と「または」

ここで、「かつ」と「または」についてまず見てみます。

AかつBといえば、「Aでもあり、Bでもある」、つまり両方が「はい」の場合ですね。プログラマーはこれを「AND」(アンド)と呼びます。ANDでつながっているものは、全ての条件文がtrueであるときだけ、trueになります。

AまたはBといえば、「Aか、Bである」、つまりどちらかが「はい」の場合になります。プログラマーはこれを「OR」(オア)と呼びます。ORでつながっているもののうちどれか1つがtrueであれば、結果はtrueになります。

C言語での「AND」と「OR」

C言語では、ANDとORの表現に&&||を使います。

日本語キーボードだと、「&」はシフトキーを押しながら6キー、「|」はシフトを押しながら¥キーです。キーをよく探してみてください。

「=」(代入)と「==」(等しい)と、同じ記号を使っていても意味が違うものがありました。「&&」も「||」も同じように、意味が違う「&」や「|」があります。ビット論理和ビット論理積と言われるものです。ここでは詳しくやりませんが、条件文の結合で使うときは、必ず2回繰り返した「&&」と「||」を使いましょう。

プログラミングで使ってみよう

それでは、前回までのプログラムを少し改良しましょう。今回は、税込価格が、たとえば700円以上から1000円以内のお菓子なら買えるという判定を行ってみたいと思います。条件式は「zeikomiが700以上、かつ、zeikomiが1000以内」と指定してあげます。

では実行してみましょう。

このように、しっかりと条件を満たしていることがわかりますね。

else if文

コードを良く見てください。今回追加したif文の上に、if(zeikomi > 1000)のif文がありますね。このif文は、税込みが1000円より高かったときに実行されます。そして今回追加したコードif(zeikomi >= 700 && zeikomi <= 1000ですが、これは税込みが700円以上、1000円以内であるときに実行されます。つまり、この2つのif文が両方「はい」になることは絶対に無いですよね。

その場合は、一つ目のif文でtrueになった場合は、2つめのif文はスキップしたほうがスマートなコードになります。そこで、else if文の登場です。else if文は、「1つ目の条件が違った時、2つ目の条件はどう?」といったif文になります。

ニュアンスとしては、たとえば友達と遊ぶ約束をするときに、「10月10日はどう?もしだめなら11日は?」と聞くような感じです。10日がOKなら11日はどうでもいい、ということですね。

先のコードを書き直してみる

それを踏まえて、先程のコードを書き直してみましょう。

今回のテーマである「複数の条件式」が消えてしまいましたが、else ifでつなげるとこのようになります。動作は先程のものと全く同じです。

&&と||が混ざるときの注意点

if文で、例えば「(Aが0、かつBが0の時)、もしくは(Aが1の時)」のように、「もしくは」も「かつ」も入れ交じるような場面では、その評価の順番に注意しなければなりません。日本語でも確認できますが、「(Aが0の時)、かつ(Bが0、もしくはAが1の時)」と区切り方を変えれば、Aが1、Bが0ではないときの判定が両者で食い違ってしまいます。

そこで、C言語で条件に明確に順番をつけるには、(カッコ)を使います。算数や数学の四則計算と同じ感じです。

「(Aが0、かつBが0の時)、もしくは(Aが1の時)」を表すには、if( (A == 0 && B == 0) || A == 1 )

「(Aが0の時)、かつ(Bが0、もしくはAが1の時)」を表すには、if( A == 0 && (B == 0 || A == 1) )

このようになります。

この時間のまとめ

「かつ」は「&&」で、「または」は「||」で、複数の条件を繋ぐことができる

else if文は「if判定を減らすためのかしこいif文」です。使えるところでは積極的に使っていこう。

「&&」と「||」が混じり合うときは、その順番に注意。(カッコ)を使って優先順位を明確に!

次の時間はループ処理

まだまだif文について基本的なことしか触っていないですが、いったんif文はここまでにして、次はループについて勉強したいと思います。ループとは、同じ処理を、決められた回数分行うことをいいます。例えば「なわとび」を想像してください。なわを飛び越えて、着地、反動をつけて、飛ぶ、飛び越えて、着地、反動をつけて、飛ぶ、飛び越えて、着地…と、同じ動作手順を繰り返しますよね。これがまさに「ループ」になります。

新しい処理の方法ループと、新しいキーワード「while」について勉強しましょう。

今回はここまでです。お疲れ様でした。