コンテンツにスキップ

宿題:C言語2#

C言語#宿題2

Homework 約30分 答え

SC言語の文に次のfor文を追加する.

for文の操作的意味を考えよ.

ソースコード
for (▲▲▲; ■■■; ▼▼▼) ●●●
// ▲:初期化
// ■:条件式
// ▼:カウンタ処理
// ●:本文

以下の書式をコピーして回答せよ.

   ▲▲▲
a  ■■■
   ???

ヒント:ジャンプ命令とジャンプ先ラベルの使い方がポイントである.while文の操作的意味を参考にすると良い.

回答フォーム

Answer

   ▲▲▲    // 初期化
a  ■■■    // 条件式
   JPZ b   // 条件式が偽になったらループ終了
   ●●●    // ループの本文
   ▼▼▼    // ループ後の後処理(i++等)
   JMP a   // ループの頭へ強制ジャンプ
b
最後にHLTしないように.プログラム全体の終了の意味です.

Q&A#

:口頭での解説はスキップ

誤字#

  • LDL 4 LDC 3 LDC 4 LDL 3
  • ポインタのスタック図のspの位置がずれている
  • 一方後置前置インクリメントの場合は,
  • 関数fが引数をつ場合に対しては

各種感想#

  • 関数呼び出し周りの大枠は想像できた
  • スタックがうまく出来てる
  • インクリメント演算子がない言語があることに驚いた

プログラミング言語の方が機械語よりも自由度が低いって考え方がなるほどってなった#

Good

自由度が高い・なんでもできる,は常に良いとは限らないということです.特に自由には責任が伴います.以下の話も全く同じです.

  • グローバル変数を使うべきではない
  • goto文はよくない

単項演算子はなぜコンパイラで振る舞いが変わるのか?#

C言語の定義の中には未定義箇所があるためです.なぜ未定義箇所があるのかは不明ですが,言語設計者が言語仕様にある程度の余地を残したかったとも言われています.