左对齐空心直角三角形+实心底边
一、问题分析
需要打印一个10行的星号图案,具有以下特征:
- 左对齐结构(无前置空格)
- 第1-9行:
- 只在每行的首尾位置打印星号(形成空心效果)
- 中间部分用空格填充
- 第10行:
- 打印10个连续的星号(实心底边)
二、关键规律
- 行号(i):1~10
- 星号打印规则:
- 前9行:当
j==1
(首列)或j==i
(尾列)时打印"*" - 第10行:所有位置都打印"*"
- 前9行:当
- 空格填充:非首尾位置打印空格
三、代码实现解析
#include <stdio.h>
int main() {
int i, j;
// 外层循环控制行数(1~10)
for(i=1; i<=10; i++) {
// 内层循环控制列数(1~i)
for(j=1; j<=i; j++) {
if(i == 10) { // 第10行全星号
printf("*");
}
else if(j == 1 || j == i) { // 首尾位置
printf("*");
}
else { // 中间位置
printf(" ");
}
}
printf("\n"); // 换行
}
return 0;
}
四、执行过程示例(以i=4为例)
- 列数范围:1~4
- 内容判断:
- j=1 → 打印"*"
- j=2 → 打印" "
- j=3 → 打印" "
- j=4 → 打印"*"
- 完整行输出:
* *
五、完整输出结果
*
**
* *
* *
* *
* *
* *
* *
* *
**********
六、图案特征说明
- 空心部分(1-9行):
- 左侧星号垂直对齐
- 右侧星号形成45度斜线
- 中间用空格保持空心效果
- 实心底边(第10行):
- 连续的星号形成实线
- 对齐方式:
- 所有行左对齐
- 斜边角度精确为45度
七、复杂度分析
项目 | 说明 |
---|---|
时间复杂度 | O(n²)(精确操作次数:55次) |
空间复杂度 | O(1)(仅用2个整型变量) |
八、变形建议
- 右对齐版本:
// 添加前置空格循环
for(k=0; k<10-i; k++) printf(" ");
- 双边框空心版:
else if(j==2 || j==i-1) printf("*");
- 数字版:
printf("%d", j); // 用数字替代星号
这个案例展示了:
- 如何实现左对齐的空心图案
- 通过条件判断控制边框打印
- 处理最后一行特殊情况的技巧
- 简洁高效的循环结构设计