带有while循环的数字三角形

时间:2017-04-26 08:58:06

标签: c loops

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

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

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

def show
  @movie = Movie.find(params[:id])
  @actors = @movie.actors
end

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

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);
}

5 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

{{1}}

答案 2 :(得分:0)

你必须翻译其中的内容,所以:

  1. 启动循环前的Init变量
  2. 为新的while循环使用相同的条件
  3. #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);
    }
    

答案 3 :(得分: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++;
}

答案 4 :(得分:0)

在K&amp; R C编程语言中,引入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