不一样的类小草图形写法

编写程序输出一个类小草的图形

如图在这里插入图片描述

#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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值