【问题标题】:Nested for loops to make a christmas tree in c嵌套for循环以在c中制作圣诞树
【发布时间】:2015-02-14 01:05:23
【问题描述】:

所以我的任务是在 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;
}

【问题讨论】:

  • 我建议你弄清楚如何打印一层。也许是一个函数void print_layer(int num_levels, int max_levels) 可以生成正确的形状。第一个参数是这一层的层数;第二个是任何层的最大层数。在它们之间,这些控制您必须为图层打印的形状。然后,您可以专注于为每个级别正确调用该函数。打印行李箱应该是在公园里散步(但也要编写一个函数来做到这一点)。
  • 我们还没有真正完成 void 打印层,我们应该只使用 for 循环并让它打印空格和字符。我的程序只是无限点星星,我不确定我做错了什么或做错了什么。
  • 好的;所以你知道如何编写的唯一函数,或多或少,是main()?这使生活复杂化,但它仍然是可行的。不要做任何提示开始。指定单个层,并固定其层数(可能为 5)。编写代码打印单层;不用担心树干等。然后概括打印 N 层(选择 3)。然后概括提示输入值,并打印主干。但绝对要循序渐进。当您可以将步骤放入函数时会更容易,但在此之前,KISS -- 保持简单。
  • 我的主要问题是让间距起作用,我不知道我应该怎么做。我必须保持树对称,并在图层的每一层添加 2 颗星。然后最后一层被绘制,下一层的下一层被绘制在下面,但必须从每侧移除 2 颗星,然后通过继续添加下一行的 2 颗星(每侧一个)再次循环,并且这一直持续到所有层都打印完。之后我添加了树干,这是所有树木的固定数字,但我仍然不知道如何添加它,或者写它的间距,我完全迷失了。

标签: c loops for-loop nested


【解决方案1】:

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

我在这里使用的逻辑是:

  • 找到树的中线。
  • 打印空格到中线并在末尾加星号。
  • 空格减一,星数加2
  • 打印图层后,减少 4 个统计数据并增加 2 个空格
  • 以同样的方式打印树干。

这是使用您的代码 sn-p 的示例代码:

#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 循环,它会帮助你理解。

【讨论】:

    猜你喜欢
    • 2019-07-15
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    相关资源
    最近更新 更多