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。
- 函数定义缺少参数类型,不符合C标准规范(应写为
- 整数除法精度丢失:原代码
float sum2=sum1/i;中sum1和i均为整数,会先执行整数除法再转成float,导致小数部分被截断。修正为先将sum1转为float再做除法。 - 返回值不符合常规:main函数通常返回
0表示程序正常结束,return 727虽语法合法,但不符合通用编程规范。
内容的提问来源于stack exchange,提问作者Lettever
相关产品推荐
相关产品推荐

