我是一名初学者程序员,试图创建一个具有 5 名学生结构的程序,其中包括他们的 ID、年级水平和 4 个测试分数的数组。我的计划的第一部分确定每个学生的平均成绩,效果很好。然而,当尝试计算每个测试的平均分数时,我似乎得到了一个很大的值,例如 132138918351343080000000.... 第二个测试值。请帮帮我!!
#include <stdio.h>
struct student {
long int id;
int year_in_college;
double test_scores[4];
};
struct student student_list[5] =
{
{9781473, 1, {97.25, 96.5, 90, 87.5}},
{6014552, 2, {77.8, 80.0, 81.5, 79.5}},
{3773909, 2, {85.5, 79, 79, 90.5}},
{8102274, 1, {88.9, 90.5, 92, 94}},
{4582934, 1, {90, 90, 92, 89.5}}
};
const int n_students = 5;
const int n_tests = 4;
void show_student_average(struct student s){
double student_average = 0;
for (int i = 0; i < n_tests; i++){
student_average += s.test_scores[i];
}
student_average /= n_tests;
printf("%ld %.2f\n", s.id, student_average);
}
void show_test_average(struct student s[]){
double tests[n_tests];
for (int i = 0; i < n_students; i++){
for (int j = 0; j < n_tests; j++){
tests[j] += s[i].test_scores[j];
}
}
for (int i = 0; i < n_tests; i++){
double average = tests[i] / n_students;
printf("%i %.2f\n", i + 1, average);
}
}
int main (void) {
printf(" ID Average Test Score\n");
for (int i = 0; i < n_students; i++){
show_student_average(student_list[i]);
}
printf("\n");
printf("Test Average Score\n");
show_test_average(student_list);
}
我期望第二次测试分数为 87.20 这样的值,但给我的值为 132138918351343080000000...并且我不确定我的 for 循环是否有问题或其他问题。
tests[j]
时,
tests[j] += s[i].test_scores[j];
未初始化。 test
数组的每个元素都应在 0
之后初始化为 double tests[n_tests];
。像 double tests[n_tests] = {0}
这样的东西也应该可以解决问题。