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

sopfr均值计算C代码输入无响应问题求助

问题分析与代码修正

你的代码存在多处语法和逻辑错误,导致程序无响应,以下是修正后的代码及错误点说明:

修正后的代码

#include <stdio.h> 

int sopfr(int x);

int main()
{
    int c, i, sum1 = 0;
    // 正确读取输入的c和i
    scanf("%i", &c);
    scanf("%i", &i);

    // 遍历从c到c+i的所有整数
    for (int num = c; num <= c + i; num++)
    {
        sum1 += sopfr(num);
    }
    // 转换为浮点型后计算均值,避免整数除法截断精度
    float sum2 = (float)sum1 / i;
    printf("%f", sum2);
    return 0;
}   

// 符合C标准的函数定义,使用传入的参数计算sopfr
int sopfr(int x)
{
    int t = x, n = 2, s = 0;
    while (t != 1)
    {
        if (t % n == 0)
        {
            t /= n;
            s += n;
            continue;
        }
        n++;
    } 
    return s;
}

错误点说明

  • scanf格式符错误:读取i时误用scanf("i",&i);,正确格式符应为%i,否则程序无法识别输入数值,会一直卡在输入等待状态。
  • for循环逻辑混乱:原循环for(c;c<=c+i;a++)的条件c<=c+i永远为真(只要i为正整数),加上循环内c+=a的错误更新逻辑,直接导致死循环。修正后用临时变量num遍历目标区间,确保每个数都被计算一次。
  • sopfr函数错误:
    • 函数定义缺少参数类型,不符合C标准规范(应写为int sopfr(int x));
    • 函数内部多余的scanf("%i",&t);会让程序额外等待输入,完全违背传入参数计算的意图,应直接使用传入的x赋值给t。
  • 整数除法精度丢失:原代码float sum2=sum1/i;中sum1和i均为整数,会先执行整数除法再转成float,导致小数部分被截断。修正为先将sum1转为float再做除法。
  • 返回值不符合常规:main函数通常返回0表示程序正常结束,return 727虽语法合法,但不符合通用编程规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 13:05:29