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


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;


より


100>20


となり


真の値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 命令文のプログラムと違い


else if( ) 命令文;



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


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;


により


まず10が


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


後は そのa=10が


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


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


さあ、いきます。


最初の


if(a>20)

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


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


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


となり


if(a>20)に続く命令文

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

は実行されません。


となるとどのようなことがおこるのか?ですね


if(a>20)

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

のあとに

else if(a>18)

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


が続いていますね


elseがポイントです


if(a>20)に続く命令文

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

は実行されない


そこで


そのかわりに(else)


if文である


if(a>18)

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


の実行に移ることになります


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


この場合も


a=10であることにより


if()の()内の論理式は10>18 =0の値を持つこと


となり


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

は実行されません


そこで


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


if(a>8)

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


の実行に移るわけですが


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


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


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


アレサ 「まあっかわいい


この場合は


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


10>8 =1となるので


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


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


となり

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

は実行されません。


そこで


そのかわりに(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をもつので


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


が実行されるように思われますが


実行されません。


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


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


今のプログラム


の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命令文;


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


この場合は

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の値をとるため


論理式

a>20


は論理値0の値をもつことになります


ですので


if(a>20)に続く命令文

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

は実行されません


その代わりにelse

if(a>100)

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


が実行されることになるのですが・・・



else if(a>100)に続く命令文

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


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



int a=10;


により


a=10の値をとるため


論理式

a>100


は論理値0の値をもつことになります


ですので


else if(a>100)に続く命令文

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



実行されません。


となると


else if(a>10000)

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


の実行に移るわけですが


やはり


a=10の値をとるため


a>10000は論理値0の値をもつことになり


if(a>10000)に続く命令文

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

は実行されません。


ここで


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


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


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


は実行されることになります



#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で共有
  • はてなブックマークでブックマーク

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る