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;

}


どうだっ

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も論理値1をもつので


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


も実行されます。


よってコンパイル結果は


らっこさん

かもしかさん


となります。


つまり


if(a>0){ }の論理式(条件式)a>0の判定の次に


{ }内の


if(a>8)命令文の論理式(条件式)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>0が1の値をもつので


if(a>0){ }の{ }の中の


printf("らっこさん\n");


if(a<-8){

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

}


の命令文が実行されることになり


次に{ }の中の


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

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

作者を応援しよう!

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

応援したユーザー

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