【问题标题】:Can someone pinpoint where I am wrong?有人能指出我错在哪里吗?
【发布时间】:2020-12-28 14:51:01
【问题描述】:

我正在尝试为我的平均成绩制作一个计算器,但我似乎找不到我错在哪里。

#include <iostream>
#include <conio.h>
#include <cmath>

using namespace std;

int main()
{
  string subject[17] = {"Biology", "French"}; //"Sport", "Ed.Antreprenoriala", "Geografie", "Mate", "TIC", "Psihologie", "Romana", "Chimie", "Fizica", "Istorie", "Engleza", "Religie", "Info", "Desen", "Muzica"};
    int mark, numberOfMarks;
    float sumaNote = 0;
    double average, averageSum = 0, finalAverage;

    for(int i=0; i<2; i++){

        cout << subject[i] << ":" << "\n";
        cout << "How many marks?" << "\n";
        cin >> numberOfMarks;

        for(int j=0; j < numberOfMarks; j++){
            cin >> mark;
            sumaNote += mark;
        }
        average = sumaNote / numberOfMarks;

        averageSum += round(average);
    }

    cout << endl;

    finalAverage = averageSum/2;

    cout << finalAverage;

    getch();
    return 0;
    }

它应该像这样工作:
1) 从字符串数组中获取主题; 2)问我这门课得多少分; 3)平均分数的总和; 4)重复直到超出数组元素(主题) 5) 得到所有科目平均分的总和,对这些平均分并输出答案;

***每个非自然平均值都需要向上或向下舍入(因此使用了 round() 函数);

***一共17个科目,但我只用了2个做实验用;

示例:生物学: 多少分? 2 8 10(应该是(8+10)/2) 法语: 多少分? 3 7 9 10(应该是(7+9+10)/3

输出应该是 9+9/2 = 9

但我的代码没有这样做,并且无法弄清楚原因

【问题讨论】:

  • 但我的代码没有这样做,也无法弄清楚为什么这就是调试器的用途。使用它来查看您的代码实际在做什么。调试通常涉及一次执行代码 1 行,查看每一步的变量。调试不是按下播放按钮并期待调试器告诉你一些有用的东西。
  • 您不应该有时将sumaNote 重置(归零)吗?在调试器中花一分钟应该可以帮助您找到这一点。
  • 是的,在您计算出平均值后,您不想将之前的总和用于不同的主题。
  • 我不明白为什么人们将答案放在 cmets 中,而它本来可以是答案。其他人可以在答案中使用它,并获得积分。
  • 除了您得到的答案:sumaNote 最好是整数类型,并在average = static_cast&lt;double&gt;(sumaNote) / numberOfMarks; 中转换为double

标签: c++ average


【解决方案1】:

您需要在i 循环中添加sumaNote = 0;

【讨论】:

    【解决方案2】:

    关于编译:

    1. 标头不再使用,主函数末尾的 getch() 也不再使用。
    2. 使用现代编译器,例如 CodeBlocks IDE、Repl Online Compiler,以避免使用过时的代码。

    程序:

    1. 添加了自动计算数组长度的len变量。
    2. 在进入下一个主题之前,循环结束时总和被重置为 0。
    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    int main()
    {
        string subject[] = {"Biology", "French"}; //"Sport", "Ed.Antreprenoriala", "Geografie", "Mate", "TIC", "Psihologie", "Romana", "Chimie", "Fizica", "Istorie", "Engleza", "Religie", "Info", "Desen", "Muzica"};
        int mark, numberOfMarks;
        float sumaNote = 0;
        double average, averageSum = 0, finalAverage;
    
        // Find length of array 
        int len = sizeof(subject)/sizeof(subject[0]);
    
        // changed limit to len
        for(int i=0; i<len; i++) {
    
            cout << subject[i] << ":" << "\n";
            cout << "How many marks?" << "\n";
            cin >> numberOfMarks;
    
            for(int j=0; j < numberOfMarks; j++){
                cin >> mark;
                sumaNote += mark;
            }
    
            average = sumaNote / numberOfMarks;
            averageSum += round(average);
    
            sumaNote = 0; // important to reset sum
        }
    
        cout << endl;
    
        finalAverage = averageSum/len;
    
        cout << finalAverage;
    
        return 0;
    }
    

    【讨论】:

    • 好吧,我确实使用了代码块,并且我使用了 getch(),因为据我所知,它曾经能够从 .cpp 文件中获取 .exe 文件(我不知道这是否会产生任何影响)感觉,还是习惯了这些东西)
    猜你喜欢
    • 2021-12-08
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    相关资源
    最近更新 更多