if文ネスト(入れ子)多重構造をよみとってみよう  その3 0.1

ソーラー 「ここで、ソーラー精密工業の出番かな。


腕がなるね。


#include <stdio.h>

int main(void){

if(1)

{ if(1)

{ if(1)

{ if(1)

{ if(1)

{ if(1)

{ if(1)

printf("お花見にいこう!\n");

}

}

}

}

}

}

return 0;

}


から


かもしかさんにたべられ


#include <stdio.h>

int main(void){

printf("お花見にいこう!\n");

return 0;

}

👆

ここまでシンプルになったプログラムを


今 再び・・・・・


あらたなプログラム


#include <stdio.h>

int main(void){

if(1) if(1) if(1) if(1) if(1) if(1) if(1)

printf("お花見にいこう!\n");

return 0;

}

として


再復活させたんだよ。


命令文printf("お花見にいこう!\n");は


1つの命令文なので


if(1){ printf("お花見にいこう!\n"); } のように


if(1)が複数の命令文に作用できるように


ブロック{}を


つかって囲わなくても


if(1) printf("お花見にいこう!\n"); のように


if(1)を printf("お花見にいこう!\n"); にくっつけても


いいわけだよね。


if(1) printf("お花見にいこう!\n");


が1つの命令文なら


if(1) をくっつけた



if(1) if(1) printf("お花見にいこう!\n"); も


1つの命令文とみなされます。


このように


if(1){}をつかわなくても


さらに


if(1)if(1) if(1) printf("お花見にいこう!\n"); と


どんどん


if(1)をつけることができるので


上記の一番最初のプログラムは

ブロック{}を省略して


if(1) を次々とくっつけて


if(1) if(1) if(1) if(1) if(1) if(1) if(1)

printf("お花見にいこう!\n"); と表記できるんだ


もちろん今までのように


if(1) if(1) printf("お花見にいこう!\n");



if(1) {if(1) printf("お花見にいこう!\n"); }


とブロック{}で括って表記してもOKだね!


コンパイル結果はもちろん


お花見にいこう!だね。」


アレサ 「


この命令文

if(1) if(1) if(1) if(1) if(1) if(1) if(1)

printf("お花見にいこう!\n");


において

if(1) if(1) if(1) if(1) if(1) if(0) if(1)

printf("お花見にいこう!\n");



if(1) if(0) if(1) if(1) if(0) if(1) if(1)

printf("お花見にいこう!\n");


のように


途中で if(0)がはいってくると 


if(0)から先のプログラムは実行されないので


コンパイル結果は


お花見にいこう!ではなく


なにも表示されなくなるのですね。」


マックス 「なんかif文のネスト構造に慣れてきたな


ではここで問題だ~~~~はっは。


かもしかさん?用意はいいか?」


かもしかさん

「みゅう

(もちろんOK!)」


マックス「今まではif文ネスト構造をつくってきたが・・・


なら、これはどうかな?


今度は・・・つくるだけでなく


つくったif文ネスト構造・・・


よみとれるかな?


#include <stdio.h>

int main(void){


if(1){ printf("PS1でいこう!\n");

if(1){ printf("PS2でいこう!!\n");

if(1){ if(1) printf("PS3でいこう!\n");

}

}

}

return 0;

}


さあ、これのコンパイル結果はど・う・な・る・か・な?(^^)


かもしかちゃん?」


かもしかさん


「みゅっみゅみゅうぅぅぅっぅ」


ぴくぴくぴくっぴくぴく


がたがたがたっっ


ソーラー 「大変だっ かもしかちゃんが痙攣してます


大丈夫かい?」


かもしかちゃん 「みゅみゅう・・・」


ソーラー 「なになにっかもしかちゃん?


いってごらん」


かもしかちゃん

「あらっこんな~ところに かもしかが~~~


たまね~ぎ~たまねぎ あったわね~~~」


アレサ 「大変です。 


みずから かもしか鍋になろうとしています。


かもしかさん・・・ここまでがんばってきたのに


          


          かもしか鍋になろう  


                    

                     

                     なんて・・・




ソーラー「じゃあ、僕が 


このプログラムから

👇

コンパイル結果をよみとってみようかな 


#include <stdio.h>

