有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩,从键盘输入10个学生数据,要求输出3门课程总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课程成绩、平均分数)。
输入格式:
输入共10行,每行依次输入每个学生数据,包括学号、姓名、3门课程的成绩。
输出格式:
输出共三行,第一行是3门课的总平均分(格式为average score is %.2f)
第2至4行是最高分的学生的数据
(格式为
the max score is:\n
%5d%10s后面三个%4d
\nthe max average is %.2f\n)
输入样例:
101 ejhgrje 67 78 96
104 jghjg 65 78 98
107 hkhjk 77 88 99
102 jghgui 87 88 89
103 57jhg 76 95 67
105 gutiutyi 77 98 90
109 fyyfryu 88 99 98
106 jhtguytiu 89 74 62
108 iiuyiw 73 82 63
110 yieiur 68 83 90
输出样例:
average score is 82.73
the max score is:
109 fyyfryu 88 99 98
the max average is 95.00
参考答案:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define N 10
struct student
{
int num;
char name[10];
int score[3];
};
typedef struct student T;
void in(T* p)
{
for (int i = 0; i < N; i++)
{
scanf("%d", &(p + i)->num);
scanf("%s", &(p + i)->name);
for (int j = 0; j < 3; j++)
{
scanf("%d", &(p + i)->score[j]);
}
}
}
double eve(T* p)
{
double sum = 0;
for (int i = 0; i < 3; i++)
{
sum += p->score[i];
}
return sum / 3;
}
int search(T* p)
{
double max = 0;
double sum = 0;
int n = 0;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < 3; j++)
{
sum += (p + i)->score[j];
}
if (sum > max)
{
max = sum;
n = i;
}
sum = 0;
}
return n;
}
void put(T* p)
{
printf("%5d", p->num);
printf("%10s", p->name);
for (int i = 0; i < 3; i++)
{
printf("%4d", p->score[i]);
}
printf("\n");
}
int main()
{
static T a[N];
T* p = a;
in(p);
double sum = 0, eveplus;
for (int i = 0; i < N; i++)
{
sum += eve(p + i);
}
eveplus = sum / N;
printf("average score is %.2f\n", eveplus);
printf("the max score is:\n");
int n;
n = search(p);
put(p + n);
printf("the max average is %.2f\n", eve(p + n));
}