C言語 if文で条件分岐に挑戦【超基本編】

プログラミング

 

今までは、演算子の種類や変換指定の機能など面倒くさい決まり事ばかりで、プログラムをしているという実感がなかったと思います。

 

しかし、今回はC言語のプログラムで最初にでる「THE・プログラミング」という感じの文を扱いって行きます。それは、

 

条件分岐(じょうけんぶんき)

 

条件分岐とは、その名の通り条件がわかれていることですが、プログラミングでは与えられて値を設定された条件のもと処理することです。

 

条件分岐の簡単な例を出すと、

「もし○○だったら~~しよう。でももし○○じゃなかったら、そのときはーーしよう」

という感じのものです。

これをC言語でこれからやっていきます。

 

どうですか?

いかにもプログラミングって感じだと思いませんか?

 

今回はif文を使った条件分岐を解説していきます。if文は単純で難しくなので安心してください。

 

if文の基本的な書き方

 

C言語で条件分岐のプログラムを作るには、いくつかの方法があります。今回はその中でifという関数を使って条件分岐をしていきます。

 

if関数は条件分岐をするときに使う関数で、その基本的な書き方は

 

if (  条件式 ) 処理文 ;

 

となります。

 

意味は、「条件式を満たすなら、処理文を実行する」となります。

 

順番に説明すると、まずカッコ内に書いてある条件式を見ます。そこに書いてある条件式を満たしていれば、その時は処理文を実行します。しかし、もし条件式を満たしていない場合は、処理文を実行せずにスルーします。

 

文字で見てもいまいちわかりにくいでしょう。

なので次は実際にプログラムを組んで、その働きを見ていきましょう。

 

if(イフ)文で「もし○○だったら~~する」

 

ここでは一番基本的な「もし○○だったら~~する」というプログラムを組んでいきます。

 

簡単な例にしたいので、「もし入力された値が正の値だったら、それは正の値ですと表示する」プログラムを書いていきたいと思います。

 

以下プログラム作成↓

 

プログラムの流れは、

変数に値を入力→値が正がどうか判断→正だったら「それは正の値です」と表示

という流れです。

 

 

ではまず、入力する値を格納するための変数を宣言します。今回は整数を扱いたいので、型はint、変数名は適当にaにします。すると

int a ;

と宣言できます。

 

次に、変数aに値を入力してもらう必要があります。これにはscanfを使って、

scanf(“%d”,&a);

と書きます。変換指定は整数を扱うので%dですね。

 

次に、if文を作ります。

if文には条件式と処理文がありました。今回の条件は「入力され値が正」なので、いいかえれば「入力された値の入った変数aが正」という条件です。なので、条件式は

a > 0

となります。このとき、上の文の > (だいなり)が分からない人は「C言語 覚えておきたいよく使う演算用語」の記事で、if文で使える演算子の基本的な種類をまとめているので確認してみてください。

 

次に、条件が満たされたときに処理する文を考えます。処理する文は「それは正の値です」と表示する文です。なのでprintfを使って

printf(“それは正の値です”);

と書きます。

 

つまりif文の全体は

if (a > 0)  printf(“それは正の値です”);

となります。

 

しかし、if文は条件式(今回でいうa>0の部分)のすぐ後の処理文を実行するという性質があるので、一般的にこういったif文のプログラムを書く時は見やすいように

if (a > 0)

printf(“それは正の値です”);

と書きます。上が条件式で、下を処理文というふうに分けています。

 

では以上を踏まえて実際にプログラムを書くと下のようになります。

 

実行結果は

まずは値を入力します。

5を入力しました。エンターを押すと

 

OKですね。

 

では今度は正の値ではなく、-5などの負の値を入れるとどうなるのか?条件式を満たさない場合ですね。先程の説明通りなら、何も起こらずスルーされます。実際にやってみると、

はい、負の値-5を入れました。すると

何も表示されず下の空間があいただけです。予想通りでしたね。

 

しかし、ここでこうおもった方はいませんか?

「値が正じゃないなら、そういってくれれば気が利くのに…」

 

