标题:打印图形
如下的程序会在控制台绘制分形图(就是整体与局部自相似的图形)。
当n=1,2,3的时候,输出如下:
请仔细分析程序,并填写划线部分缺少的代码。
#include <stdio.h>
#include <stdlib.h>
void show(char* buf, int w){
int i,j;
for(i=0; i<w; i++){
for(j=0; j<w; j++){
printf("%c", buf[i*w+j]==0? ' ' : 'o');
}
printf("\n");
}
}
void draw(char* buf, int w, int x, int y, int size){
if(size==1){
buf[y*w+x] = 1;
return;
}
int n = _________________________ ; //填空
draw(buf, w, x, y, n);
draw(buf, w, x-n, y ,n);
draw(buf, w, x+n, y ,n);
draw(buf, w, x, y-n ,n);
draw(buf, w, x, y+n ,n);
}
int main()
{
int N = 3;
int t = 1;
int i;
for(i=0; i<N; i++) t *= 3;
char* buf = (char*)malloc(t*t);
for(i=0; i<t*t; i++) buf[i] = 0;
draw(buf, t, t/2, t/2, t);
show(buf, t);
free(buf);
return 0;
}
代码
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
void show(char* buf, int t)
{
int i,j;
for(i=0; i<t; i++)
{
for(j=0; j<t; j++)
{
printf("%c", buf[i*t+j]==0? ' ' : 'o');
}
printf("\n");
}
}
void draw(char* buf, int t, int x, int y, int size)
{
//一开始的时候size=t=27
if(size==1)
{
buf[y*t+x] = 1;
return;
}
//边界条件是size=0,所以int肯定对size做改变
// int n = _________________________ ; //填空
int n=size/3;
draw(buf, t, x, y, n);
draw(buf, t, x-n, y ,n);
draw(buf, t, x+n, y ,n);
draw(buf, t, x, y-n ,n);
draw(buf, t, x, y+n ,n);
}
int main()
{
int N = 3;
int t = 1;
int i;
for(i=0; i<N; i++) t *= 3;//t=27
char* buf = (char*)malloc(t*t);//申请空间
for(i=0; i<t*t; i++) buf[i] = 0;//将一维数组全部初始化为0
draw(buf, t, t/2, t/2, t);
show(buf, t);
free(buf);//释放空间
return 0;
}