编写一个程序,实现从键盘输入 3 个学生数据(每个学生的数据包括学号、 姓名、2 门课程成绩的),输出每个学生 2 门课总平均成绩,以及最高分的学生 的数据(包括学号、姓名、2 门课的成绩、平均分数)。
要求用 input 函数输入 3 个学生数据;用 average 函数求每个学生总平均成 绩;用 max 函数找出平均成绩最高分的学生数据。
#include<stdio.h>
#include<stdlib.h>
#define N 3
struct stu {//结构体 学号 姓名 成绩1 成绩2
int num;
char name[100];
int score[2];
};
typedef struct stu stu;
void input(stu* p) {//输入 学号 姓名 成绩1 成绩2
for (int i = 0; i < N; ++i) {
printf("请输入第%d个学生的信息\n", i + 1);
printf("请输入学号\n");
scanf("%d", &(p + i)->num);
printf("请输入姓名\n");
scanf("%s", &(p + i)->name);
for (int j = 0; j < 2; ++j) {
printf("请输入score%d\n", j + 1);
scanf("%d", &(p + i)->score[j]);
}
}
}
void print(stu* p) {//输出
printf("%d\t", p->num);
printf("%s\t", p->name);
for (int j = 0; j < 2; ++j) {
printf("%d\t", p->score[j]);
}
}
double average(stu* p) {//计算平均分
double sum = 0;
for (int i = 0; i < 2; ++i) {
sum += p->score[i];
}
return sum / 2;
}
int max(stu* p) {//判断最高分,返回下标
double sum = 0;
double max = 0;
int record = 0;
for (int i = 0; i < N; ++i) {
sum = 0;
for (int j = 0; j < 2; ++j) {
sum += (p + i)->score[j];
}
if (max < sum) {
max = sum;
record = i;
}
}
return record;
}
int main() {
stu a[N];
stu* p = a;
input(p);
printf("学号\t姓名\t成绩1\t成绩2\t平均成绩\n");
for (int i = 0; i < N; i++) {
print(p + i);
printf("%f\n", average(p + i));
}
printf("最高分的学生数据如下\n学号\t姓名\t成绩1\t成绩2\t平均成绩\n");
int n = max(p);
print(p + n);
printf("%f\n", average(p + n));
system("pause");
}