C 中计算/显示的值不正确

问题描述 投票:0回答:1

我是一名初学者程序员,试图创建一个具有 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 循环是否有问题或其他问题。

c
1个回答
0
投票
当您执行

tests[j]

 时,
tests[j] += s[i].test_scores[j];
未初始化。
test
数组的每个元素都应在
0
之后初始化为
double tests[n_tests];
。像
double tests[n_tests] = {0}
这样的东西也应该可以解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.