c语言打印“*”号组成的图形(例:“X“形,菱形)

        当用c语言打印出以下类型的图形,第一眼看下去往往没有任何头绪,甚至用了很复杂的代码才能打印出来。其实想打印出这些图形往往不难,只要清楚其中的规律即可,用对方法后甚至几行代码就可以完成打印要求。

1、打印"X"形

        虽然该图形有行、列,很像一个二维数组,但不需要二维数组也可以实现要求。

        思路:观察要打印这十个*号的坐标,发现他是有一定的规律的:

        红色斜线的横坐标,竖坐标的数值是一样的。蓝色斜线的横坐标,竖坐标的值相加起来都等于4,然而这是一个5行5列的图形,也就是说蓝色斜线的横坐标,竖坐标的值相加等于图形规格(行数/列数-1)的 值。

        比如要打印一个a行a列的x形图形,那么只有在行和列相等、行+列等于a-1的情况下才打印*号,其他情况打印空格就行。代码如下:

#include<stdio.h>

int main()
{
	int a = 0;
	scanf("%d", &a);
	int i = 0;
	for (i = 0; i < a; i++)
	{
		int j = 0;
		for (j = 0; j < a; j++)
		{
			if (i == j || i + j == a-1)//明白要打印的*坐标后,给出判断语句打印
				printf("x");
			else
				printf(" ");
		}
		printf("\n");
	}
	return 0;
}

运行结果:

2、打印直角三角形

        在明白上述x形的打印后,打印直角三角形同理,从元素的坐标下手,观察他们的特性:

        

        首先这是一个5x5的图形,其次发现空格坐标的行与列加起来的数值最大也不会超过5-1,那么就好办了,我们只需要判断一个条件,只要坐标的行与列的值加起来<总行数/总列数-1的值就打印空格,其他情况打印*号就行。

#include<stdio.h>

int main()
{
	int a = 0;
	scanf("%d", &a);
	int i = 0;
	for (i = 0; i < a; i++)
	{
		int j = 0;
		for (j = 0; j < a; j++)
		{
			if (j + i < a - 1)//满足这个条件就打印空格,否则打印*号
				printf(" ");
			else
				printf("*");
		}
		printf("\n");
	}
	return 0;
}

运行结果:

3、打印菱形

        打印菱形可以分两步走,先打印菱形的上半区,再打印菱形的下半区。确认好上半区的行数a后,下半区的行数为:a-1。这样一来输入要打印的上半区的行数就能确认整个菱形的大小了。

         从上图中得出随着行数的不断变化,空格、*号的数量也发生了变化。上半区的第一行空格数是a-1,第二行是a-1-行数变化值,这么一个递减的规律。*号是每行+2的递增规律。

        下半区的空格的数量=行数,*号的数量等于(2*(a-行数变化值)-3)。确定好这些条件就可以写出代码:

#include<stdio.h>

int main()
{
	int a = 0;
	scanf("%d", &a);
	int i = 0;
	int j = 0;

	//上半区打印
	for (i = 0; i < a; i++)//上半区a行
	{
		for (j = 0; j < a-1-i; j++)//随着行数增大空格数量不断减少
		{
				printf(" ");
		}
		for (j = 0; j < 2 * i + 1; j++)//2 * i + 1表示随着行数增大*号不断增多
		{
			printf("*");
		}
		printf("\n");
	}

	//下半区打印
	for (i = 0; i < a - 1; i++)//下半区只有a-1行
	{
		for (j = 0; j <= i; j++)
		{
			printf(" ");
		}
		for (j = 0; j < 2 * (a - i) - 3; j++)// 2 * (a - i) - 3表示随着行数增大*号不断减少
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

运行结果:

结语:

        如果本文对你起到了帮助,希望可以点赞👍+关注😎+收藏👌哦!如果有遗漏的地方欢迎大家在评论区补充~!!

👉谢谢大家!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

安权_code

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

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

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

打赏作者

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

抵扣说明:

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

余额充值