一个循环打印空菱形的有关问题(请高手帮帮忙!)

一个循环打印空菱形的问题(请高手帮帮忙!)
菱形如下
          *
        *   *
      *       *
    *           *
  *               *
*                   *
  *               *
    *           *
      *       *
        *   *
          *
要求之用一个循环打印出来。菱形的大小可以用键盘输入的数字来控制。

------解决方案--------------------
*
* *
* *
* *
* *
* *
* *
*

#include <stdio.h>

int main(void)
{
int n;

printf ( "\n请输入菱形的高度\n-> ");
scanf ( "%d ", &n);

printf ( " *\n ");

for (int i=0; i <n-2; i++)
{
printf ( "* *\n ");
}

printf ( " *\n ");

return 0;
}
------解决方案--------------------
//代码如下,devcpp4.9下测试通过
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int n, i;
char *p1, *p2;
char *s1, *s2;

int main()
{
printf( "请输入菱形的大小n(n> 0): ");
scanf( "%d ", &n);
p1 = (char *)malloc(sizeof(char)*n+1);
p2 = (char *)malloc(sizeof(char)*n*2+1);
memset(p1, ' ', sizeof(char)*n+1);
memset(p2, ' ', sizeof(char)*n*2+1);
p1[n] = 0;
p2[n*2] = 0;
printf( "%s*\n ", p1);
s1 = p1+1;
s2 = p2+n*2-1;
for (i=n-1; i> =0; --i, s1++, s2-=2)
printf( "%s*%s*\n ", s1, s2);

for (s1-=2,s2+=4,i=n-1; i> 0; --i, s1--, s2+=2)
printf( "%s*%s*\n ", s1, s2);
printf( "%s*\n ", p1);
system( "pause ");
return 0;
}
/*
以下是输出的形状:
请输入菱形的大小n(n> 0):1
*
* *
*

请输入菱形的大小n(n> 0):3
*
* *
* *
* *
* *
* *
*

请输入菱形的大小n(n> 0):10
*
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
*

*/


------解决方案--------------------
#include <stdio.h>

int main(void)
{
int a;
scanf( "%d ",&a);
for (int i = 0; i <= a; i++)
{
if(i <= a/2)
{
for (int j = 0;j <= a;j++)
{
if(a/2 - i == j || j == a/2 + i )
{
printf ( "* ");
}
if (j == a)
{
printf( " \n ");
}
else
{
printf( " ");
}
}
}
else
{
for (int j = 0;j <= a;j++)
{
if(i - a/2 == j || a - j == i - a/2)