思路:用一个inPut函数输入5个学生数据;用一个average函数求总平均分;用max函数找出最高分学生数据;总平均分和最高分的学生的数据都在主函数中输出
#include<stdio.h>
#define N 5
struct Student//结构建立体类型
{
int num;
char name[20];
float score[3];
float aver;
};
int main()
{
void input(struct Student stu[]);//声明input函数
struct Student max(struct Student stu[]);//声明max函数
float average(struct Student stu[]);//声明average函数
struct Student stu[N], * p = stu;//定义结构体变量
struct Student stud;
float a;
input(p);
a=average(p);
printf("三门课程的总平均分为:%f\n",a);
stud = max(p);
printf("成绩最高的学生是:\n");
printf("学号:%d\n姓名:%s\n三门课成绩:%5.1f,%5.1f,%5.1f\n平均成绩:%5.2f\n", stud.num, stud.name, stud.score[0], stud.score[1], stud.score[2], stud.aver);
return 0;
}
void input(struct Student stu[])//定义input 函数
{
int i;
printf("请输入各学生的信息:学号、三门课成绩、姓名:\n");
for (i = 0; i < N; i++)
{
scanf_s("%d%f%f%f", &stu[i].num, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);
gets_s(stu[i].name);
stu[i].aver = (stu[i].score[0] + stu[i].score[1] + stu[i].score[2]) / 3;
}
}
float average(struct Student stu[])//定义average函数
{
int i;
float aver1, sum=0;
for (i = 0; i < N; i++)
{
sum = sum + stu[i].aver;
}
aver1 = sum / N;
return(aver1);
}
struct Student max(struct Student stu[])//定义max函数
{
int i, m = 0;
for (i = 0; i < N; i++)
if (stu[i].aver > stu[m].aver)
m = i;
return(stu[m]);
}
一开始按照程序设计书上的写,发现输入异常
在VS2019当中,scanf无法正常输入字符串,于是改用gets单独输入字符串
如代码所示。
由于版本兼容性(或者说编译环境)的问题,在这一方面耗费时间较多,且意义不大,然而对于初学者而言,往往会更加怀疑自己编写的程序,一时间整理·不出头绪下,这是非常考验心态的。
对于计算机这个更新非常快的领域,实践告诉我,书里边的内容有些旧了。只有把时间放在学习上,才更能够减少由于非知识性的问题引起的bug。另外就是对于书本的内容,要有实践出真知的质疑精神。