如何用C语言水平并排绘制4种不同的星号三角形?
水平并排绘制4种三角形的C代码修改方案
原代码仅能逐行绘制单个左对齐正三角形,要实现水平并排4种不同三角形(左对齐正三角、右对齐正三角、左对齐倒三角、右对齐倒三角),核心思路是按行同步生成四个三角形的当前行内容,而非依次绘制完整的单个三角形。以下是修改后的代码及说明:
修改后的完整代码
#include <stdio.h> int main(void) { while (1) { printf("Enter a number (0 to exit): "); int n; // 修正原代码格式符不匹配问题:n为int类型,使用%d而非%u if ((scanf("%d", &n) != 1) || (n <= 0)) break; putchar('\n'); // 按行循环,每行同步生成四个三角形的内容 for (int i = 0; i < n; i++) { // 1. 左对齐正三角形:第i行输出i+1个* for (int j = 0; j < i + 1; j++) printf("*"); // 补空格+分隔符,保证与下一个三角形对齐 for (int j = 0; j < n - i - 1 + 2; j++) printf(" "); // 2. 右对齐正三角形:先补n-i-1个空格,再输出i+1个* for (int j = 0; j < n - i - 1; j++) printf(" "); for (int j = 0; j < i + 1; j++) printf("*"); printf(" "); // 3. 左对齐倒三角形:第i行输出n-i个* for (int j = 0; j < n - i; j++) printf("*"); printf(" "); // 4. 右对齐倒三角形:先补i个空格,再输出n-i个* for (int j = 0; j < i; j++) printf(" "); for (int j = 0; j < n - i; j++) printf("*"); putchar('\n'); } putchar('\n'); } return 0; }
关键修改说明
- 同步行绘制逻辑:外层循环控制三角形的行数,每行内依次生成四个三角形的当前行内容,确保四个图形在水平方向对齐。
- 修复原代码输入问题:原代码中
scanf("%u", &n)存在格式符与变量类型不匹配的问题,改为%d,同时增加n<=0的判断避免非法输入。 - 四种三角形实现逻辑:
- 左对齐正三角:每行从左到右输出
i+1个* - 右对齐正三角:先填充
n-i-1个空格,再输出i+1个* - 左对齐倒三角:每行输出
n-i个* - 右对齐倒三角:先填充
i个空格,再输出n-i个*
- 左对齐正三角:每行从左到右输出
- 分隔与对齐处理:每个三角形之间用2个空格分隔,同时通过补空格保证每个三角形的宽度统一为输入的
n,确保整体布局整齐。
示例输出(输入n=4时)
* * **** **** ** ** *** *** *** *** ** ** **** **** * *
内容的提问来源于stack exchange,提问作者user20121339
相关产品推荐
相关产品推荐

