身につくC言語-演習問題8回目 テストの点数の最大値、最小値、平均-

今回は構造体や、配列、関数などを使って実践的な問題を解いてみましょう。

問題は1問です。

問題1

5人の生徒が国語と数学のテストをうけました。

出席番号は1~5とします。

次にテストの結果をまとめます。

出席番号 国語の点数 数学の点数
1 64 90
2 55 43
3 70 68
4 94 99
5 54 87

テストの結果

このときの、「国語の最大点と最小点と平均」、「数学の最大点と最小点と平均」、「数学と国語の合計が最も高い生徒の点数と出席番号」を出力してください。

 

さらに次のルールに従うこと。ルール1.次のような構造体を使用する事


typedef struct {
int max;
int min;
double avg;
}Sub;

2.生徒の人数をdefineで定義すること


#define HITO 5

3.次のような関数を使用すること


Sub Main_Subject(Sub subject,int tensu[HITO]);
int Maxof(int tensu[HITO]);
int Minof(int tensu[HITO]);
double Avgof(int tensu[HITO]);
int Best_Tensu(int No,int tensu[3][HITO]);

Main_Subject()の中で、「Maxof(),Minof(),Avgof()」の関数を使用すること。

 

Maxofは、渡された配列の一番大きい値を取得し返す役割、Minofは渡された配列の一番小さい値を取得し返す役割、Avgofは渡された配列の平均を取得し返す役割をする。

 

Best_Tensuは、渡された二重配列から国語と数学の合計を取得し、一番大きい値の生徒の出席番号を返す。

 

4. 1.~3.をheader.hに書き込むこと

作成するファイルは「main.c」と「header.h」とし、ヘッダーファイルには、#define宣言と、構造体と、関数プロトタイプ宣言を書き込みなさい。

 

cファイルには、main関数と、関数プロトタイプ宣言で宣言された関数の内容を書き込みなさい。

 

答えの出力はこのようにしなさい


printf("国語:%d,%d,%f\n",jpn.max,jpn.min,jpn.avg);
printf("数学:%d,%d,%f\n",math.max,math.min,math.avg);
printf("出席番号:%d,合計点数=%d\n",ID,(Score[1][No-1]+Score[2][No-1]));

ヒントまずは、最初からcファイルとヘッダーファイルに分けるのではなく、まずはcファイル一つでプログラムが動くかどうかを検証してみるといいでしょう。

 

それがうまくいってから、ファイルを分割します。答え最初はじっくりと一人で考えて見てください。

 

身につくC言語-演習問題8回目 解答と解説-