使用多维数组获得5个学生的平均值C

时间:2018-10-30 16:56:43

标签: c arrays for-loop

我想知道是否有人可以告诉我我在代码中做错了什么,它可以编译,但是信息被弄乱了。我是新手,所以我缺少寻找问题所需的知识。谢谢!

#include<stdlib.h>
#include<stdio.h>

const int students = 4;
const int grades = 3;
float averages = 0;

float calculatingGrade(float studentGrade[students][grades])
{
    double averages[students];
    int i=0,j=0;

    for(i=0; i < students; i++){
        printf("Enter student#%d's grades:\n",i+1);
        for(j=0; j < grades; j++){
            scanf("%f",&studentGrade[i][j]);
        }
    }
    for(i=0; i < students; i++){
        for(j=0; j < grades; j++){
            averages[i] += (studentGrade[i][j]);
        }
    averages[i] = averages[i] / grades;
    printf("\nStudent#%d's average: %.2f ",i+1,averages[i]);
    averages[i] = 0;
    }
return;
}
void main()
{
    float studentGrade[students][grades];

    printf("Hello! This is a grade average calculator, enter up to 3 marks per student...\n\n\n");
    system("PAUSE");
    system("CLS");

    calculatingGrade(*studentGrade);
return 0;
}

2 个答案:

答案 0 :(得分:0)

如果将数组传递给函数,则必须像这样传递它

Students

并且不能首先取消引用它。

在函数calculatingGrade(studentGrade); 中,您正在阴影变量calculatingGrade,但没有对其进行初始化。如果调高了编译器的警告级别,则应警告您使用未初始化的变量。您还声明了该函数以返回averages,但应返回float,因为它不返回任何内容。

这应该有效:

void

答案 1 :(得分:0)

这里有两个主要问题。

首先,您打错了calculatingGrade

calculatingGrade(*studentGrade);

通过取消引用数组,可以在函数需要float[3]时传递类型为float[4][3]的参数。删除取消引用:

calculatingGrade(studentGrade);

第二,您正在向averages[i]添加值,但从未提供初始值。这意味着起始值是不确定的,因此它可以是0或其他某个随机值。这就是为什么您看到随机结果的原因。

在内部循环之前将其设置为0:

for(i=0; i < students; i++){
    averages[i] = 0;
    for(j=0; j < grades; j++){
        averages[i] += (studentGrade[i][j]);
    }
    ...

除了这两点之外,main应该始终返回int,而calculatingGrade应该返回void,因为您没有返回任何值。