题目:编写一个程序,建立结构体类型表示一个学生的基本情况,包含以下成员项:学号、姓名、三门课的成绩、三门课的平均成绩。用该结构说明一个变量和一个指针,并完成成员项的输入、计算平均值、输出结果。
在以上结构的基本上建立一个班级学生的基本情况(数组)。计算出每个学生三门课的平均成绩,输出平均成绩最高的学生的各成员项值。以5个学生为例调试程序。
思路:
- 定义结构体
student
表示学生的基本情况,包括学号、姓名、三门课的成绩和平均成绩。 - 声明一个数组
stu
,用于存储班级中每个学生的信息。 - 使用循环遍历每个学生,依次输入学号、姓名和三门课的成绩。
- 计算每个学生的三门课的平均成绩,并累加到班级平均成绩中。
- 找到平均成绩最高的学生。
- 输出每个学生的学号、姓名、三门课的成绩和平均成绩,以及班级的平均成绩。
- 输出平均成绩最高的学生的各项信息。
代码:
#include<windows.h>
#define N 5
struct student
{
char name[8];
char num[6];
float score[3];
float ave;
}stu[N];
int main()
{
int i, j, maxi;
float sum, max, average;
for (i = 0; i < N; i++)
{
printf("input scores of student %d:\n", i + 1);
printf("NO:");
scanf("%s", stu[i].num);
printf("Name:");
scanf("%s", stu[i].name);
for (j = 0; j < 3; j++)
{
printf("score%d:", j + 1);
scanf("%f", &stu[i].score[j]);
}
}
average = 0;
max = 0;
maxi = 0;
for (i = 0; i < N; i++)
{
sum = 0;
for (j = 0; j < 3; j++)
sum += stu[i].score[j];
stu[i].ave = sum / 3.0;
average += stu[i].ave;
if (sum > max)
{
max = sum;
maxi = i;
}
}
average = average / N;
printf("NO. Name score1 score2 score3 average\n");
for (i = 0; i < N; i++)
{
printf("%5s%10s", stu[i].num, stu[i].name);
for (j = 0; j < 3; j++)
{
printf("%9.2f", stu[i].score[j]);
printf("%9.2f\n", stu[i].ave);
}
}
printf("average=%5.2f\n", average);
printf("The highest score is :student %s,%s\n", stu[maxi].num, stu[maxi].name);
printf("The score are :%4f,%4f,%4f average:%4f\n", stu[maxi].
score[0], stu[maxi].score[1], stu[maxi].score[2], stu[maxi].ave);
return 0;
}