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

C语言查找区间素数时flag变量为什么需要在循环内初始化?

C语言区间素数查找程序flag变量异常问题原因分析

核心原因

flag变量未在每次判断新数字前重置,导致之前的判断结果污染后续逻辑:

  • 你当前的代码仅在程序开头将flag初始化为0,这个标记的作用是标识当前正在判断的数是否为合数:如果找到能整除该数的因子,就将flag设为1。
  • 只要程序运行过程中遇到第一个合数,flag就会被永久赋值为1,之后判断后续所有数字时,flag都不会回到初始的0状态,导致后续所有数字都会被误判为合数,不会被输出。

修复方案

每次外层循环开始判断新的数字之前,先将flag重置为0即可,修正后的外层循环代码如下:

for(i=lower;i<=upper;i=i+1)
{
    flag = 0; // 每次判断新数字前重置标记位
    for(j=2;j<=i/2;j++)
    {
        if((i%j)==0)
            {
                flag=1;
                break;
            }
    }
    if(flag==0){
        printf("%d ",i);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:36:03