c.循环时数字三角形



我刚开始学习,这实际上是我的firts帖子,很抱歉,如果这是一个愚蠢的问题。

我需要制作一个三角形 - 宽度由用户使用循环确定。我已经设法使用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);
}

外部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++;
}

从快速查看您的代码中,您和j变量似乎不是用一个值启动的,在您的程序中应该为1或0,取决于while条件。<<<<<<<<<</p>

您必须翻译要做的事情,因此:

  1. 启动循环之前的初始变量
  2. 为您的新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);
}

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

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

在k&amp; r c编程语言中, for循环作为句法糖引入了一段时间循环,即。

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

最新更新