一个循环打印空菱形的问题(请高手帮帮忙!)
菱形如下
*
* *
* *
* *
* *
* *
* *
* *
* *
* *
*
要求之用一个循环打印出来。菱形的大小可以用键盘输入的数字来控制。
[解决办法]
*
* *
* *
* *
* *
* *
* *
*
#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)
{
printf ( "* ");
}
if (j == a)
{
printf( "\n ");
}
else
{
printf( " ");
}
}
}
}
return 0;
}
[解决办法]
#include <stdio.h>
int main(void)
{
int a;
scanf( "%d ",&a);
for (int i = 0; i <= 2*a; i++)
{
if(i <= a)
{
for (int j = 0;j <= 2*a;j++)
{
if(a - i == j || j == a + i )
{
printf ( "* ");
}
if (j == 2*a)
{
printf( " \n ");
}
else
{
printf( " ");
}
}
}
else
{
for (int j = 0;j <= 2*a;j++)
{
if(i - a == j || 2*a - j == i - a)
{
printf ( "* ");
}
if (j == 2*a)
{
printf( "\n ");
}
else
{
printf( " ");
}
}
}
}
return 0;
}
[解决办法]
楼主是要求用一个循环实现的
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int i, n, p, q;
char* buf;
printf( "请输入菱形的大小n(n> 1): ");
scanf( "%d ", &n);
if (n <=1)
{
printf( "n必须大于1\n ");
return -1;
}
buf = (char*)malloc(sizeof(char)*n*2);
memset(buf, ' ', sizeof(char)*n*2);
buf[n*2-1] = '\0 ';
p = q = n-1;
for (i=0; i <2*n; i++)
{
if (i <n)
{
buf[p+1] = ' ';
buf[q-1] = ' ';
buf[p--] = '* ';
buf[q++] = '* ';
printf( "%s\n ", buf);
}
else if (i == n)
{
p++;
q--;
}
else
{
buf[++p] = '* ';
buf[--q] = '* ';
buf[p-1] = ' ';
buf[q+1] = ' ';
printf( "%s\n ", buf);
}
}
free(buf);
return 0;
}