平成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