わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

日常生活の制御構造

 いきなりですが問題です.

 Cプログラミングの制御構造を,日常生活の問題解決に当てはめてみます.
 if文を使った例は,「財布にお金があったら,自動販売機でジュースを買う」と表せます.
 if~elseを使った例は,「15分で到着する必要があるなら,自転車に乗る.そうでないなら、徒歩で行く」です.
 同様にして,do文(do~while文とも言います)を使った例を,挙げてください.

 木曜日の授業の予習課題でした.水曜日の23:59に期限を設けて,木曜日に答案を回収し,200名ほどの答案を順に読んでいきました.
 授業ですが,制御文は,第3クォーターの科目で「if」「if~else」「while」「for」を教え,第4クォーターの科目では「do~while」「if~else if*1~else」「switch~case」とbreak文・continue文を知ってもらっています.
 フローチャートにすると,「do~while」は「(elseのない)if」と同じくらいに,構成要素が少ないのですが,学部のプログラミング授業や,個人的にいくつかの言語でコードを書いたり読んだりしている範囲で,do文は,if文やwhile文よりも,使用頻度が少ないように感じています.
 ただ,do文の使いどころ,より正確には,do~whileを使用することで,他の繰り返しの制御文よりも簡潔に書ける事例もあります.「0から開始して,char型のすべての値の10進・16進・2進表記を出力する」というのを,Cのプログラムにする場合,char x = 0;として宣言した変数を用いて「do { 処理 } while (++x);」と書けばいいのです.このループを抜けるのは,++xによりxに0が代入されるときです.授業の推奨環境では,xの値は0, 1, 2, ..., 127, -128, -127, ..., -1, 0と変化します.
 といったところで予習課題の解答…を,ここに書くわけにいきません.来年度も出題したいからです.
 なのですが,興味深い答案がありました.「自動販売機でジュースを買う.お金がまだあったら,もう1本買う」というものです.
 意図は分かるのですが,冷静になって読み直すと,この書き方では繰り返しになっていません.擬似コードで,「自動販売機でジュースを買う; if (お金がある) { 自動販売機でジュースを買う; }」のように表されます.
 正解例・誤答例を,テキストファイルに取りまとめてから,Teamsに投稿しました.

*1:動画視聴のあと,課題を解いてもらっています.動画について昨年度の使い回しはせず,授業日より前にナレーションを入れています.今年度は,第3クォーターの科目のある箇所で,「if else」と言うべきところを「else if」と言ってしまっていました.