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

次の関数 isPal は、文字列型の配列 s の文字の並びが前から読んでも後ろから読んでも同じ(回文)なら true を返す。配列の要素番号は1から始まる。プログラム中の【a】に入れる字句はどれか。

○論理型: isPal(文字列型の配列: s)
  整数型: n ← sの要素数
  for (i を 1 から n ÷ 2 まで 1 ずつ増やす)
    if (s[i] ≠ s[【a】])
      return false
    endif
  endfor
  return true
  1. An − i + 1
  2. Bn − i
  3. Cn + i − 1
答えと解説を見る

正解:A. n − i + 1

i 番目の文字は、後ろから i 番目の文字と比べます。後ろから1番目は s[n]、2番目は s[n − 1] なので、後ろから i 番目は s[n − i + 1] です。比べるのは前半だけで十分で、n = 5 なら n ÷ 2 = 2.5 なので、i = 1、2 について s[1] と s[5]、s[2] と s[4] を比べます(真ん中の s[3] は比べる必要がありません)。n − i にすると1つずれ、回文の「level」でも s[1] の「l」と s[4] の「e」を比べて false を返します。

  • A. 正しい。i = 1 のとき s[n]、i = 2 のとき s[n − 1] と、後ろから i 番目の文字を指します。
  • B. 1つずれて、後ろから i + 1 番目の文字と比べてしまいます。回文の「level」でも false になります。
  • C. i = 2 で s[n + 1] となり、配列の範囲を超えてしまいます。
この分野を解く 分野ページへ

関連する計算ツール

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

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

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

  1. ÷ は除算で、整数型の変数(引数を含む)に代入するときは小数点以下を切り捨てる。次の関数 f を f(9087) として呼び出したときの戻り値はどれか。
  2. ÷ は除算で、整数型の変数(引数を含む)に代入するときは小数点以下を切り捨てる。次の関数 toBin を toBin(12) として呼び出したときの戻り値はどれか。
  3. 2つの整数 a、b を引き算で等しくしていく次のプログラムを実行した後の k の値はどれか。
  4. 次の関数 isLeap は、西暦 y 年がうるう年なら true を返す。and は or より先に計算する。isLeap(y) が true を返す y はどれか。
  5. ÷ は除算で、整数型の変数(引数を含む)に代入するときは小数点以下を切り捨てる。次の関数 pow を pow(2, 10) として呼び出したとき、pow が呼ばれる回数(最初の呼出しを含む)はどれか。