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


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


腕がなるね。


#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)が複数の命令文に作用できるようにする場合のように


ブロック{}を


つかって


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


を囲わなくても


if(1)が1つの命令文にだけ作用する場合は


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


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


いいんだよ。


さらに


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


も1つの命令文とみなされるので


if(1) を


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



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


のように


くっつけることができます


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



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


このように


1つの命令文に


if(1)が作用する場合は


if(1){}のようにブロック{}をつかわなくても


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

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

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


のように


1つの命令文に



if(1)をくっつけることができます


ですので


このエピソードの一番最初のプログラムの


if (1) {

if (1) {

if (1) {

if (1) {

if (1) {

if (1) {

if (1)

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

}

}

}

}

}

}




1つの命令文


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



if(1){}


が作用していますが



if(1){}の


ブロック{}を省略して


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

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


と表記できるんだ


もちろん


1つの命令文とみなされる


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



if(1) {}


を用いて


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


のように


1つの命令文とみなされる


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



if(1){}で括って表記しても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(0)がはいってくると


プログラムの実行時


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

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


👇


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

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


👇


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

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


👇


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

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


👇


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

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


👇


if(0) if(1)

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


までは実行されますが


 if(0)のはたらきにより


if(0)から先の命令文


if(1)

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


は実行されないので


プログラムの実行結果は


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


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


マックス 「なんか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;

}


と同等です




さあ、これの実行結果はど・う・な・る・か・な?(^^)


かもしかちゃん?」


かもしかさん


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


ぴくぴくぴくっぴくぴく


がたがたがたっっ


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


大丈夫かい?」


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


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


いってごらん」


かもしかちゃん

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


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


アレサ 「大変です。 


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


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


          


          かもしか鍋になろう  


                    

                     

                     なんて・・・




ソーラー「じゃあ、僕が 


このプログラムの実行結果をよみとってみようかな 

👇

#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でいこう!


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


んん??


ちょっと


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


マックスとかもしかは


すでに


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


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


なあっ かもしかさんや😊」


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

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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