その1
「前のクォーターの科目の予習課題で調査してもらった,C89の予約語の中で,繰り返しに使用するのはdoとforとwhileです.次に,分岐に使用するのはifとelseとswitchです.
そのほか,制御構造と密接に関連する予約語として,break,continue,goto,returnがあります.
ところで,構造化プログラミングの三要素といえば,日本語訳にはいくつかバリエーションはありますが,『順接』『分岐』『繰り返し』です.
では順接を表すための予約語があるのか…というと,ありません.
プログラムコードを順に書けば,よいのです.
break,continue,goto,returnは,順接を実現するためのものではありません.順接を,意図的に崩すために使用します」
その2
「break文とcontinue文を,学習しましょう.
まず,break文は『break;』と書きます.switch文,for文,while文,do文のいずれかを実行している最中に,『break;』に出くわすと、各文の処理を終えることになります.
次に,continue文は『continue;』と書きます.繰り返しのfor文,while文,do文の中で,『continue;』に遭遇したら、繰り返しをやり直すことになります.
『やり直す』といっても,for文なんかで変数の値の初期化まで,やり直すわけではありません.
『break文は各文の処理を終える』『contnue文は繰り返しをやり直す』と言っても,分かりにくいです.そこで次のように考えるといいでしょう.
『break;』の後ろを見ていって,『}』を見つけます.switch文,for文,while文,do文のいずれかの処理に関する『}』であれば,この『}』の直後に,制御が移ります.『}』のすぐあとだから,switchの分岐処理にせよ,繰り返し処理にせよ,おしまいというわけです.
それに対し『continue;』も,同じように後ろを見ていって,『}』を見つけます.for文,while文,do文のいずれかの処理に関する『}』であれば,この『}』の直前に,制御が移ります.そして『}』ですので,forやwhileなら繰り返しのはじめに戻り,do-whileならwhileの条件判定となるわけです.
このようにしてソースコードを見ながら,制御,言い換えるとプログラムがどの順に実行していくか,を読む際には,関係のない『}』に惑わされないようにしましょう.ifやelseの『{』『}』は,break文・continue文に影響しません.『if (条件) { 何か処理があって,break; }』は,このifの処理のブロックを抜けるのではなく,それより外で最も内側の,switchまたは繰り返しのブロックを抜ける,ということなのです」
その3
「『構造』とは何か…『デジタル大辞泉』という辞書より,抜粋したいと思います.*1
意味の1番目は,『一つのものを作り上げている部分部分の材料の組み合わせ方。また、そのようにして組み合わせてできたもの。仕組み。』であり,用例としては『家の構造』『構造上の欠陥』などが書かれています.
このことを踏まえて,プログラムを読むときの心がけとして,次の3つに注意するといいでしょう.
まず,『1行または数行の処理のかたまりで,何を行うのか?』です.
そして,『分岐なら,どんな条件のときに,どこを実行するか?』です.
最後に,『繰返しなら,変数の値はどのように変化するか? いつ繰返し処理を終えるか?』ということです.
授業資料のプログラムを読むときだけでなく,自分でプログラムを書いてみて,実行する前に,これでいいのかと確認するときにも,読むことが不可欠です.
構造を意識して,よく読みよく書き,内容を理解しながら,プログラムを完成させましょう」
質問タイム
Q: break文やcontinue文を,「}」のないところで書いたら,どうなりますか?
A: プログラムコードを読むにあたっては,「{」「}」を補って,それから,該当する「}」の直後または直前に移る,と理解してください.
例えば以下は「{」「}」を使用していませんが適切なC言語のコードです.「{」と「}」を補ったらどうなるか,そして何を出力し,sumの値は最終的に何になるか,考えてみてください*2.
int i, sum = 0; for (i = 1; i <= 10; i++) if (i % 2 == 1) continue; else if (i <= 5) printf("Do nothing.\n"); else sum += i;
*1:https://www.weblio.jp/content/%E6%A7%8B%E9%80%A0
*2:補ってできるコード以外の答えを書いておくと,「Do nothing.」を2回出力し,sumの値は6+8+10で24になります.