首页 > 解决方案 > 从函数返回数组 (C++)

问题描述

我的程序应该为 10 名学生分别取名字和 5 分,并输出他们相应的平均分和成绩。我的函数应该计算avgmarks并将avg_grade这些作为数组返回给主函数。使用语句return avg[10]return gr[10]不起作用。我知道指针变量可以在这里使用,但我不知道如何实现它们以使我的程序正常工作。

#include <iostream>
#include <string>
using namespace std;
void readnames(string p[]);
int readmarks(int p[10][5]);
int avgmarks(int p[10][5]);
char avg_grade(int p[10]);
void displayresults(string n[], int m[], char g[]);
int main()
{
    string names[10];
    readnames(names);
    int marks [10][5];
    readmarks(marks);
    int avg_marks[10];
    avg_marks[10]=avgmarks(marks);
    char grade[10];
    grade[10]=avg_grade(avg_marks);
    displayresults(names, avg_marks, grade);
}
void readnames(string p[])
{
    for (int i=0;i<10;i++)
    {
        cout<<"Enter student "<<i+1<<"'s name:\n";
        cin>>p[i];
    }
}
int readmarks(int p[10][5])
{
    for (int i=0;i<10;i++)
    {
        cout<<"Enter student "<<i+1<<"'s marks:\n";
        for (int j=0;j<5;j++)
        {
            cin>>p[i][j];
        }
    }
}
int avgmarks(int p[10][5])
{
    int avg[10];
    int sum;
    for (int i=0;i<10;i++)
    {
        sum=0;
        for (int j=0;j<5;j++)
        {
            sum=sum+p[i][j];
        }

        avg[i]=(sum/5);
    }

    return avg[10];
}
char avg_grade(int p[10])
{   
    char gr[10];
    for (int i=0;i<10;i++)
    {
        if (p[i]>=90)
        {
            gr[i]='A';
        }
        if ((p[i]>=80)&&(p[i]<90))
        {
            gr[i]='B';
        }
        if ((p[i]>=70)&&(p[i]<80))
        {
            gr[i]='C';
        }
        if ((p[i]>=60)&&(p[i]<70))
        {
            gr[i]='D';
        }
        if ((p[i]>=50)&&(p[i]<60))
        {
            gr[i]='E';
        }
        if ((p[i]>=40)&&(p[i]<50))
        {
            gr[i]='F';
        } 
    }   
    return gr[10];
}
void displayresults(string n[], int m[], char g[])
{
    float ct;
    float sum=0;
    cout<<endl;
    for (int i=0;i<10;i++)
    {
        cout<<"Name: "<<n[i]<<"    Average Marks: "<<m[i]<<"    Grade: "<<g[i];
        cout<<endl;
    }
    for (int i=0;i<10;i++)
    {
        sum=sum+m[i];
    }
    ct=sum/10;
    cout<<"The class average is "<<ct<<endl;
}

标签: c++arraysfunction

解决方案


数组不能从函数返回。这是使用向量而不是数组的一个很好的理由(还有更多)。

但是如果你想继续使用数组,你应该使用指针来模拟从你的函数返回一个数组。

在此示例avg中是指向将接收返回值的数组的指针

void avgmarks(int p[10][5], int* avg)
{
    int sum;
    for (int i=0;i<10;i++)
    {
        sum=0;
        for (int j=0;j<5;j++)
        {
            sum=sum+p[i][j];
        }

        avg[i]=(sum/5);
    }
}

你像这样使用它

int avg_marks[10];
avgmarks(marks, avg_marks);

PS。你似乎有一个常见的(但对我来说很奇怪)新手误解,如果你有一个大小为 10 的数组(比如说),那么array[10]可以用来指代整个数组。请不要认为,如果您有一个大小为 10 的数组,那array[10]只是一个错误,因为大小为 10 的数组的有效索引是 0 到 9。


推荐阅读