【发布时间】:2020-05-07 13:30:45
【问题描述】:
我的程序应该取 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 风格的数组,使用 std::array 或 std::vector
-
如果要返回数组,为什么要使用“int”作为返回类型?
-
return avg[10];-- 用你自己的话解释这行应该做什么。还有does this help? -
@PaulMcKenzie 我的意思是让这一行返回数组以返回数组
avg -
你不会从函数中返回数组。您可以传入一个指向要填充函数的数组的指针,返回一个适当分配的数组指针 (C),或者返回一个
std::vector<>(C++)。这是一个完整的列表。偏离它,你会后悔那个决定。