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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:18:39