首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用多维数组C获取5名学生的平均人数

使用多维数组C获取5名学生的平均人数
EN

Stack Overflow用户
提问于 2018-10-30 16:56:42
回答 2查看 70关注 0票数 0

我想知道是否有人能告诉我,我的代码做错了什么,它会编译,但在某个地方,信息会被搞砸。我是新来的,所以我缺乏找到问题所需要的知识。谢谢!

代码语言:javascript
运行
复制
#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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-30 17:15:48

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

代码语言:javascript
运行
复制
calculatingGrade(studentGrade);

千万不要先放弃它。

在您的函数calculatingGrade中,您正在跟踪变量averages,但没有初始化它。如果您打开编译器的警告级别,它应该警告您使用未初始化的变量。您还声明了这个函数来返回float,但是它应该是void,因为它不返回任何东西。

这应该是可行的:

代码语言:javascript
运行
复制
#include<stdlib.h>
#include<stdio.h>

const int students = 4;
const int grades = 3;

void calculatingGrade(float studentGrade[students][grades]) //no return value
{
    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++){
        averages[i] = 0; //initializing
        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]);
    }
return;
}
int main() //main should return int
{
    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); //pass array correctly
return 0;
}
票数 0
EN

Stack Overflow用户

发布于 2018-10-30 17:25:40

这里有两个主要问题。

首先,您不正确地调用calculatingGrade

代码语言:javascript
运行
复制
calculatingGrade(*studentGrade);

通过取消引用数组,当函数需要float[3]时,您将传递一个类型为float[4][3]的参数。删除取消引用:

代码语言:javascript
运行
复制
calculatingGrade(studentGrade);

第二,您正在向averages[i]添加值,但从不给出初始值。这意味着起始值是不确定的,所以它可以是0或其他一些随机值。这就是你看到随机结果的原因。

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

代码语言:javascript
运行
复制
for(i=0; i < students; i++){
    averages[i] = 0;
    for(j=0; j < grades; j++){
        averages[i] += (studentGrade[i][j]);
    }
    ...

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53069329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档