嵌套for循环在c中制作圣诞树

时间:2015-02-14 01:05:23

标签: c loops for-loop nested

所以我的任务是在C中创建一棵圣诞树,我知道这已经完成了死亡但是有些条件必须要满足才能让我感到困惑,我甚至都不知道在哪里启动。

所以我们要求用户提供级别数(层中有多少行),然后是层数。

现在,每一层中第一行之后的每一行都会添加2" *"一个到第一个的每一侧(这只是一行" *"。)我们这样做直到层中的级别数满足,然后启动下一层。当我开始新图层时,我们减去4(2" *"来自前一层中最后一级的每一侧,然后重复添加1" *"的过程每个方面,直到满足级别数量(级别的数量在开始时决定并且是不变的。)

最后,最后一部分是完成树的树,宽度为3,高度为4的树干由" #"。我不知道我应该如何设置这些循环,我会发布到目前为止我所做的事情(不太多我不确定如何继续)

我现在发布我的代码。我有点卡在for循环的哪个位置,使得下一层的第一行(级别),比前一层的最后一个级别少4个星(每边2个)。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int level;
    int levelcount;
    int layercount;
    int layer;
    int star;
    int starcount;
    int space;
    int spacecount;
    int spacenumber;
    int i;
    int printstar;

    printf("How many levels should this tree have?\n");
    scanf("%d[^\n]", &level);

    printf("How many layers should this tree have?\n");
    scanf("%d[^\n]", &layer);

    for (layer = 0 ; layer <= layercount ; layercount++) {
        for (level = 0 ; level < levelcount ; levelcount++) {

            star  = levelcount + (layer - 1) * 2;
            space = levelcount + level - star;

            for (spacecount = 0 ; spacecount <= spacenumber ; spacecount++)
                printf(" ");

            for (starcount = 0 ; star < starcount ; starcount++)
                printf("%c" , '*');

            printstar = i + ((level-1) * 2);
        }
        i = i + ((levelcount - 1) * 2) - 4;
    }
    return 0;
}

1 个答案:

答案 0 :(得分:2)

我不确定这是最有效的方式,但你可以尝试一下。

我在这里使用的逻辑是:

  • 找到树的中间线。
  • 打印空间直到中线,最后是明星。
  • 将空格减1并将星号增加2
  • 打印图层后,减少4个统计数据并增加2个空格
  • 以同样的方式打印树干。

以下是使用代码段的示例代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int level;
    int levelcount;
    int layercount;
    int layer;
    int star;
    int starcount;
    int spacecount;
    int space;
    int length;

    printf("How many layers: ");
    scanf("%d", &layercount);
    printf("How many levels: ");
    scanf("%d", &levelcount);

    printf("\n Chrismas Tree \n");

    length = (layercount*levelcount);
    starcount = 1;
    spacecount = length;
    for (layer = 1 ; layer <= layercount ; layer++) {
        for (level = 1 ; level <= levelcount ; level++) {
            for (space = 1 ; space <= spacecount ; space++)
                printf(" ");
            for (star = 1 ; star <= starcount ; star++)
                printf("*");
            printf("\n");
            starcount += 2;
            spacecount--;
        }
        // since starcount and spacecount are incremented
        // just before level loop exit
        starcount -= 2;
        spacecount++;
        if(levelcount <= 3){
            starcount -= 2;
            spacecount += 1;
        }
        else{
            starcount -= 4;
            spacecount += 2;
        }
    }
    spacecount = length;
    for (layer = 1 ; layer <= 4; layer++) {
            for (space = 1 ; space <= spacecount-1 ; space++)
                printf(" ");
            for (star = 1 ; star <= 3 ; star++)
                printf("#");
            printf("\n");
    }
    return 0;
}

输出:

How many layers: 2
How many levels: 6

 Chrismas Tree 
            *
           ***
          *****
         *******
        *********
       ***********
         *******
        *********
       ***********
      *************
     ***************
    *****************
           ###
           ###
           ###
           ###

您的代码中的一些错误是,您没有正确处理任何for循环退出条件,没有递增layerlevel变量,并使用未初始化的spacenumber等。

for循环进行一些阅读,这将有助于您理解。