思路:
*
***
*****
*******
*********
***********
*************
***********
*********
*******
*****
***
*
由图可知,这是对称图形,所以先取一半分析,另一半用同种方法解决;
现在只看1~7行,假设i为行数,j为每行星号的个数,当
i=1,j=1
i=2,j=3
i=3,j=5
i=4;j=7
由此可知j=2*i-1,也就是说当i<=2*i+1时打印星号;
同理,对于8~13行来说,当j<=27-2i时打印星号。
#include<stdio.h>
int main()
{
int i = 0,j=0;
for (i = 1; i <= 7; i++)
{
for (j = 1; j <= 2 * i - 1; j++)
{
printf("*");
}
printf("\n");//每打印完一行,转到下一行
}
for (i = 8; i <= 13; i++)
{
for (j = 1; j <= 27 - 2 * i; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
难点:不知道什么时候打印星号,什么时候打印空格,找不到行与每行星号个数的规律。
打印菱形
#include<stdio.h>
int main()
{
int h = 0;//上半部分行数
int i = 0;
int j = 0;//控制*
int n = 0;//控制空格
scanf("%d", &h);
for (i = 1; i <= h; i++)
{
for (n = 1; n <= h - i; n++)//空格=上半部分行数-所在行数
{
printf(" ");
}
for (j = 1; j <= 2 * i - 1; j++)
{
printf("*");
}
printf("\n");
}
for (i = 1; i <= h - 1; i++)//下半部分
{
for (n = 1; n <= i; n++)
{
printf(" ");
}
for (j = 1; j <= 2 * (h - i) - 1; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}