写一个程序,读入10名学生的成绩。每个学生的数据,包含一个不带空格的名字(不超过19个字符),以及三门课的成绩,每门课的成绩是1到5的整数。程序要输出如下的一个列表,对每个学生输出他的录入时的序号、名字、三门课的成绩和平均成绩(浮点表示),最后输出每门课的平均成绩(浮点表示)和最低最高成绩。
代码如下:
#include <stdio.h>
typedef struct {
char name[20];
int score[3];
} Student;
// 输入一个学生的数据
Student* student_input(Student *pStudent);
// 输出一个学生的数据,包括平均成绩
void student_print(const Student *pStudent);
// 计算一个学生的平均成绩
double student_average(const Student *pStudent);
// 获得学生的一个成绩
int student_get_score(const Student *pStudent, int index);
// 学生个数
double subject_average(const Student *pStudent, int index);
// 各科平均分
int subject_min(const Student *pStudent,int index);
// 各科最低分
int subject_max(const Student *pStudent,int index);
// 各科最高分
const int number = 10; //总人数
Student* student_input(Student *pStudent)
{
scanf("%s",&pStudent->name);
for(int i=0;i<3;i++)
scanf("%d",&pStudent->score[i]);
return pStudent;
}
void student_print(const Student *pStudent)
{
double avg=student_average(pStudent);
printf("%s\t",pStudent->name);
for(int i=0;i<3;i++)
{
printf("%d\t",pStudent->score[i]);
}
printf("%.5f\t",avg);
}
double student_average(const Student *pStudent)
{
double sum=0.0;
for(int i=0;i<3;i++)
{
sum+=pStudent->score[i];
}
return sum/3;
}
int student_get_score(const Student *pStudent, int index)
{
return pStudent->score[index];
}
double subject_average(const Student *pStudent, int index)
{
double sum=0.0;
for(int i=0;i<number;i++)
{
sum+=student_get_score(pStudent,index);
pStudent++;
}
return sum/number;
}
int subject_min(const Student *pStudent,int index)
{
int minScore = student_get_score(pStudent,index);
pStudent++;
for(int i=1;i<number;i++)
{
int temp = student_get_score(pStudent,index);
if(temp<minScore)
minScore=temp;
pStudent++;
}
return minScore;
}
int subject_max(const Student *pStudent,int index)
{
int maxScore = student_get_score(pStudent,index);
pStudent++;
for(int i=1;i<number;i++)
{
int temp = student_get_score(pStudent,index);
if(temp>maxScore)
maxScore=temp;
pStudent++;
}
return maxScore;
}
int main()
{
printf("Enter name and scores which separated by a space.\n");
Student student[number];
Student *pStudent;
pStudent=&student[0];
int subject_number = sizeof(pStudent->score)/sizeof(pStudent->score[0]); //总共多少科目
for(int i=0;i<number;i++)
{
pStudent=student_input(&student[i]);
pStudent++;
}
printf("no\tname\tscore1\tscore2\tscore3\taverage\n");
pStudent=&student[0];
for(int i=0;i<number;i++)
{
printf("%d\t",i+1);
student_print(pStudent);
pStudent++;
printf("\n");
}
//平均分
pStudent=&student[0];
printf("\tAverage:");
for(int i=0;i<subject_number;i++)
{
double avg=subject_average(pStudent,i);
printf("%.1f\t",avg);
}
printf("\n");
//min
printf("\tMin:\t");
for(int i=0;i<subject_number;i++)
{
int min=subject_min(pStudent,i);
printf("%d\t",min);
}
printf("\n");
//max
printf("\tMax:\t");
for(int i=0;i<subject_number;i++)
{
int max=subject_max(pStudent,i);
printf("%d\t",max);
}
printf("\n");
return 0;
}
效果如下: