if 命令文;else命令文;とif 命令文;else if 命令文;の違いを観察してみましょう。

アレサ 「マックスさんたち帰ってこないです・・・


くすっ


どうやらC言語畑は大豊作、大量収穫できているようです。


二人が収穫している様子が想いうかんできます。


では、私たちもC言語整備を進めてまいります、


先ほどのif文


if(1)命令文;

if(0)命令文;



if( )の( )内の論理式の値1,0に応じて


if(1)の場合 if(1)に続く命令文を実行する


if(0)の場合  if(0)に続く命令文を 実行しない


というシステムのプログラムでした。


では


if( ) 命令文;

のあとに

else 命令文;


が続く

😾 if( ) 命令文;

else 命令文;😺


とはどのような構造を持つ


プログラムなのでしょうか?


この else  という単語は丸っこくてかわいらしい・・


と私はおもいますの・・・


if文がif( )命令文; という形式で


( )内の論理式の1,0の値によって


if( )につづく命令文を実行するか


しないかをあらわすだけなのに対し



if( ) 命令文;

else 命令文;



英語elseが(かわりに)という意味からもわかるように


if( )につづく命令文が実行されないときは


かわりに


elseのあとにつづく別の命令文を実行せよ


という仕組みになっています。


elseさんの活躍しどころです。


それでは すこしだけですが



if( ) 命令文;

else 命令文;


を使った次の2つのプログラムを観察してみましょう。


#include <stdio.h>


int main(void){

int a=100;

if(a>20)

printf("らっき~\n");

else

printf("む~に~\n");


return 0;

}


コンパイル結果


らっき~


このプログラムではif(a>20)のなかの


論理式a>20が


int a=100;


より真の値1をもつため


命令文printf("らっき~\n");


が実行され


コンパイル結果


らっき~


となり


かわりのelse以下の命令文は実行されません。


もうひとつ別のプログラムはいかかでしょうか?


#include <stdio.h>


int main(void){

int a=100;


if(a<20)

printf("らっき~\n");

else

printf("む~に~\n");


return 0;

}


コンパイル結果


む~に~


if(a<20)のなかの


論理式a<20がa=100より偽の値0をもつため


if(a<20)に続く


命令文printf("らっき~\n");


は実行されず


かわりに


else以下の命令文


printf("む~に~\n");


が実行され


コンパイル結果は


む~に~


となります。


こんこん


アレサ 「あれ、どなたさまでしょうか?」


とことこっ とこっ


アレサ 「あっ鹿っ カモシカさんです。


カモシカさんが


この理想郷C言語界にやってこられました。」


カモシカさん 「くう~ん」


アレサ 「はい、よしよし この int人参をあげますからね。」



まるで絨毯のようにおおわれている


ふっかふっかの毛なみをなでてみる。



カモシカさん 「きゅい、くぃ~ん」


カモシカさんはうれしそうになついてくる。


アレサ 「最近の C言語の世界では


カモシカさんも生息しているようです。


いい時代になったと思います。


ここで


if 命令文;

else if 命令文;

もいっしょに登場です。


先ほどのプログラムでは


elseのあとは


else

命令文;


と普通に命令文だけがかかれており


最初のif文が実行されなければ無条件に


else以下の命令文が実行されるのでした。


ではカモシカさんさん。」


カモシカさん 「みゅ~~~~(はい)(^^)」


アレサ

「次のプログラムはどのような構造になっているのでしょうか?


一緒にみていきましょうよ。」


カモシカさん 「みゅみゅ(はい)」


#include <stdio.h>


int main(void){

int a=10;


if(a>20)

printf("らっき~\n");

else if(a>18)

printf("あっき~\n");

else if(a>8)

printf("りっき~\n");

return 0;

}


コンパイル結果


りっき~



アレサ「


このプログラムでは


さきほどのプログラムとちがい


単純な

if 命令文;

else 命令文;

でなく


elseのあとにif( ) 命令文;

が続き


if 命令文;

else if( ) 命令文;


となっていますね。


この仕組みもとても簡単です


最初のif命令文;


if(a>20)

printf("らっき~\n");

が実行されなければ


プログラム


else if(a>18)

printf("あっき~\n");


を実行せよ。


つまり


先ほどのプログラムでは


elseのあとに普通の命令文がつづいたのが


今度のプログラムでは


elseのあとに


普通の命令文の代わりにif 命令文;


がつづいています。


if 命令文がつづくので


先ほどの単純なelse 命令文のプログラムと違い


必ず実行されるというわけでなく


if()の中の論理式の値によっては


実行されたり


実行されなかったりします。


ではプログラムの流れをみていきましょう。」


#include <stdio.h>


int main(void){

int a=10;


if(a>20)

printf("らっき~\n");

else if(a>18)

printf("あっき~\n");

else if(a>8)

printf("りっき~\n");

return 0;

}


コンパイル結果


りっき~


アレサ「


int a=10;


により


まずa=10が


作製された変数aに格納されます。


後は そのa=10が


if()の()内の論理式に代入され


if( )文が実行されるか実行されないかが決まって行きます。


さあ、いきます。


最初の


if(a>20)

printf("らっき~\n");


はa=10であることにより


if()の()内の論理式は10>20 =0


となりif文は実行されません。


そこで


そのかわりに(else)


if文である


if(a>18)

printf("あっき~\n");


が実行されるかどうかということですね。


この場合も


a=10であることにより


if()の()内の論理式は10>18 =0


となりif文は実行されません


そこで


そのかわりに(else) (笑)


if(a>8)

printf("りっき~\n");

が実行されるかどうかということですね。


カモシカさん、いかがですか」


カモシカさん 「みゅ~、みゅ~」


アレサ 「まあっかわいい


この場合は


a=10でif()の()内の論理式は


