解题思路
为了在屏幕上输出一个如下图的图形
我们首先对图形进行观察,不难发现该图形为高度对称图形,从上至下“ * ”的符号每一行均多两个,然后到中间段,后面每一行便逐行减少两个“ * ”。这便是其中的规律
代码如下
#include<stdio.h>
#include<windows.h>
int main()
{
int i = 0;//此处的i在程序中表示为菱形的行数
for (i = 0; i < 7; i++)//首先对菱形的上半部分进行打印,此处我们可以用循环来实现
{
int j = 0;//j在程序中表示为从左至右的位置
for (j = 0; j < 7 - i - 1; j++)//因为我们无法直接在一段距离后输出‘ * ’,所以我们可以使用‘ ’来实现
{
printf(" ");
}
for (j = 0; j < 2 * i + 1; j++)//此处便是输出我们菱形主体部分,而菱形的*与行数的关系为2*i+1
{
printf("*");
}
printf("\n");
}
for (i = 0; i < 7; i++)
{
int j = 0;
for (j = 0; j < i + 1; j++)
{
printf(" ");
}
for (j = 0; j < 2 * (7 - i - 1) - 1; j++)
{
printf("*");
}
printf("\n");
}
system("pause");
return 0;
}
当然,这个程序只能帮助我们实现固定打印,所以我们对程序进行稍加改进便可以实现动态打印
#include<stdio.h>
#include<windows.h>
int main()
{
int i = 0;
int line = 0;
scanf_s("%d", &line);
for (i = 0; i < line; i++)
{
int j = 0;
for (j = 0; j < line - i - 1; j++)
{
printf(" ");
}
for (j = 0; j < 2 * i + 1; j++)
{
printf("*");
}
printf("\n");
}
for (i = 0; i < line; i++)
{
int j = 0;
for (j = 0; j < i + 1; j++)
{
printf(" ");
}
for (j = 0; j < 2 * (line - i - 1) - 1; j++)
{
printf("*");
}
printf("\n");
}
system("pause");
return 0;
}