用于计算平均值的C ++程序

时间:2014-02-18 23:33:31

标签: c++

我正在网上介绍C ++,这对我来说太快了。我掌握了一般概念,但主要是它。到目前为止,我已经写了大约5个程序,而且我在逻辑上解决这个问题时遇到了问题,并且有两个功能需要使用,这是我以前没见过的。任何帮助和方向都会很棒。这是书中的问题:

  

编写一个计算一组考试成绩平均值的程序,   其中组中的最低分数被删除。它应该使用   以下功能:

     
      
  1. void getScore():应该询问用户测试分数,在regerence参数变量中将其弄疼,然后对其进行验证。这个功能应该是   对于要输入的五个分数中的每一个,由 main 调用一次。

  2.   
  3. void calcAverage():应计算并显示四个最高分的平均值。这个功能应该只召唤一次   main,应该通过五个考试成绩。

  4.   
  5. int findLowest():应找到并返回传递给它的五个分数中的最低分。它应该被称为calcAverage,它使用   用于确定五个分数中的哪一个下降。

  6.         

    输入验证:不接受低于0或大于100的测试分数。

到目前为止,这是我所拥有的,我知道它看起来很糟糕,但是我越乱,我做的伤害越多。我使用calcAverage标头和void getScore原型后的另一个时出错,但我不知道为什么,我肯定不知道如何修复它们。在我使用cin.get获得测试分数之后,我不明白他们究竟去哪里或者如何从他们的藏身处召唤他们。我在书中完全错过了这个概念。我知道使用&&运算符我可以使用设置限制的语句 (0> =&&< = 100)但我不知道放在哪里。就像我说的那样,任何帮助以及对原因的​​任何解释都会有很大的帮助。我正在使用的这本书是由Tony Gaddis的C ++第7版开始的,如果这有帮助的话。

//This program calculates the average of a group of test scores
//and removes the lowest score.
#include <iostream>
using namespace std;

void getScore(int &, int &, int &, int &, int &)
void calcAverage(score1, score2, score3, score4)
void findLowest(num)

int main()
{
    int num1;
    int num2;
    int num3;
    int num4;
    int num5;
    int score1;
    int score2;
    int score3;
    int score4;

    int findLowest();       
    calcAverage(score1, score2, score3, score4);
    getScore(num1, num2, num3, num4, num5);

    cout << "Enter 5 Test Scores" << endl;
    cin.get ();

    void getScore(int &calcAverage, int &num1, int &num2, int &num3, int &num4, int &num5)
    {
        void findLowest(num1, num2, num3, num4, num5)

        void calcAverage((score1 &+ score2  + score3 + score4)/4);
        {
            calcAverage = (score1 + score2 + score3 + score4)/4;
        }
    }

    cout << "The average is " << calcAverage << endl;
    cout << calcAverage << "." << endl;

    return 0;    
}

2 个答案:

答案 0 :(得分:1)

正如我从描述中所理解的那样, segerence参数变量表示一个数组。所以不是定义(为什么只有四个变量?)

int score1;
int score2;
int score3;
int score4;

你应该声明一个数组。例如

const int N = 5;
int scores[N];

同样,从赋值函数开始,getScore应声明为

void getScore( int scores[], int i );

对于数组的每个元素,您应该调用此函数,将数组和数组的下一个元素的索引传递给它。

相应的函数calcAverage和findLowest应该按照以下方式进行decalred

void calcAverage( int scores[], int n );
int findLowest( int scores[], int n );

其中第二个参数指定数组中元素的数量。

请注意,您可能无法在另一个函数中定义一个函数。所有功能都应在使用前声明。

函数main可以通过以下方式定义

int main()
{
   const int N = 5;
   int scores[N];

   for ( int i = 0; i < N; i++ ) getScore( scores, i );

   calcAverage( scores, N );

   return 0;
}
编辑:对不起。我将 regerence 一词视为序列我认为您的意思是参考

在这种情况下,您确实应该声明五个单独的变量。

因此函数声明将显示为

void getScore( int &score );
void calcAverage( int score1, int score2, int score3, int score4, int score5 );
int findLowest( int score1, int score2, int score3, int score4, int score5 );

和main将显示为

int main()
{
   int score1;
   int score2;
   int score3;
   int score4;
   int score5;

   getScore( score1 );
   getScore( score2 );
   getScore( score3 );
   getScore( score4 );
   getScore( score5 );

   calcAverage( score1, score2, score3, score4, score5 );

   return 0;
}

我将展示函数findLowest

的定义
int findLowest( int score1, int score2, int score3, int score4, int score5 )
{
   int lowest = score1;

   if ( score2 < lowest ) lowest = score2;
   if ( score3 < lowest ) lowest = score3;
   if ( score4 < lowest ) lowest = score4;
   if ( score5 < lowest ) lowest = score5;

   return lowest;
}

当然,编写

会更简单
int findLowest( int score1, int score2, int score3, int score4, int score5 )
{
   return std::min( { score1, score2, score3, score4, score5 } );
}

如果您了解标准算法。 :)

答案 1 :(得分:0)

您需要考虑该程序要求您执行的操作,然后逐步构建它,而不是一次性构建它。

从这开始:

#include <iostream>
using namespace std;

int main() {

}

然后一次添加小块。想想每个功能的用途。

例如,从getScore()函数开始。您目前正在尝试将代码用于询问程序中的分数而不是getScore函数。说明说您编写了该函数,然后每次需要获取数字时都使用该函数。

您应该将所有函数声明放在main函数之上。您将分数作为参数,但请记住参数是您放入函数的参数。看起来应该更像这样:

#include <iostream>
using namespace std;

int getScore(){
    int v;                           //Create temporary variable v
    cout << "Enter a score: " << ;   //ask user for score
    cin >> v ;                       // user enters score and it is stored in v
    cout << endl;                    //new line for pretty formatting
    return v;                        //function returns v
}

int main() {

    int num1 = getScore();           //Everytime you use the function it will ask for a number.
    int num2 = getScore();

}

此示例将存储前两个数字。然后,您可以添加代码以使用cout打印数字。然后编译,修复任何错误,现在你知道你的部分代码是有效的。然后转到另一个功能。这种方法使程序不那么令人生畏。