对于这种输出菱形样式的图形我在这里为大家总结了一点简单方法,这需要一点点抽象思维,但也不是很难的哦,大家不要害怕,请听小鑫娓娓道来。
首先我们要了解编译器输出格式以及C语言代码的整体趋向性,编译器输出格式是以行输出标准的,C语言代码一般是以正向发展为主要趋势的,让我们看样例输出格式,一个空心的菱形,在我们之前所接触的输出图形样式都是实菱形为主,这种空心图形没有过多接触,但也不是没有办法的,掌握每一行的输出技巧,暴力解法是可以解出来的,但是代码量过于庞大,小鑫比较懒不想写这么多代码,于是我就想出来一种新方法:将输出图形二维化,想象成二维笛卡尔坐标系,但也不是一般的笛卡尔坐标系,这个坐标的纵坐标是向下指的。下面我用一个图来解释一下吧:
围成菱形的四条线大家应该很容易就猜出来就是| X | + | Y | = N(N为输入的数)
说这么不如代码来得痛快,直接上代码:
#include<stdio.h>
#include<stdlib.h>
int print_graphic(int n)
{
int b,i,k;
b=n/2;
for(i=(-b);i<=b;i++)
for(k=(-b);k<=b;k++)
{
if(abs(k)>=b-abs(i))
printf("*");
else printf(" ");
if(k==b)
printf("\n");
}
}
int main()
{
int num;
scanf("%d", &num);
print_graphic(num);
return 0;
}
在这题中N是要处理的 输入的数为奇数,又要输出11行,对N/2就可以啦,我觉得我的代码还不够抽象,直接看的话还是有一丢丢晦涩,函数中 i 代表y轴 k代表x轴,循环y轴每进行++操作就要输出一个换行好啦,还有一系列输出图形的题目我陆续更新哈。
希望大家多多关注,小鑫会很努力地写博客的,我在这给各位大爷跪下了 噗通~~~~~~!