如何在我的代码中修复此错误?

时间:2017-11-04 12:38:51

标签: c++

分配: 从Assignment 3.0(之前的作业)开始,修改averageGrades()函数,使其不考虑值为-1的成绩。在这种情况下,-1表示分配尚未完成,因此不应考虑平均值。 我正在使用一个名为testbed的程序来测试我的工作。它的作用类似于用户,并比较实际和预期的结果。我在一次测试中得到一个舍入错误并且通过了其他测试,我不确定原因: 测试1 有一个-1,有9个项目要平均:    90 + 86 + 95 + 76 + 92 + 83 + 100 + 87 + 91 = 800    800/9 = 88.888 注意我们在这里处理整数,所以值被截断了!

  

1年级:90   2级:86   3年级:95   4年级:76   5年级:92   6年级:83   7年级:100   8年级:87   9年级:91   10年级:-1   平均成绩:88%   测试1通过。

测试2 列表中有一个-1,但它位于中间。    90 + 86 + 95 + 92 + 83 + 100 + 87 + 91 + 76 = 800    800/9 = 88.888

  

1年级:90   2级:86   3年级:95   4年级:-1   5年级:92   6年级:83   7年级:100   8年级:87   9年级:91   10年级:76   平均成绩:89%\ n   Exp:平均成绩:88%\ n   测试2失败。

测试3 这是一个特例。由于所有值均为-1,因此总和为0。 但是,如果您尝试计算平均值,则会得到0/0。 由于我们不能除以零,因此会崩溃。你需要检查一下 对于这种情况,使用IF语句

  

1年级:-1   2级:-1   3级:-1   4年级:-1   5年级:-1   6年级:-1   7年级:-1   8年级:-1   9年级:-1   10年级:-1   平均水平: - -%   测试3通过。   1/3测试失败。   最后:这是我的代码:

Please help with this C++ assignment I'm working on?

从Assignment 3.0(之前的作业)开始,修改meanGrades()函数,使其不考虑值为-1的成绩。在这种情况下,-1表示分配尚未完成,因此不应考虑平均值。 我正在使用一个名为testbed的程序来测试我的工作。它的作用类似于用户,并比较实际和预期的结果。我在一次测试中得到一个舍入错误并且通过了其他测试,我不确定原因: 测试1 有一个-1,有9个项目要平均:    90 + 86 + 95 + 76 + 92 + 83 + 100 + 87 + 91 = 800    800/9 = 88.888 注意我们在这里处理整数,所以值被截断了!

  

1年级:90   2级:86   3年级:95   4年级:76   5年级:92   6年级:83   7年级:100   8年级:87   9年级:91   10年级:-1   平均成绩:88%   测试1通过。

测试2 列表中有一个-1,但它位于中间。    90 + 86 + 95 + 92 + 83 + 100 + 87 + 91 + 76 = 800    800/9 = 88.888

  

1年级:90   2级:86   3年级:95   4年级:-1   5年级:92   6年级:83   7年级:100   8年级:87   9年级:91   10年级:76   平均成绩:89%\ n   Exp:平均成绩:88%\ n   测试2失败。

测试3 这是一个特例。由于所有值均为-1,因此总和为0。 但是,如果您尝试计算平均值,则会得到0/0。 由于我们不能除以零,因此会崩溃。你需要检查一下 对于这种情况,使用IF语句

  

1年级:-1   2级:-1   3级:-1   4年级:-1   5年级:-1   6年级:-1   7年级:-1   8年级:-1   9年级:-1   10年级:-1   平均水平: - -%   测试3通过。   1/3测试失败。   最后:这是我的代码:

/***********************************************************************
* Program:
*    Assignment 31, Array Design
*    Sister Unsicker, CS124
* Author:
*    Lanie Molinar
* Summary: 
*    This program gets 10 grades from the user, averages them, and displays the
*    result.
*
*    Estimated:  2.0 hrs   
*    Actual:     1.5 hrs
*      I had some difficulty getting the style checker to not complain about 
*      my NUMGRADES constant. First, it didn't like the _ when I tried to 
*      name it NUM_GRADES, and when I tried using NUM-GRADES, it complained 
*      about there not being white space between operators. It finally stopped 
*      complaining when I used NUMGRADES.
************************************************************************/

