整体代码块如下:
#include <stdio.h>
typedef struct student
{
long studentID;
char studentName[10];
int score[3];
}STUDENT;
void InputScore(STUDENT stu[],int n,int m);
void AverScore(STUDENT stu[],float aver[],int n,int m);
void PrintScore(STUDENT stu[],float aver[],int n,int m);
int main()
{
STUDENT a[10];
float aver[10];
int n,i;
printf("How many student?");
scanf("%d",&n);
InputScore(a,n,3);
AverScore(a,aver,n,3);
PrintScore(a,aver,n,3);
return 0;
}
void InputScore(STUDENT stu[],int n,int m)
{
int i,j;
for(i=0;i<n;i++)
{
printf("Input record %d:\n",i+1);
scanf("%ld",&stu[i].studentID);
scanf("%s",stu[i].studentName);
getchar();
for(j=0;j<m;j++)
{
scanf("%d",&stu[i].score[j]);
}
}
}
void AverScore(STUDENT stu[],float aver[],int n,int m)
{
int i,j,sum[10];
for(i=0;i<n;i++)
{
sum[i]=0;
for(j=0;j<m;j++)
{
sum[i]+=stu[i].score[j];
}
aver[i]=(float)sum[i]/m;
}
}
void PrintScore(STUDENT stu[],float aver[],int n,int m)
{
int i,j;
printf("Results:\n");
for(i=0;i<n;i++)
{
printf("%10ld%8s",stu[i].studentID,stu[i].studentName);
for(j=0;j<m;j++)
{
printf("%4d",stu[i].score[j]);
}
printf("%6.1f\n",aver[i]);
}
}
首先我们根据题目要求,设计所需结构体:
typedef struct date
{#include <stdio.h>
typedef struct student
{
long studentID;
char studentName[10];
int score[3];
}STUDENT;
由于题目要求是要算出每门课程的平均分,所以我们在主函数中需要构建单精度浮点型数组,用来保存所求的平均分:
int main()
{
STUDENT a[10];
float aver[10];
int n,i;
printf("How many student?");
scanf("%d",&n);
InputScore(a,n,3);
AverScore(a,aver,n,3);
PrintScore(a,aver,n,3);
return 0;
}
在主函数中我们得到所需要的得到的学生个数n,然后通过函数InputSccore(),从键盘中输入每个学生的学号、姓名和三科成绩。代码块如下:
void InputScore(STUDENT stu[],int n,int m)
{
int i,j;
for(i=0;i<n;i++)
{
printf("Input record %d:\n",i+1);
scanf("%ld",&stu[i].studentID);
scanf("%s",stu[i].studentName);
getchar();
for(j=0;j<m;j++)
{
scanf("%d",&stu[i].score[j]);
}
}
}
接着我们通过AverScore(),计算每科的平均分,并保存在aver数组内。代码块如下:
void AverScore(STUDENT stu[],float aver[],int n,int m)
{
int i,j,sum[10];
for(i=0;i<n;i++)
{
sum[i]=0;
for(j=0;j<m;j++)
{
sum[i]+=stu[i].score[j];
}
aver[i]=(float)sum[i]/m;
}
}
最后我们将我们所得到的结果进行一个完整的输出。这时就需要调用函数PrintScore();代码块如下:
void PrintScore(STUDENT stu[],float aver[],int n,int m)
{
int i,j;
printf("Results:\n");
for(i=0;i<n;i++)
{
printf("%10ld%8s",stu[i].studentID,stu[i].studentName);
for(j=0;j<m;j++)
{
printf("%4d",stu[i].score[j]);
}
printf("%6.1f\n",aver[i]);
}
}