C语言:输入20名人4门功课成绩存入二维数组,用自定义函数按以下要求完成输入、处理、输出等操作。咋编?

要求:
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;

}

温馨提示:答案为网友推荐,仅供参考
相似回答