目录
一、问题分析
上部分:
下部分:
二、代码演示
一、问题分析
如上图所示,我们可以将棱形进行拆解,分为上下两个部分。
上部分:
通过观察,我们得到 单边空格数 = 上半部分总行数 - 行数 - 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;
}