您的位置:首页 > 编程语言 > C语言/C++

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个方向都堵住了,程序就必须终止了。 

附上我的答案。如果有问题,请指正。

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;
}
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: