平成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(){ team[i].average = 0.0; } else { ; } } } void print(){ int i; calcAverage(); printf("チーム名 勝ち 負け 勝率\n"); for(i = 0; i < TEAMNUM; i++){ printf("%-10s %4d %4d %5.3f\n", team[i].name, team[i].wins, team[i].losses, team[i].average); } }
設問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++){ ; } sort(pTeam); printf("順位 チーム名 勝ち 負け 勝率\n"); for(i = 0; i < TEAMNUM; i++){ if(i > 0){ if(pTeam[i]->average != pTeam[i-1]->average){ ; } } printf("%1d %-10s %4d %4d %5.3f\n", rank, ->name, ->wins, ->losses, ->average); } }
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 ] | ||