考验输出菱形

要求使用编程输出此图形

我们先来写上半部分,即只输出上半部分的菱形,再来考虑下半部分,

一.上半部分

写之前先来分析一下规律,在自己的脑子里形成完整思路以后再开始写代码

观察这个表格,行数和*的数量有什么规律,行数和空格有什么规律;

不难看出,行数二倍-1可以得到*数量,第一行*数为2*1-1个;第二行*数为2*2-1个;第三行*数为3*2-1个;第四行*数为4*2-1个;第五行*数为5*2-1个;

行数和空格相加都等于5,正好是总行数-此行的数字=空格数,一共为5行嘛,第一行空格为5-1个,第二行空格为5-2个,第三行空格为5-3个,第四行空格为5-4个,第五行空格为5-5个;

发现了规律以后就来构建代码框架

我们在上面发现了行数和*、空格之间的关系,我们就可以用变量i来表示行数,进行循环,从1-7进行循环,每循环一行就打印对应的空格和*,因为每打印一行都要打印对应数量的*和空格,所以就可以得出*和空格的的循环打印要嵌套在行数i里面,但*和空格是相互独立的,它俩各自独立在行数i的循环里;因为每一行的空格在*前面,所以要把*的循环打印放在空格前面才有效,放在后面就看不出效果;

代码段:

#include<stdio.h>
int main()
{
	int i = 1;                        //i控制行数
	int j = 1;                        //j控制打印*
	int k = 0;                        //k控制打印空格
	for (i = 1; i <= 7; i++)
	{
		for (k = 1; k <= 7 - i; k++)
		{
			printf(" ");
		}

		for (j = 1; j <= 2 * i - 1; j++)
		{
			printf("*");
		}
		printf("\n");
	}


	return 0;
}

 运行结果:

 二.下半部分

 注意是6行,不再是7行咯

 同样先来分析规律:

 

继续分析行数和*、空格之间的关系,仔细观察可以得出: 具体行数X2+*数=13,所以*数量=13-2X具体行数,而13又是6X2-1得出来的,即第一行*数=(2*6+1)-2X1个,第二行*数为(2*6+1)-2X2个,第三行*数=(2*6+1)-2X3个,第四行*数=(2*6+1)-2X4个,第五行*数=(2*6+1)-2X5个,第六行*数=(2*6+1)-2X6个;

空格数恒等于行数;

下半段跟上半段一样,每打印一行,就循环对应次数的空格打印和8数量打印,在自己脑海里形成清晰的思路以后就开写

代码段:


#include<stdio.h>
int main()
{
	int i = 1;                        //i控制行数
	int j = 1;                        //j控制打印*
	int k = 0;                        //k控制打印空格
	for (i = 1; i <= 6; i++)
	{
		for (k = 1; k <= i; k++)
		{
			printf(" ");
		}

		for (j = 1; j <= ((2 * 6) + 1) - 2 * i; j++)
		{
			printf("*");
		}
		printf("\n");
	}

	return 0;
}

 运行结果:

 三 、最终代码

#include<stdio.h>
int main()
{
	int i = 1;                        //i控制行数
	int j = 1;                        //j控制打印*
	int k = 0;                        //k控制打印空格
	for (i = 1; i <= 7; i++)
	{
		for (k = 1; k <= 7 - i; k++)
		{
			printf(" ");
		}

		for (j = 1; j <= 2 * i - 1; j++)
		{
			printf("*");
		}
		printf("\n");
	}
	for (i = 1; i <= 6; i++)
	{
		for (k = 1; k <= i; k++)
		{
			printf(" ");
		}

		for (j = 1; j <= ((2 * 6) + 1) - 2 * i; j++)
		{
			printf("*");
		}
		printf("\n");
	}

	return 0;
}

四:拓展

可以考虑,行数由用户输入,输出对应的菱形


#include<stdio.h>
int main()
{
	int i = 1;                        //i控制行数
	int j = 1;                        //j控制打印*
	int k = 0;                        //k控制打印空格
	int n = 0;
	scanf("%d", &n);
	for (i = 1; i <= n; i++)
	{
		for (k = 1; k<= n - i; k++)
		{
			printf(" ");
		}

		for (j = 1; j <= 2 * i - 1; j++)
		{
			printf("*");
		}
		printf("\n");
	}
	for (i = 1; i <= n-1; i++)
	{
		for (k = 1;k<=i ; k++)
		{
			printf(" ");
		}

		for (j = 1; j <=(2*(n-1)+1)-2*i; j++)
		{
			printf("*");
		}
		printf("\n");
	}

	return 0;
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值