所以问题是在上面的评分程序中添加选择排序功能。程序应按升序排序显示等级列表,我们给出了选择排序功能并且无法更改它,我的问题是如何从主函数中调用它
这是我的代码`
#include <iostream>
using namespace std;
double average(double x[], int n);
double maximum(double x[], int n);
double minimum(double x[], int n);
int nAboveAvg(double x[], int n);
void sort(double x[], int npts);
int main()
{
double grades[50];
int ngrades;
cout<<"How many grades? (max = 50) ";
cin>>ngrades;
//create for loop to get grades from user
for(int i = 0; i<ngrades; i++)
{
cout<<"Enter grade ";
cin>> grades[i];
while(grades[i]< 0 || grades[i] > 100)
{
cout<<"Invalid grade- please enter again"<<endl;
cin>>grades[i];
}
}
//call the functions
double avg = average(grades, ngrades);
double max = maximum(grades, ngrades);
double min = minimum(grades, ngrades);
int nAbove = nAboveAvg(grades, ngrades);
//Calling the sort function
sor = sort(grades, ngrades);
//display results
cout << "Average = " << avg << endl;
cout << "# above average = " << nAbove << endl;
cout<<"Max value is = "<<max<<endl;
cout<<"Min value is = "<<min<<endl;
cout<<"Array sorted "<<sor<<endl;
}
void sort(double x[], int npts)
{
double min_value;
int min_index;
double temp;
for(int i= 0; i<npts - 1; i++)
{
for(int j = i + 1; j<npts; j++)
{
if(x[j] < min_value)
{
min_value = x[i];
min_index = j;
}
}
temp = x[min_index];
x[min_index] = x[i];
x[i] = temp;
}
return;
}
`
答案 0 :(得分:1)
我认为你的问题是你希望“sort”函数返回一个值;它没有。
“sort”函数不返回值,因为它是使用“void”返回值定义的,因此尝试从变量“sort”中检索任何数据都不起作用(或者不应该)。
通过引用将数组传入函数;这意味着一旦函数返回,sort函数中对数组所做的所有更改仍然存在;因此,您应该输出“等级”数组,而不是不存在的返回值。
编辑:我相信你的问题在于:
cout<<"Array sorted "<<sor<<endl;
尝试这样的事情:
for (int i = 0; i < ngrades; ++i)
{
cout << grades[i] << " ";
}
cout << endl;
编辑2:另外,更改行:
sor = sort(grades, ngrades);
只是:
sort(grades, ngrades);
编辑3:事实证明“排序”功能存在一些问题。第一个也是最糟糕的问题是变量“min_value”正在被使用而没有被定义。
一旦我改变了这个,程序就会运行,但“sort”功能无法正常工作。 这让我想到了第二个问题:每次迭代“i”都需要重置变量“min_value”和“min_index”。
最后一个问题是,在“j”循环中,“min_value”被分配给“x [i]”,而它应该被分配给“x [j]”:
min_value = x[i];
min_index = j;
应该是:
min_value = x[j];
min_index = j;
我修复了该功能并对其进行了测试以确保其正常工作。 这是代码。
void sort(double x[], int npts)
{
double min_value;
int min_index;
double temp;
for (int i = 0; i < npts - 1; i++)
{
min_value = x[i];
min_index = i;
for (int j = i + 1; j < npts; j++)
{
if (x[j] < min_value)
{
min_value = x[j];
min_index = j;
}
}
temp = x[min_index];
x[min_index] = x[i];
x[i] = temp;
}
return;
}