我遇到了一个打印 1 到 n 之间所有素数的程序,其中“n”是用户提供的值。它使用了for循环。程序如下——
#include <stdio.h>
int main()
{
int i, j, end, isPrime; // isPrime is used as flag variable
/* Input upper limit to print prime */
printf("Find prime numbers between 1 to : ");
scanf("%d", &end);
printf("All prime numbers between 1 to %d are:\n", end);
/* Find all Prime numbers between 1 to end */
for(i=2; i<=end; i++)
{
isPrime = 1;
for(j=2; j<=i/2; j++)
{
if(i%j==0)
isPrime = 0;
}
if(isPrime==1)
{
printf("%4d", i);
}
}
return 0;
}
我非常理解上面的代码。但为了测试我的知识,我尝试使用 do 循环编写相同的程序。结果不太好。我搜索了书籍和互联网,找到了一个程序,他们在其中使用 do 循环来计算素数直到 n。但是找不到一个。我想知道它是否可能。为了展示我的努力,我把我做的代码放在下面-
#include <stdio.h>
main()
{
int i, j, n, isPrime;
printf("Enter n\n");
scanf ("%d", &n);
i = 2;
do
{
do
{
j = 2;
if (i%j == 0)
isPrime = 0;
else
{
isPrime = 1;
printf ("%d", i);
}
j = j+1;
}
while (j <= i/2);
i = i+1;
}
while (i <= n);
}
最佳答案
你有一个好的开始,但犯了一些小错误导致了大问题
j=2
在第二个 do-while
循环中设置。这导致每次循环都将 j 设置为 2,因此永远不会退出 do while 循环。
接下来是 if/else。在 for 循环示例中,if (isPrime==1)
在 for 循环之外。您在 while 循环内部进行检查,导致事情很快被命名为 prime way。
下面是工作代码的例子
#include <stdio.h>
main()
{
int i, j, n, isPrime;
printf("Enter n\n");
scanf ("%d", &n);
printf("All prime numbers between 2 to %d are:\n", n);
i = 2;
do
{
isPrime = 1;
j = 2;
do
{
if (i%j == 0)
isPrime = 0;
j = j+1;
} while (j < i/2);
if (isPrime == 1 || i == 2)
printf ("%d\n", i);
i = i+1;
}
while (i <= n);
}
关于c - 将 'for' 循环转换为 'do..while' 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50291826/