xyzs0734 发表于 2025-8-6 17:47:05

为什么我输入什么数字都给我显示是素数啊

#include <stdio.h>

int main()
{
int ii, num;
_Bool flag = 1;

printf("请输入一个数字:");
scanf("%d", &num);

for (ii = 2; ii < num / 2; ii++)
{
        if (num % i == 0)
        {
                flag = 0;
        }
}

if (flag)
{
        printf("%d是一个素数!\n", num);
}
else
{
        printf("%d不是一个素数!\n", num);
}
}
return 0;


在vs2022上运行,跟着视频敲的代码实在不知道哪里出了问题,有没有大佬帮我看一下啊{:10_254:}

FishC 发表于 2025-8-6 17:48:03

你的代码有几个问题导致判断素数出错:

1. 头文件缺少 stdio.h
2. 循环变量名不一致(for用 ii,判断用 i)
3. 循环条件应为 ii <= num/2
4. return 0; 位置错误(放在函数外)
5. 缺少对数字1的处理

修正后的代码:


#include <stdio.h>// 添加头文件

int main()
{
    int ii, num;
    _Bool flag = 1;

    printf("请输入一个数字:");
    scanf("%d", &num);

    // 处理数字1的特殊情况
    if(num == 1) {
      flag = 0;
    }
    else {
      // 修正循环条件和变量名
      for(ii = 2; ii <= num/2; ii++) {
            if(num % ii == 0) {// 变量名改为ii
                flag = 0;
                break;// 发现因子可提前结束
            }
      }
    }

    if(flag) {
      printf("%d是一个素数!\n", num);
    }
    else {
      printf("%d不是一个素数!\n", num);
    }
   
    return 0;// 位置修正到函数内
}


主要修改点:
1. 添加 #include <stdio.h>
2. 循环变量统一使用 ii
3. 循环条件改为 ii <= num/2
4. 增加对数字1的处理
5. 添加 break 提高效率
6. 调整 return 0; 位置

这样修改后程序就能正确判断素数了。测试时可以用2(最小素数)、4(合数)、1(非素数)等数字验证。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

某一个“天” 发表于 2025-8-6 17:49:06

13行少了一个i

xyzs0734 发表于 2025-8-6 18:00:40

某一个“天” 发表于 2025-8-6 17:49
13行少了一个i

谢谢了

gpa5031 发表于 7 天前

为什么要搞两个i,一个i就不会容易出现漏掉情况
页: [1]
查看完整版本: 为什么我输入什么数字都给我显示是素数啊