有趣的图案代码

目录

前言:

1.金字塔

2.倒金字塔


前言:

     许多小伙伴在初识C语言时,在看到某些图案类题目会没有思路,想象不出怎么通过代码实现。今天,我整理出一部分,希望帮助到大家归纳总结循环结构的知识。

1.金字塔

  作为许多小伙伴学习C语言的必练题目,相信大家对金字塔并不陌生。

在C语言中,打印一个金字塔通常涉及到使用嵌套循环来打印空格和星号(*)

它的思路就是,在输出的图案左侧输入空格,来保证图案的整齐。观察图案可以发现规律:

第一行有n-1个空格,第二行有n-2个空格,那么我们让j进入循环中循环n-i次,就能通过空格来固定图案的位置。

#include<stdio.h>
int main()
{
	int i, j;
	int n;
	scanf("%d", &n);//输入所需行数
	
	for (i = 1; i <= n; i++)//输出几行的图案
	{
		for (j = 1; j <= n - i; j++)//每行输出n-i个空格,使图案左对齐
			printf(" ");
		for (j = 1; j <= 2 * i - 1; j++)//在空格后输出图案,每行有2*i-1个图案
			printf("*");
		printf("\n");//记得输出完一行的图案后再换行
	}
	
    return 0;
}

外层循环让i从1开始的意思是从第一行开始打印。内层循环让j从1开始的意思是打印第一个空格第一个星号。外层循环n次,则打印了n行。这样解释应该便于理解了许多。

输出图案:

2.倒金字塔

倒金字塔与正金字塔大同小异,无非是让金字塔从小到大输出变成从大到小,于是我们的思路就是让外层循环倒过来,而内层循环不变,代码如下:

	//倒金字塔 
	for (i = n; i >= 1; i--)//递减 
	{
		for (j = 1; j <= n - i; j++)
			printf(" ");
		for (j = 1; j <= 2 * i - 1; j++)
			printf("*");
		printf("\n");
	}

这样,我们就让图案从第n行开始输出,而又打印在最上面了。

3.菱形

菱形就是对正、倒金字塔的组合。在输出时,通常让倒金字塔的行数比正金字塔少一行

代码如下:

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

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

如果输入的行数是菱形的总行数,则正金字塔的行数为n/2+1;倒金字塔n/2;

4.空心金字塔

此时让我们打印一个这样的空心金字塔:

其实这就是在金字塔内部扣掉几个星号对不对呀,那么如何实现呢?

话不多说,直接上代码

for (i = 1; i <= n; i++)//输出几行的图案
{
	for (j = 1; j <= n - i; j++)
		printf(" ");
	for (j = 1; j <= 2 * i - 1; j++)
	{
		if (i < n) 
		{
			if (j == 1 || j == 2 * i - 1)//固定位置输出图案
				printf("*");
			else
				printf(" ");//其余位置输出空格
		}
		else
			printf("*");//最后一行不变,输出图案
	}

首先我们观察图案除了第一行与最后一行,其他行中间的图案都被替换成了空格。

那么我们就增加限制条件:i<n,第n行以外的每行都进行另一个循环判断:

(j == 1 || j == 2 * i - 1)这句代码的目的就是让这几行第一个位置和最后一个位置输出*;

而其他位置输出空格。

5.空心菱形

如图:

哈哈,这个图案相信大家已经知道怎么解决了吧,没错,就是组合上下空心金字塔

上代码:

int main()
{
		int i;
		int j;
		int n;
		scanf("%d", &n);
		for (i = 1; i <= n; i++)
		{
			for (j = 1; j <= n - i; j++)
				printf(" ");
			for (j = 1; j <= 2 * i - 1; j++)
			{
				if (j == 1 || j == 2 * i - 1)
					printf("*");
				else
					printf(" ");
			}
			printf("\n");
		}

		for (i = n - 1; i >= 1; i--)
		{
			for (j = 1; j <= n - i; j++)
				printf(" ");
			for (j = 1; j <= 2 * i - 1; j++)
			{
				if (j == 1 || j == 2 * i - 1)
					printf("*");
				else
					printf(" ");
			}
			printf("\n");
		}
		return 0;
}

在本代码中,就不需让最后一行例外而打印图案了。

本次分享到此为止,感谢您的阅读,如果您觉得我写的还不错或者对您有帮助,请留下您宝贵的点赞,如果还有什么补充或改正,欢迎评论区留言!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值