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

为什么C语言统计小于给定r的序列项数代码仅r<1正常r=1无输出

问题原因
  • 你使用的迭代公式生成的序列为单调递增序列,数学上可推导其极限为1,因此序列的所有项都严格小于1,永远无法达到或超过1。当输入r=1时,while (nextTerm < r)的循环判断条件永远成立,程序陷入死循环,无法执行到后续的打印语句,因此没有输出。
  • 额外补充:即使r略小于1,当序列迭代到float精度上限时,nextTerm的数值将不再更新,此时如果nextTerm仍然小于r,也会触发死循环。
修复方案

需要补充收敛判断逻辑,当序列数值不再变化(达到精度上限)时强制跳出循环,同时也可以提前对r≥1的场景做边界处理提升效率:

#include <stdio.h>
#include <math.h>

int main() {
    int nr = 2;
    float x1 = 0, x2 = 0, nextTerm = 0, r;
    const float EPS = 1e-7; // 匹配float精度,可按需调整

    scanf("%f", &r);

    float lastTerm;
    while (nextTerm < r) {
        lastTerm = nextTerm;
        nextTerm = (1 + x2 + x1 * x1) / 3;
        // 新增收敛判断:数值不再更新时说明已趋近极限,无法继续增大,跳出循环
        if (fabs(nextTerm - lastTerm) < EPS) {
            break;
        }
        x1 = x2;
        x2 = nextTerm;
        nr++;
    }
    printf("%d", nr);

    return 0;
}
  • 如果对性能有要求,可新增边界判断:当r >= 1时直接输出预期的计数值,不需要进入循环,因为所有序列项都小于1,天然满足小于r的条件。
  • 如果初始两个值0是否计入统计的规则有变动,可自行调整nr的初始值和计数语句的位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:24:03