首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-03-16 
一个循环打印空菱形的问题(请高手帮帮忙!)菱形如下********************要求之用一个循环打印出来。菱形的

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

[解决办法]
*
* *
* *
* *
* *
* *
* *
*

#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;
}

热点排行