/****************
对一个班级人数为40以内的三门考试成绩进行统计计算每个学生以及全班的总成绩及平均数
********************/
#include<stdio.h>
#define STUD_N 40 //人数最大容量#define CONSURE_N 3 //考试科目数最大容量
int ReadScore(int score[][CONSURE_N],long num[]) ;
void AverforStud(int score[][CONSURE_N],int sum[],float aver[],int n);
void AverforCourse(int score[][CONSURE_N],int sum[],float aver[],int n);
void Print(int score[][CONSURE_N],long num[],int sumS[],float averS[],int sumC[],float averC[],int n);
int main(){
int score[STUD_N][CONSURE_N],sumS[STUD_N],sumC[STUD_N],n;
long num[STUD_N];
float averS[STUD_N],averC[STUD_N];
n = ReadScore(score,num);
AverforStud(score,sumS,averS,n); //计算每个学生平均分
AverforCourse(score,sumC,averC,n); //计算每门课程总平均分
Print(score,num,sumS,averS,sumC,averC,n);//输出学生成绩
return 0;
}
int ReadScore(int score[][CONSURE_N],long num[]) //录入学号及三门课成绩
{
int i,j,n;
printf("输入参考人数:");
scanf("%d",&n);
printf("输入学号和成绩:MT EN PH:\n");
for(i = 0;i<n;i++)
{
scanf("%ld",&num[i]); //输入学号
for(j = 0;j<CONSURE_N;j++){
scanf("%d",&score[i][j]); //输入课程成绩
}
}
return i;
}
//计算每个学生总分和平均分
void AverforStud(int score[][CONSURE_N],int sum[],float aver[],int n)
{
int i,j;
for(i = 0 ;i<n;i++)
{
sum[i] = 0;
for(j=0;j<CONSURE_N;j++)
{
sum[i] = sum[i] + score[i][j]; //计算第i个学生总分
}
aver[i] = (float)sum[i]/CONSURE_N; //计算第i个学生平均分
}
}
//计算每门课总分和平均分
void AverforCourse(int score[][CONSURE_N],int sum[],float aver[],int n)
{
int i,j;
for(j = 0;j<CONSURE_N;j++){
sum[j] = 0;
for(i = 0;i<n;i++){
sum[j] = sum[j] + score[i][j];
}
aver[j] = (float)sum[j]/n;
}
}
void Print(int score[][CONSURE_N],long num[],int sumS[],float averS[],int sumC[],float averC[],int n)
{
int i,j;
printf("结果:\n");
printf("ID\t MT\t EN\t PH\t SUM\t AVER\n");
for(i = 0;i<n;i++){
printf("%ld\t",num[i]); //长整形格式打印学号
for(j = 0;j<CONSURE_N;j++)
{
printf("%4d\t",score[i][j]); //打印每门课成绩
}
printf("%4d\t %5.1f\n",sumS[i],averS[i]); //学生总分和平均分
}
printf("每门课总分\t");
for(j = 0;j<CONSURE_N;j++){
printf("%4d\t",sumC[j]);
}
printf("\n 每门课平均分\t");
for(j = 0;j<CONSURE_N;j++)
{
printf("%4.1f\t",averC[j]);
}
printf("\n");
}