![]()
平成19年 春期 基本情報技術者 午後 問06
問06 C言語次のCプログラムの説明及びプログラムを読んで,設問1,2に答えよ。
〔プログラムの説明〕 (1) 双六(すごろく)のプログラムである。 双六とは,図のような一本道のコース上に升(ます)あるを,“ふりだし”の位置からスタートして, プレーヤが順番にさいころ2個を振って,出た目の和だけ駒(こま)を進め, 早く“上がり”(ゴール)の位置にたどり着いたプレーヤを勝ちとする遊びである。
(2) 双六の進め方は,次のとおりである。 @ プレーヤは“ふりだし”の升に各自の駒を置き,さいころを振る順番を決める。 A 順番にさいころを振って,出た目の和だけ“上がり”方向に駒を進める。 B “上がり”の升に到達すると,そのプレーヤの勝ちとなり,そこでプログラムが終了する。 目の和だけ駒を進めた結果が“上がり”の升を超えた場合も,“上がり”とする。 C 升には順番に番号が割り当てられている。 番号0の升が“ふりだし”であり,番号 23 の升が“上がり”である。 D 升には番号のほかに,到達時の動作指示が割り当てられているものがある。 動作指示には,次の2種類があり,その指示に従う。 (a) 移動の指示: 指示された番号の升に駒を移動する。移動先の升に動作指示 がある場合は,その指示に従う。 (b) 1回休みの指示: 次に順番が回ってきたとき,“さいころを振る番”を1回休む。 (3) プレーヤは,4人とする。 (4) 動作指示は,配列 actype 及び celinf に設定されている。 (5) 次の関数が,あらかじめ定義されているものとする。 @ 関数 dice 機能: 引数で指定されたプレーヤに対してさいころを振る番が来たことを示すメッセージを表示する。 プレーヤが改行キーを入力すると,乱数によって2個のさいころの目の和を決めて, その値を表示し,返却値とする。 呼出し形式: int dice(int playerid); 引数: playerid プレーヤ番号( 0 〜 3 ) 返却値: さいころの目の和( 2 〜 12 の整数値) A 関数 prtpiece 機能: 引数で指定されたプレーヤの駒が現在置かれている升の番号と, 升に割り当てられている動作指示の内容を表示する。 呼出し形式: void prtpiece(int playerid); 引数: playerid プレーヤ番号( 0 〜 3 ) 返却値: なし
〔プログラム〕 #include <stdio.h> #define CELLS 24 #define PLAYERS 4 #define PLAY 1 #define WAIT 0 int dice(int); void prtpiece(int); static int actype[CELLS] = { 0, 0, 0, 1, 0, 1, 0, 1, 1, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 1, 0, 0 }; static int celinf[CELLS] = { 0, 0, 0, 9, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0 }; static int curpos[PLAYERS], playmode[PLAYERS]; void main() { int gamestatus = 1, playerid; printf("双六を開始します。\n"); for(playerid = 0; playerid < PLAYERS; playerid++){ curpos[playerid] = 0; playmode[playerid] = PLAY; } playerid = 0; while(gamestatus == 1){ if(playmode[playerid] == PLAY){ curpos[playerid] += dice(playerid); prtpiece(playerid); while((curpos[playerid] < CELLS - 1) && (
設問1 プログラム中の
a ,b に関する解答群 ア actype[curpos[playerid]] != 0 イ actype[curpos[playerid]] <= 3 ウ curpos[playerid] == 0 エ curpos[playerid] >= CELLS - 1 オ gamestatus == 0 カ gamestatus == 1 キ playmode[playerid] == PLAY ク playmode[playerid] == WAIT c に関する解答群 ア playerid = playerid % PLAYERS + 1 イ playerid = playerid % (PLAYERS + 1) ウ playerid = (playerid + 1) % PLAYERS エ playerid += 1 オ playerid += playerid / (PLAYERS - 1)
設問2 到達時の動作指示として,
“続けてさいころを振り,駒を進める”を追加することにした。
そのために switch 文での actype[curpos[playerid]] の値が3のときに,次の処理群を挿入する。
case 3: /* 続けてさいころを振り,駒を進める。 */
解答群 ア curpos[playerid] = celinf[curpos[playerid]] イ curpos[playerid] = celinf[curpos[playerid]] + dice(playerid) ウ curpos[playerid] += celinf[curpos[playerid] + dice(playerid)] エ curpos[playerid] += dice(playerid) オ playmode[playerid] = PLAY
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2024 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
|