【C】菱形图案的规律

方法1:将菱形图案一分为二,依次打印上面的内容和下面的内容。

源代码:

int main(void)
{
	int i = 0;
	int j = 0;
	int line = 0;

	printf("请输入你想要打印菱形的行数:\n");
	scanf("%d", &line);

	//打印上面的图案
	for (i=0; i<line; i++)
	{
		//打印空格
		for (j=0; j<line-1-i; j++)
		{
			printf(" ");
		}
		//打印*
		for (j=0; j<2*i+1; j++)
		{
			printf("*");
		}
		printf("\n");
	}

	//打印下面的图案
	for (i=0; i<line-1; i++)
	{
		//打印空格
		for (j=0; j<=i; j++)
		{
			printf(" ");
		}
		//打印*
		for (j=0; j<2*(line-1-i)-1; j++)
		{
			printf("*");
		}
		printf("\n");
	}

	return 0;
}

这种方法有点繁琐,不推荐使用,对于打印图案的问题,其实有规律可循,见方法2。

方法2:把菱形抽象化,当做正方形去处理,可以发现对角线的距离是一样长的。于是乎我们以中心点(即就是对角线的交点)为坐标原点,建立二维平面直角坐标系,这里定义各个顶点到原点的距离为D,那么四个顶点的坐标分别是:A(-D,0)、B(D,0)、C(0,-D)、D(0,D)。连接这四个顶点,就是一个菱形(对角线垂直平分)。分别求出AC、CB、BD、DA这四条直线的方程(用截距式直线方程 x/a + y/b = 1),通过画出四条直线相交所构成的区域,就可以发现横纵坐标的绝对值之和不超过D。

源代码:

#define _CRT_SECURE_NO_WARNINGS 1

/*
* Copyright (c) 2018, code farmer from sust
* All rights reserved.
*
* 文件名称:OutputPattern.c
* 功能:输出菱形图案
*
* 当前版本:V1.0
* 作者:sustzc
* 完成日期:2018年3月27日13:19:19
*/

# include <stdio.h>
# include <stdlib.h>
# include <math.h>
# include <windows.h>

/*
*	函数名称:PrintfPattern
*
*	函数功能:打印菱形图案
*
*	入口参数:num
*
*	出口参数:空
*
*	返回类型:void
*/

void PrintfPattern(int num)
{
	int i = 0;
	int j = 0;

	for (i=-num; i<=num; i++)
	{
		for (j=-num; j<=num; j++)
		{
			Sleep(200);

			if (abs(i)+abs(j) <= num)
			{
				printf("*");
			}
			else
			{
				printf(" ");
			}
		}
		
		printf("\n");
	}

	return;
}

int main(void)
{
	int line = 0;
	int distance = 0;

	printf("请输入您想要打印菱形图案的行数:\n");
	scanf("%d", &line);

	distance = (line - 1) / 2;
	PrintfPattern(distance);

	system("pause");

	return 0;
}

输出结果:


猜你喜欢

转载自blog.csdn.net/sustzc/article/details/79721502