目录
一、问题分析
上部分:
下部分:
二、代码演示

一、问题分析
如上图所示,我们可以将棱形进行拆解,分为上下两个部分。
上部分:

通过观察,我们得到 单边空格数 = 上半部分总行数 - 行数 - 1
而 星号 = 行数 × 2 + 1
所以我们设 line 为上半部分总行数 i 为行数 。
那么代码如下:
	for(i=0; i<line; i++)
	{
		//打印一行
		//打印空格
		int j = 0;
		for(j=0; j<line-1-i; j++)
		{
			printf(" ");//打印空格
		}
		//打印*
		for(j=0; j<2*i+1; j++)
		{
			printf("*");//打印星号
		}
		printf("\n");
	}下部分:

通过观察,我们得知 下半部分的 单边空格数 = 行数
下半部分的 星号 = (下半部分总行数 - 行数 )× 2 - 1
于是我们可以设 下半部分总行数为 上半部分行数-1 也就是 line -1 , i为行数
那么代码如下:
	for(i=0; i<line-1; i++)
	{
		//打印一行
		int j = 0;
		for(j=0; j<=i; j++)
		{
			printf(" ");//打印空格
		}
		for(j=0; j<2*(line-1-i)-1; j++)
		{
			printf("*");//打印星号
		}
		printf("\n");
	}二、代码演示
int main()
{
	int line = 0;
	int i = 0;
	scanf("%d", &line);//7
	//打印上半部分
	for(i=0; i<line; i++)
	{
		//打印一行
		//打印空格
		int j = 0;
		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++)
	{
		//打印一行
		int j = 0;
		for(j=0; j<=i; j++)
		{
			printf(" ");
		}
		for(j=0; j<2*(line-1-i)-1; j++)
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}


















