gpt4 book ai didi

c - 为什么这个程序不显示任何大于 3 的数字?

转载 作者:太空狗 更新时间:2023-10-29 15:25:25 26 4
gpt4 key购买 nike

写这个是为了找到 21000 之间的素数。但它在显示 23 是质数后停止。我知道我可以找到如何编写用于在 Internet 上查找素数的代码。但我真的需要知道这里出了什么问题。

#include <stdio.h>

main() {
int i, j;
int ifPrime = 1;
for (i = 2; i < 1000; i++) {
for (j = 2; j < i; j++) {
if (i % j == 0) {
ifPrime = 0;
break;
}
}
if (ifPrime == 1) {
printf("%d is prime\n", i);
}
}
}

最佳答案

线

int ifPrime=1;

必须在外部 for 循环内。在那里它将为每个 i 初始化。这对应于自然语言单词“检查数字 i 是否为素数,首先假设它是。然后检查它是否可整除”。你之前说的代码“判断2到1000是不是素数,先假设是素数”,这个措辞太笼统了。

代码应该是:

int main()
{
for (int i = 2; i < 1000; i++)
{
int ifPrime = 1;
for (int j = 2; j < i; j++)

我将 main 替换为 int main,因为 20 年来一直需要这样做。 (你不应该从这些旧书上学习编程。)

我将 int iint j 移到了 for 循环中,这样您就不会不小心在它们所在的范围之外使用这些变量有定义的值。

为避免将来出现此错误,最好将 is_prime 计算提取到一个单独的函数中。那么您将被迫在正确的位置初始化 ifPrime

找到此错误原因的另一种方法是使用调试器逐步检查代码并在每一步都问自己:程序正在做什么仍然有意义吗?

关于c - 为什么这个程序不显示任何大于 3 的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54840496/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com