打印菱形的三种方法

双for循环

我们可以把菱形看成两部分

第一部分,先打印上半部分

int main()
{
	int i, j, n=0, k;
	scanf("%d", &n); //输入n值,会打印一个(2*n-1)的菱形;若输入n=5   则会打印一个9行的菱形
	for (i = 0; i < n; i++) //打印前4行*号
	{
		for (j = 0; j < n-i; j++)  //打印空格
		{
			printf(" ");
		}
		for (k = 0; k < 2 * i - 1; k++) //打印*号
		{
			printf("*");
		}
		printf("\n");
	}
	

第二部分,打印下半部分,跟第一步基本一样;


	for (i = 0; i < n; i++) //打印后5行*号
	{
		for (j = 0; j < i; j++)
		{
			printf(" ");
		}
		for (k = 0; k < 2 * n - 2 * i - 1; k++)
		{
			printf("*");
		}

		printf("\n");
	}
		return 0;
	
}

当我们合起来之后就可以得到一个菱形

 单for循环打印

这种方法一般来说挺少用的,大部分都是使用双for循环

int main()
{
	int i, j, k, n;
	scanf("%d", &n); //输入行数
	for (i = -n / 2; i <= n / 2; i++) //先给i赋值为-n/2,使其从负到正
	{
		if (i < 0) j = -i;   //当i值为负时,使其转为i正并赋值给j
		else j = i;
		for (k = 0; k < j; k++) //打印空格
		{
			printf(" ");
		}
		if (i > 0) j = -i;    
		else j = i;
		for (k = 0; k < (j+ n / 2) * 2 + 1; k++)  //打印*号 
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

输入行数9,如图

 当我们输入n=9时,i<=9/2=4,把i赋值为-4时,我们在打印*号时,当i<0时,j赋值为i,由于(j+n/2)*2=0,所以k<1,就只打印一个星号。以此类推,可以得到一个行数为9的菱形。

二维数组打印菱形

利用二维数组打印菱形,其实就是将菱形的上半部分储存到二维数组中,并打印出来。

#include <stdio.h>
int main()
{
	char arr[100][100];
	int i,j,n;
	scanf("%d",&n);
	for(i=0;i<(n+1)/2;i++)
	{
		for(j=0;j<n+1-2*(i+1);j++)
		arr[i][j]=' ';
		for(j=n+1-2*(i+1);j<n-1+2*(i+1);j+=2)
		{
			arr[i][j]='*';
			arr[i][j+1]=' ';
		}
	}
	for(i=0;i<(n+1)/2;i++)    //打印菱形的上半部分
	{
		for(j=0;j<n-1+2*(i+1);j++)
		printf("%c",arr[i][j]);
		printf("\n");
	}
	for(i=(n+1)/2-2;i>=0;i--)   //打印菱形的下半部分
	{
		for(j=0;j<n-1+2*(i+1);j++)
		printf("%c",arr[i][j]);
		printf("\n");
	}
	return 0;
 } 

这是我打印菱形的三种方法,有不足之处还望提出

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhyhgx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值