用“*”打印出n行菱形状图
代码:(vs2013)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void main()
{
int n;
printf("请输入要打印*的层数:\n");
scanf("%d", &n);
if (n == 1)
{
printf("*\n");
return 0;
}
if (n % 2 == 0)
{
printf("输入不合法!\n");
return 0;
}
n = n / 2+1;
int x = n;
while (n != 0)
{
for (int i = 0; i <n; i++)
{
printf(" ");
}n--;
for (int j = n; j < x; j++)
{
printf("* ");
}
printf("\n");
}
int m = x;
while (m != 0)
{
m--;
for (int i = m; i <=x; i++)
{
printf(" ");
}
for (int j = 0; j <m; j++)
{
printf("* ");
}
printf("\n");
}
}
分析:由观察得出在第5(及9/2+1)行前空格数依次递减,* 在递增,所以第一行空格最少取5-1=4个,注意打印 * 时应在其后面多打印一个空格否则不能成菱形,并且每打印一行 * 和空格后要换行,所以可以在一次循环后答应换行。5行后空格依次增加,* 依次减少所以在构造和上面相似的循环输出空格和字符。