这个我加了注释,说明一下我的逻辑
#include <stdio.h>
int main(void)
{
int i,j,k,a,layer; //layer为三角形的层数,其他是控制循环的变量。
printf("要搭建的层数: "); //获取层数
scanf("%d",&layer);
for(i = 1;i <= layer;++i) //最外层循环,控制层数
{
for(j = 0;j < layer - i;++j) //*左侧空格数量(以第一层的*做数轴的原点来参考)
printf(" ");
for(k = 0;k < layer - j;++k) //原点*左侧(包括原点*) 的* 。(layer - j)中,j是此层左侧要输出的空格数。
printf("*");
for(a = 0;a < (layer - 1) - j;++a) //原点*右侧的(不包括原点*)的* 。
printf("*");
printf("\n"); //加一个换行,进行下一层循环
}
printf("\n");
printf("第二种方法:");
printf("\n");
for(i = 1;i <= layer;++i) //这是论坛上看到的一个例子。
{
for(j = 1;j < 2*layer;++j)
{
if(j > layer - i&& j < layer + i )
printf("*");
else
printf(" ");
}
printf("\n");
}
printf("第三种方法:");
printf("\n");
for(i = 1;i <= layer;++i)
{
for(j = 1;j <= layer - i;++j) //
printf(" ");
j--;
for(k = 1;k <= (2*layer - 1) - j*2;++k ) //2*layer - 1 是三角形输出*最多的一层,可以把每层都看作是这个长度,每层除了*就是空格,最大层数是满*,计算每层的*和空格数量。
printf("*");
printf("\n");
}
}