首页 文章

在c中while循环的数字三角形

提问于
浏览
0

我刚刚开始学习,这实际上是我在这里的第一篇文章,很抱歉,如果这是一个愚蠢的问题 .

我需要制作一个三角形 - 宽度由用户使用循环决定 . 我已经设法用for循环做了但是当我尝试重新排列while循环的变量时,一切都变得混乱 .

这就是我为'for'所拥有的:

main()
{
    int a, i, j, rep;
    do
    {
        printf("Type the width of the triangle \n");
        scanf("%d", &a);

        for (i = 1; i <= a; i++)
        {
            for (j = 1; j <= i; j++)
            {
                printf("%i", j);
            }
            printf("\n");
        }

        for (i = 0; i <= a; i++)
        {
            for (j = 1; j <= a - i; j++)
            {
                printf("%i", j);
            }
            printf("\n");
        }
        printf("\n Do you want to run the program again? \n 1=Yes \n");
        scanf("%i", &rep);
    }
    while (rep == 1);
}

这就是我尝试过 - 并且失败了 - 同时:

main()
{
    int a, i, j, rep;
    do
    {
        printf("Type the width of the triangle \n");
        scanf("%d", &a);

        while (i >= 0)
        {
            while (j <= a)
            {
                printf("%i", j);
                j++;
            }
            a--;
            printf("\n");
            i--;
            j = 1;
        }
        while (i >= 0)
        {
            while (j <= a)
            {
                printf("%i", j);
                j++;
            }
            a--;
            printf("\n");
            i--;
            j = 1;
        }
        printf("\n Do you want to run the program again? \n 1=Yes \n");
        scanf("%i", &rep);
    }
    while (rep == 1);
}

5 回答

  • 0

    外部 for 部分:

    for (i = 1; i <= a; i++)
    {
        ...
    }
    

    相当于:

    int i = 1;
    while (i <= a)
    {
        ...
        i++;
    }
    

    和内在的 for 部分:

    for (j = 1; j <= i; j++)
    {
        ...
    }
    

    相当于:

    int j = 1;
    while (j <= i)
    {
        ...
        j++;
    }
    

    所以整个第一个循环:

    for (i = 1; i <= a; i++)
    {
        for (j = 1; j <= i; j++)
        {
            printf("%i", j);
        }
        printf("\n");
    }
    

    将转变为:

    int i = 1, j;
    while (i <= a)
    {
        j = 1;
        while (j <= i)
        {
            printf("%i", j);
            j++;
        }
        printf("\n");
        i++;
    }
    

    以类似的方式,第二个循环:

    for (i = 0; i <= a; i++)
    {
        for (j = 1; j <= a - i; j++)
        {
            printf("%i", j);
        }
        printf("\n");
    }
    

    将转变为:

    int i = 0, j;
    while (i <= a)
    {
        j = 1;
        while (j <= a - i)
        {
            printf("%i", j);
            j++;
        }
        printf("\n");
        i++;
    }
    
  • 0

    从快速查看代码看起来你的i和j变量似乎不是用一个值启动的,在你的程序中它应该是1或0,取决于while条件 .

  • 0

    你必须翻译做什么,所以:

    • 启动循环前的Init变量

    • 为新的 while 循环使用相同的条件


    #include <stdio.h>
    
    int main(void)
    {
        int a;
        int i;
        int j;
        int rep;
        do
        {
            printf("Type the width of the triangle \n");
            scanf("%d", &a);
    
            // init i before start loop
            i=1;
            while (i <= a)
            {
                // init j before start loop
                j = 1;
                while (j <= i)
                {
                    printf("%i", j);
                    j++;
                }
                printf("\n");
                i++;
            }
    
            // init i before start loop
            i=0;
            while (i <= a)
            {
                // init j before start loop
                j = 1;
                while (j <= a-i)
                {
                    printf("%i", j);
                    j++;
                }
                printf("\n");
                i++;
            }
            printf("\n Do you want to run the program again? \n 1=Yes \n");
            scanf("%i", &rep);
        }
        while (rep == 1);
    }
    
  • 0

    首先,你需要实例化变量,因为虽然它们没有值:int j,i = 1;然后:

    while (i <= a)
    {
        while (j <= i)
        {
            printf("%i", j);
            j++;
        }
        printf("\n");
        i++;
    }
    
  • 0

    在K&R The C Programming Language中, for 循环被引入作为while循环的语法糖,即

    for (i = 0 ; i < someValue ; ++i)
    //   ^^^^^A  ^^^^^^^^^^^^^B  ^^^C
    {
        doSomething(i);
    }
    

    是真的

    i = 0; 
    //^^^A
    while (i < someValue) 
    //     ^^^^^^^^^^^^^B
    {
        doSomething(i);
        i++; 
    //  ^^^C
    }
    

    (对于语言律师来说,有一个微妙的区别,但在你到达 breakcontinue 之前你不需要担心它)

    在使用 while 的程序中,不要对循环变量进行任何初始化(上面的代码示例中标记为 A 的位) . 例如,i和j从未定义开始,因此在整个代码中技术上保持未定义 . 如果它们偶然出现为0,那么在你的j循环中你永远不会将j重置为0

相关问题