10>8 =1となり


if文につづく命令文


printf("りっき~\n");


は実行され


コンパイル結果


りっき~が表示されます。


よかったです。


カモシカさんも安心しておられます。


カモシカさん・・・え~っと、なになに・・


ふんふん・・・


今のプログラム


#include <stdio.h>


int main(void){

int a=10;


if(a>20)

printf("らっき~\n");

else if(a>18)

printf("あっき~\n");

else if(a>8)

printf("りっき~\n");

return 0;

}


else if(a>18)

printf("あっき~\n");

else if(a>8)

printf("りっき~\n");

else if(a>8)

printf("あっき~\n");

else if(a>5)

printf("りっき~\n");


と書き換えたプログラム


#include <stdio.h>


int main(void){

int a=10;


if(a>20)

printf("らっき~\n");

else if(a>8)

printf("あっき~\n");

else if(a>5)

printf("りっき~\n");

return 0;

}


はどのように表示されるか・・・ですか・・・


この場合は


最初の


if(a>20)

printf("らっき~\n");


はa=10であることによりif()の()内の論理式は


10>20 =0


となりif文は実行されません。


そこで


そのかわりに(else) (笑)


if(a>8)

printf("あっき~\n");

が実行されるかどうかということですね。


この場合も先ほどのように


a=10でif()の()内の論理式は


10>8 =1


if(a>8)につづく命令文


printf("あっき~\n");


は実行されるので


ビルド実行結果は


あっき~


となります。



if()命令文;

else if() 命令文;

else if() 命令文;

において


途中でif()の条件にあった命令文が実行されると


それ以降のelse if()文は


if()内の論理式が真の値1をもっていても実行されません。


ですので


else if(a>8)

printf("あっき~\n");


につづく命令文


else if(a>5)

printf("りっき~\n");



if(a>5)がa=8より真の値1をもつのですが


実行されません。


カモシカさん 「くう~んん もぐ、もぐ」


アレサ「はい、かもしかさん???


今のプログラム


の3つ目のif文


else if(a>5)printf("りっき~\n");の


if(a>5)をたべちゃった・・と


どれっ、どれ(^^)/


#include <stdio.h>


int main(void){

int a=10;


if(a>20)

printf("らっき~\n");

else if(a>8)

printf("あっき~\n");

else

printf("りっき~\n");

return 0;

}


else if(a>5)がelseだけになりました。


このプログラムのように


よく


if 命令文;

else if命令文;

else if命令文;

else if命令文;

else if命令文;


のプログラムで最後のelse if命令文;



ifが省略され


if 命令文;

else if命令文;

else if命令文;

else if命令文;

else命令文;


となっているものをみかけます。


この場合は


 🐦前の行の

どのif()命令文も論理式1の値をもたず実行されなかった場合🐦

  

  🌳一番最後のelse以下に続く命令文が実行されます。🌳



つまり


いままでのパターンでは


前のif 命令文が実行されれば


そのあとの


elseにつづく if命令文が実行されるということはありませんでした


同様に


前のif 命令文が実行されれば


そのあとの


else につづく命令文も実行されません。


次のプログラムをご覧ください」


#include <stdio.h>


int main(void){

int a=10;


if(a>20)

printf("らっき~\n");

else if(a>2)

printf("あっき~\n");

else

printf("りっき~\n");

return 0;

}

コンパイル結果


あっき~


アレサ「このプログラムでは


int a=10;


より


a=10の値を持つので


if(a>20)の論理式a>20は


10>20=0となることにより


if(a>20)

printf("らっき~\n");


は実行されません。


次に


if(a>2)の論理式a>2は


10>2=1となることにより


if(a>2)

printf("あっき~\n"); 


が実行されます。


そうなると


その次の行に記述された


elseのあとの


printf("りっき~\n");


は実行されません。


では


次のプログラムではどのような


ビルド実行結果がえられるでしょうか?


最後の命令文が


else 命令文;


でなく


else if()命令文;


となっています


この場合


最後の命令文


else if()命令文;


が実行されるかどうか


ということになりますが


それ以前の


if文が実行されていたなら


最後の命令文


else if()命令文;


は実行されません。


それ以前の


if文が実行されていなければ


最後の命令文


else if()命令文;


が実行されるかどうかは


最後の命令文


else if()命令文;


の()の中の条件式が0か1になるかによってきまります。


次のプログラムでは


最後の命令文


else if()命令文;


は実行されるのでしょうか?


はいっ(^^)


かもしかさんも うれしいですか(^^)


ではではっ(^^)」



#include <stdio.h>


int main(void){

int a=10;


if(a>20)

printf("かもしかさん\n");

else if(a>100)

printf("いのししさん\n");

else if(a>10000)

printf("りすさん\n");

return 0;

}



コンパイル結果は


なにも表示されません。


アレサ「


このプログラムでは


ビルド実行結果は


なにも表示されません。


if(a>20)

printf("かもしかさん\n");


else if(a>100)

printf("いのししさん\n");


の命令文は


int a=10;


により


a=10の値をとるため


実行されません。


となると


else if(a>10000)

printf("りすさん\n");


の実行に移るわけですが


やはり


a=10の値をとるため


実行されません。


ここで


else if(a>10000)のかわりに


elseとプログラムを記述すれば


#include <stdio.h>


int main(void){

int a=10;


if(a>20)

printf("かもしかさん\n");

else if(a>100)

printf("いのししさん\n");

else

printf("りすさん\n");

return 0;

}



コンパイル結果は


りすさん


になり


なにも表示されないということはありませんですの。


つまり


if文が実行されなかったときに


何かを表示させたい場合は


最後の命令文は


else ifではなくelseとすればいいのですね。

これで


かもしかさんも、大安心です。」





  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます