壹、問題分析
需要保存6名學生5門功課的成績,需要設計壹個6行5列大小的二維數組scores[6][5]來存儲30個成績數據。保存6名學生的平均成績,需要設計壹個6列大小的壹維數組來avgs[6]存儲平均成績。
為使程序具有更好的通用性,使用宏定義定義學生人數M和課程門數N。
計算每個學生的平均成績時,累加該行所有列的成績數據,並除以列大小即為該學生的平均成績。
二、參考程序
#include?<stdio.h>#define?M?6 /*?學生人數?*/
#define?N?5 /*?課程門數?*/
/*?輸入row個學生col門課程的成績?*/
void?input(double?scores[][N],?int?row,?int?col);
/*?計算row個學生的平均成績並保存在avgs數組中?*/
void?average(double?scores[][N],?int?row,?int?col,?double?avgs[]);
/*?輸出所有學生的平均成績?*/
void?output(double?avgs[],?int?size);
void?main()
{
double?scores[M][N];
double?avgs[M];
input(scores,?M,?N);
average(scores,?M,?N,?avgs);
output(avgs,?M);
}
/*?輸入row個學生col門課程的成績?*/
void?input(double?scores[][N],?int?row,?int?col)
{
int?i,?j;
printf("請輸入%d個學生%d門課程的成績,每個學生成績在壹行,以空格分隔成績:\n",?row,?col);
for(i=0;?i<row;?i++)
{
for(j=0;?j<col;?j++)
{
scanf("%lf",?&scores[i][j]);
}
}
}
/*?計算row個學生的平均成績並保存在avgs數組中?*/
void?average(double?scores[][N],?int?row,?int?col,?double?avgs[])
{
int?i,?j;
for(i=0;?i<row;?i++)
{
avgs[i]?=?0.0;
for(j=0;?j<col;?j++)
{
avgs[i]?+=?scores[i][j];
}
avgs[i]?/=?col;
}
}
/*?輸出所有學生的平均成績?*/
void?output(double?avgs[],?int?size)
{
int?i;
printf("%6s%10s\n",?"序號",?"平均成績");
printf("----------------------------\n");
for(i=0;?i<size;?i++)
{
printf("%6d%10.2lf\n",?i+1,?avgs[i]);
}
}
三、運行測試