标签:char draw 补全 int 填空题 蓝桥 ++ buf ooo
题目:
如下的程序会在控制台绘制分形图(就是整体与局部自相似的图形)。
当 n=1,2,3 的时候,输出如下: 请仔细分析程序,并填写划线部分缺少的代码。
n=1 时:
o
ooo
o
n=2 时:
o
ooo
o
o o o
ooooooooo
o o o
o
ooo
o
n=3时:
o
ooo
o
o o o
ooooooooo
o o o
o
ooo
o
o o o
ooo ooo ooo
o o o
o o o o o o o o o
ooooooooooooooooooooooooooo
o o o o o o o o o
o o o
ooo ooo ooo
o o o
o
ooo
o
o o o
ooooooooo
o o o
o
ooo
o
思路:
- 寻找规律:3 * 3、9 * 9、27 * 27,malloc存储空间并初始化
- 通过递归将要打印的图形标记为1
- 将标记的图形进行输出显示
- free释放内存空间
代码:
#include <stdio.h>
#include <stdlib.h>
void show(char* s , int w){
int i,j;
for(i = 0; i < w; i++){
for(j = 0; j < w; j++){
if(s[i*w+j] == 1){
printf("%c",'o');
}else{
printf("%c", ' ');
}
}
printf("\n");
}
}
void draw(char* s ,int w, int x, int y, int size){
if(size == 1){
s[w * y + x] = 1;
return;
}
int n = size / 3;
draw(s,w,x,y,n);
draw(s,w,x-n,y,n);
draw(s,w,x+n,y,n);
draw(s,w,x,y-n,n);
draw(s,w,x,y+n,n);
}
int main()
{
int N;
scanf("%d",&N);
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;
}
结果显示:
image.png
总结:
- malloc与free用法
- 通过递归对图形进行标记
- 在字符串中通过用一次函数a * x + b来表示二维空间
- 注意:s[w * y + x] = 1与draw(s,w,x-n,y,n);
标签:char,draw,补全,int,填空题,蓝桥,++,buf,ooo 来源: https://blog.csdn.net/weixin_40934238/article/details/122789005
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。