用于计算学生五门课的平均成绩,最高分,最低分
为什么最后的两位学生的最低分运行结果不对
#include
#define N 3
struct score {
float grade[5];
float avegrade, maxgrade, mingrade;
};
int main() {
int i;
struct score m[N];
printf("input the grade of five course:\n");
for (int j = 0; j < N; j++) {
for (i = 0; i < 5; i++)
scanf("%f", &m[j].grade[i]);//输入成绩
}
int j;
m[j].avegrade = 0;
m[j].maxgrade = m[0].grade[0];
m[j].mingrade = m[0].grade[0];
for (j = 0; j < N; j++) {
for (i = 0; i < 5; i++) {
m[j].avegrade += m[j].grade[i];
m[j].maxgrade = (m[j].grade[i] > m[j].maxgrade) ? m[j].grade[i] : m[j]. maxgrade;
m[j].mingrade = (m[j].grade[i] < m[j].mingrade) ? m[j].grade[i] : m[j]. mingrade;
}
}
for (j = 0; j < N; j++) {
m[j].avegrade /= 5;
}
for (j = 0; j < N; j++) {
printf("average=%5.lf maxgrade=%5.lf mingrade=%5.1f\n", m[j].avegrade, m[j].maxgrade, m[j].mingrade);
}
return 0;
}
参考GPT和自己的思路:在代码中,你没有初始化变量j,所以它的值是未知的。在第31行中,m[j]的成员变量被赋初值,但是这里的j却可能是未知的,因此你缺少一个循环来遍历每一个学生并初始化它们的初始值。如果在第17行初始化变量j为0,并且在第31行之前加上循环j,问题就能解决了。另外,你的printf语句中,平均成绩的小数点后应该是1位,而不是0位,应该改为%5.1f。