HOME»基本情報技術者平成24年秋期問題»午後問9
基本情報技術者過去問題 平成24年秋期 午後問9
⇄問題文と設問を画面2分割で開く⇱問題PDF問9 ソフトウェア開発(C)
次のCプログラムの説明及びプログラムを読んで,設問1,2に答えよ。
〔プログラムの説明〕
関数 check_winning_lot は,複数本のくじのくじ番号を当選番号と比較し,当たりを確認するプログラムである。
〔プログラムの説明〕
関数 check_winning_lot は,複数本のくじのくじ番号を当選番号と比較し,当たりを確認するプログラムである。
- くじ番号は,6桁の数字から成る文字列である。数字だけから成る文字列を数字列という。
- くじの当たりは1~6等の6等級から成り,図1に示すように各等級には一つ以上の当選番号がある。各等級での当選番号の桁数と個数は異なる。
- 当選番号は6桁以下の数字列であり,くじ番号の最下位桁から当選番号の桁数だけ取り出した数字列が当選番号と一致したくじが当たりとなる。
なお,くじ番号によっては,複数の等級の当たりとなる場合もある。図1の例では,くじ番号"223692"のくじは,1等と6等の当たりとなる。 - 関数 check_winning_lot の引数は次のとおりである。ここで,引数の値に誤りはないものとする。
- lots
- 確認するくじのくじ番号表
- win_list
- 当選番号表
- winner
- 当選本数表
- 確認するくじのくじ番号表 lots の要素 lots[i] には,くじ番号の数字列へのポインタが格納されている。最後の要素 lots[Nl](Nlは,確認するくじの本数)には,空ポインタ定数(NULL)が格納されている。
- 当選番号表 win_list の要素 win_list[i] には,i+1等の番号表へのポインタが格納されている。win_list[i] が指す i+1等の番号表の要素 win_list[i][j] には,当選番号の数字列へのポインタが格納されている。最後の要素 win_list[i][Ni](Niは,i+1等の当選番号の個数)には,図2に示すように空ポインタ定数が格納されている。
- 当選本数表 winner の要素 winner[i] には,i+1等の当たりのくじの本数が格納される。
- 関数 check_winning_lot で使用している関数 check_lot と strlen の仕様は次のとおりである。
int check_lot(char *lot,char *win);- 機能:
- くじ番号と当選番号を,最下位桁から1桁ずつ順に当選番号の桁数分だけ比較し,一致するかどうかを調べる。
- 引数:
- lot くじ番号
win 当選番号 - 返却値:
- 確認結果(0:一致しない,1:一致する)
- 機能:
- 文字列の長さを求める。
- 引数:
- s 文字列
- 返却値:
- 終端を示すナル文字に先行する文字の個数
設問1
プログラム中の に入れる正しい答えを,解答群の中から選べ。
a に関する解答群
- k < LOT_DNUM
- k <= LOT_DNUM
- win_list[i][k] == NULL
- win_list[i][k] != NULL
- *win_list[i][k] == NULL
- *win_list[i][k] != NULL
b に関する解答群
- = lenw
- = LOT_DNUM
- += lenw
- += LOT_DNUM
c に関する解答群
- (i < lenw) && (result == 0)
- (i < lenw) && (result == 1)
- (i < LOT_DNUM) && (result == 0)
- (i < LOT_DNUM) && (result == 1)
- result == 0
- result == 1
解答選択欄
- a:
- b:
- c:
解答
- a=エ
- b=エ
- c=イ
解説
この設問の解説はまだありません。
設問2
次の記述中の に入れる正しい答えを,解答群の中から選べ。ただし,f1 と f2 に入れる答えは,fに関する解答群の中から組合せとして正しいものを選ぶものとする。
くじの当たりを増やすために,6桁の当選番号に対して前後賞が用意されることになった。これに合わせて関数 check_winning_lot に,前後賞の当選結果を自動判定する処理を追加する。ここで,プログラム中のa~cには正しい答えが入っているものとする。
くじの当たりを増やすために,6桁の当選番号に対して前後賞が用意されることになった。これに合わせて関数 check_winning_lot に,前後賞の当選結果を自動判定する処理を追加する。ここで,プログラム中のa~cには正しい答えが入っているものとする。
- 関数 check_winning_lot の引数を次のとおりに変更する。ここで,引数の値に誤りはないものとする。
- lots
- 確認するくじのくじ番号表
- win_list
- 当選番号表
- winner
- 当選本数表
- special
- 前後賞の当選本数表
- 前後賞は,6桁の当選番号に対して用意される。例えば,当選番号"123456"に対する前後賞の番号は,"123455"と"123457"となる。当選番号"000000"に対する前後賞の番号は,"999999"と"000001",当選番号"999999"に対する前後賞の番号は"999998"と"000000"とする。
- 前後賞の当選結果の確認は,確認するくじのくじ番号を数値とみなし,それよりも1だけ少ない数値と多い数値を表す数字列を作成し,その数字列を当選番号と比較することによって行う。このとき,くじ番号"000000"よりも1だけ少ない数値を表す数字列は"999999"に,くじ番号"999999"よりも1だけ多い数値を表す数字列は"000000"にする。
- 前後賞の当選本数表の要素 special[i] には i+1 等の前後賞の当たりのくじの本数が格納される。
- 処理の追加に対応するために,プログラムを表1のとおりに変更する。
d に関する解答群
- i
- j
- LOT_DNUM
- LOT_DNUM + 1
- LOT_DNUM + i
- LOT_DNUM + j
- LOT_DNUM - 1
- LOT_DNUM - i
- LOT_DNUM - j
e に関する解答群
- *lots[j]
- *lots[j] + m
- *lots[j] + m + 1
- *(lots[j] + m)
- *(lots[j] + m + 1)
f に関する解答群
解答選択欄
- d:
- e:
- f:
解答
- d=キ
- e=エ
- f=イ
解説
この設問の解説はまだありません。