【发布时间】: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 颗星(每侧一个)再次循环,并且这一直持续到所有层都打印完。之后我添加了树干,这是所有树木的固定数字,但我仍然不知道如何添加它,或者写它的间距,我完全迷失了。