1

コードは、最低スコアを削除してから計算しないことを除けば、うまく機能します。

出力例:

何点のテストスコアを入力しますか?
3
必要なテスト スコアを入力します。
スコア 1: 58
スコア 2: 96
スコア 3: 78
テスト スコア 最低スコアの平均: 116.00

問題: 出力例でわかるように、これは正しくありません。最低値を含まない平均値を表示する必要があります。私のコードを見直して、どこが間違っているのか教えていただけますか? 私も何人かの人々にそれを見てもらいましたが、彼らは私のコードにバグを見つけることができませんでした. 以下は私のコードです:

コード:

#include <iostream>
#include <iomanip>

using namespace std;


int main()
{
    //To dynamically allocate an array, Accumulator, to hold the average scores.
    double *score;      
    double total = 0;  
    double average; 


    //int for counter, to hold the number of test scores.
    int count; 
    int numTest; 


    // To obtain the number of test scores the user would like to enter.
    cout << "How many test scores would you like to enter? " << endl;
    cin >> numTest; 


    //Dynamically allocates an array large enough to hold the amount of test scores to enter.
    score = new double[numTest];


    //Get the test scores.
    cout << "Enter the test score desired. " << endl;
    for (count = 0; count < numTest; count++)
    {
        cout << "Score " << (count + 1) << ": ";
        cin >> score[count];
    }

    //Find lowest score.
    int lowest = score[count];
    for (count = 1; count < numTest; count++)
    {
        if (score[count] < lowest) 
            lowest = score[0];
    }


    //Calculate the total test scores.
    for (count = 0; count < numTest; count++)
    {
        total += score[count];
        total -= lowest;
    }

    //Calculate the test scores average minus the lowest score. 
    average = total / (numTest - 1);

    //Display the results
    cout << fixed << showpoint << setprecision(2);
    cout << "Test Scores Average with the lowest dropped is: " << average << endl;

    //Free dynamically allocated memory
    delete [] score;
    score = 0; // Makes score point to null.

    system("pause");
    return 0;
}
4

4 に答える 4

4

このコードには 3 つの重大なエラーがあります。

まず、 の初期値lowest:

//Find lowest score.
int lowest = score[count];  // ERROR
for (count = 1; count < numTest; count++)
{
    if (score[count] < lowest) 
        lowest = score[0];
}

エラーは次のとおりです。

int lowest = score[count];

これである必要があります:

int lowest = score[0];

次に、ループ内で:

lowest = score[0]; // ERROR

次のようにする必要があります。

lowest = score[count];

したがって、ループは次のようになります。

//Find lowest score.
int lowest = score[0];
for (count = 1; count < numTest; count++)
{
    if (score[count] < lowest) 
        lowest = score[count];
}

最後に、合計の計算も間違っています。すべてのスコアの合計を計算した、最低スコアを引き、 1 を引いたスコアの数で割ります。

//Calculate the total test scores.
for (count = 0; count < numTest; count++)
{
    total += score[count];
    total -= lowest; // ERROR: should not be here. should be AFTER the loop
}

する必要があります:

for (count = 0; count < numTest; count++)
    total += score[count];
total -= lowest; // note: NOT in the loop
于 2012-10-31T17:38:30.550 に答える
1

これを行う場合:

//Find lowest score.
int lowest = score[count];

前のループを抜けたばかりなので、count変数は等しいです。numTest

あなたは書くべきです

//Find lowest score.
int lowest = score[0]; // Error here
for (count = 1; count < numTest; count++)
{
    if (score[count] < lowest) 
        lowest = score[count]; // Error here too
}
于 2012-10-31T17:39:39.183 に答える
0

コードは、ループのたびに減算lowestします。totalその行をループの外に移動すると、うまく機能します。

EDIT:そして、@WhozCraigが指摘するlowestように、正しい初期値を取得していません。

于 2012-10-31T17:38:42.157 に答える
0

この行で:

int lowest = score[count];

何だと思いますcountか?

于 2012-10-31T17:39:31.100 に答える