【c语言】—打印菱形

题目要求:

输入line(菱形上半部分的行号,包括最中间的一行),对应打印一个完整的菱形

思路:

先打印菱形的上半部分,再打印下半部分。即使上下部分所用到循环的数据不同,但是原理基本相同。

这个思路是建立在菱形的图上的,可以先看一下面的菱形图

每一行都是用空格和*组成的,除了最中间的那一行不是,所以我们可以观察每一行的规律,实现菱形

对于每一行:

1、利用for循环打印空格

2、每一行紧跟着使用for循环打印*号,使有菱形形状,然后一直打印line行(上半段就完成打印了)

3、上半部分打印出来后,下半部分同理,其中这里面打印*的时候有一个重要思想就是把下半段的 ,行数转为上半段的行数,接着用上半段的思路打印,因为上半段打印星号对应公式已经知道了,那么求下半段的打印多少星,就先把他转为上半段,再利用上半段的公式就可以了

关于下段代码的理解:

#include<stdio.h>

int main()
{
	int line = 0;
	scanf("%d", &line);//line是上半段要打印几行
	for (int i = 0; i < line; i++)
	{
		int j = 0;
		for (j = 0; j < line - 1 - i; j++)//line-1因为上半部分有几行,这一行就会打印line-1个空格。line-1-i是因为没下一行空格递减1
		{
			printf(" ");
		}
		for (j = 0; j < 2 * i + 1; j++)//i=0一个星,i=1 三个星,i=2五个星--所以星和i的关系 星的个数=2*i+1,循环几次打印几个*
		{
			printf("*");
		}
		printf("\n");
	}
	for (int i = 0; i < line - 1; i++)
	{
		int j = 0;
		for (j = 0; j <= i; j++)
		{
			printf(" ");
		}
		for (j = 0; j < 2 * (line - 1 - i) - 1; j++)//找行数与星的关系line输入为7,则下半部分为line-1行,每往下一行line-1-i
		{//若输入line=7,第一行2*6-1个* 第二行2*5-1个* 第三行2*4-1个星
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

最后注意一下:

下半段打印*是2*(line-1-i)-1因为*在下半段,从上到下是递减的,正好与上半段形成对称

2*(line-1-i)是对应上半段*相同数量的某一行,上半段从上到下*递增,下半段从上到下*递减,所以是-1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值