用C语言实现菱形的输出

一、用菱形的行的总数打印

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int n;//n为一个奇数,是菱形的总行数
	printf("请输入你要打印的菱形行数:");
	scanf("%d", &n);
	int row = 1;
	for (row = 1; row <= n; row++)//从第一行开始循环,直到第n行。 
	{
		int character = 0;//计算当前这一行打印多少字符了,是否需要换行
		int num = 0;//表示想要打印的图案数量
		if (row <= n / 2)
		{
			num = 2 * row - 1;//计算每行图案的个数
		}
		else
			if (row == n / 2 + 1)//为了打印中间图案最多的一行,因为n是奇数,除于2向下取整,所以要加1
			{
				num = n;//包含了空格行,可以自己数数看
			}
			else
					if (row > n / 2 + 1)
					{
						int line = row - n / 2 - 1;//line表示下面部分的打印
						num = n - line * 2;
					}//求出下部分打印的图案行
		int blank = (n - num) / 2;//表示要打印的空格数量
			int k = 1;//控制循环次数的变量 
		for (int k = 1; k <= blank; k++)
		{
			printf(" ");
			character++;
		}//打印出来星星前面的空格 
		int m = 1;//控制循环次数的变量 
		for (m = 1; m <= num; m++)
		{
			printf("*");//打印出来这一行的*图案,这可以改自己想要的图案
			character++;//记录此行的字符数
		} 
		for (int k = 1; k <= blank; k++)
		{
			printf(" ");
			character++;//记录此行的字符数,空格也算
		}//打印出来后面的空格 
		if (character == n)//字符数量与此行可容纳数相同即换行
		{
			printf("\n");
		} 
	}
	return 0;
}

二、用菱形的边长来打印

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
		int i,j,k,t,n,x =0;//n表示菱形的行数,x表菱形的边长
		printf("这个菱形的边长是:" );
		scanf("%d", &x);//n的含义是菱形的总行数,n必须是奇数
		n = 2*x - 1;	//这是菱形边长x与总行数n的关系
		for (i = 1; i <= n; i++)//这一步打印菱形的高度
		{
			if (i <= x)//打印上部分
			{
				for (j = 1; j <= x - i; j++)//打印上部分的空白行
				{
					printf(" ");
				}
				for (k = 1; k <= 2 * i - 1; k++)//打印上部分的图案行
				{
					printf("*");
				}
			}
			else
			{
				for (j = 1; j <= i - x; j++)//打印下部分的空白行
				{
					printf(" ");
				}
				for (k = 1; k <= n - 2 * (i - x); k++)//打印下部分的图案行
				{
					printf("*");
				}
			}
			printf("\n");//每循环一次,相当于打印了一行,高度增加1.
		}
		printf("\n");//每打印一个菱形,换行一次.
	return 0;
}

两种方法各有特色:

第一种方法按每行字符个数来依次打印,比较清晰

第二种方法直接用行来打印,减少了计算字符来确定行的操作,更加简洁,第二种方法也可以改为输入行的总数来打印菱形(利用n与x的关系进行操作)自行摸索,不懂留言!

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

清潇沈默

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

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

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

打赏作者

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

抵扣说明:

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

余额充值