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

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


腕がなるね。


#include <iostream>


using namespace std;


int main() {

if(1){

if(1){

if(1){

if(1){

if(1){

if(1){

if(1){

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

}

}

}

}

}

}

}

return 0;

}


から

🐈さんにたべられ



#include <iostream>


using namespace std;


int main() {


cout<<"お花見にいこう!\n";


return 0;


}


👆


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


今 再び・・・・・


あらたなプログラム


でで~ん


#include <iostream>


using namespace std;


int main() {


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


cout<<"お花見にいこう!\n";


return 0;


}


として


再復活させたんだよ。


命令文


cout<<"お花見にいこう!\n";は


1つの命令文なので


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


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


ブロック{}を


つかって


cout<<"お花見にいこう!\n";


を囲わなくても


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


のように


if(1)を直接


cout<<"お花見にいこう!\n"; にくっつけても


いいわけだよね。


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



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


そして


if(1) をくっつけた


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


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


このように


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


さらに


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


どんどん


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


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


ブロック{}を省略して


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


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


cout<<"お花見にいこう!\n";


と表記できるんだ


もちろん今までのように


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



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


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


ビルド実行結果はもちろん


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


てんC「


この命令文


if(1) 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) if(1)


cout<<"お花見にいこう!\n";



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


cout<<"お花見にいこう!\n";


のように


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


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


プログラムの実行結果は


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


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


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


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


🐈さん?用意はいいか?」


🐈さん


「ちゅう🐭/


(もちろんOK!)」


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


なら、これはどうかな?


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


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


よみとれるかな?


#include <iostream>


using namespace std;


int main() {


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


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


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


}

}

}

return 0;

}



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


🐈さん?


🐈さん?」



🐈さん

「ZZZZZZZZZ. . . . . .」


ソーラー 「🐈さん  熟睡しているようです・・・」


🐈さん 「みゃおお~ん・・・」


ソーラー 「なになにっ🐈さん?


いってごらん」


🐈さん


「みゃあああ~~~ん」



マックス「な、なんか、たのしそうだな・・・」


ソーラー「じゃあ、僕が 


このプログラムから


👇


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


#include <iostream>


using namespace std;


int main() {


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


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


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


}

}

}

return 0;

}


ソーラー「

このif文ネスト構造では


まずっ


いつもどおり


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




命令文


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

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

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

}

}

}


が残るよね


この命令文の実行結果を知りたぁ~~~~~い


そのときは


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


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

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

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


} ・・・かぎ括弧3

} ・・・かぎ括弧2

} ・・・かぎ括弧1


まず


一番先頭の{



一番最後の}


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



どうかな?


そおう、


一番先頭と一番外側の


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


命令文


cout<<"PS1でいこう!\n";


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


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

}

}


は囲まれているんだ。


だから


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


if(1)のように


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


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


の{   } 内の命令文が実行されることになります


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


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


cout<<"   ";の命令文が実行されることになります


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


すなわち


if(1){    }がはずれ


命令文


cout<<"PS1でいこう!\n";


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


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


}

}


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


ここで


cout<<"PS1でいこう!\n";


はif文でないので


無条件で実行され


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


cout<<"PS1でいこう!\n";


が実行されたあとは


命令文


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


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


}


}


が残ることになります。


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


のかぎ括弧セットに


命令文


cout<<"PS2でいこう!!\n";


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


}



囲まれていて


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


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


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


cout<<"PS2でいこう!!\n";


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


}


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


ここで


cout<<"PS2でいこう!!\n";

はif文でないので


無条件で実行され


PS1でいこう!につづいて


PS2でいこう!!が


プログラムの実行結果に表示されます。


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


プログラムの実行結果


PS1でいこう!

PS2でいこう!!


となっているはずです


さらに


cout<<"PS2でいこう!!\n";


が実行されたあとは


命令文


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


}


が残ることになります。


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


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


命令文


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


が実行されます。


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


if(1)につづく命令文


cout<<"PS3でいこう!\n";


が実行されることになり


PS1でいこう!

PS2でいこう!!

につづき


PS3でいこう!



プログラムの実行結果に表示され


プログラムの実行結果


PS1でいこう!

PS2でいこう!!

PS3でいこう!


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


どうかな🐈さん・・・?」


🐈さん「ZZZZZZZZZZ. . . . .


美味しいにゃ~ 」

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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