问题分析:
菱形的大小size其实就是中间行中*号的个数,也是整个菱形的行数,其值必是奇数。
问题的关键之一是如何确定每行中*号的个数。经过分析得知:当行i<=(size+1)/2时,该行的*号个数为n=2*i-1,否则n=2*(size-i+1)-1。
问题的关键之二是如何确定每行显示的第一个*号的位置,也就是显示第一个*号之前应显示多少空格。经过分析得知:每行应显示的空格数m=(size-n)/2个。
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, j, k, m, n, size;
printf("input size: ");
scanf_s("%d", &size);
if (size <= 0 || size % 2 == 0)
{
printf("the size is error!n");
exit(-1);
}
for (i = 1; i <= size; i++)
{
n = (i <= (size + 1) / 2) ? i : size - i + 1;
n = 2 * n - 1;
m = (size - n) / 2 + 15;
for (k = 1; k <= m; k++)
printf(" ");
for (j = 1; j <= n; j++)
printf("*");
printf("n");
}
return 0;
}
推荐下我自己的C/C++学习君 羊:961-676-182,不管你是小白还是大牛,小编我都挺欢迎,不定期分享干货,包括我自己整理的一份2020最新的C/C++资料和零基础入门教程,欢迎初学和进阶中的小伙伴。