2014-02-17 105 views
1

我对C++很陌生,只有C#,Python和JS的经验,所以对我很有帮助!查找数组C++中最高/最低元素的问题

我将用户输入的5分数存储在一个数组中。我关闭阵列并评估阵列中的分数以找到最低值和最高值。我需要放弃这两个,然后找到其他3个值的平均值。我的问题是,我没有找到最高/最低值。我有findLowest()和findHighest()中的逻辑,但为了测试它,我在main()中放入了相同的逻辑,以查看它在其传递之前是否工作,以及它是否工作。有人可以指导我在数组中找到最高/最低值吗?谢谢!

#include "stdafx.h" 
#include <iostream> 
#include <cmath> 
#include <iomanip> 
#include <algorithm> 

using namespace std; 

void getJudgeData(double score) 
{ 
    cin >> score; 
    if (score > 10 || score < 0) 
    { 
     cout << "Invalid score, please enter again." << endl; 
     cin >> score; 
    } 
    else 
    { 
    cout << "Thank you." << endl; 
    } 
} 

double findLowest(double scores[]) 
{ 
    double lowScore = *min_element(scores, scores+5); 

    return lowScore; 
} 

double findHighest(double scores[]) 
{ 
    double highScore = *max_element(scores, scores+5); 

    return highScore; 
} 
double calcScore(double scores[]) 
{ 
    double finalScore; 
    double sum = 0; 
    double newScore[3] = {}; 

    double lowScore = findLowest(scores); 
    double highScore = findHighest(scores); 
    int j = 0; 
    for (int i=0; i < 5; i++) 
    { 
     if (scores[i] != lowScore && scores[i] != highScore) 
     { 
      scores[i] = newScore[j]; 
      j++; 
     } 
    } 
    for (int k=0; k < 3; k++) 
    { 
     sum = sum + newScore[k]; 
    } 
    finalScore = sum/3; 
    return finalScore; 
}  

int main()   
{ 
    double finalScore; 
    double judgeScores[5] = {}; 
    for (int i = 0; i < 5; ++i) 
    { 
     cout << "Enter judge " << i + 1 << "'s score: "; 
     getJudgeData(judgeScores[i]); 
    } 
    finalScore = calcScore(judgeScores); 
    cout << "Highest score is: " << *max_element(judgeScores, judgeScores+5) << endl; 
    cout << "The final score is: " << finalScore << endl; 

    // This prevents the Console Window from closing during debug mode 
    cin.ignore(cin.rdbuf()->in_avail()); 
    cout << "\nPress only the 'Enter' key to exit program: "; 
    cin.get(); 

    return 0; 
} 
+1

除了一切,你将有一些问题,如果有人提出在以同样的比分多次,它正好是最高或最低得分了。 –

+0

尝试使用矢量,对矢量进行排序,删除最高和最低的元素(第一个和最后一个)。 :-) –

回答

6

这是因为getJudgeData的值取double score。结果,最终用户的输入仍然局限于getJudgeData函数;您传递给该函数的变量judgeScores[i]保持不变。

添加符号来解决这个问题:

void getJudgeData(double &score) { 
    ... 
} 

现在参数是按引用传递,让getJudgeData进行修改它。

2

看起来您的大部分逻辑都可以,除非您的作业已换入calcScore()。您有:

scores[i] = newScore[j]; 

你大概的意思是:

newScore[j] = scores[i]; 

另外,要警惕:如果您的输入数组包含多个分数等于最小或最大,您将有不到3剩余删除后他们。

编辑:哦,是的,也是别人说的通过参考getJudgeData()传递的价值。

+0

伟大的观点。我如何适应相同的分数? – jacksonSD

+1

您可以删除它们并跟踪您复制到'newScore'的实际项目数(并使用该计数而不是假设3;在您的情况下'j'将留下复制的项目数量[并小心处理0件物品]),或者你可以决定留下重复的东西,只删除最低和最高的一个(总是离开3)。取决于你希望它的行为。 –

4

变化

void getJudgeData(double score) 

void getJudgeData(double &score) 
相关问题