int main(void){


if(1){ printf("PS1でいこう!\n");

if(1){ printf("PS2でいこう!!\n");

if(1){ if(1) printf("PS3でいこう!\n");

}

}

}

return 0;

}


このif文ネスト構造では


まずっ


いつもどおり


int main(void){        return 0;}をはずしてみると


命令文

if(1){ printf("PS1でいこう!\n");

if(1){ printf("PS2でいこう!!\n");

if(1){ if(1) printf("PS3でいこう!\n");

}

}

}

が残るよね


この命令文のコンパイル結果を知りたぁ~~~~~い


そのときは

この命令文のようにかぎ括弧{ }が上下に3つ並んでいるときは


if(1){ ・・・かぎ括弧1 

if(1){ ・・・かぎ括弧2 

if(1){・・・かぎ括弧3

} ・・・かぎ括弧3

} ・・・かぎ括弧2

} ・・・かぎ括弧1


まず

一番先頭の{

一番最後の}


のかぎ括弧1のペアにに注目してみよう。



どうかな?


そおう、


一番先頭と一番外側の

if(1){   } ・・・かぎ括弧1のペアに


命令文

printf("PS1でいこう!\n");

if(1){ printf("PS2でいこう!!\n");

if(1){ if(1) printf("PS3でいこう!\n");

}

}

は囲まれているんだ。


だから

if(1){   } ・・・かぎ括弧1で


if(1)のように


if文の()の中の論理式が真の値1をもつと


if(1){   } ・・・かぎ括弧1


の{   } 内の命令文が実行される


ことになり

。。。。。。。。。。。。。。。。。。。。。

if(1){printf("   ");}ならif(1){    }がはずれ


printf("   ");の命令文を実行されること


になるように

。。。。。。。。。。。。。。。。。。。。。。

if(1){    }がはずれ


命令文

printf("PS1でいこう!\n");

if(1){ printf("PS2でいこう!!\n");

if(1){ if(1) printf("PS3でいこう!\n");

}

}

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


ここで

printf("PS1でいこう!!\n");


はif文でないので


無条件で実行され


PS1でいこう!がコンパイル結果に表示されます。


printf("PS1でいこう!\n");


が実行されたあとは


命令文


if(1){ printf("PS2でいこう!!\n");

if(1){ if(1) printf("PS3でいこう!\n");

}

}


が残ることになります。


この命令文も一番外側のif(1){     }


のかぎ括弧セットに


命令文

printf("PS2でいこう!!\n");

if(1){ if(1) printf("PS3でいこう!\n");

}


は囲まれていて


一番外側のif(1){   }のかぎ括弧セットの


if(1)の()の中の論理式が真の値1をもつので


一番外側のif(1){   }のかぎ括弧セット内の


printf("PS2でいこう!!\n");

if(1){ if(1) printf("PS3でいこう!\n");

}


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




ここで

printf("PS2でいこう!\n"); はif文でないので


無条件で実行され


PS1でいこう!につづいて


PS2でいこう!!が


コンパイル結果に表示されます。


いままでの命令が実行されると


コンパイル結果


PS1でいこう!

PS2でいこう!!


となっているはずです


さらに


printf("PS2でいこう!!\n");


が実行されたあとは


命令文


if(1){ if(1) printf("PS3でいこう!\n");

}


が残ることになります。


ここでも一番左のif(1)の論理式が1の値をもつので


if(1){   }のカッコ内の命令文が実行されることとなり


命令文


if(1) printf("PS3でいこう!\n");


が実行されます。


そして、ここでもif(1) の( )内の論理式が1の値をもつので


if(1)につづく命令文


printf("PS3でいこう!\n");


が実行されることになり


PS1でいこう!

PS2でいこう!!


につづき

PS3でいこう!



コンパイル結果に表示され


コンパイル結果


PS1でいこう!

PS2でいこう!

PS3でいこう!


がコマンドプロンプト画面に表示されます。


んん??


ちょっと


マックス  なにやってるんですか・・・?」


マックスとかもしかは


すでに


なかよく かもしか鍋にはいっている。


マックス 「いやあ かもしか鍋もいいもんだなあ


なあっ かもしかや」


かもしかさん 「きゅえ~~」

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

作者を応援しよう!

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

応援したユーザー

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