在C ++中将FOR循环转换为DO WHILE循环

时间:2014-08-11 13:06:29

标签: c++ loops for-loop do-while

我试图将其转换为do-while;它应该根据您输入的数字显示金字塔:

    int size,a,b,c;
    printf("Enter a Number: ");
    scanf("%d",&size);
    printf("\n");

    // for loop starts here
    for(a=1; a<=size; a++)
    {

     for(b=1; b<=size-a; b++)
     {
      printf(" ");
     }

     for(c=1; c<=(2*a)-1; c++)
     {
      printf("*");
     }

      printf("\n");
    }
     getch();
   }

这是我到目前为止所做的:

    int size;
    int a=1;
    int b=1;
    int c=1;

    do {

     a++;

      do {
       c++;
       printf("*");
      } while(c<=((2*a)-1));

        do {
       printf(" ");
          b++;
      } while(b<=(size-a));

      printf("\n");

    } while(a<=size);

    getch();
   }

Aaaa并没有显示相同的输出,任何建议人? TIA:)

3 个答案:

答案 0 :(得分:11)

for循环

for (BEGIN; COND; INC)
{
    WORK;
}

等同于while循环

{
    BEGIN;
    while (COND)
    {
        WORK;
        INC;
    }
}

...除了continue部分中WORK语句的效果(for循环continue跳转到INC),除了在for循环的BEGIN中声明的名称与声明的名称在同一个声明区域中 COND

然而,它并没有做出优雅的do-while循环。

{
    BEGIN;
    do
    {
        if (! COND) break;
        WORK;
        INC;
    } while (true)
}

或者(尽管它重复代码)

{
    BEGIN;
    if (COND)
    {
        do
        {
            WORK;
            INC;
        } while (COND)
    }
}

答案 1 :(得分:0)

编译器实际上倾向于将for循环转换为等同于do-while循环的代码。结果看起来像这样(使用Neil Kirk的metavariables):

BEGIN;
if(COND) {
    do {
        WORK;
        INC;
    } while(COND);
}

请注意COND出现在两个不同的地方。如果你检查生成的for循环程序集,你通常会看到这种效果,除非优化器足够巧妙地弄清楚(或程序员使用__assume告诉)COND永远不会第一次通过时是假的。

答案 2 :(得分:0)

#include <stdio.h>
void main()
{
    int size;
    int i=1;
    int j;
    int k;
    printf("Enter the number:\n");
    scanf("%d",&size);
    do
    {
        j=i;
        do
        {
            printf(" ");  
            j++;
        }while(j<=size);
        k=1;
        do
        {
            printf("*");
            k++;
        }while(k<=(2*i)-1);
        printf("\n");
        i++;
    }while(i<=size);
}