2017.11.2 关于C语言程序设计现代方法第8章第9题
2017-11-02 16:40
260 查看
原题是:
编写程序,要求此程序可以产生一种贯穿10X10数组的随机步。数组包含字符。程序必须是从一个元素随机走到另一个元素,对一个元素来说这种行走始终是向上、向下、向左、向右。程序访问的元素将用从A到Z的字母进行标记,而且是按顺序的进行访问下面是希望输出的一个实例:
A . . . . . . . . .
B C D . . . . . . .
. F E . . . . . . .
H G . . . . . . . .
I . . . . . . . . .
J . . . . . . . Z .
K . . R S T U V Y .
L M P Q . . . W X .
. N O . . . . . . .
. . . . . . . . . .
注意: 不能走到数组外面,不能走到已有字母标记的位置。只要有一个条件不满足,就得尝试换一个方向移动。如果4个方向都堵住了,程序就必须终止了。
附上我的答案。如果有问题,请指正。
编写程序,要求此程序可以产生一种贯穿10X10数组的随机步。数组包含字符。程序必须是从一个元素随机走到另一个元素,对一个元素来说这种行走始终是向上、向下、向左、向右。程序访问的元素将用从A到Z的字母进行标记,而且是按顺序的进行访问下面是希望输出的一个实例:
A . . . . . . . . .
B C D . . . . . . .
. F E . . . . . . .
H G . . . . . . . .
I . . . . . . . . .
J . . . . . . . Z .
K . . R S T U V Y .
L M P Q . . . W X .
. N O . . . . . . .
. . . . . . . . . .
注意: 不能走到数组外面,不能走到已有字母标记的位置。只要有一个条件不满足,就得尝试换一个方向移动。如果4个方向都堵住了,程序就必须终止了。
附上我的答案。如果有问题,请指正。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | #include <stdio.h> #include <time.h> #include <stdlib.h> #define MAXX 10 #define MAXY 10 void generate_random_walk(char walk[10][10]); void print_array(char walk[10][10]); void process(char walk[10][10]); int main(void) { char walk[10][10]; generate_random_walk(walk);//调用generate_random_walk函数,对数组初始化。 srand((unsigned) time(NULL));//生成随机数的种子数。 process(walk);//随机步的过程。 print_array(walk);//输出随机随机步数组。 return 0; } void generate_random_walk(char walk[10][10]) { int x,y; for (x = 0; x < MAXX; x++) { for (y = 0; y < MAXY; y++) { walk[x][y] = '.'; } } }//以上函 b660 数把char型数组walk中的值全部初始化为'.'。 void print_array(char walk[10][10]) { int x,y; for (x = 0; x < MAXX; x++) { for (y = 0; y < MAXY; y++) { printf("%c",walk[x][y]); } printf("\n"); } }//以上函数把数组输出。 void process(char walk[10][10]) { int x = 0,y = 0,i,n,f;//使x,y初始化为0。 char str; str = 'A'; walk[x][y] = str;//把‘A’赋给walk[0][0]。 for (str = 'B'; str <= 'Z'; str++) { f = 0; //f用于控制循环。在switch中每尝试走一次,f就会加1. //f == 4的时候表示,上下左右都走了一遍。此时仍然不通, //则说明无路可走了,应该结束循坏。 //每个字母开始走的时候都要使f = 0,以便对每个字母的走法控制, conti: n = rand() % 4;//生成随机数。 switch (n) { case 0: if ((y-1)>=0 && walk[x][y-1] == '.') //要判断有没有越界,以及下一步是不是已经走过了。 { walk[x][y-1] = str; y = y - 1; } else { if (f == 4) break; else { f += 1; goto conti; } }//如果这个方向走不了,继续尝试其他方向,返回到conti处。 //如果四个方向都不能走,break出循环, break; case 1: if ((y+1)<=9 && walk[x][y+1] == '.') { walk[x][y+1] = str; y = y + 1; } else { if (f == 4) break; else { f += 1; goto conti; } } break; case 2: if ((x-1)>=0 && walk[x-1][y] == '.') { walk[x-1][y] = str; x = x - 1; } else { if (f == 4) break; else { f += 1; goto conti; } } break; case 3: if ((x+1)<=9 && walk[x+1][y] == '.') { walk[x+1][y] = str; x = x + 1; } else { if (f == 4) break; else { f += 1; goto conti; } } break; } } } |
相关文章推荐
- 2017.11.3 关于C语言程序设计现代方法第9章第5题&&第8章第17题
- 2017.11.3 关于C语言程序设计现代方法第9章第8题
- C语言程序设计现代方法 K.N.KING 第8章第9题
- 简单 随机步法 C语言程序设计现代方法 第二版 第8章 编程题9
- 关于Java中的paint,repaint,update三个方法的关系
- FileItem类的常用方法(关于文件上传的)
- 运维小结之关于ssh登录问题的解决方法
- BO中关于金额舍入的方法
- 关于Android Force Close 出现的原因 以及解决方法
- 关于使用VS.Net2003调试器出现的问题及相关解决方法
- 关于类protected、private、public的方法
- 关于Java中的sleep和wait方法
- 关于msn登陆不上去了的解决方法
- 关于使用VS.Net2003调试器出现的问题及相关解决方法 (转)
- 【怎样写代码】小技巧 -- 关于方法中修饰形参的关键词
- 关于makefile中,一直显示“XXX is up to date”的解决方法
- 关于有道词典在Chrome中屏幕取词插件的安装方法
- JS关于函数方法
- 关于html文件中表格打印不出底色的解决方法
- 关于easydialog 使用方法和问题