要求如下: 第一行输入一个整数n;
接下来n行,每行先输入学生姓名(不超过10个字符,名字内不包含空格),再依次输入该学生的语文,数学,英语成绩,分数范围为[0,100]。
输出有三行,每行两个数(最高分与平均分),保留一位小数;三行依次代表语文,数学,英语。
实现思想是可以根据一下表格看出:
如果是这样的分数输入
| 语文 | 数学 | 英语 | |
|---|---|---|---|
| Peter | 78 | 85 | 67 |
| susam | 89 | 69 | 95 |
| jack | 90 | 83 | 87 |
则输出应该是这样的:
| 语文最高分 | 90.0 | 语文平均分 | 85.7 |
| 数学最高分 | 85.0 | 数学平均分 | 77.7 |
| 英语最高分 | 95.0 | 英语平均分 | 83.0 |
注释:红色是输出的内容
最高分在同一列中找最高的,平均分也是求一列的平均数,因此可用如下代码实现:
求最高分:
for (j = 0; j < 3; j++)
{
for (i = 0; i < n; i++)
{
if (max[j] < s[i].sc[j])
max[j] = s[i].sc[j];
}
}
求平均分:
or (j = 0; j < 3; j++)
{
sum = 0;
for (i = 0; i < n; i++)
sum = sum + s[i].sc[j];
ave[j] = sum / n;
}
来实现两个功能。
用结构体实现的完整代码如下:
#include
//设计表示学生信息的结构体,包含成员:姓名,3门课程成绩。结构体类型别名为STU
typedef struct Student
{
char name[10];
double sc[3];
}STU;
STU s[42];
int main()
{
int n, i, j;
double max[3] = { -1,-1,-1 }, ave[3] = { 0 }, sum;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%s", s[i].name);
for (j = 0; j < 3; j++)
scanf("%lf", &s[i].sc[j]);
}
//对每一门课程,求出平均分
for (j = 0; j < 3; j++)
{
sum = 0;
for (i = 0; i < n; i++)
sum = sum + s[i].sc[j];
ave[j] = sum / n;
}
//对每一门课程,求出最高分
for (j = 0; j < 3; j++)
{
for (i = 0; i < n; i++)
{
if (max[j] < s[i].sc[j])
max[j] = s[i].sc[j];
}
}
for (j = 0; j < 3; j++)
printf("%.1f %.1fn", max[j], ave[j]);
return 0;
}



