个人网站
ghzzz.cn
---------------------2020-6-3更新---------------------------------------
VC++6.0编译存在返回值错误,在函数中加入返回值(return 0;)即可。
-----------------------分割线-----------------
题目
编写代码,有10个学生,每个学生的数据包括学号,姓名,及三门课成绩,总成绩和平均成绩,从键盘输入10个学生的数据(包括学号,姓名及3门课成绩),要求打印出每位学生的学号,姓名,三门课的成绩,总成绩和平均成绩,最后再打印出3门课的总平均成绩以及最高分的学生的数据(包括姓名和总成绩)。
内容要求利用函数形式完成以下5个内容:
(a)根据学生信息定义一个结构体类型,在说明一个该结构体类型的数组;
(b)用input函数从键盘上输入10个学生的数据;
(c)用average函数求出每个学生总成绩、平均成绩和所有学生的总平均成绩;
(d)用maximum函数找出最高分的学生的数据;
(e)在主函数中输出每位学生的学号、姓名、三门课的成绩、总成绩和平均成绩以及总平均分和最高分学生的数据。
代码如下:
#include <stdio.h>
#define N 10
struct student
{
int num;
char name[20];
double score[3];
double aver;
double total;
};
int input(struct student s[])
{
int i;
for(i=0;i<N;i++){
scanf("%d %s %lf %lf %lf",&s[i].num,s[i].name,&s[i].score[0],&s[i].score[1],&s[i].score[2]);
}
}
int average(struct student s[])
{
int i;
double allaver=0;
for(i=0;i<N;i++){
s[i].total=s[i].score[0]+s[i].score[1]+s[i].score[2];
s[i].aver=(s[i].score[0]+s[i].score[1]+s[i].score[2])/3.0;
allaver += s[i].total;
}
allaver = allaver*1.0/i;
for(i=0;i<N;i++){
printf("学号:%5d 学生:%-5s 成绩1:%-6.1f 成绩2:%-6.1f 成绩3:%-6.1f 总成绩为:%-6.1f 平均成绩为:%-6.1f\n",s[i].num,s[i].name,s[i].score[0],s[i].score[1],s[i].score[2],s[i].total,s[i].aver);
}
printf("所有学生的平均成绩为:%-6.1f\n",allaver);
}
int maximum(struct student s[])
{
int i,j;
double max;
for(i=0;i<N;i++){
s[i].total=s[i].score[0]+s[i].score[1]+s[i].score[2];
}
max = s[0].total;
for(i=0;i<N;i++){
if(s[i].total>max){
max = s[i].total;
j=i;
}
}
printf("最高分为学生数据为:\n");
printf("学号 姓名 成绩1 成绩2 成绩3 总成绩 平均成绩:\n");
printf("%5d %-9s %-6.1f %-6.1f %-6.1f %-6.1f %-6.1f\n",s[j].num,s[j].name,s[j].score[0],s[j].score[1],s[j].score[2],s[j].total,s[j].aver);
}
int main()
{
struct student stu[N];
input(stu);
average(stu);
maximum(stu);
return 0;
}
输入示例:
1001 Aa 17 98 35
1002 Bb 47 68 36
1003 Cc 17 39 32
1004 Dd 44 69 32
1005 Ee 47 65 36
1006 Ff 78 99 23
1007 Gg 55 69 31
1008 Hh 25 39 87
1009 Ii 32 58 34
1010 Jj 25 78 65
运行结果: