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とすればいいのですね。
何も表示されないということはなくなるので
これで
かもしかさんも、大安心です。」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます