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でいこう!
がコマンドプロンプト画面に表示されます。
んん??
ちょっと
マックス なにやってるんですか・・・?」
マックスとかもしかは
すでに
なかよく かもしか鍋にはいっている。
マックス 「いやあ かもしか鍋もいいもんだなあ
なあっ かもしかさんや😊」
かもしかさん 「きゅえ~~😊」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます