本博客,阅读书籍:《c语言程序设计————现代方法》
知识点:
- C99标准中二维数组的初始化方法。
- rand()和srand()的使用。
1 二维数组的初始化
详细介绍参考:《c语言程序设计————现代方法》
文章介绍参考:数组初始化
我简单介绍下:
int a[8]={0,0,2,0,3,0,0,8};//常规初始化
int a[8]={[2]=2,[4]=3,[7]=8};//C99初始化和上面等价
int a[2][2]={[0][0]=1,[1][1]=1]}//二维的单位矩阵
2 rand()和srand()的使用
文章介绍参考:rand和srand
3 程序实战
3.1 《c语言程序设计————现代方法》第八章 课后习题 9
编写程序,生成一种贯穿10*10字符数组(初始时全为‘.’)的“随机步法”。
程序必须随机地从一个元素“走到”另一个元素,每次都向上,向下,向左,或向右移动一个元素位置。
已访问过的元素按访问顺序用字母A到Z进行标记。
下面是输出示例:
3.2 程序提示:
- 不能走到数组的外面。
- 不能走到已有字母的位置。
3.3 程序:
/*****************************************
《c语言————现代方法》 第八章 课后题9
作者:dacao
时间:2019/6/7
注:今天端午,可惜回不去。
****************************************/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<stdbool.h>
#define N 10
int i=0,j=0,tmp_i=0,tmp_j=0;
char maze[N][N] = {[0 ... N-1][0 ...N-1] = '.'}; //C99中二位数组的初始化
void nextStep(int dirt) //下一步:tmp_i,tmp_j
{
switch (dirt)
{
case 0:
tmp_i=i-1;
break;
case 1:
tmp_j=j+1;
break;
case 2:
tmp_i=i+1;
break;
case 3:
tmp_j=j-1;
break;
}
}
bool checkStep(int tmp_i,int tmp_j) //检查下一步是否合法
{
bool flag=false;
if((tmp_i>=0&&tmp_i<=N-1)&&(tmp_j>=0&&tmp_j<=N-1)) //下一步在矩阵范围内。
{
if (maze[tmp_i][tmp_j]=='.') //下一步没有走过
{
flag=true;
}
}
return flag;
}
bool checkLive(int i,int j) //检查当前位置是否为还有活路
{
bool flag=false;
if (checkStep(i-1,j)||checkStep(i+1,j)||checkStep(i,j-1)||checkStep(i,j+1)) //周围如果有一条通路,则可走
flag=true;
return flag;
}
int main(void)
{
//for(int i=0;i<N;i++)
// for(int j=0;j<N;j++)
// maze[i][j]='.';
//maze[10][10] = {[0 ... 9][0 ...9] = '.'};
srand((unsigned)time(NULL));
char alpha='A';
maze[i][j]=alpha; //i=j=0
bool flag=true;
int dirt; //方向 0,1,2,3 ;上,右,下,左;
while (flag)
{
if(checkLive(i,j))
{
while(1) //有活路的希望,拼尽全力找路
{
tmp_i=i;
tmp_j=j; //这个一定要初始化的,是的每次下一步在(i,j)的周围。否则,可能向对角线移动。
dirt=rand()%4; //方向
nextStep(dirt); //临时的下一步
if(checkStep(tmp_i,tmp_j)) //如果下一步可以走
{
i=tmp_i;
j=tmp_j;
maze[i][j]=++alpha;
break; //恭喜,满血复活,进入下一步
}
}
}
else
{
flag=false; //没有活路,游戏终止
}
if(alpha>='Z') //通关,使命完成 ++alpha,到达Z,说明Z已经赋值过给数组
flag=false;
}
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
printf("%2c",maze[i][j]);
printf("\n");
}
return 0;
}
3.4程序结果
3.5 程序评价
程序存储结构不错,程序结构清晰。nice。
如果,你写出或者看见更好的程序,欢迎留言。