1. 基本三角形
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include <stdio.h>
int main() { int i, j, rows = 5; for(i = 1; i <= rows; i++) { for(j = 1; j <= i; j++) { printf("* "); } printf("\n"); } return 0; }
|
输出结果:
1 2 3 4 5
| * * * * * * * * * * * * * * *
|
代码解析:
- 外层循环控制行数
- 内层循环控制每行打印的星号数量
printf("\n")
用于换行
2. 倒三角形
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include <stdio.h>
int main() { int i, j, rows = 5; for(i = rows; i >= 1; i--) { for(j = 1; j <= i; j++) { printf("* "); } printf("\n"); } return 0; }
|
输出结果:
1 2 3 4 5
| * * * * * * * * * * * * * * *
|
3. 金字塔
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #include <stdio.h>
int main() { int i, j, space, rows = 5; for(i = 1; i <= rows; i++) { for(space = 1; space <= rows - i; space++) { printf(" "); } for(j = 1; j <= 2*i-1; j++) { printf("*"); } printf("\n"); } return 0; }
|
输出结果:
1 2 3 4 5
| * *** ***** ******* *********
|
代码解析(金字塔结构):
- 空格控制逻辑分析:
- 每行前导空格数 = 总行数 - 当前行号(rows - i)
- 示例演示:当总行数rows=5时,第1行需要4个空格(5-1)
- 星号打印原理:
- 星号数量遵循2n-1的等差数列公式(n为当前行号)
- 数学验证:第3行(i=3)星号数 = 2*3-1 = 5
- 循环结构解析:
- 外层循环:控制金字塔高度(i从1到rows)
- 内层循环1:控制前导空格(space从1到rows-i)
- 内层循环2:控制星号打印(j从1到2*i-1)
- 常见调试问题:
- 星号显示不齐:检查空格循环是否先于星号循环执行
- 金字塔变形:确认星号数公式是否正确应用
- 边界错误:注意循环条件是否包含等号(<=)
4. 空心金字塔
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #include <stdio.h>
int main() { int i, j, space, rows = 5; for(i = 1; i <= rows; i++) { for(space = 1; space <= rows - i; space++) { printf(" "); } for(j = 1; j <= 2*i-1; j++) { if(j == 1 || j == 2*i-1 || i == rows) { printf("*"); } else { printf(" "); } } printf("\n"); } return 0; }
|
输出结果:
1 2 3 4 5
| * * * * * * * *********
|
5. 菱形
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #include <stdio.h>
int main() { int i, j, space, rows = 5; for(i = 1; i <= rows; i++) { for(space = 1; space <= rows - i; space++) { printf(" "); } for(j = 1; j <= 2*i-1; j++) { printf("*"); } printf("\n"); } for(i = rows-1; i >= 1; i--) { for(space = 1; space <= rows - i; space++) { printf(" "); } for(j = 1; j <= 2*i-1; j++) { printf("*"); } printf("\n"); } return 0; }
|
输出结果:
1 2 3 4 5 6 7 8 9
| * *** ***** ******* ********* ******* ***** *** *
|
总结
通过简单的for循环嵌套,我们可以创建各种有趣的字符图形。掌握这些基础图案后,你可以尝试:
- 改变图形大小
- 使用不同字符
- 组合不同图案
- 添加颜色(如果支持)
这些练习不仅能加深对循环的理解,还能培养编程思维和创造力。