c++ - 从函数返回数组 (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;
}
解决方案
数组不能从函数返回。这是使用向量而不是数组的一个很好的理由(还有更多)。
但是如果你想继续使用数组,你应该使用指针来模拟从你的函数返回一个数组。
在此示例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。
推荐阅读
- python - 使用 set 和 list 作为 collection_class 的两个关联代理
- python - 在特定持续时间内运行 Python 函数
- apache-kafka-streams - 如何从 ValueTransformer 中的 Punctuator 实例向下游转发事件?
- excel - 在 databodyrange 中创建一个范围
- php - 使用 rest api 更新详细信息时出错
- c# - 将 Excel 数据与 Microsoft SQL 数据库进行比较
- excel - 避免使用 worksheet.activate 来执行代码
- java - Spring Boot 2.1.5 Java 11 模块,组装 JAR 时出错:无法创建模块化 JAR 文件。JDK jar 工具以 1 退出 -> [Help 1]
- wpf - 如何在 XAML 中声明一组自定义对象并支持绑定
- python - Jinja2 列表未定义