菱形的打印

首先我们可以将菱形分为上下两个部分,看成上三角形和下三角形

红线圈起来的部分为上半部分,而下面的则为下半部分

因此我们可以根据这个发现来写代码


上半层的代码写法 

#include <stdio.h>
int main()
{
	int line = 0;//line为上半部分的层数
	scanf("%d", &line);
	for (int i = 0; i < line; i++)//i为行数
	{
		int j = 0;//j为打印空格和*的次数
		for (j = 0; j < line-i-1; j++)//例如line为4,那么j就是4-0-1=3,打印3个空格
		{
			printf(" ");
		}
		for (int j = 0; j <i*2+1; j++)//因为由图可以观察到*的打印每层多2个,所以我们就可以利用            
                                      //这个原理来写代码,每层的第一个都只有1个*,所以当i为0的时 
                                      //候,第一层0*2+1=1
		{
			printf("*");
		}
		printf("\n");
	}

我们输入line为4,那么第一个for循环i<4,循环4次,也就是打印4行,第二个for循环用来控制空格的打印,第三个for循环用来控制*的打印,让我们来整理一下思路:首先进入第一个for循环打印第一层,然后进入第二个for循环打印了3个空格,然后j++,直到条件不满足,进入第二个循环,打印一个*号之后,条件不满足,换行,然后紧接着打印第二行。

 

打印出来上半层其实就是正三角形


下半层代码的写法

for (int i = 0; i < line - 1; i++)//因为上半层包含的中间部分,而下半层没有,所以我们要减去1层
{
	int j = 0;
	for (j = 0; j <i+1; j++)//在下半层我们先打印空格
	{
		printf(" ");
	}
	for (j = 0; j <2*(line-i-1)-1; j++)//这里比较难想,我来给大家解释一下,因为下一层要比上一层 
                                       //少2个*号,但直接减又不好实现,所以我们不妨借助line来 
                                       //实现,详细过程见下文
	{
		printf("*");
	}
	printf("\n");
}

还是老规矩,我们输入line为4,第三个for循环里面就为j<5,也就是打印5个*号,如果直接想打印5个*号的话是不是我们就会写成j<5,但是下一层怎么办呢,许多小伙伴是不是就会写成j<(line+1)-2呢?因为和层数有关我们不妨借助i来实现,我们将利用line和i可以写成(line-i),那么输入4的时候就是3了,line为4的话我们第一层可是要为5才对,所以我们就可以将这个式子×2,           也就是2*(line-i),但是还是不对,带入一下line==4,式子为8,所以我们可以再改进一下,变成2*(line-1-i),还是不对,我们再改进,变成2*(line-1-i)-1,现在对了,这个式子还是比较难,需要大家多看几遍

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值