C语言程序无报错 等差数列计算n>17时无法运行原因排查
代码问题定位
你的程序在n>17时无响应、无报错的核心原因是语法错误导致的死循环,其余问题会引发计算错误、输出乱码,所有问题列在下面:
while循环缺失花括号。C语言中循环结构后如果不写{}包裹代码块,只会把紧挨着循环判断的第一行代码作为循环体执行。你代码里sum += j;、结果打印、i++这三行都不在循环范围内,进入循环后程序会无限重复执行j = d + i*k;,i的值始终是初始值0,永远满足i < n的判断条件形成死循环。程序长时间跑死循环会触发系统内存保护机制被强制终止,n=17是你测试时刚好触发终止的阈值,和等差数列计算逻辑本身无关。- 变量类型不匹配。首项
d定义为float浮点型,但存储单项值的j、存储总和的sum都是int整型,浮点值赋值给整型会直接截断小数丢精度;且用%d整型格式符打印浮点运算结果时,会读取错误长度的内存数据,输出乱码。 - 残留调试打印语句。代码里的
error 1/error 2/error 3是调试时加的标记,没有删除会干扰正常输出。 - 输出缺失换行符,所有打印内容会挤在同一行,无法正常查看结果。
修正后代码
#include <stdio.h> int main() { int n, k; float d; printf("请输入等差数列项数:"); scanf("%d", &n); printf("请输入等差数列公差:"); scanf("%d", &k); printf("请输入等差数列首项:"); scanf("%f", &d); printf("项值\t累计和\n"); int i = 0; float j = 0; float sum = 0; while (i < n) { j = d + i * k; sum += j; printf("%.2f\t%.2f\n", j, sum); i++; } return 0; }
补充说明
如果你的等差数列都是整数运算,直接把d、j、sum都改成int类型即可,输出时用%d格式符就行。修正后的代码无论n取多大(只要不超出int类型存储上限)都能正常计算输出,不会出现无响应问题。
内容的提问来源于stack exchange,提问作者amir_su
相关产品推荐
相关产品推荐

