编写程序输出一个类小草的图形
如图
#include<stdio.h>
int main()
{
int r,i;
for(r=1;r<=1;r++)
{
for(i=0;i<=4;i++)
{
printf(" ");
}
for(i=1;i<=1;i++)
{
printf("*");
}
printf("\n");
}
for(r=2; r<=5; r++)
{
for(i=0;i<=r-2;i++)
{
printf(" ");
}
for(i=1;i<=1;i++)
{
printf("*");
}
for(i=1;i<=5-r;i++)
{
printf(" ");
}
for(i=1;i<=1;i++)
{
printf("*");
}
for(i=1;i<=5-r;i++)
{
printf(" ");
}
for(i=1;i<=1;i++)
{
printf("*");
}
printf("\n");
}
return 0;
}
编写思路:
首先上图
思路:
首先把小草的图形用坐标图表示出来
r代表行,i代表列,0代表空格
仔细观察坐标图会发现,第一行只有一个* 而第二到第五行每行都有三个*
所以写代码时可以把第一行和下边四行区别开来
那么就有了第一行的代码
for(r=1;r<=1;r++)
{
for(i=0;i<=4;i++)
{
printf(" ");
}
for(i=1;i<=1;i++)
{
printf("*");
}
printf("\n");
}
第一行代码具体分析:
观察坐标图可以发现小草是以第五列为对称轴,而且第二行的最后一个在第九列,所以第一行的代码只需要编写出前四个空格的位置即可。第五列后的空格程序会自动补齐。
此时会有一个疑问,为什么在第五列,而 i 的初值却为0?
原来,i不仅表示列,还表示每一行的个数
第二至第五行代码具体分析:
观察坐标图会发现以倾斜的为线可以把图形分为四个三角形
·第一个三角形
第2行 | 0个0 |
---|---|
第3行 | 1个0 |
第4行 | 2个0 |
第5行- | 3个0 |
可看出 r 与空格的个数差2 记为 r-2
记为(i=0;i<=r-2;i++)
·然后输入第一个对称轴的*
记为(i=1;i<=1;i++)
这时,对于 i 又会有一个疑问,第一行确实只有一个*用 i 表示个数也无可厚非,
但为什么第二到第五行明明每行都有三个✳,i 的初值却仍为0或是1?
原因是在编写代码时将第二至第五行的小草图以✳为轴分为四个三角形,在每个三角形里确实都只有0个✳
·第二个三角形
第2行 | 3个0 |
---|---|
第3行 | 2个0 |
第4行 | 1个0 |
第5行 | 0个0 |
可看出 r与空格的和为5 记为 5 - r
记为(i =1;i<=5-r;i++)
至此,以第五列的✳为对称轴的左半边代码已准备就绪
接下来右边的两个三角形,右上三角形与左边对称,故代码也一致
for(i=1;i<=1;i++)
{
printf("*");
}
for(i=1;i<=5-r;i++)
{
printf(" ");
}
for(i=1;i<=1;i++)
{
printf("*");
}
for(i=1;i<=5-r;i++)
{
printf(" ");
}
·再输入一列✳剩下的最后一个三角形可省略不写,由系统自动补齐。
2021.3.8