
どうもピーマンです。こんかいは、c言語の「条件分岐」について説明していきたいと思います。c言語のプログラミングでは、条件分岐が使える様になると、前章の変数よりも、もっとたくさんのことができる様になるので、必ず習得しましょう。
if文
それでは条件分岐について具体的に説明していきます!
if文とは?
c言語で条件分岐を使いたいときは、主に、「if文」と呼ばれるものを使用します。このif文を使用すると、以下のことができる様になります。
- 入力に対して異なる処理を実行
- プログラムに自動で仕事をさせるときに、状況に合わせて、処理内容を変更
このif文を例えば前章の変数と組み合わせると、入力された数字が偶数なのか奇数なのかを判定したり、血液型占いを作ることができたりします。エアコンの温度調整だってこの条件分岐のおかげで動いています。
それでは、以下のc言語のソースコードをコンパイルして実行して見ましょう!
※return 0;というのはプログラムを終了させるコードです。
このプログラムは、例えばキーボードから4と入力した場合は、
4は偶数です
と表示され、5と入力した場合は、
5は奇数です
と表示されます。
ここで、新しく登場した9行目のif文を紹介します。
if(条件) { //条件があっている場合実行される }
if文は、( )の中に書いてある条件が、真である場合に、{}内の処理を行います。
このソースコードの場合は、条件が(a % 2 == 0)でした。a%2というのはaという変数を2で割ったあまりという意味です。また、== というのは、右辺と左辺が等しいという意味です。
この条件は2で割り切れるかどうかを判断しているので、割り切れた場合の条件は真ということになり、{ } 内のprintf関数が実行されるというわけです。
色々な条件(関係演算子)
if文の条件の説明するときに、「== は右辺と左辺が同じだという意味」という説明をしました。このif文の条件に使用される == のことを関係演算子と呼びます。
関係演算子には、== 以外にも、いくつか種類があるので紹介したいと思います。
関係演算子 | 例 | 意味 |
== | a == b | aとbは等しい |
!= | a != b | aとbは等しくない |
< | a < b | aよりbが大きい |
> | a > b | bよりaが大きい |
<= | a <= b | bはa以上の大きさ |
>= | a >=b | aはb以上の大きさ |
それでは実際に上記の関係演算子を使用して、偶数かどうか判定するソースコードを書き換えて見ます。
出力結果は、書き換える前のプログラムと変わりません。しかし、if文の条件を書き換えています。今回のコードは、関係演算子の != を使用して、割り切れない場合にif文の処理をさせる様にしてみました。
複数の条件分岐
次に説明するのが「else if」と「else」です。
else ifとelse
例えば、血液型占いをするc言語のプログラムを書いたとします。しかしif文だけだと、「ある血液型かどうか」しか判定することができず、2通りしか分岐できないので面白くありません。
そこで使うのが「else if」と「else」です。以下のプログラムをコンパイルして実行して見ましょう。
実行できましたか?
初めに「else if」と「else」の紹介をしたいと思います。
if(1つ目の条件) { 1つ目の条件が真の場合の処理 } else if(2つ目の条件) { 2つ目の条件が真の場合の処理 } else if(3つ目の条件) { 3つ目の条件が真の場合の処理 } else 1〜3の条件が偽の場合の処理
この様に、「else if」と「else」は、1つ目のif文の条件が偽だった場合に、その下の「else if」に進み、その条件も偽だった場合に「else」へ進むという動きをします。
そのため、ソースコードを実行すると、A型だった場合はifの処理をして、そうでないときは、「else if」に進み、全ての条件が偽の場合に、「入力が間違っている」という表示をさせることが可能になっています。
複数の条件(論理演算子)
次に説明するのは、複雑な条件分岐を書くときに役に立つ論理演算子というものです。例えば、BMIを計算した後に、肥満型か痩せ型か判断するプログラムを作ってみましょう。
ちなみに、BMIは18.5未満が痩せすぎで18.5から25未満が適正体重、25以上が肥満です。
※長くなってしまうので、ここには、条件分岐の部分だけを書きます。
どうでしょう。条件分岐の中に条件分岐があったり、else ifの中にif文があったり、もうわけわかりませんよね?(笑)
こんな汚いコードはあとで見たときに混乱してしまいます。ということで、論理演算子を使用していい感じに書き変えたいと思います!!それが以下の条件文です。
「なんということでしょう!!」
論理演算子を使うことにより、とても綺麗に、しかも3文で書くことができました!これが論理演算子のすごいところです。上のコードでは、2つの条件(18.5以上と25未満)を以下の様に1つにまとめています。
(18.5 <= BMI && BMI < 25)
論理演算子は、複数の条件をまとめることができ、複雑な条件文を簡略化することができるのです。他にも種類があるので以下の表にまとめておきます!
//条件aと条件bがあるとします。
論理演算子 | 例 | 意味 |
&& | a && b | aかつb(AND) |
|| | a || b | aもしくわb(OR) |
! | !a | aでない(NOT) |
switch文
最後に紹介するのがswicth文と呼ばれているもので、使うことが、たまにあるので、イメージだけ掴んでおきましょう!
switch文とは?
ちょうどいい例として、記事の頭の方で書いた、血液型占いのソースコードのif文をswitch文で書き直しましたのでコンパイルして、実行して見ましょう!
実行結果は、if文の時と同じになります。
それでは、switch文について説明をしていきます。まず、以下のコードを見てください。
switch (変数) { case 0: 変数が0の時に処理 break; case 1: 変数が1の時に処理 break; case 2: 変数が2の時に処理 break; case N: 変数がNの時に処理 break; default: caseに当てはまらない時に処理 break; }
これがswitch文の主な使い方です。
switch(変数)に対応するcase 変数: のところに処理が飛び、その処理が終了するとswitch文から抜けます。また、対応するcase 変数が存在しない場合は、1番下のdefault:というところの処理が実行されます。
if → else if → else という流れにとてもよく似てますね!
break
上記のcaseの中に、break文というものが毎回書いてあります。このbreakというのは、今いる関数を抜けるという意味です。
switch文の中の処理をしている場合は、switch文のをとまで飛びます。
まとめ
ここまで、コンパイル、変数、条件文分岐などを習得しました。実は、プログラミングは、順次、条件分岐、ループという3つの動作が使えれば理論上できないことはないと言われています。順次は、普通にコンパイルして、実行すること。条件分岐はこの記事で習得しました。
ということは、あと1つ記事を読み勉強をすれば、c言語のプログラミングで出ないことがなくなるのです。!!!
