1.实心棱形
代码如下:
#include<stdio.h> int main() { int line; int i = 0; //将棱形分成俩部分(上部分比下部分多了中间的分隔线) scanf_s("%d", &line); //用line来表示棱形的上半区有多少行 for (i = 0; i < line; i++) { int j = 0; for (j = line - 1 - i; j > 0; j--) //观察棱形的结构,可以先打印空格,再打印*(用*来画出棱形),注意j与i之间的数量关系,因为j的范围限制空格和*的打印次数。 { printf(" "); } for (j = 0; j < 2 * i + 1; j++)//灵活运用打印的个数与i之间的关系 { printf("*"); } printf("\n"); //打印下半区: } for (i = 0; i < line - 1; i++)//下半区应有line-1行。 { int j = 0; for (j = 0; j < i + 1; j++)//同样,先打印空格,再打印* { printf(" "); } for (j = 0; j < 2 * (line - 1 - i) - 1; j++) { printf("*"); } printf("\n"); } return 0; }
思想:此类图形题,要点在于能够想到行数与要打印的字符之间的数量关系。
2.空心棱形
代码如下:
#include<stdio.h>
int main()
{
int line; int i, j;
scanf_s("%d", &line);
for (i = 0; i < line; i++)
{
for (j = 0; j < line - 1 - i; j++)
{
printf(" ");
}
if (i ==0) //第一行的*I无法打印出,所以此处是将第一行的*单独打印出,利于下面的if进行。。。。。。
{
printf("*\n");
}
if (i > 0)
{
printf("*");//打印每行的第一个*后,再打印空格,这是关键步骤,然后再打印出行尾的*(注意:中间空心的空格也是与行数有关系的)
for (j = 0; j < 2 * i - 1; j++)
{
printf(" ");
}printf("*");
printf("\n");
}
}
for (i = 0; i < line - 1; i++)
{
for (j = 0; j < i + 1; j++)
{
printf(" ");
}printf("*");
for (j = 0; j < 2 * (line - 2 - i) - 1; j++)//下半部分的打印
{
printf(" ");
}
if (i != line - 2)//关键步骤:随着i的增加,行数也再增加,当i=line-2时,已经来到了棱形下部分的尾部(只有一个*,无需再打印一个*)
{
printf("*\n");
}
}
return 0;
}