gpt4 book ai didi

c - 质数检查 1-100 (C)

转载 作者:行者123 更新时间:2023-12-04 04:41:50 27 4
gpt4 key购买 nike

关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

7年前关闭。



Improve this question




下面的代码是从用户那里读取输入来检查一个 int [1-100] 是否是素数。 (如果超出范围,将打印“完成”。如果非质数,将输出到控制台和可整除的数字。

现在,除了 3 和 9 之外,该程序在 1-10 中正常运行......有什么建议吗?

#include <stdio.h>

int main()
{
int num, i;
printf("Number [1-100]:? \n");
scanf("%d", &num);
while(num>0 && num <101)
{
if (num==1||num==2)
printf("Prime\n");
for (i=2; i<=num/2; ++i)
{
if (num%i==0)
{
printf("Non-prime,divisible by %d\n",i);
break;
}
else {
printf("Prime\n");
break;
}
}

printf("Number[1-100]:? \n");
scanf("%d",&num);
}
printf("Done\n");
}

最佳答案

首先,确保您的代码有适当的空格。这将帮助您意识到事情并没有像您想象的那样排列。

#include <stdio.h>

int main()
{
int num, i;
printf("Number [1-100]:? \n");
scanf("%d", &num);
while(num>0 && num <101){
if (num==1||num==2)
printf("Prime\n");
for(i=2; i<=num/2; ++i)
{
if (num%i==0)
{
printf("Non-prime,divisible by %d\n",i);
break;
}
else {
printf("Prime\n");
break;
}
}
printf("Number[1-100]:? \n");
scanf("%d",&num);
}
printf("Done\n");
}

现在你应该意识到你的 else 语句发生在第一次检查!所以当 3 不能被 2 整除时,它打印“素数”。

然后它跳出循环。

这发生在每个号码上。你的程序所做的就是检查数字是否可以被 2 整除。

如果你写的是“Odd”而不是“Prime”,那至少在那里是正确的。

这是设置标志可能有用的那种问题(还有其他方法可以做到这一点,但这是一种方法)。
所以你可以设置一个标志,比如 int isPrime = 1;
现在,如果你发现这个数不是素数,你只需设置 isPrime = 0; .

最后,在 for 循环结束时(让我重复一遍:在 for 循环结束后),您需要检查该变量。
你可以说,
if (isPrime == 1)
{
printf("Prime\n");
} else
{
printf("Non-prime.");
}

我会让你弄清楚如何打印除数:)

(作为引用,正确使用标志看起来像这样——为了清楚起见,我删除了它连续循环的“功能”)
#include <stdio.h>

int main()
{
int num, i;
int isPrime = 1;
printf("Number [1-100]:? \n");
scanf("%d", &num);
for(i=2; i<=num/2; ++i)
{
if (num%i==0)
{
isPrime = 0;
break;
}
}
if (isPrime == 1)
{
printf("Prime\n");
} else
{
printf("Non-prime.");
}
printf("Done\n");
}

关于c - 质数检查 1-100 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18774635/

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