You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++程序触发EXC_ARITHMETIC错误,求排查除法问题根源

问题排查与修正方案

嘿,我一眼就揪出你代码里的问题了——你遇到的Thread 1: EXC_ARITHMETIC错误,本质是除零异常,咱们一步步理清楚:

错误根源分析

  1. 直接触发除零的点:你在循环里写了media = somma/i;,当循环下标i=0的时候,如果第一个输入的元素刚好满足a[i]>m && a[i]<n,程序就会执行somma/0,直接触发除零错误。
  2. 平均值逻辑错误:就算避开了i=0的情况,用循环下标i来计算平均值也是错的——i是整个数组的遍历下标,并不是符合条件的元素个数,这样算出来的结果完全不是你想要的“m和n之间元素的平均值”。

修正后的代码

#include <iostream>
using namespace std;

int main () {
    int m, n;
    int a[30];
    int somma = 0;
    float media = 0;
    int count = 0; // 新增:统计符合条件的元素个数

    for (int i= 0; i<30; i++) {
        cout<<"Inserisci il "<<(i+1)<<" elemento: "<<endl;
        cin>>a[i];
        cout<<endl;
    }

    cout<<"Inserisci le variabili m ed n tali che m<x<n"<<endl;
    cout<<"m: ";
    cin>>m;
    cout<<"n: ";
    cin>>n;

    for (int i= 0; i<30; i++) {
        if (a[i]>m && a[i]<n) {
            somma = somma + a[i];
            count++; // 符合条件就计数加1
            // 这里不再计算平均值,移到循环外统一处理
        }
    }

    cout<<"La somma è: ";
    cout<<somma<<endl;

    cout<<"La media è: ";
    // 先判断count是否为0,避免再次触发除零错误
    if (count != 0) {
        media = static_cast<float>(somma) / count;
        cout<<media<<endl;
    } else {
        cout<<"Nessun elemento soddisfa la condizione m<x<n"<<endl;
    }

    return 0;
}

关键修改说明

  • 新增count变量:专门统计满足m<x<n条件的元素数量,这才是计算平均值的正确分母。
  • 平均值计算移到循环外:确保所有符合条件的元素都累加完成后,再用总和除以元素个数。
  • 增加count != 0的判断:如果没有任何元素符合条件,就不会执行除法,避免再次触发除零错误,同时给出友好提示。
  • 类型转换:用static_cast<float>(somma)把整数总和转成浮点数,确保平均值是精确的浮点数结果(如果直接用两个整数相除会得到整数截断的结果)。

内容的提问来源于stack exchange,提问作者MacUser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:48:27