对于这种输出菱形样式的图形我在这里为大家总结了一点简单方法,这需要一点点抽象思维,但也不是很难的哦,大家不要害怕,请听小鑫娓娓道来。
首先我们要了解编译器输出格式以及C语言代码的整体趋向性,编译器输出格式是以行输出标准的,C语言代码一般是以正向发展为主要趋势的,让我们看样例输出格式,一个空心的菱形,在我们之前所接触的输出图形样式都是实菱形为主,这种空心图形没有过多接触,但也不是没有办法的,掌握每一行的输出技巧,暴力解法是可以解出来的,但是代码量过于庞大,小鑫比较懒不想写这么多代码,于是我就想出来一种新方法:将输出图形二维化,想象成二维笛卡尔坐标系,但也不是一般的笛卡尔坐标系,这个坐标的纵坐标是向下指的。下面我用一个图来解释一下吧:
围成菱形的四条线大家应该很容易就猜出来就是| X | + | Y | = N(N为输入的数)
二话不说先上代码:
#include<stdio.h>
#include<stdlib.h>
int print_graphic(int n)
{
int b,i,j,k;
int x,y;
if(n%2==0)
{
for(y = -n+1 ; y <=0 ;y++)
{
for(x= -n+1 ; x <n; x++)
{
if(abs(y)+abs(x) < n)
printf("+");
else if(-x + y > -n)
printf(" ");
}
printf("\n");
}
}
else
{
for(y = 1 ; y <=n ;y++)
{
for(x= -n+1; x <n; x++)
{
if(abs(y)+abs(x) <= n)
printf("+");
else if(x + y < n)
printf(" ");
}
printf("\n");
}
}
}
int main()
{
int num,z=0;
while(scanf("%d", &num)!=EOF&&num)
{
z++;
if(z>=2) printf("\n");
print_graphic(num);
}
return 0;
}
我用一个输出图形的函数来实行这个操作,实际上不用也可以,直接就把 if(n%2==0)和else 那两段代码拖到主函数里面就可以啦。函数的运用主要是培养模块化的思维,不如一开始就用这种方式来写代码,为以后铺路。