![]()
平成25年 秋期 基本情報技術者 午後 問09
問09 C言語問9 次のCプログラムの説明及びプログラムを読んで,設問1〜3に答えよ。 二つの英単語を辞書順で比較する関数 diccmp を作成した。 一般に,英大文字,英小文字,記号文字を含む英単語を一定の順に並べる方法として, 次の例のように,文字列中の文字コード順に並べる方法の他に,英和辞典や書籍の 欧文索引のような順序で並べる方法(以下,辞書順という)がある。 例 4個の単語“A.M.”,“CPU”,“all”及び“best”を並べる方法 文字コード順:“A.M.” < “CPU” < “all” < “best” 辞書順: “all”< “A.M.” < “best”< “CPU” 検索などの場合は,英単語を辞書順に整列しておくと検索の効率がよく,精度も向上する。 関数 diccmp は,英大文字,英小文字,“-”及び“.”を含む二つの英単語の大小を 辞書順で比較する。 〔プログラムの説明〕 関数 diccmp は,二つの英単語の大小を辞書順で比較する。その引数と返却値は, 次のとおりである。
(1) 引数 word1 と word2 は,いずれも次の条件を満たしている。
A 文字列の長さは,1以上 30 以下である。 B 文字列の先頭の文字は,英字である。 C 文字列中の“−”及び“.”の直前の文字は,英字である。 (2) 辞書順での比較の方法は,次のとおりである。
![]() A 各引数の基本文字列同士を関数 strcmp で比較し,異なっていれば, その返却値(負の値 又は 正の値)を返す。一致していれば,各引数の文字情報列同士を 関数 strcmp で比較し,その返却値( 0 ,負の値 又は 正の値)を返す。 B 6種類の文字情報について,その値の大小関係はプログラム中で定めている。 (3) プログラム中で使用しているライブラリ関数の概要は,次のとおりである。
isalpha(c): c が英字のとき 0 以外の値を返し,それ以外のとき 0 を返す。 〔プログラム〕 #include <ctype.h> #include <string.h> int diccmp(char *, char *); void diccnv(char *, char *, char *); int diccmp(char *word1, char *word2) { int rc; char char1[31], char2[31], attr1[31], attr2[31]; diccnv(word1, char1, attr1); diccnv(word2, char2, attr2); rc = strcmp(char1, char2); if (rc == 0) rc = strcmp(attr1, attr2); return rc; } void diccnv(char *wordx, char *charx, char *attrx) { int ch, cpos, wpos; cpos = 0; wpos = 0; while (wpos < 30 && (ch = wordx[wpos++]) != '\0') { if (isalpha(ch)) { if (islower(ch)) { charx[cpos] = ch; attrx[cpos] = '0'; } else { charx[cpos] = tolower(ch); attrx[cpos] = '4'; } ch = wordx[wpos]; if (ch == '-' || ch == '.') { if (ch == '-') attrx[cpos] += 1; else attrx[cpos] += 2; wpos++; } cpos++; } } charx[cpos] = '\0'; attrx[cpos] = '\0'; }
設問1 次の記述中の
引数 word1 の内容を“A.D.”,word2 の内容を“ad-”として,関数 diccmpを実行した。
関数 diccmp 中の return 文を実行する時点で,attr1 の内容は
“ a,b に関する解答群 オ 41 カ 42 キ 55 ク 66
設問2 次の記述中の ![]()
関数 diccmp を用いて,4個の単語 “CO”,“Co.”,”co-”及び“co.”を相互に
比較したとき,その大小関係は, d に関する解答群 ウ “Co.”<“ CO”<“co-”<“co.” エ “co-”<“co.”<“Co.”<“ CO” オ “co.”<“co-”<“ CO”<“Co.” カ “co.”<“co-”<“Co.”<“ CO”
設問3 次の表1中の ![]() このプログラムは,引数 word1 及び word2 がプログラムの説明中の (1) に示した条件@〜Cを 満たしているものとして作成している。しかし,引数が条件を満たさない場合の プログラムの動作についても確認しておきたい。そこで,引数が条件を 満たさない場合のプログラムの動作を,表1にまとめた。 なお,文字列中の文字は,全て1バイト文字とする。
![]() e に関する解答群 イ 配列に何も値を設定せずに比較をするので,予期できない結果となる ウ 配列の定義範囲外への書込みが発生するので,予期できない結果となる エ プログラムが終了しない イ 30 個目の英字(直後の文字が“-”又は“.”の場合はその文字) ウ 30 文字目 エ 30 文字目(30 文字目が英字で 31 文字目が“-”又は“.”の場合は 31 文字目) イ その文字を無視する ウ 配列の定義範囲外への書込みが発生するので,予期できない結果となる エ プログラムが終了しない
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2024 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
| ||||||||||||