さあ、面白問題の登場です break;がfor文のブロック{}内のブロック{}内で用いられたプログラムを実行してみます どのような実行結果がえられるでしょうか?

次の問題にチャレンジ 😊break;😊が実行された時点で break; が含まれている for文の実行は終了となります


次の問題にチャレンジ 😊break;😊が実行された時点で ブロック{}内に break; が含まれている for{}文の実行は終了となります



ソーラー「さあ 次のプログラムでは


for{}文のブロック{}内で


break;


が用いられていますが


どのようなビルド実行結果が


コマンドプロンプト画面に表示されるかな?」


マックス「for{}文のブロック{}内で


break;


もう簡単😸 簡単😺


どんとこい」



そのプログラムはこちらです

👇

#include <stdio.h>


int main(void) {


int i;


for (i = 0; i<3; i++) {


if (1) {


break;


}


printf("%d\n", i);



}


return 0;

}


マックス「なぁ~んだ


簡単じゃないか


まず


int i;


の実行により


変数iが生成されるだろう


そして

iに0が代入された


i=0


の場合の


1回目のfor{}文の繰り返しが実行される


まず

👇

for (i = 0; i<3; i++) {


if (1) {


break;


}


printf("%d\n", i);


}

👆

内の




if (1) {


break;


}


が実行されるんだろう


if (1)は()内に1が記述されているので


if (1)につづくブロック{}内の命令文が実行されることになる



となると


break;


が実行されるわけだが


if (1) {


break;


}



break;


が実行された時点で


if (1) に続くブロック{}内


の命令文の実行は終了となるわけだ




if (1) {


break;


}

に続く命令文


printf("%d\n", i);


が実行されるのだが


1回目のfor{}文の繰り返しでは


iに0が代入されているので


コマンドプロンプト画面に


0


が表示される・・・


(👆間違っています💖)


次に


iに1が代入された


i=1


の場合の


2回目のfor{}文の繰り返しが実行される


まず

👇

for (i = 0; i<3; i++) {


if (1) {


break;


}


printf("%d\n", i);


}

👆

内の




if (1) {


break;


}


が実行されるんだろう


if (1)は()内に1が記述されているので


if (1)につづくブロック{}内の命令文が実行されることになる


となると


break;


が実行されるわけだが


if (1) {


break;


}



break;


が実行された時点で


if (1) に続くブロック{}内


の命令文の実行は終了となるわけだ



if (1) {


break;


}


に続く命令文


printf("%d\n", i);


が実行されるのだが


2回目のfor{}文の繰り返しでは


iに1が代入されているので


コマンドプロンプト画面に


1


が表示される・・・



次に


iに2が代入された


i=2


の場合の


3回目のfor{}文の繰り返しが実行される


まず

👇

for (i = 0; i<3; i++) {

if (1) {


break;


}


printf("%d\n", i);


}

👆

内の


if (1) {


break;


}


が実行されるんだろう


if (1)は()内に1が記述されているので


if (1)につづくブロック{}内の命令文が実行されることになる


となると


break;


が実行されるわけだが


if (1) {


break;


}



break;


が実行された時点で


if (1) に続くブロック{}内


の命令文の実行は終了となるわけだ



if (1) {


break;


}


に続く命令文


printf("%d\n", i);


が実行されるのだが


3回目のfor{}文の繰り返しでは


iに2が代入されているので


コマンドプロンプト画面に


2


が表示される・・・


そして


i++の働きにより


iに格納されている値は3から4になる


i=4


の場合は


👇

for (i = 0; i<3; i++) {


if (1) {


break;


}


printf("%d\n", i);


}

👆

内の


条件式


i<3;


のはたらきにより



for{}文のブロック{}内の命令文の繰り返しは実行されない


結果


コマンドプロンプト画面に


1

2

3


が表示される!


簡単すぎるぅ」


ソーラー「そうですね


それでは実際にプログラムを実行してみたいと思います



それでは例題のプログラムを実行!」


#include <stdio.h>


int main(void) {


int i;


for (i = 0; i<3; i++) {


if (1) {


break;


}


printf("%d\n", i);


}


return 0;

}


プログラムの実行結果


(何も表示されません)



👇解答者の反応はこちらです


マックス「なんっでぇぇ


何も表示されんん


ど~いうこと?


ど~いうこと?」


ソーラー「それでは順をおってプログラムをみていきます


まず


int i;


の実行により


変数iが生成されます


そしてiに0が代入された


i=0


の場合の


1回目のfor{}文のブロック{}内の命令文の繰り返しが実行されることになりますね



まずは

👇

for (i = 0; i<3; i++) {


if (1) {


break;


}


printf("%d\n", i);


}

👆

内の


if (1) {


break;


}


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


if (1)は()内に1が記述されているので


if (1)につづくブロック{}内の命令文が実行されることになります



となると


break;


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


ここまではマックスの解説と全く同じですね


この


break;


が実行されると


if (1) {


break;


}

のif (1) {}のブロック{}内の


break;


につづく命令文の実行は終了~😊


となるのではありません


ほんの少しいいかえると


if (1) に続くブロック{}内


の命令文の実行が終了となるのではありません


つまり


if (1) {


break;


}



if (1) に続く if (1){}(ブロック)内から


抜け出して


if (1) {


break;


}



に続く命令文


printf("%d\n", i);


が実行されるのではありません


              😊break;😊


が実行された時点で


break;


が含まれている


           😊for{}文全体の実行自体が終了😊




となるんです


break;



実行されると


for{}文のブロック{}内の命令文の実行途中でも


for{}文のブロック{}内から抜け出して


👇

for (i = 0; i<3; i++) {


if (1) {


break;


}


printf("%d\n", i);


}

👆


for{}文に続く次の


命令文への実行へと移っていくんです」



マックス「なんと



              😊break;😊

には


              😊break;😊


が実行された時点で


break;


が含まれている


           😊for{}文全体の実行自体を終了😊


させる働きがあったのか


おお これは 知らんかったな」


ソーラー「i=0 の場合の


for{}文の1回目の繰り返しにおいて



              😊break;😊


が実行された時点で



for (i = 0; i<3; i++) {


if (1) {


break;


}


printf("%d\n", i);


}


自体の実行が終了されるので


if (1) {


break;


}


につづく


printf("%d\n", i);


が実行されるようなこともなく


コマンドプロンプト画面には何も表示されないというわけです



もちろん


           😊for{}文全体の実行自体が終了😊


するので


iに1が代入された2回目のfor{}文の繰り返しが実行されるようなこともないってわけだね」


マックス「そういう仕組みだったのか


break;


は強い働きをもつんだな」

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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