如何用C语言for循环实现倒三角?菱形代码倒三角问题排查
解决菱形倒三角生成问题
你的代码上三角部分逻辑正确,但倒三角的星号数量计算有误,导致无法生成正确的递减序列。
问题根源
原倒三角代码中,星号数量的计算公式n - i * 2不符合需求:
- 当输入
n=4时,倒三角第一行应该输出5个星号,但原公式计算结果为4-0=4,明显错误。 - 正确的倒三角星号数量应该从
2n-3开始,每行递减2个,直到1个。
两种修正方案
方案1:修正星号数量公式
保留原循环结构,仅修改星号的循环条件,使用正确的公式2*(n-1 -i) -1(等价于2n - 2i -3):
//reverse triangle for (i = 0; i < n - 1; i++) { for (j = 0; j < 1 + i; j++) { printf(" "); } for (k = 0; k < 2*(n-1 -i) -1; k++) { // 修正后的星号数量公式 printf("*"); } printf("\n"); }
方案2:复用上三角逻辑(更推荐)
调整倒三角的循环变量,从n-2递减到0,直接复用上三角的空格和星号计算逻辑,这样代码更一致,不易出错:
//reverse triangle for (i = n-2; i >= 0; i--) { // 循环变量从n-2开始递减 for (j = 0; j < n - i - 1; j++) { // 和上三角相同的空格计算方式 printf(" "); } for (k = 0; k < 1 + i * 2; k++) { // 和上三角相同的星号计算方式 printf("*"); } printf("\n"); }
验证效果
输入n=3时,两种方案都会输出正确的菱形:
* *** ***** *** *
输入n=4时:
* *** ***** ******* ***** *** *
内容的提问来源于stack exchange,提问作者Kim Do Kyeong
相关产品推荐
相关产品推荐

