测试成绩演示C ++

时间:2015-07-10 18:53:19

标签: c++

我被指派做一个得分为6分的程序,得分最低,然后取得最高5分的平均分。我不明白为什么我不能在我的calcAverage函数中正确使用最低变量。

      #include <iostream>
        #include <iomanip>
        using namespace std;


void getScore(int &Score);
void calcAverage(int, int, int, int, int, int, int &lowest);
int findLowest(int s1, int s2, int s3, int s4, int s5, int s6, int &lowest);


int main()
{

    int s1, s2, s3, s4, s5, s6, lowest; 

    // Call on getScore function to iterate through each of the six scores
    getScore(s1);
    getScore(s2);
    getScore(s3);
    getScore(s4);
    getScore(s5);
    getScore(s6);

    // Call the calcAverage to display average of five highest scores
    calcAverage(s1, s2, s3, s4, s5, s6, lowest);

    system("pause");
    return 0;

}


void getScore(int &Score)
{
    cout << "Please enter a test score (Value betweent 1 and 100): ";
    cin >> Score;

    // Validate the score input
    while (Score < 1 || Score > 100)
    {
        cout << "Invalid input, Please enter a test score value from 0 to 100! ";
        cin >> Score;
    }
}

int findLowest(int s1, int s2, int s3, int s4, int s5, int s6, int lowest)
{

    lowest = s1;

    if (s2 < lowest)
        lowest = s2;
    else if (s3 < lowest)
        lowest = s3;
    else if (s4 < lowest)
        lowest = s4;
    else if (s5 < lowest)
        lowest = s5;
    else if (s6 < lowest)
        lowest = s6;

    cout << "The lowest test score is: " << lowest << endl;

    return lowest;

}


void calcAverage(int s1, int s2, int s3, int s4, int s5, int s6, int &lowest)

{
    int findLowest(int, int, int, int, int, int, int);
    double avg;

    findLowest(s1, s2, s3, s4, s5, s6, lowest);


    avg = ((s1 + s2 + s3 + s4 + s5 + s6) - lowest) / 5.0;


    cout << fixed << showpoint << setprecision(2);
    cout << "The average of the five highest scores is: " << avg << endl;

}

2 个答案:

答案 0 :(得分:2)

您写道:

    int findLowest(int s1, int s2, int s3, int s4, int s5, int s6, int &lowest);
    ...
    int findLowest(int s1, int s2, int s3, int s4, int s5, int s6, int lowest)
    {
...
void calcAverage(int s1, int s2, int s3, int s4, int s5, int s6, int &lowest)

{
    int findLowest(int, int, int, int, int, int, int);

注意缺少&amp;在定义中。那应该与宣言相符。第二个声明(匹配错误的定义)不应该存在。我假设你添加了第二个声明来摆脱你误解的编译时错误。

编辑:其他人指出了另一个错误(当你想要else if时使用if),一旦你修复了我描述的错误就会显示错误。

答案 1 :(得分:1)

JSF的答案指出了一个需要解决的问题。

风格说明:您经常声明findLowest。声明一次,定义一次并随意使用它。但假设数据(10,7,5 ......)

lowest = s1;

if (s2 < lowest)
    lowest = s2;
else if (s3 < lowest)

第一行中最低的是10。

然后s2&lt; 10最低= 7。

现在s3是&lt; 7,但它不会被执行,因为它发生在else分支和s2&lt;最低的是真的。

最后你的错误值。

另一种风格的注释:你有一个函数,它接受6个输入参数并从中计算一个值。这是一个不传递引用但仅返回该值的用例,无论如何都是这样做。

int findLowest(int s1, int s2, int s3, int s4, int s5, int s6);

并将其命名为

lowest=findLowest(s1,s2,s3,s4,s5,s6);

将清除你的大脑引用,else语句和多个函数声明。