输出一个ASCII艺术风格的圣诞树。程序通过循环和条件判断,在控制台上打印出不同形状和大小的字符,以模拟圣诞树的外观。
-
变量声明:
i, j, x
: 循环计数器。n
: 用于控制圣诞树和树干的宽度。a, b, c
: 分别代表空白字符、星号和圣诞树的填充字符。
-
第一部分,输出树叶:
- 使用外部循环
for (x = 0; x < 3; x++)
控制树叶的数量。 - 内部循环用于打印每一行。
if ((j <= 25 + n) && (j >= 25 - n))
判断当前位置是否应打印圣诞树的填充字符。else if ((j % (n + 6) == n) && ((j > 25 + n) || (j < 25 - n)))
判断是否应打印星号以模拟圣诞树的形状。- 否则,打印空白字符。
n
的递增和递减用于控制圣诞树的大小。
- 使用外部循环
-
第二部分,输出树干:
- 使用循环
for (i = 0; i < 5; i++)
控制树干的行数。 - 该部分与树叶部分的逻辑类似,但使用的条件有所不同,以形成树干的形状。
- 使用循环
-
第三部分,输出地面:
- 使用循环
for (i = 0; i < 3; i++)
控制地面的行数。 - 该部分使用
if (j % 2 == 0)
来交替打印星号和空白字符,形成地面的效果。
- 使用循环
这个程序通过复杂的循环和条件判断,在控制台上输出一个ASCII艺术风格的圣诞树,包括树叶、树干和地面部分。
源代码如下:
#include <stdio.h>
int main(void)
{
int i, j, x;
int n = 0;
// a是间隔填充物,这里用空白填充;b是雪花,这里用*表示;c是圣诞树的填充,用'0'表示
char a = ' ', b = '*', c = '#';
// 第一部分,输出树叶
for (x = 0; x < 3; x++) {
// 想让圣诞树变高可以将4这个值调高
for (i = 0; i < x + 4; i++) {
for (j = 0; j < 80; j++) {
if ((j <= 25 + n) && (j >= 25 - n)) {
printf("%c", c);
}
else if ((j % (n + 6) == n) && ((j > 25 + n) || (j < 25 - n))) {
printf("%c", b);
}
else {
printf("%c", a);
}
}
printf("\n");
n = n + 2;
}
n = n - 2 * (x + 2);
}
// 第二部分,输出树干,高度为5
for (i = 0; i < 5; i++) {
for (j = 0; j < 80; j++) {
if (j >= 22 && j <= 28) {
printf("%c", c);
}
else if ((j % (n + 6) == n) && ((j > 25 + n) || (j < 25 - n))) {
printf("%c", b);
}
else {
printf("%c", a);
}
}
n = n + 2;
printf("\n");
}
// 第三部分,输出地面,高度为3
for (i = 0; i < 3; i++) {
for (j = 0; j < 80; j++) {
if (j % 2 == 0) {
printf("%c", b);
}
else {
printf("%c", a);
}
}
printf("\n");
}
return 0;
}