1(10分)学生成绩简单统计。
写一个程序,读入10名学生的成绩。每个学生的数据,包含一个不带空格的名字(不超过19个字符),以及三门课的成绩,每门课的成绩是1到5的整数。程序要输出如下的一个列表,对每个学生输出他的录入时的序号、名字、三门课的成绩和平均成绩(浮点表示),最后输出每门课的平均成绩(浮点表示)和最低最高成绩。
no name score1 score2 score3 average
1 K.Weng 5 5 5 5
2 T.Dixon 4 3 2 3
3 V.Chu 3 4 5 4
4 L.Tson 4 3 4 3.66667
5 L.Lee 3 4 3 3.33333
6 I.Young 4 2 5 3.66667
7 K.Hiro 4 2 1 2.33333
8 G.Ping 4 4 4 4
9 H.Gu 2 3 4 3
10 J.Jon 5 4 3 4
average 3.8 3.4 3.6
min 2 2 1
max 5 5 5
因为排版的缘故,你看到的表格也许不够整齐,输出时在所有的输出项之间加\t就可以了。输出格式不是评判的内容。
程序本身并不复杂,只是要求采用结构来表达每个学生的数据,并具有以下代码片段(你的代码中必须含有并使用以下部分):
- 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);
代码如下
#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);
//获得学生的一个成绩,index为课程编号为0,1,2
int student_get_score(const Student *pStudent, int index);
//获取所有学生某一门课程的平均分,n为学生人数,index为课程编号为0,1,2
double students_average(const Student sts[],int n,int index);
// 获取所有学生某一门课程的最低分,n为学生人数,index为课程编号为0,1,2
int students_min(const Student sts[],int n,int index);
// 获取所有学生某一门课程的最高分,n为学生人数,index为课程编号为0,1,2
int students_max(const Student sts[],int n,int index);
const int N=10;//总人数
int main(){
Student sts[N];
printf("请输入十条数据,每条数据包括学生姓名(不超过20字符)、第一门课程分数(整数)、第二门学生分数、第三门学生分数,用空格隔开,共输入十次,每条数据用回车隔开\n");
for(int i=0;i<N;i++){//读入十条数据
student_input(&sts[i]);
}
printf("no\tname\tscore1\tscore2\tscore3\taverage\n");
for(int i=0;i<N;i++){
printf("%d\t",i+1);//输出序号
student_print(&sts[i]);
printf("\n");
}
//输出单科平均成绩
printf("\taverage\t%g\t%g\t%g\n",students_average(sts,N,0),students_average(sts,N,1),students_average(sts,N,2));
//输出单科最低成绩
printf("\tmin\t%d\t%d\t%d\n",students_min(sts,N,0),students_min(sts,N,1),students_min(sts,N,2));
//输出单科最高成绩
printf("\tmax\t%d\t%d\t%d\n",students_max(sts,N,0),students_max(sts,N,1),students_max(sts,N,2));
return 0;
}
//输入一个学生的数据
Student* student_input(Student *pStudent){
scanf("%s %d %d %d",pStudent->name,&pStudent->score[0],&pStudent->score[1],&pStudent->score[2]);
return pStudent;
}
//输出一个学生的数据,包括平均成绩
void student_print(const Student *pStudent){
printf("%s\t%d\t%d\t%d\t%g",pStudent->name,pStudent->score[0],pStudent->score[1],pStudent->score[2],student_average(pStudent));
}
// 计算一个学生的平均成绩
double student_average(const Student *pStudent){
double sum=0.0;
for(int i=0;i<3;i++){
sum+=pStudent->score[i];
}
return sum/3;
}
//获得学生的一个成绩,i取0,1,2,输入i出错返回-1
int student_get_score(const Student *pStudent, int index){
int tmp=-1;
if(index>2||index<0)
;//不做任何运算
else
tmp=pStudent->score[index];
return tmp;
}
//获取所有学生某一门课程的平均分,n为学生人数,index为课程编号为0,1,2
double students_average(const Student sts[],int n,int index){
double sum=0.0;
for(int i=0;i<n;i++){
sum+=student_get_score(&sts[i],index);
}
return sum/n;
}
// 获取所有学生某一门课程的最低分,n为学生人数,index为课程编号为0,1,2
int students_min(const Student sts[],int n,int index){
int min=student_get_score(&sts[0],index);
for(int i=0;i<n;i++){
if(min>student_get_score(&sts[i],index))
min=student_get_score(&sts[i],index);
}
return min;
}
// 获取所有学生某一门课程的最高分,n为学生人数,index为课程编号为0,1,2
int students_max(const Student sts[],int n,int index){
int max=student_get_score(&sts[0],index);
for(int i=0;i<n;i++){
if(max<student_get_score(&sts[i],index))
max=student_get_score(&sts[i],index);
}
return max;
}
运行结果
转载请注明出处