if文ネスト(入れ子)構造をもったプログラムををつくって実行してみましょう
アレサ 「さあ、かもしかさん
マックスさんたちがC言語畑で収穫しているうちに
わたしたちもif文であそんでおこうっ
ね、かもしかさん」
カモシカ 「はうっ!!」
マックス 「あら、こんな~ところにかもしかがっ~~~」
ソーラー「めずらしい・・・どこから?」
アレサ 「マックスさん、ソーラーさんいらっしゃ~い
おはようございます。」
マックス 「りっぱな かもしかだなあ~(^^)」
アレサ 「つい、いましがたこられました。」
ソーラー「じゃあ、このint草を召し上がりなされ・・・」
カモシカ 「け~~ん!!」
マックス 「今、雉の声がきこえてきたような・・・」
ソーラー 「きのせいだよ、なあ カモシカさん」
カモシカ 「みゅう」
アレサ「ではつづきを始めてみます。
#include <stdio.h>
int main(void){
int a=20;
if(a>0)
printf("らっき~\n");
return 0;
}
プログラムの実行結果
らっき~
このプログラムは実行されると
if(a>0)の論理式a>0がa=20で真の値1をもつので
if(a>0)につづく命令文
printf("らっき~\n");
が実行されて
らっき~
が
コマンドプロンプト画面に表示されるのでしたね。
そして
次のプログラムのように
👇
#include <stdio.h>
int main(void){
int a=20;
if(a>0){
printf("らっこさん\n");
}
return 0;
}
プログラムの実行結果
らっこさん
👆
if(a>0)につづく命令文printf("らっこさん\n");
を
ブロック{ }でくくってもプログラムは実行されます。
if(a>0)
printf("らっこさん\n");
と
if(a>0){
printf("らっこさん\n");
}
は
どちらのif文も同じプログラムとして
コンピュータには認識されています。」
ソーラー 「うわあ~~すごいね。
ぼくらがいろいろ採集していた間に
ここまで進んでいたんだ」
マックス「いっいやあっ ちょっと大漁だったな・・・」
アレサ「うふふ
そのおみやげのC言語野菜と魚・・・
さっそくお供えさせていただきますの(^^)。
では このプログラム内の
if(a>0){
printf("らっこさん\n");
}
のif(a>0){ }のなかに
命令文printf("らっこさん\n");
に並んで
命令文
if(a>8){
printf("かもしかさん\n");
}
を追加してみると・・・
#include <stdio.h>
int main(void){
int a=20;
if(a>0){
printf("らっこさん\n");
if(a>8){
printf("かもしかさん\n");
}
}
return 0;
}
👆
プログラムは上記のようになります。」
ソーラー「??」
マックス「こういうことか?
#include <stdio.h>
int main(void){
int a=20;
if(a>0){
/*////////////////////////////////////////////////////////////*/
printf("らっこさん\n");
/*/////////////////////////////////////////////////////////////*/
/*////////////////////////////////////////////////////////////*/
if(a>8){
printf("かもしかさん\n");
}
/*/////////////////////////////////////////////////////////////*/
}
return 0;
}
どうだっ
if(a>0){}
のブロック{}内に
printf("らっこさん\n");
と
if(a>8){
printf("かもしかさん\n");
}
の二つの命令文が並んでいる。なあ」
ソーラー「
/*/////////////////////////////////////////////////////////////*/
なんて斬新な
コメント文の使い方なんだ~
/*/////////////////////////////////////////////////////////////*/
これで
printf("らっこさん\n");
と
if(a>8){
printf("かもしかさん\n");
}
の2つの命令文が
if(a>0){ }のなかに記述されているのがよりわかるね。
ねえ?
かもしかくん」
かもしかさん「きゅえ~~~~~」
アレサ「そうなんです。
このプログラムでは
if(a>0){ }の中に
命令文
printf("らっこさん\n");
と
命令文
if(a>8){
printf("かもしかさん\n");
}
が仲良くならんでいるのがわかります。
このif(a>0){}のブロック{}の中の二つの命令文
printf("らっこさん\n");
と
if(a>8){
printf("かもしかさん\n");
}
は
if(a>0){}の()内の論理式a>0が
int a=20;
より
20>0
と
論理値1をもつので
両方ともに実行されていきます。
printf("らっこさん\n");
が実行されたあとは
if(a>8){
printf("かもしかさん\n");
}
が実行されるという流れです。
そして
if(a>8)のa>0も
aの値が20をもつことにより論理値1をもつので
printf("かもしかさん\n");
も実行されます。
よって
プログラムの実行結果は
らっこさん
かもしかさん
となります。
つまり
if(a>0){ }の論理式(条件式)a>0の判定の次に
{ }内の
if(a>8){
printf("かもしかさん\n");
}
の論理式(条件式)a>8の判定が行われていくわけです。
このように
if文のなかにif文が入っているような構造は
🌳ネスト構造🌳
とよばれています。
ここで
次のプログラムのように
#include <stdio.h>
int main(void){
int a=20;
if(a>0){
/*////////////////////////////////////////////////////////////*/
printf("らっこさん\n");
/*////////////////////////////////////////////////////////////*/
/*////////////////////////////////////////////////////////////*/
if(a<-8){
printf("かもしかさん\n");
}
/*/////////////////////////////////////////////////////////////*/
}
return 0;
}
if文であるif(a>0){ }のなかに
if(a<-8)のif文が記されていたら
どのような実行結果になるでしょうか?
if文においてはif( )文の( )の中の論理式が0か1を
もつかどうかで命令文を実行するかどうかが判定されるので、
この場合 まず
if(a>0){ } において
int a=20;
により
aには20が代入されるので
論理式a>0が1の値をもつので
if(a>0){ }の{ }の中の
printf("らっこさん\n");
if(a<-8){
printf("かもしかさん\n");
}
の命令文が実行されることになります
まずはif(a>0){ }の{ }の中の
printf("らっこさん\n");
が実行されることになります
次にif(a>0){ }の{ }の中の
if(a<-8){
printf("かもしかさん\n");
}
においては
さきほどの論理式a>0=1とは関係なく
int a=20;より
論理式a<-8が0の値をもつので
if(0){
printf("かもしかさん\n");
}
となり
if(a<-8)
につづく
命令文printf("かもしかさん\n");
は実行されないというわけです。」
ソーラー 「つまりこのプログラムは
if(1){ 命令文; if(0)命令文;}のような構造になっていて
if(1)により{}内の
命令文; if(0)命令文;
が実行されることになる
命令文;
は実行されるけど
if(0)によりif(0)につづく命令文は実行されないんだね。
だから
printf("らっこさん\n");
が実行されても
printf("かもしかさん\n");
は実行されず
プログラムの実行結果は
らっこさん
になるっと😊
if()文の仕組みがわかってきたかな?」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます