平成21年度春期 問7 / 80

平成21年度 春期 応用情報技術者試験 午前 問7

文字列を引数とする関数 len,first,butfirst を用いて,関数 comp を再帰的に定義した。comp("11", "101") を呼び出したとき,返されるものはどれか。

〔関数の定義〕

  • len(S):文字列Sの長さを返す。Sが空文字列のときは0を返す。
  • first(S):文字列Sの先頭の1文字のASCIIコードを返す。Sが空文字列のときはエラーを返す。
  • butfirst(S):文字列Sの先頭の1文字を除いた残りの文字列を返す。Sが空文字列のときはエラーを返す。
comp(A, B)
begin
  if len(A) = 0 and len(B) = 0 then return 0;
  if len(A) = 0 and len(B) ≠ 0 then return 1;
  if len(A) ≠ 0 and len(B) = 0 then return -1;
  if first(A) < first(B) then return 1;
  if first(A) > first(B) then return -1;
  return comp(butfirst(A), butfirst(B));
end

キーボード:1〜4 で解答 → 次の問題 ← 前の問題

正解と解説を見る

正解:ア

  • ア: −1
    正しい。comp("11", "101") では,先頭の文字がどちらも "1" で等しいので comp("1", "01") を呼び出します。ここで first("1")("1" のASCIIコード 49)> first("01")("0" のASCIIコード 48)となるので,−1 が返されます。

  • イ: 0
    誤り。0 が返るのは A と B が同時に空文字列になる(両者が等しい)場合です。2文字目で "1" と "0" の大小が決まるので 0 にはなりません。

  • ウ: 1
    誤り。1 が返るのは first(A) < first(B) の場合などです。2文字目は "1" > "0" なので 1 にはなりません。

  • エ: エラー
    誤り。空文字列に対して first や butfirst を呼び出す前に長さの判定で処理が終わるため,エラーにはなりません。


答え

ア: −1

出典:平成21年度 春期 応用情報技術者試験 午前 問7

平成21年度春期の他の問題