要求:
1)自定义3个函数void Input()、void Process() 和void Print(),分别完成输入、处理和输出。
2)学生人数使用宏定义常量,二维数组最后一列存储每位同学的平均分,最后一行存储每门课程的平均分,最右下角数组元素存储全班总成绩的平均分。
3)用随机函数生成学生成绩。
4)在主函数中调用三个自定义函数完成题目要求的功能。
代码文本:
#include "stdio.h"
#include <stdlib.h>
#include "time.h"
#define N 20
#define M 4
void Input(float (*p)[M+1]){//输入函数
char i,j,t;
srand((unsigned)time(NULL));
for(i=0;i<N;i++)//模拟得分
for(p[i][M]=j=0;j<M;j++)
if((t=rand()%100)<10)
p[i][j]=(float)(rand()%101);
else if(t<30)
p[i][j]=(float)(rand()%81)+20;
else
p[i][j]=(float)(rand()%41)+60;
}
void Process(float (*p)[M+1]){//成绩处理函数
char i,j;
for(j=0;j<=M;p[N][j++]=0);//课程和总平均值清0
for(i=0;i<N;i++){
for(p[i][M]=j=0;j<M;j++){
p[i][M]+=p[i][j];//累加学生课程
p[N][j]+=p[i][j];//单项课程累加
}
p[N][M]+=p[i][M];//全部课程累加
p[i][M]/=(M+0.0);//学生平均值
}
for(i=0;i<M;p[N][i++]/=(N+0.0));//功课平均值
p[N][M]/=(float)(N*M);//总平均值
}
void Print(float (*a)[M+1]){//输出函数
char i,j;
printf(" NAME\tSCO1\tSCO2\tSCO3\tSCO4\tPAVE\n");
puts("==============================================");
for(i=0;i<N;i++){
printf(" ST%02d\t",i+1);//输出学生名
for(j=0;j<M;printf("%.0f\t",a[i][j++]));//功课分数
printf("%.2f\n",a[i][M]);//输出学生平均分数
}
puts("----------------------------------------------");
printf(" TAVE\t");
for(i=0;i<=M;printf("%.2f\t",a[N][i++]));//功课平均分
putchar('\n');
}
int main(int argc,char *argv[]){
float s[N+1][M+1];
Input(s);
Process(s);
Print(s);
return 0;
}