(C ++)试图完成一个快速程序,但是我不确定哪里出错了?

时间:2018-12-05 23:46:05

标签: c++ arrays pointers function-pointers selection-sort

程序说明如下。尝试编译时,出现错误,提示'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; 
}

1 个答案:

答案 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; 
    }
}