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()文の仕組みがわかってきたかな?」

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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