プログラミングの基礎(擬似言語のトレース)

要素数 n の配列 a から値 x を探し、見つかった要素番号を i に求める次のプログラムがある。配列の要素番号は1から始まる。and と or は、左側の式だけで結果が決まるときは右側の式を評価しない。【a】に入れる条件式のうち、x が a の中にないときに範囲外の a[n + 1] を参照してしまうものはどれか。

整数型: i ← 1
while (【a】)
  i ← i + 1
endwhile
  1. Aa[i] ≠ x and i ≦ n
  2. Bi ≦ n and a[i] ≠ x
  3. Cnot (i > n or a[i] = x)
答えと解説を見る

正解:A. a[i] ≠ x and i ≦ n

x が a の中にないと、i は n + 1 まで増えてから条件を判定します。i ≦ n and a[i] ≠ x では、左側の i ≦ n が false なので右側の a[i] は評価されず、範囲外を参照しません。not (i > n or a[i] = x) も、i > n が true の時点で or の結果が決まるので a[i] を評価しません。a[i] ≠ x and i ≦ n は、範囲を確かめる前に a[n + 1] を評価してしまいます。短絡評価に頼るときは、範囲の確認を左側に書きます。

  • A. 正しい。i = n + 1 のとき、範囲を確かめる前に a[n + 1] を評価します。
  • B. 左側の i ≦ n が false になると右側を評価しないので、範囲外を参照しません。
  • C. i > n が true になった時点で or の結果が決まり、a[i] は評価されません。
この分野を解く 分野ページへ

関連する計算ツール

プログラミングの基礎(擬似言語のトレース)の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

プログラミングの基礎(擬似言語のトレース)のほかの問題

  1. 実数型の値は IEEE 754 の倍精度(binary64)で表し、加算の結果は最も近い表せる値に丸める。次のプログラムを実行した後の c の値はどれか。
  2. クラス Counter は、インスタンスごとに整数型のメンバ変数 count(生成時は0)を持ち、メソッド inc() は自分の count に1を加える。次のプログラムを実行した後の x の値はどれか。
  3. クラス Counter は、インスタンスごとに整数型のメンバ変数 count(生成時は0)を持ち、メソッド inc() は自分の count に1を加える。Counter 型の変数には、インスタンスそのものではなく、インスタンスへの参照が入る。次のプログラムを実行した後の x の値はどれか。
  4. 次のプログラムで、x と y の値を入れ替えるつもりで2つの代入文を書いた。実行した後の x と y の値の組はどれか。
  5. 3つの変数の値を順に送る次のプログラムを実行した後の a、b、c の値の組はどれか。