平成25年秋期試験午後問題 問9

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】

問9 ソフトウェア開発(C)

次のCプログラムの説明及びプログラムを読んで,設問1~3に答えよ。

 二つの英単語を辞書順で比較する関数 diccmp を作成した。
 一般に,英大文字,英小文字,記号文字を含む英単語を一定の順に並べる方法として,次の例のように,文字列中の文字コード順に並べる方法の他に,英和辞典や書籍の欧文索引のような順序で並べる方法(以下,辞書順という)がある。
  • 例 4個の単語"A.M.","CPU","all"及び"best"を並べる方法
  •   文字コード順:"A.M."<"CPU"<"all"<"best"
  •   辞書順:   "all"<"A.M."<"best"<"CPU"
 検索などの場合は,英単語を辞書順に整列しておくと検索の効率がよく,精度も向上する。
 関数 diccmp は,英大文字,英小文字,"-"及び"."を含む二つの英単語の大小を辞書順で比較する。

〔プログラムの説明〕
 関数 diccmp は,二つの英単語の大小を辞書順で比較する。その引数と返却値は,次のとおりである。
引数:
word1,word2 英単語を格納した文字列
返却値:
負の値  word1 < word2 (例:"map"<"May")
0    word1 = word2 (例:"Mr."=“Mr.")
正の値  word1 > word2 (例:"U.S">"US")
  • 引数 word1 と word2 は,いずれも次の条件を満たしている。
    1. 各文字は,英大文字("A"~"Z"),英小文字("a"~"z"),"-"又は"."のいずれかである。英大文字と英小文字を合わせて,英字という。
    2. 文字列の長さは,1以上30以下である。
    3. 文字列の先頭の文字は,英字である。
    4. 文字列中の"-"及び"."の直前の文字は,英字である。
  • 辞書順での比較の方法は,次のとおりである。
    1. 各引数の文字列から,基本文字列と文字情報列を生成する。基本文字列とは,引数の文字列から英字だけを順に取り出して,大文字を小文字に変換した文字列である。文字情報列とは,基本文字列中の各文字に対応する6種類の文字情報(大文字,小文字,大文字"-"付き,小文字"-"付き,大文字"."付き,小文字"."付き)を表す情報の列である。ここで,"-"及び"."は,直前の英字に属する文字情報とみなす。
      pm09_1.png
    2. 各引数の基本文字列同士を関数 strcmp で比較し,異なっていれば,その返却値(負の値又は正の値)を返す。一致していれば,各引数の文字情報列同士を関数 strcmp で比較し,その返却値(0,負の値又は正の値)を返す。
    3. 6種類の文字情報について,その値の大小関係はプログラム中で定めている。
  • プログラム中で使用しているライブラリ関数の概要は,次のとおりである。
    isalpha(c):
    c が英字のとき0以外の値を返し,それ以外のとき0を返す。
    islower(c):
    c が英小文字のとき0以外の値を返し,それ以外のとき0を返す。
    strcmp(s1,s2):
    文字列 s1 と s2 を比較し,s1<s2のとき負の値を,s1=s2のとき0を,s1>s2のとき正の値を,それぞれ返す。
    tolower(c):
    c が英大文字のときその文字に対応する英小文字を返し,それ以外のときcを返す。
pm09_2.png

設問1

次の記述中の に入れる正しい答えを,解答群の中から選べ。

 引数 word1 の内容を"A.D.",word2 の内容を"ad-"として,関数 diccmp を実行した。関数 diccmp 中のreturn文を実行する時点で,attr1 の内容は"a",attr2 の内容は"b",rc の内容はcとなる。
a,b に関する解答群
  • 01
  • 02
  • 11
  • 22
  • 41
  • 42
  • 55
  • 66
c に関する解答群
  • 0
  • 正の値
  • 負の値
解答選択欄
  • a:
  • b:
  • c:
  • a=
  • b=
  • c=

解説

この設問の解説はまだありません。

設問2

次の記述中の に入れる正しい答えを,解答群の中から選べ。

 関数 diccmp を用いて,4個の単語 "CO","Co.","co-"及び"co." を相互に比較したとき,その大小関係は,dとなる。
d に関する解答群
  • "CO"<" Co."<"co-"<"co."
  • "CO"<"Co."<"co."<"co-"
  • "Co."<" CO"<"co-"<"co."
  • "co-"<"co."<"Co."<" CO"
  • "co."<"co-"<" CO"<"Co."
  • "co."<"co-"<"Co."<" CO"
解答選択欄
  • d:
  • d=

解説

この設問の解説はまだありません。

設問3

次の表1中の 入れる正しい答えを 解答群の中から選べ。

 このプログラムは,引数 word1 及び word2 がプログラムの説明中の(1)に示した条件①~④を満たしているものとして作成している。しかし,引数が条件を満たさない場合のプログラムの動作についても確認しておきたい。そこで,引数が条件を満たさない場合のプログラムの動作を,表1にまとめた。
 なお,文字列中の文字は,全て1バイト文字とする。
pm09_3.png
e に関する解答群
  • 空文字列として扱い,プログラムは正常に終了する
  • 配列に何も値を設定せずに比較をするので,予期できない結果となる
  • 配列の定義範囲外への書込みが発生するので,予期できない結果となる
  • プログラムが終了しない
f に関する解答群
  • 30個目の英字
  • 30個目の英字(直後の文字が"-"又は"."の場合はその文字)
  • 30文字目
  • 30文字目(30文字目が英字で31文字目が"-"又は"."の場合は31文字目)
g に関する解答群
  • その文字が"-","."以外の場合はその文字を無視するが,"-"又は"."の場合は配列の定義範囲外への書込みが発生するので,予期できない結果となる
  • その文字を無視する
  • 配列の定義範囲外への書込みが発生するので,予期できない結果となる
  • プログラムが終了しない
解答選択欄
  • e:
  • f:
  • g:
  • e=
  • f=
  • g=

解説

この設問の解説はまだありません。

Pagetop