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