当然です。

条件を満たしていないなら、満たしてないよと教えてくれば間違いに気が付きます。何も表示されないのはなんだか不気味ですよね。

 

よって次は「もし○○じゃなかったらーーする」というプログラムを追加してきます。

 

else(エルス)文で「もし○○だったら~~する。でももし○○じゃなかったら、そのときはーーする」

 

では、実際に条件式を満たさないときにそのことを表示するプログラムを組んでいきましょう。使うのは、else文です。エルスと呼びます。

 

書き方は

 

if (条件式) 処理文 ;

else 処理文 ;

 

です。このとき注意してほしいのが、else文はif文がないと書けないという点です。else文はif文を前提に作ることをよく覚えておいてください。また、else文ではその直後に存在する処理文を実行します。なので先ほどのif文でもやったように見栄えを意識して、一度改行してか書くのが普通です。

 

つまり、

else

処理文 ;

と書いたりするということです。

 

それでは実際に書いていきます。先程書いたif文のなかで、値が正じゃなかったら「その値は正じゃありません」と表示するプログラムです。そんなに難しくありません。先程書いたif文のすぐ下にelse文を少し足すだけです。

 

足すのは

else

printf(“その値は正じゃありません”);

です。

 

実際のプログラムは

 

実行結果は

 

OKですね。

 

とりあえずこれで、「入力された値が正か、そうでないか」を判断するプログラムは書けました。

 

では、これで条件分岐の理解は完璧でしょうか?

違いますよね。

 

今は「入力された値が正か、そうでないか」を判断するだけでよかったのですが、これを「入力された値が正か負か」を判断するプログラムを書こうとするとそうはいきません。

 

その問題は0にあります。

 

今までは入力した値が正か負の2通りしかありせんでしたが、0を入力したらどうなるでしょうか?結果は何も起こりません。正でもなく負でもない0を入力してもifとelse、両条件式のどちらにも合致しないので、スルーされます。これではいけません。

 

つまり問題は「0の時は正でも負でもありません」という処理文を追加しなければならないということです。

 

この時使うのがelse if文です。

 

else if でさらなる3通り以上の条件分岐

 

else ifといっても新しい構文というわけではありません。これはelse文の中にif文を入れた構造(入れ子)になっている文です。

 

どういうことかと言うと、先ほどelseの後には実行する処理文を書くと言いましたが、その処理文にあたる部分にif文という文を書くということなのです。

 

 

書き方は

 

else if ( 条件式 )  処理文 ;

 

となります。else if文も直後にある文を処理文として実行します。なので、処理文を改行して書いてもかまいません。

 

 

通常のif文では、if→else if→else、という順番で処理をしていくことになります。ifでまず最初の条件を見て、もし条件を満たさなかったら次にelse ifの条件式を見て、それも満たさなかったら最後にelseにかいてある処理文を実行するという流れです。

 

では実際にこのelse ifを使って「入力された値が正か負か」を判断するプログラムを書いていきます。このとき、もし0が入力されたら「正でも負でもありません」と表示します。

 

 

では書きます。

 

実行結果は

 

出来ていますね。

このプログラムは、最初に正かを見て、次に負かを見て、最後に正でも負でもないならそれは0だ、という考えを使って書いたものです。なのでこの考え方が違うと、また違ったプログラムが書けます。

 

 

例えば、

最初に0かを判断して、そのあとに正か負かを判断するプログラムを作りたいなら、

 

 

if (a==0)

printf(“その値は正でも負でもありません”);

else if (a>0)

printf(“それは正の値です”);

else

printf(“それは負の値です”);

 

 

このように書くこともできます。(条件式で等しいという意味での=を使うときは==

と書きます)

 

また、else ifはifとelseの間であればいくつでも使うことが出来ます。3つ以上の条件分岐をしたいときは、このようにしてelse ifでつなげていく形になります。

 

以上が基本的な条件分岐 if 文の解説でした。

次回はif文の入れ子についてもう少し詳しく書いていきます。

では。

コメント