【代码】
#includevoid print(int n) { int i, j , a, b = 2 * n - 1; int g, h ; if (n == 1) { for (i = 1; i <= n - 1; i++) printf(" "); printf("*"); for (i = 1; i <= n - 1; i++) printf(" "); }//输出最后一行 else { for (j = 0; j <= n - 1; j++) { for (i = 1; i <= j ; i++) printf(" ");//输出左空格 for (a = 1; a <= b; a++) printf("*");//输出星号 for (i = 1; i <= j; i++) printf(" ");//输出右空格 printf("n"); b -= 2; } } } int main( ) { print(6); return 0; }
【解释】这里倒三角的输出难点在于,我们平常用循环输出一个东西,这个东西的数量一般是递减的,我们一般用for(i=1;i<=j;i++){}这样的结构依次输出1、2、3…j个图形。
但在这一题里,输出空格的数量确是递增的,从0一直到n-1。
这里没什么好思路的话,就可以用循环嵌套,给定递增的数列j,在这个j对应数量去用老结构输出空格。
当然这一题还可以用递归的方式做。
【代码】
#includevoid print(int n) { int j = 6;//把j固定成6,而n是变化的,从6变化到0,这样准确控制j-n从0变化到6 int i , a, b = 2 * n - 1; if (n == 1)//规定退出递归的出口 { for (i = 1; i <= j-n; i++) printf(" "); printf("*"); for (i = 1; i <= n - 1; i++) printf(" ");//最后一行输出5个空格和左右各一个星号 } else { for (i = 1; i <= j-n ; i++) printf(" "); for (a = 1; a <= b; a++) printf("*"); for (i = 1; i <= j-n; i++) printf(" "); printf("n"); b -= 2; print(n - 1);//递归的核心,先把每一行打印好,再转入下一行。 } } int main( ) { print(6); return 0;//也可以设置成用户输入的数字作为n }



