程序说明如下。尝试编译时,出现错误,提示'cannot convert 'double' to 'double**' for argument
。
编写一个程序,该程序动态分配一个足够大的数组以容纳用户定义数量的测试分数。输入所有分数后,应将数组传递给以升序对它们进行排序的函数。应该调用另一个函数来计算平均分数。该程序应显示分数和平均值的排序列表,并带有适当的标题。
注意:我对使用C ++中的指针还很陌生,并且我确实意识到我的代码中的错误对于某些人来说可能很容易发现,所以请放轻松。另外,如果对我可以改进的地方或在哪里可以找到指向指针的其他引用有任何建议,那就太好了!
#include <iostream>
#include <iomanip>
using namespace std;
//Function Prototypes
void arrSelectionSort( double *[], int );
double testAverage( double *[], int );
int main() {
double *testScores; //To dynamically allocate an array
int numTest; //To hold the number of test - size of array
int count; //Counter variable
//User input
cout <<"Please enter the number of test scores: ";
cin >> numTest;
//Dynamically allocate an array for test scores
testScores = new double[numTest];
//Obtain the individual test scores from user
cout << "\nEnter each test score.\n";
for ( count = 0; count < numTest; count++ ) {
cout << "Test " << ( count + 1 ) << ": " << endl;
cin >> testScores[count];
}
//Function call to sorting algorithm
arrSelectionSort( testScores, numTest );
//Display sorted array
cout << "Here are the sorted test scores.\n";
for ( int x = 0; x < numTest; x++ ) {
cout << "\nTest " << (x+1) << ": " << testScores[x];
}
//Display average of all test scores
cout <<"\nAverage of all test scores is: " << testAverage( testScores, numTest );
//Free up allocated memory
delete [] testScores;
testScores = 0;
return 0;
}
void arrSelectionSort( double *arr[], int size ) {
int startScan, minIndex;
double *minElement;
for ( startScan = 0; startScan < ( size - 1 ); startScan++ ) {
minIndex = startScan;
minElement = arr[startScan];
for ( int index = startScan + 1; index < size; index ++ ) {
if (*(arr[index]) < *minElement) {
minElement = arr[index];
minIndex = index;
}
}
arr[minIndex] = arr[startScan];
arr[startScan] = minElement;
}
}
double testAverage( double *arr[], int size ) {
double average;
double total;
//Accumulating Loop
for ( int count = 0; count < size; count++ ) {
total += arr[count];
}
average = total/size;
return average;
}
答案 0 :(得分:2)
从您的函数参数中删除*
:
void arrSelectionSort( double arr[], int size );
double testAverage( double arr[], int size );
您要传递一个double
值的数组,而不是double*
指针的数组。
然后,在arrSelectionSort()
内,摆脱*
的用途,因为您要对值进行排序,而不是对指针进行排序:
void arrSelectionSort( double arr[], int size ) {
int startScan, minIndex;
double minElement;
for ( startScan = 0; startScan < ( size - 1 ); startScan++ ) {
minIndex = startScan;
minElement = arr[startScan];
for ( int index = startScan + 1; index < size; index ++ ) {
if (arr[index] < minElement) {
minElement = arr[index];
minIndex = index;
}
}
arr[minIndex] = arr[startScan];
arr[startScan] = minElement;
}
}