学生成绩简单统计。
写一个程序,读入10名学生的成绩。每个学生的数据,包含一个不带空格的名字(不超过19个字符),以及三门课的成绩,每门课的成绩是1到5的整数。程序要输出如下的一个列表,对每个学生输出他的录入时的序号、名字、三门课的成绩和平均成绩(浮点表示),最后输出每门课的平均成绩(浮点表示)和最低最高成绩。
#include <stdio.h>
typedef struct
{
char name[20];
int score[3];
} Student;
// 输入一个学生的数据
Student* student_input(Student *pStudent);
// 输出一个学生的数据,包括平均成绩
void student_print(int no,const Student *pStudent);
// 计算一个学生的平均成绩
double student_average(const Student *pStudent);
// 获得学生的一个成绩
int student_get_score(const Student *pStudent, int index);
// 获取单门成绩的平均分
double subject_average(const Student* pstus[],int len,int index);
// 获取单门成绩的最低分
int subject_min(const Student* pstus[],int len,int index);
// 获取单门成绩的最高分
int subject_max(const Student* pstus[],int len,int index);
/*
写一个程序,读入10名学生的成绩。每个学生的数据,包含一个不带空格的名字(不超过19个字符),
以及三门课的成绩,每门课的成绩是1到5的整数。程序要输出如下的一个列表,
对每个学生输出他的录入时的序号、名字、三门课的成绩和平均成绩(浮点表示),
最后输出每门课的平均成绩(浮点表示)和最低最高成绩。
*/
int main(void)
{
const int size = 3;
Student stus[size];
Student* pstus[size];
for(int i=0; i<size; i++)
{
pstus[i] = &stus[i];
}
printf("%p\n",pstus[0]);// 0029feec
for(int i=0; i<size; i++)
{
student_input(pstus[i]);
}
// no name score1 score2 score3 average
printf("\t%s\t%s\t%s\t%s\t%s\t%s\n",
"no",
"name",
"score1",
"score2",
"score3",
"average"
);
for(int i=0; i<size; i++)
{
student_print(i,pstus[i]);
}
/*
average 3.8 3.4 3.6
min 2 2 1
max 5 5 5
*/
printf("\t\t%s\t%.2f\t%.2f\t%.2f\n",
"average",
subject_average(pstus,size,1),
subject_average(pstus,size,2),
subject_average(pstus,size,3)
);
printf("\t\t%s\t%d\t%d\t%d\n",
"min",
subject_min(pstus,size,1),
subject_min(pstus,size,2),
subject_min(pstus,size,3)
);
printf("\t\t%s\t%d\t%d\t%d\n",
"max",
subject_max(pstus,size,1),
subject_max(pstus,size,2),
subject_max(pstus,size,3)
);
return 0;
}
// 输入一个学生的数据
Student* student_input(Student *pStudent)
{
//gets(pStudent->name);
scanf("%s",pStudent->name);
scanf("%i",&(pStudent->score[0]));
scanf("%i",&(pStudent->score[1]));
scanf("%i",&(pStudent->score[2]));
return pStudent;
}
// 输出一个学生的数据,包括平均成绩
void student_print(int no,const Student *pStudent)
{
// 4 L.Tson 4 3 4 3.66667
printf("\t%d\t%s\t%d\t%d\t%d\t%.2f\n",
no,
pStudent->name,
student_get_score(pStudent,1),
student_get_score(pStudent,2),
student_get_score(pStudent,3),
student_average(pStudent)
);
}
// 计算一个学生的平均成绩
double student_average(const Student *pStudent)
{
int a = pStudent->score[0];
int b = pStudent->score[1];
int c = pStudent->score[2];
double avg = 1.0/3*(a+b+c);
return avg;
}
// 获得学生的一个成绩
int student_get_score(const Student *pStudent, int index)
{
return pStudent->score[index-1];
}
// 获取单门成绩的平均分
double subject_average(const Student* pstus[],int len,int index)
{
double avg = 0;
int total = 0;
for(int i=0; i<len; i++)
{
total+=pstus[i]->score[index-1];
// printf("total = %d\n",total);
}
avg = 1.0*total/len;
return avg;
}
// 获取单门成绩的最低分
int subject_min(const Student* pstus[],int len,int index)
{
int min = pstus[0]->score[index-1];
for(int i=0; i<len; i++)
{
int cur = pstus[i]->score[index-1];
if(min>cur)
{
min = cur;
}
}
return min;
}
// 获取单门成绩的最高分
int subject_max(const Student* pstus[],int len,int index)
{
int max = pstus[0]->score[index-1];
for(int i=0; i<len; i++)
{
int cur = pstus[i]->score[index-1];
if(max<cur)
{
max = cur;
}
}
return max;
}
结果展示:
no name score1 score2 score3 average
0 汪汪 4 4 5 4.33
1 喵喵 2 3 3 2.67
2 哔哔 5 5 5 5.00
average 3.67 4.00 4.33
min 2 3 3
max 5 5 5