![]()
平成19年 春期 基本情報技術者 午後 問10
問10 C言語次のCプログラムの説明及びプログラムを読んで,設問1,2に答えよ。
〔プログラムの説明〕 リーグ戦の勝敗表を出力するプログラムである。 (1) 勝敗表の出力例を図1に示す。
図1 勝敗表の出力例 (2) チームの勝敗情報は構造体 RECORD で表現する。引き分けはないものとする。 typedef struct { /* 勝敗情報 */ char name[MAX_LENGTH+1]; /* チーム名 */ int wins; /* 勝ち数 */ int losses; /* 負け数 */ double average; /* 勝率 */ } RECORD; (3) プログラム中の関数 calcAverage と print の仕様は次のとおりである。 void calcAverage()
void print()
〔プログラム1〕 #include <stdio.h> #define TEAMNUM 6 /* チーム数 */ #define MAX_LENGTH 10 /* チーム名の長さの上限 */ typedef struct { /* 勝敗情報 */ char name[MAX_LENGTH+1]; /* チーム名 */ int wins; /* 勝ち数 */ int losses; /* 負け数 */ double average; /* 勝率 */ } RECORD; void calcAverage(); void print(); RECORD team[TEAMNUM]; void calcAverage(){ int i, total; for(i = 0; i < TEAMNUM; i++){ total = team[i].wins + team[i].losses; if(
設問1 プログラム1中の
a に関する解答群 ア team[i].average < 0.0 イ team[i].average > 0.0 ウ total != 0 エ total == 0 b に関する解答群 ア (double)team[i].average = team[i].wins / total イ team[i].average = (double)(team[i].wins / total) ウ team[i].average = (double)team[i].wins / total エ team[i].average = team[i].wins / total
設問2 順位の項目を加え,勝率の高いチームから順に出力する関数 printRank を作成した。 勝率順の勝敗表の出力例を図2に示す。勝率が同率の場合は同順位とする。
(1) TEAMNUM 個の要素をもつポインタ配列 pTeam を定義する。 (2) 配列 team の各要素のアドレスを,先頭要素から順番に配列 pTeam の各要素に格納する。 これによって要素番号iに対応するチームの勝率 team[i].average は,pTeam[i]->average に よっても参照できる。 (3) 配列 team 自体を整列する代わりに配列 pTeam の要素を整列して,勝率順の勝敗表を出力する。 次の関数があらかじめ定義されているものとする。 void sort(RECORD *pTeam[TEAMNUM])
プログラム2中の
〔プログラム2〕 void printRank(); void sort(RECORD *[TEAMNUM]); void printRank(){ int i; int rank = 1; RECORD *pTeam[TEAMNUM]; calcAverage(); for(i = 0; i < TEAMNUM; i++){
c に関する解答群 ア pTeam[i] = &team[i] イ pTeam[i] = team ウ team[i] = **pTeam エ team[i] = *pTeam[i] d に関する解答群 ア rank++ イ rank = i ウ rank = i + 1 エ rank = TEAMNUM - (i + 1) オ rank = TEAMNUM - i e に関する解答群 ア (&team[i]) イ (&team[rank]) ウ pTeam[i] エ pTeam[rank]
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2024 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
| ||