c - 将 'for' 循环转换为 'do..while' 循环

标签 c do-loops

我遇到了一个打印 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/

相关文章:

c - 将 0 视为 printf %g 格式说明符中的有效数字

excel - VBA 网页抓取代码循环在第三次迭代后失败

c - 做循环生成唯一随机数组的数组

c - 在c中接收udp文本文件

c - C中的二进制补码

Java做while循环不循环

java - 继续输入值直到数组已满?

sas - 当SAS Do循环中指定输出语句时,为什么索引变量的存储值不同?

c - short int Integer wrap around/short int inversion in c 不理解,分配和打印之间的区别

c - abs() 在 Xcode 上不起作用?