【问题标题】:Floating point exception error while counting even numbers average计算偶数平均值时出现浮点异常错误
【发布时间】:2019-10-05 21:49:30
【问题描述】:

我试图用 c++ 求偶数平均值,我的代码似乎很好,它计算一切都很好,但是当我输入 n 作为 2 或 n 作为 1 时,我得到浮点异常错误。

#include <iostream>
using namespace std;

int main()
{
    int kiekis = 0, sum = 0, vidurk = 0, n;
    cin >> n;

    if (n < 2) {
        cout << "NO" << endl;
    }

    else if (n == 2) {
        cout << n / 2 << endl;
    }
    else {
        for (int i = 1; i <= n; i++) {
            if (i % 2 == 0) {
                kiekis++;
                sum += i;
            }
        }
    }
    vidurk = sum / kiekis;
    cout << vidurk << endl;

    return 0;
}

【问题讨论】:

  • 逐步完成您的代码。你输入1,接下来会发生什么?循环调用了多少次?循环结束时sumkiekis 的值是多少?

标签: c++


【解决方案1】:

改变

vidurk = sum / kiekis;

vidurk = kiekis == 0 ? sum : (sum / kiekis);

【讨论】:

    【解决方案2】:

    vidurk = sum / kiekis; 被零除,除非 else 运行。

    【讨论】:

      【解决方案3】:

      在此声明中

      vidurk = sum / kiekis;
      

      赋值右侧变量的值为零

      int kiekis = 0,sum = 0,vidurk = 0,n;
          ^^^^^^^^^^^^^^^^^^ 
      

      因为当 n 等于 1 或 2 时,变量不会改变。

      所以在输出平均值之前你应该检查kiekis是否等于0。

      【讨论】:

      • 我应该如何解决它?因为如果我从中删除“= 0”,则代码不再计算平均值
      • @xdarkestshadow 例如,您可以在输出结果之前检查 kiekis 是否等于 0。还要考虑到在表达式中使用了整数运算。将变量 sum 定义为 float 类型。
      【解决方案4】:

      是的,只要输入 2 或 1,sum 和 kiekis 的值就会保持为 0。 所以 vidurk 的值为 0/0 不确定的形式.. 随便放

      vidurk = sum / kiekis; cout

      【讨论】:

        猜你喜欢
        • 2021-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多