1、使用简单的 printf 打印多行输出
直接输出构成树的ASCII字符。我们可以用|
表示树干,*
表示树冠。
#include <stdio.h> int main() { printf(" *\n"); printf(" ***\n"); printf(" *****\n"); printf(" *******\n"); printf(" |\n"); printf(" |\n"); return 0; }
2、使用循环来绘制树
利用循环可以更灵活地控制树的高度和宽度。
#include <stdio.h> int main() { int height = 5; for (int i = 0; i < height; i++) { for (int j = 0; j < height - i - 1; j++) { printf(" "); } for (int j = 0; j < 2 * i + 1; j++) { printf("*"); } printf("\n"); } for (int i = 0; i < 2; i++) { printf(" |\n"); } return 0; }
3、使用函数进行分步绘制
将绘制树的代码封装成函数,可以提高代码的可读性和复用性。
#include <stdio.h> int main() { int height = 5; for (int i = 0; i < height; i++) { for (int j = 0; j < height - i - 1; j++) { printf(" "); } for (int j = 0; j < 2 * i + 1; j++) { printf("*"); } printf("\n"); } for (int i = 0; i < 2; i++) { printf(" |\n"); } return 0; }
4、使用二维数组来存储和打印树
将树的每一行存储在一个字符数组中,然后逐行输出。
#include <stdio.h> #include <string.h> int main() { char tree[5][11] = { " *", " ***", " *****", " *******", " |" }; for (int i = 0; i < 5; i++) { printf("%s\n", tree[i]); } printf(" |\n"); return 0; }
5、递归绘制树
根据当前的高度,输出相应数量的星号。输出一个竖线。递归调用自身,绘制两个更小的子树。
#include <stdio.h> void drawTreeCrown(int spaces, int stars, int height) { if (height == 0) { return; // 递归结束条件 } // 输出前导空格 for (int i = 0; i < spaces; i++) { printf(" "); } // 输出星号 for (int i = 0; i < stars; i++) { printf("*"); } printf("\n"); // 递归调用,减少空格数,增加星号数 drawTreeCrown(spaces - 1, stars + 2, height - 1); } void drawTreeTrunk(int spaces, int height) { // 绘制树干 for (int i = 0; i < height; i++) { // 输出空格,让树干居中 for (int j = 0; j < spaces; j++) { printf(" "); } printf("|\n"); } } int main() { int height = 5; // 树冠的高度 // 绘制树冠,起始空格数为高度减1,起始星号数为1 drawTreeCrown(height - 1, 1, height); // 绘制树干,树干的高度设置为2 drawTreeTrunk(height - 1, 2); return 0; }