#include <iostream>
using namespace std;

#define NUMGRADES 10

/***********************************************************************
* The function getGrades gets 10 grades from the user, passing them to main().
***********************************************************************/
void getGrades(float grades[], int num)
{
   for (int i = 0; i < num; i++)
   {
      cout << "Grade " << i + 1 << ": ";
      cin >> grades[i];
   }
   return;
}

/***********************************************************************
* The function averageGradesGrades averages the grades inputted by the user
* and returns that value to main().
***********************************************************************/
void averageGrades(float grades[], int num)
{
   float sum = 0;
   int notCompleted = 0;
   int i = 0;
   cout.setf(ios::fixed);
   cout.precision(0);
   while (i < num && (i + notCompleted != num))
   {
      if (grades[i] != -1)
      {
         sum += grades[i];
         i++;
      }
      else
         notCompleted++;
   }
   float average = sum / (num - notCompleted)- 1;
   if (notCompleted != num)
      cout << average;
   else
      cout << "---";
   return;
}

/**********************************************************************
*    The main function calls getGrades and averageGrades and displays the 
*   result returned by averageGrades.
***********************************************************************/
int main()
{
   float grades[NUMGRADES];
   getGrades(grades, NUMGRADES);
   cout << "Average Grade: ";
   averageGrades(grades, NUMGRADES);
      cout << "%\n";
   return 0;
}

我在发布之前尝试了一些事情。我将 - 1添加到我的&#34;浮动平均值= sum /(num - notCompleted -1),&#34;并修复了一些事情。在那之前我的错误很多。我还将我在这里的许多注意事项转换为浮点数,这也有所帮助,但我没有做任何事情就摆脱了这个错误。

1 个答案:

答案 0 :(得分:0)

我最终想出了这个。这是我提出的代码:

/***********************************************************************
* Program:
*    Assignment 31, Array Design
*    Sister Unsicker, CS124
* Author:
*    Lanie Molinar
* Summary:
*    This program gets 10 grades from the user, averages them, and displays 
*    the result. It doesn't count -1 as a completed assignment, so it won't 
*    count it when it computes the average.
*
*    Estimated:  2.0 hrs
*    Actual:     4.0 hrs
*      I had a lot of trouble making my code pass all 3 tests in testbed. I 
*      kept failing at least one every time. After working on it for a while,
*      though, I finally got it working.
************************************************************************/

#include <iostream>
using namespace std;

#define NUMGRADES 10

/***********************************************************************
* The function getGrades gets 10 grades from the user, passing them to main().
***********************************************************************/
void getGrades(int grades[], int num)
{
   for (int i = 0; i < num; i++)
   {
      cout << "Grade " << i + 1 << ": ";
      cin >> grades[i];
   }
   return;
}

/***********************************************************************
* The function averageGradesGrades averages the grades inputted by the user
* and returns that value to main(). It doesn't count -1's as completed 
* assignments, and if the user enters -1 for all grades, it outputs dashes 
* instead of the average.
***********************************************************************/
void averageGrades(int grades[], int num)
{
   int sum = 0;
   int notCompleted = 0;
   int average;
   for (int i = 0; i < num; i++)
   {
      if (grades[i] != -1)
         sum += grades[i];
      else
         notCompleted++;
   }
   if (sum != 0)
      average = sum / (num - notCompleted);
   if (notCompleted != num)
      cout << average;
   else
      cout << "---";
}

/**********************************************************************
*    The main function calls getGrades and averageGrades and displays the
*   result returned by averageGrades.
***********************************************************************/
int main()
{
   int grades[NUMGRADES];
   getGrades(grades, NUMGRADES);
   cout << "Average Grade: ";
   averageGrades(grades, NUMGRADES);
   cout << "%\n";
   return 0;
}