当前位置:文档之家› c语言~走迷宫

c语言~走迷宫

c语言~走迷宫
c语言~走迷宫

本程序代码为C语言解决数据结构(严蔚敏)中关于迷宫的问题。程序不仅实现迷宫路径查找,还实现文字描述路径功能

可以直接粘贴到vc6.0中运行

【代码如下】

# include # include # define null 0

typedef struct

{

int (*base)[2];

int (*top)[2];

int listlen;

}sqlist;

int topelem[2]; //栈顶元素

void creatstack(sqlist *mazepath); //创建一个存储路径的栈

void creatmap(int (*mazemap)[10]); //创建迷宫图纸

void printmap(int (*mazemap)[10]);

void footprint(int x,int y,int k,int (*mazemap)[10]);

int position(int x,int y); //判断是否到终点

int passroad(int x,int y,int (*mazemap)[10]);

void findpath(int (*mazemap)[10],sqlist *mazepath); //在mazemap当中寻找mazepaht

void printpath(sqlist *mazepath);

void roadinwords(sqlist *mazepath); //文字叙述如何走迷宫

void push(int x,int y,sqlist *mazepath); //栈操作

void pop(sqlist *mazepath);

void gettop(sqlist *mazepath);

void main()

{

sqlist mazepath;

creatstack(&mazepath); //创建一个存储路径的栈

int mazemap[10][10]={

1,1,1,1,1,1,1,1,1,1,

1,0,0,1,0,0,0,1,0,1,

1,0,0,1,0,0,0,1,0,1,

1,0,0,0,0,1,1,0,0,1,

1,0,1,1,1,0,0,0,0,1,

1,0,0,0,1,0,0,0,0,1,

1,0,1,0,0,0,1,0,0,1,

1,0,1,1,1,0,1,1,0,1,

1,1,0,0,0,0,0,0,0,1,

1,1,1,1,1,1,1,1,1,1

};

// creatmap(mazemap); //创建迷宫图纸

printf("迷宫原图为:\n");

printmap(mazemap);

findpath(mazemap,&mazepath); //在mazemap当中寻找mazepaht printf("走出迷宫图纸为:\n");

printmap(mazemap);

printf("走出迷宫文字叙述为:\n");

roadinwords(&mazepath);

// printpath(&mazepath);

}

void findpath(int (*mazemap)[10],sqlist *mazepath)

{

int x,y,flag=0,k=0,next; //位置是否可通,flag=0通,1墙,2通但不可走

x=1;

y=1; //获取初始位置

push(x,y,mazepath); //起点位置进栈

footprint(x,y,6,mazemap);

while(flag==0 && k!=162) //flag==1到达终点,0未到达终点

{

if(passroad(x,y+1,mazemap)==0)

push(x,y+1,mazepath),y=y+1,footprint(x,y,6,mazemap);

else if(passroad(x+1,y,mazemap)==0)

push(x+1,y,mazepath),x=x+1,footprint(x,y,6,mazemap);

else if(passroad(x,y-1,mazemap)==0)

push(x,y-1,mazepath),y=y-1,footprint(x,y,6,mazemap);

else if(passroad(x-1,y,mazemap)==0)

push(x-1,y,mazepath),x=x-1,footprint(x,y,6,mazemap);

else

footprint(x,y,2,mazemap),pop(mazepath),gettop(mazepath),x=topelem[0],y= topelem[1];

// printmap(mazemap);

k++;

flag=position(x,y); //判断是否到达终点

// printf("flag==%d\n",flag);

}

}

void creatstack(sqlist *mazepath)

{

mazepath->base=(int (*)[2])malloc(120*sizeof(int (*)[2]));

mazepath->top=mazepath->base;

mazepath->listlen=120;

}

void push(int x,int y,sqlist *mazepath)

{

**(mazepath->top)=x;

*(*(mazepath->top)+1)=y;

mazepath->top++;

}

void pop(sqlist *mazepath)

{

if(mazepath->top!=mazepath->base)

mazepath->top--;

}

void printmap(int (*mazemap)[10])

{

int (*p)[10];

p=mazemap;

int i,j;

printf(" \n\n\n");

for(i=0;i<10;i++)

{

for(j=0;j<10;j++)

{

if(j==0)

printf(" ");

if(*(*(p+i)+j)==0)

printf("▇");

else if(*(*(p+i)+j)==1)

printf("□");

else if(*(*(p+i)+j)==6)

printf("★");

else

printf("▇");

if(j==9)

printf("\n");

}

}

printf("\n\n");

}

void printpath(sqlist *mazepath)

{

int (*p)[2];

p=mazepath->base;

while(p!=mazepath->top)

{

printf("x=%d,y=%d\n",**p,*(*p+1));

p++;

}

}

void gettop(sqlist *mazepath)

{

int (*p)[2];

int (*q)[2];

p=mazepath->base;

while(p!=mazepath->top)

{q=p;p++;}

topelem[0]=**q;

topelem[1]=*(*q+1);

}

void footprint(int x,int y,int k,int (*mazemap)[10])

{

if(x<10 && y<10)

*(*(mazemap+x)+y)=k;

}

int position(int x,int y)

{

int flag;

if(x==8 && y==8)

flag=1;

else

flag=0;

return(flag);

}

int passroad(int x,int y,int (*mazemap)[10]) {

int num=1;

if(x<10 && y<10)

num=*(*(mazemap+x)+y);

return(num);

}

void roadinwords(sqlist *mazepath)

{

int x=1,y=1,i=0;

int (*p)[2];

p=mazepath->base;p++;

while(p!=mazepath->top)

{

if(x==**p && y+1==*(*p+1))

printf("向右走→→"),x=**p,y=*(*p+1);

else if(x+1==**p && y==*(*p+1))

printf("向下走→→"),x=**p,y=*(*p+1);

else if(x==**p && y-1==*(*p+1))

printf("向左走→→"),x=**p,y=*(*p+1);

else if(x-1==**p && y==*(*p+1))

printf("向上走→→"),x=**p,y=*(*p+1);

i++;

if(i%3==0)

printf("\n");

p++;

}

printf("\n");

}

大一上期C语言实验报告1熟悉实验环境

成都工业学院·计算机工程学院 《程序设计基础》实验报告 1.实验目的 (1)熟悉C语言运行环境,了解和使用Visual6.0++集成开发环境(2)熟悉Visual6.0++环境的功能键和常用的功能菜单命令 (3)掌握C语言程序的书写格式和C语言程序的结构 (4)掌握C语言上机步骤,以及编辑、编译和运行一个C语言程序的方法 (5)熟悉Visual6.0++环境下的程序调试方法 2.实验内容 (1)按照实验步骤编辑、编译、运行第一个”Hello World”程序(2)利用实验指导中的第二个程序熟悉调试工具,在已知x,y值的情况下,计算出x和y的和、差、积、商,并显示出来(3)编写一个程序,输入a、b、c三个值,输出它们的和与平均值c 3.源程序 (1)#include void main() {printf(”Hello World”);} (2)#include void main() {int x=5,y=2; int s,d,p,q; s=x+y; d=x-y; p=x*y; q=x/y; printf(“和:%d差:%d积%d商:%d“,s,d,p,q);}

(3)#include void main() {int a,b,c.sum; float ave; Printf(“Please enter the a,b,c:”); scanf(“%d%d%d”,&a,&b,&c); sum=a+b+c; ave=(float)sum/3; printf(“sum=%d,ave=%f\n”,sum,ave);} 4.运行结果 (1) (2) (3)输入18、46、69测试得出答案如下

C语言常用函数

C语言的常用库函数 函数1。absread()读磁盘绝对扇区函数 原形:int absread(int drive,int num,int sectnum,void *buf) 功能:从drive指定的驱动器磁盘上,sectnum指定的逻辑扇区号开始读取(通过DOS中断0x25读取)num 个(最多64K个)扇区的内容,储存于buf所指的缓冲区中。 参数:drive=0对应A盘,drive=1对应B盘。 返回值:0:成功;-1:失败。 头文件:dos.h 函数2。abswrite()写磁盘绝对扇区函数 原形:int abswrite(int drive,int nsects,int lsect,void *buffer) drive=0(A驱动器)、1(B驱动器)、 nsects=要写的扇区数(最多64K个); lsect=起始逻辑扇区号; buffer=要写入数据的内存起始地址。 功能:将指定内容写入(调用DOS中断0x26)磁盘上的指定扇区,即使写入的地方是磁盘的逻辑结构、文件、FAT表和目录结构所在的扇区,也照常进行。 返回值:0:成功;-1:失败。 头文件:dos.h 函数3。atof()将字符串转换成浮点数的函数 原形:double atof(const char *s) 功能:把s所指向的字符串转换成double类型。 s格式为:符号数字.数字E符号数字 返回值:字符串的转换值。 头文件:math.h、stdlib.h 函数4。atoi()将字符串转换成整型数的函数 原形:int atoi(const char *s) 功能:把s所指向的字符串转换成int类型。 s格式为:符号数字 返回值:字符串的转换值。若出错则返回0。 头文件:stdlib.h 函数5。atol()将字符串转换成长整型数的函数 原形:long atol(const char *s)

课程设计_老鼠走迷宫

HUNAN CITY UNIVERSITY 数据结构课程设计报告 设计题目:老鼠走迷宫 专业:计算机科学与技术 学生姓名:邓宇 班级学号: 0906401-23 指导教师:杨格兰、胡奇光 2011 年 6 月 18 日

一、设计时间 2011年6月20日——24日 二、设计地点 湖南城市学院第一实验楼计算机系机房509 三、设计目的 1.培养实际工作所需要的动手能力,进一步熟悉基本概念; 2.熟练掌握对实际问题的抽象技能,了解程序基本的流程; 3.培养查阅资料,独立思考问题的能力。 四、设计人 邓宇 五、指导老师 杨格兰、胡奇光 六、设计课题 老鼠走迷宫 开发环境:Visual Studio 2010 Ultimate UML Activity Diagram Visual C # 2008 Express Editions Adobe Photoshop CS4 七、基本思路及关键问题的解决方法 技术要求: 程序开始运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓。游戏的任务是使用键盘上的方向键操纵老鼠在规定的时间内走到粮仓处。 要求: 1、老鼠形象可辨认,可用键盘操纵老鼠上下左右移动; 解决方案:老鼠图片形象可以用Photoshop来制作,通过键盘按键事件发送消息到对象(老鼠),实现老鼠的移动。 2、迷宫的墙足够结实,老鼠不能穿墙而过; 解决方案:在老鼠每一步的移动中检测是否撞墙,若是则停止走动。

由于地图是图片,要检测就需要取出墙壁那点的颜色(显然不是白色),然后作比较来作碰撞检测。 3、若老鼠在规定时间内走到粮仓处,提示成功,否则提示失败; 解决方案:加载定时器,设定60秒钟,若在规定的时间,及时间变成0时,弹出对话框提示用户游戏失败。 4、添加编辑迷宫功能,可修改当前迷宫。 解决方案:备用一张地图图片资源,可以用于更换地图。 八、算法及流程图 Visio流程图:

C语言实验报告参考答案 原

C语言实验报告参考答案 实验一熟悉C语言程序开发环境及数据描述 四、程序清单 1.编写程序实现在屏幕上显示以下结果: The dress is long The shoes are big The trousers are black 答案: #include main() { printf("The dress is long\n"); printf("The shoes are big\n"); printf("The trousers are black\n"); } 2.编写程序: (1) a=150,b=20,c=45,编写求a/b、a/c(商)和a%b、a%c(余数)的程序。 (2)a=160,b=46,c=18,d=170, 编写求(a+b)/(b-c)*(c-d)的程序。 答案: (1) #include main() {

int a,b,c,x,y; a=150; b=20; c=45; x=a/b; y=a/c; printf("a/b的商=%d\n",x); printf("a/c的商=%d\n",y); x=a%b; y=a%c; printf("a/b的余数=%d\n",x); printf("a/c的余数=%d\n",y); } (2) #include main() { int a,b,c,d; float x; a=160; b=46; c=18;

d=170; x=(a+b)/(b-c)*(c-d); printf("(a+b)/(b-c)*(c-d)=%f\n",x); } 3. 设变量a的值为0,b的值为-10,编写程序:当a>b时,将b赋给c;当a<=b 时,将0赋给c。(提示:用条件运算符) 答案: #include main() { int a,b,c; a=0; b=-10; c= (a>b) ? b:a; printf("c = %d\n",c); } 五、调试和测试结果 1.编译、连接无错,运行后屏幕上显示以下结果: The dress is long The shoes are big The trousers are black 2、(1) 编译、连接无错,运行后屏幕上显示以下结果: a/b的商=7

C语言中常见的功能函数

C语言中常见的功能函数(应掌握的编程) 1、两个变量值的交换 void exchang(float *x,float *y) /*形参为两个变量的地铁(指针)*/ {float z; z=*x; *x=*y; *y=z; } void main() {float a,b; scanf(“%f%f”,&a,&b); exchang(&a,&b); /*因为形参是指针,所以实参必须给变量的地址,不能给变量名*/ printf(“a=%f,b=%f”,a,b); } 2、判断一个整数的奇偶 int jou(int n) /*如果是奇数返回1,否则返回0*/ { if(n%2==0) return 0; return 1; } 3、小写字符转换成大写字符 根据实参传给形参的字母,判断是否是小写字母,如果是小写字母,则转换成大写字母,否则不进行转换,函数返回转换后或原来的字符。 本函数仿照toupper()库函数的功能编写(toupper(c) 是将变量c字母转换成大写字母,如果不是小写字母不转换)。 char toupper1(char ch) {if(ch>=?a?&&ch<=?z?) ch-=32; /*小写字母比对应的大写字母ASCII码值大32*/ return ch; } 4、判断一个字符是否是字母(或数字) 根据实参传给形参的字符,判断是否是字母(或数字),如果是字母(或数字)返回1,否则返回0。此函数是根据库函数isalpha()(或isdigit())来编写的。 int isalpha1(char ch) /*判断是否是字母*/ {if(ch>=?A?&&ch<=?Z?||ch>=?a?&&ch<=?z?) return 1; else return 0; } int isdigit1(char ch) /*判断是否是数字字符*/ {if(ch>=?0?&&ch<=?9?) return 1; else return 0; } 5、根据学生成绩,返回其等级 char fun(float cj) {char c; switch((int)cj/10) {case 10:

小白鼠走迷宫

《小鼠走迷宫》实验报告 生技基地:孟祥东 0121121202 殷振琦 生物技术:李静新

小白鼠走迷宫 【摘要】本实验通过在人为设置的迷宫里,小白鼠不断感受复杂通道的结构,调整和改进自己的行为。随着训练次数的增加,条件反射逐渐建立,以至在大脑皮层形成记忆。通过记录动物搜寻食物的时间长短可以对此加以评价。 【关键词】小白鼠迷宫记忆 前言:《实验动物学》最近10年,遗传科学家对两种动物建立了一系列遗传工程的技术,可以改变(去掉或加上)其体内基因的组成,这两种动物是老鼠和果蝇。在哺乳类动物中,老鼠可谓具有得天独厚的优势。昆虫类的果蝇行为简单,脑也较小,不如哺乳类的老鼠脑较大。此外,老鼠也更接近人类,通过老鼠的实验可以间接地了解人脑的功能。学习和记忆是神经系统高级中枢的重要机能之一。学习是神经系统不断接受环境刺激而获得的行为习惯和经验;获得的行为习惯和经验维持一定时间的能力就是记忆。动物的学习和记忆能力对其生存具有重要意义。本次实验,我们通过观察,分析小白鼠学习和记忆过程,理解大脑在动物行为机制建立中的作用;通过实验,了解数据统计分析在科学研究中的重要作用。 1.材料与方法 1.1材料 小白鼠、纸板(做迷宫)、食物、秒表 1.2方法 1.2.1 饥饿处理的小白鼠1只,放置在迷宫入口,记录其找到食物所需时间。5分钟后, 重复上述步骤,同样的间隔时间对其进行相同实验,每只小白鼠共计进行6次实 验。 1.2.2 对另一只进行饥饿处理的小鼠进行相同实验,记录每只小白鼠找到食物所需时 间。 1.2.3 绘制图表,进行数据分析。 2.结果 2.2曲线图

注:纵坐标表示所用时间(单位:秒),横坐标表示实验次数,系列一表示小鼠B,系列二表示小鼠A 2.3分析 2.3.1 随着小白鼠学习和记忆过程的进行,小白鼠找到食物的时间越来越短; 2.3.2 气温对小白鼠的活动能力有较大影响,低温使小白鼠活动能力降低; 3、讨论 德国心理学家艾宾浩斯(H.Ebbinghaus)研究发现,遗忘在学习之后立即开始,而且遗忘的进程并不是均匀的。最初遗忘速度很快,以后逐渐缓慢。他认为"保持和遗忘是时间的函数",并根据他的实验结果绘成描述遗忘进程的曲线,即著名的艾宾浩斯记忆遗忘曲线。 人的大脑是一个记忆的宝库,人脑经历过的事物,思考过的问题,体验过的情感和情绪,练习过的动作,都可以成为人们记忆的内容。例如英文的学习中单词、短语和句子,甚至文章的内容都是通过记忆完成的。从"记"到"忆"是有个过程的,这其中包括了识记、保持、再认和回忆。有很多人在学习英语的过程中,只注重了学习当时的记忆效果,孰不知,要想做好学习的记忆工作,是要下一番工夫的,单纯的注重当时的记忆效果,而忽视了后期的保持和再认同样是达不到良好的效果的。 在信息的处理上, 记忆是对输入信息的编 码、贮存和提取的过程, 从信息处理的角度上, 英文的第一次学习和背 诵只是一个输入编码的 过程。人的记忆的能力

C语言实验报告参考答案

长沙理工大学2010C语言实验报告参考答案 实验一熟悉C语言程序开发环境及数据描述 四、程序清单 1.编写程序实现在屏幕上显示以下结果: The dress is long The shoes are big The trousers are black 答案: #include<> main() { printf("The dress is long\n"); printf("The shoes are big\n"); printf("The trousers are black\n"); } 2.改错题(将正确程序写在指定位置) 正确的程序为: #include <> main() { printf("商品名称价格\n"); printf("TCL电视机¥7600\n"); printf("美的空调¥2000\n"); printf("SunRose键盘¥\n"); } 2.编写程序: a=150,b=20,c=45,编写求a/b、a/c(商)和a%b、a%c(余数)的程序。 答案: #include<> main() { int a,b,c,x,y; a=150; b=20; c=45;

x=a/b; y=a/c; printf("a/b的商=%d\n",x); printf("a/c的商=%d\n",y); x=a%b; y=a%c; printf("a/b的余数=%d\n",x); printf("a/c的余数=%d\n",y); } 4. 设变量a的值为0,b的值为-10,编写程序:当a>b时,将b赋给c;当a<=b时,将a赋给c。(提示:用条件运算符) 答案: #include<> main() { int a,b,c; a=0; b=-10; c= (a>b) ? b:a; printf("c = %d\n",c); } 五、调试和测试结果 1.编译、连接无错,运行后屏幕上显示以下结果: The dress is long The shoes are big The trousers are black 3、编译、连接无错,运行后屏幕上显示以下结果: a/b的商=7 a/c的商=3 a/b的余数=10 a/c的余数=15 4. 编译、连接无错,运行后屏幕上显示以下结果: c =-10 实验二顺序结构程序设计 四、程序清单 1.键盘输入与屏幕输出练习 问题1 D 。 问题2 改printf("%c,%c,%d\n",a,b,c);这条语句

C语言常用IO函数

一些比较常用的io函数,总结了一下,一块贴出来了 stdin标准输入流 stdout标准输出流 stderr标准错误流 字符IO函数 1.int getchar() 说明:从stdin读取1个字符 返回值:成功,返回该字符;出错,返回EOF; 2.int fgetc(FILE fp) 说明:功能同getchar,默认从文件fp读取; 返回值:成功,返回该字符;出错,返回EOF; 可以重定向 3.int getc(FILE fp) 说明:功能与fgetc相同,但getc既可以被用作 函数实现,也可以被用作宏实现,并且它的编码效率 可能会更高. 可以重定向 4.int putchar(int ch) 说明:向stdout输出字符ch; 返回值:成功,返回该字符;出错,返回EOF; 5.int fputc(int c,FILE fp) 说明:功能同putchar,默认向fp输出字符ch; 返回值:成功,返回该字符;出错,返回EOF; 6.int putc(int c,FILE fp) 说明:功能与fputc相同,但putc与getc一样既可能被用作 函数实现,也可能被用作宏实现,并且它的编码效率可能会更高;可以重定向 字符串IO函数 1.char gets(char str) 说明:从stdin读取字符串(不包括'n')写入到字符串str中; 返回值:成功,返回str首地址;错误,返回NULL; 2.char fgets(char str,int N,FILE fp) 说明:默认从文件fp中读取N个字符(包括'n')写入到字符串str中,

如果实际输入字符串小于N,fgets自动添加'n', 返回值:成功,返回字符串首地址;错误或遇到EOF,返回NULL;可以重定向 3.int puts(const char str) 说明:向stdout输出字符串str,然受输出一个'n', 返回值:成功,返回非负值;错误,EOF; 4.int fputs(const char str,FILE fp) 说明:功能同puts,默认向文件fp写入字符串str; 返回值:成功,返回非负值;错误,EOF; 可以重定向 格式化IO函数 1.int scanf(const char format,...) 说明:根据format从stdin格式化读取N个值,并输入到... 返回值:成功,返回读取的项数;出错,返回EOF 2.int fscanf(FILE fp,const char format,...) 说明:功能同scanf,默认从文件fp读取, 返回值:成功,返回读取的项数;出错或遇到文件尾,返回EOF 可以重定向 3.int sscanf(const char buf,const char format,...) 说明:根据format从buf格式化读取N个值,并输入到... 返回值:成功,返回读取的项数;出错,返回EOF 4.int printf(const char format,...) 说明:根据format格式化数据,并输出到stdout 返回值成功,返回输出字符数;错误,返回负数; 5.int fprintf(FILE fp,const char format,...) 说明:功能同printf,默认向文件fp写入; 可以重定向 6.int sprintf(char buf,const char format,...) 说明:根据format格式化数据,并输出到buf, 返回值:成功,返回输出字符数;错误,返回负数

2010C语言实验报告参考答案

2010C语言实验报告参考答案

长沙理工大学2010C语言实验报告参考答案 实验一熟悉C语言程序开发环境及数据描述四、程序清单 1.编写程序实现在屏幕上显示以下结果: The dress is long The shoes are big The trousers are black 答案: #include main() { printf("The dress is long\n"); printf("The shoes are big\n"); printf("The trousers are black\n"); } 2.改错题(将正确程序写在指定位置) 正确的程序为: #include main() {

printf("商品名称价格\n"); printf("TCL电视机¥7600\n"); printf("美的空调¥2000\n"); printf("SunRose键盘¥50.5\n"); } 2.编写程序: a=150,b=20,c=45,编写求a/b、a/c(商)和a%b、a%c(余数)的程序。 答案: #include main() { int a,b,c,x,y; a=150; b=20; c=45; x=a/b; y=a/c; printf("a/b的商=%d\n",x); printf("a/c的商=%d\n",y);

x=a%b; y=a%c; printf("a/b的余数=%d\n",x); printf("a/c的余数=%d\n",y); } 4. 设变量a的值为0,b的值为-10,编写程序:当a>b时,将b赋给c;当a<=b时,将a赋给c。(提示:用条件运算符) 答案: #include main() { int a,b,c; a=0; b=-10; c= (a>b) ? b:a;

C语言常用函数手册

1.分类函数,所在函数库为ctype.h int isalpha(int ch) 若ch是字母('A'-'Z','a'-'z')返回非0值,否则返回0 int isalnum(int ch) 若ch是字母('A'-'Z','a'-'z')或数字('0'-'9'),返回非0值,否则返回0 int isascii(int ch) 若ch是字符(ASCII码中的0-127)返回非0值,否则返回0 int iscntrl(int ch) 若ch是作废字符(0x7F)或普通控制字符(0x00-0x1F) 返回非0值,否则返回0 int isdigit(int ch) 若ch是数字('0'-'9')返回非0值,否则返回0 int isgraph(int ch) 若ch是可打印字符(不含空格)(0x21-0x7E)返回非0值,否则返回0 int islower(int ch) 若ch是小写字母('a'-'z')返回非0值,否则返回0 int isprint(int ch) 若ch是可打印字符(含空格)(0x20-0x7E)返回非0值,否则返回0 int ispunct(int ch) 若ch是标点字符(0x00-0x1F)返回非0值,否则返回0 int isspace(int ch) 若ch是空格(' '),水平制表符('\t'),回车符('\r'), 走纸换行('\f'),垂直制表符('\v'),换行符('\n') 返回非0值,否则返回0 int isupper(int ch) 若ch是大写字母('A'-'Z')返回非0值,否则返回0 int isxdigit(int ch) 若ch是16进制数('0'-'9','A'-'F','a'-'f')返回非0值, 否则返回0 int tolower(int ch) 若ch是大写字母('A'-'Z')返回相应的小写字母('a'-'z') int toupper(int ch) 若ch是小写字母('a'-'z')返回相应的大写字母('A'-'Z') 2.数学函数,所在函数库为math.h、stdlib.h、string.h、float.h int abs(int i) 返回整型参数i的绝对值 double cabs(struct complex znum) 返回复数znum的绝对值 double fabs(double x) 返回双精度参数x的绝对值 long labs(long n) 返回长整型参数n的绝对值 double exp(double x) 返回指数函数ex的值 double frexp(double value,int *eptr) 返回value=x*2n中x的值,n存贮在eptr中double ldexp(double value,int exp); 返回value*2exp的值 double log(double x) 返回logex的值 double log10(double x) 返回log10x的值 double pow(double x,double y) 返回xy的值 double pow10(int p) 返回10p的值 double sqrt(double x) 返回+√x的值 double acos(double x) 返回x的反余弦cos-1(x)值,x为弧度 double asin(double x) 返回x的反正弦sin-1(x)值,x为弧度 double atan(double x) 返回x的反正切tan-1(x)值,x为弧度 double atan2(double y,double x) 返回y/x的反正切tan-1(x)值,y的x为弧度double cos(double x) 返回x的余弦cos(x)值,x为弧度 double sin(double x) 返回x的正弦sin(x)值,x为弧度 double tan(double x) 返回x的正切tan(x)值,x为弧度 double cosh(double x) 返回x的双曲余弦cosh(x)值,x为弧度 double sinh(double x) 返回x的双曲正弦sinh(x)值,x为弧度

电脑鼠走迷宫死区排除算法

电脑鼠走迷宫大赛探索过程算法优化研究 ——死路排除算法 ——死区域算法1摘要 电脑鼠走迷宫大赛是由国际电工和电子工程学会(IEEE)举办的人工智能领域的一项国际性赛事,集机械、电子、控制、光学、程序设计和人工智能等多方面科技知识于一体[1],具有很高的知名度。迷宫算法的优劣直接影响比赛的最终成绩。本文从经典迷宫算法入手,先后提出了能排除单行当列死路的“死路排除算法”和能够排除任意形状死区域的“渗透法”,然后通过测试验证两种改进算法的优越性。改进算法的核心思想是通过已经获得的迷宫信息排除不包含最短路径信息的死区域。同时,文中创造性的将“渗透思想”用于迷宫算法当中,很好的实现了死区域的判定与排除。与经典算法相比,改进算法在时间、空间方面都有良好的优化效果。 2背景简介 电脑鼠走迷宫大赛是国际电工和电子工程学会(IEEE)每年都会举办的一项国际性赛事,于1972年由美国机械杂志发起。比赛中的电脑鼠是一个小型的由微处理器控制的机器人车辆,在复杂迷宫中具有译码和导航功能。该比赛自推出以来,受到了世界各国师生的青睐。2007年和2008年,上海市计算机学会率先在中国主办了两次IEEE标准电脑鼠走迷宫邀请赛(长三角地区),有三十多所院校参加,反响强烈。2009年比赛范围扩展到全国,共有9个赛区的52所高校参赛[2]。 2.1电脑鼠走迷宫大赛规则[3] 电脑鼠的基本功能是从起点开始走到终点,这个过程称为一次“运行”,所花费的时间称为“运行时间”;电脑鼠从第一次激活到每次运行开始所花费的时间称为“迷宫时间”;电脑鼠在比赛时手动辅助的动作称为“碰触”。竞赛使用这3个参数,从速度、求解迷宫的效率和电脑鼠的可靠性三个方面来进行评判。 电脑鼠的得分是通过计算每次运行的“排障时间”来衡量的,即将迷宫时间的1/30加一次运行时间;如果未被碰触过,则再减去10s(奖励时间),这样得到的就是排障时间。电脑鼠在迷宫中停留或运行的总时间不可超过15min,在限时内允许运行多次。如果进入迷宫是为了进行探测和记忆,则这次运行就称为“试跑”;如果进入迷宫是根据先前的记忆和经验,按照智能算法确定最佳路径,并以最快的速度到达目的地,则这次运行就称为“冲刺”。 2.2迷宫、电脑鼠规格 迷宫由256个方块组成,每个方块18 平方厘米,排成16行×16列。迷宫的隔板沿方块的四周布设,形成迷宫通道。如图1为迷宫照片。图2为电脑鼠样例照片,该电脑鼠采用ARM7处理器——LM3S615作为主控芯片。五组可测距的红外线传感器按照某固定频率对迷宫格周围障碍进行采样,获取迷宫隔板信息。 图1 迷宫照片图2 电脑鼠样例照片 2.3已有算法

《数据结构课程设计》走迷宫游戏

信息工程学院 课程设计报告 课程名称《数据结构》 课题名称走迷宫游戏 专业 班级 学号 姓名 联系方式 指导教师 2015 年 12 月 27 日

目录 1、数据结构课程设计任务书............................................................... 1 1.1、题目........................................................................... 1 1.2、要求........................................................................... 1 2、总体设计............................................................................. 1 2.1、设计思路及总体组成框架......................................................... 1 2.2、操作流程图..................................................................... 2 3、详细设计............................................................................. 5 3.1、程序中所采用的数据结构及存储结构的说明......................................... 5 3.2、函数功能模块说明............................................................... 5 3.3、各函数的调用关系 ............................................................................................................................... 7 4、调试与测试:......................................................................... 7 4.1、调试方法与步骤:............................................................... 7 4.2、测试结果的分析与讨论:......................................................... 8 4.3、测试过程中遇到的主要问题及采取的解决措施:................................... 10 6、源程序清单......................................................................... 10 7、数据结构课程设计总结............................................................... 14 8、参考文献........................................................................... 14

哈工大(威海)c语言实验报告册答案

实验1简单判定性问题求解 一、实验学时 完成本实验需4学时。 二、实验目的 1、阅读程序题 (1)掌握C语言数据类型,熟悉如何定义一个整型、字符型的变量,以及对它们赋值的方法; (2)掌握不同的类型数据之间赋值的规律; (3)掌握数据在内存中的存储方式; (4)学会输入、输出函数的基本格式和使用方法; (5)学会使用有关算术运算符、逻辑运算符、关系运算符,以及包含这些运算符的表达式。 2、编程题 (1)如何运用if-else判定性结构进行程序设计; (2)如何运用switch判定性结构进行程序设计。 3、调试题 (1)熟悉C程序的编辑、编译、连接和运行的过程。 三、实验指导 为了达到最佳的实验效果,以下提供几条适于编程的指导意见,可供参考。 1、阅读程序题应先运用自己在课堂所学的知识,推导出结果,在上机时输入计算机,印证自己推导的结果,注意观察数据在内存中的存储方式、含不同种运算符表达式的输出结果。 2、编程题必须首先画出流程图,并反复思考判断程序设计的正确性,完成程序的设计。要注意简单判定性问题的结构选择。 3、调试题应明确程序的调试、测试是一项非常烦琐的工作,也是非常重要的工作。对于初学者来说应该建立良好的习惯,在调试程序的时候,应该尽可能考虑到程序运行时各种可能情况。

四、实验内容 1、阅读程序题 (1)main( ) { /*定义字符型变量*/ char c1,c2; /*向字符变量赋以整数*/ c1=97; c2=98; printf("%c %c\n",c1,c2); /*以字符形式输出*/ printf("%d %d\n",c1,c2); /*以整数形式输出*/ } 思考:可否改成int c1,c2;输出结果是?相同 (2)main() { int a=7,b=5; printf("%d\n",b=b/a); } 思考:若将printf语句中%d变为%f,可否输出分式的值?可以(3)main() { int a=9; a+=a-=a+a; /*包含复合的赋值运算符的赋值表达式*/ printf("%d\n",a); } 思考:赋值表达式a+=a-=a+a的求解步骤? 第一步:a=a-(a+a)=-9 第二步a=a+a=18 (4)main() { int k=-1; printf("%d,%u\n",k,k);

电子老鼠走迷宫 分支限界法

#include #include #include #define maxs 13 #define maxsize 100000 int length=0; int visit[20][20]; char mg[maxs][maxs]; typedef struct queue //huojiedian { int rear; int top; int base[maxsize][2];//0==x 1==y } queue; void enqueue(queue *a,int m,int n) //top wuyuansu { if((a->top+1)%maxsize!=a->rear) { a->base[a->top][0]=m; a->base[a->top][1]=n; a->top=(a->top+1)%maxsize; } } void dequeue(queue *a,int *x,int *y) { if(a->rear!=a->top) { *x=a->base[a->rear][0]; *y=a->base[a->rear][1]; a->rear=(a->rear+1)%maxsize; } } int empty(queue *a) { if(a->rear==a->top) return 0; return 1; }

int search(int x,int y,int m,int n,queue *a,char mg[13][13]) { while(1) { if(empty(a)) { dequeue(a,&x,&y); if(x==0&&y==0) { enqueue(a,0,0); length++; dequeue(a,&x,&y); } visit[x][y]=1; if(x==m&&y==n) return 0; if(mg[x-1][y]!='X'&&x-1>0&&visit[x-1][y]==0) //UP enqueue(a,x-1,y); if(mg[x][y+1]!='X'&&y+10&&visit[x][y-1]==0) //LEFT enqueue(a,x,y-1); if(mg[x+1][y]!='X'&&x+1

C语言实验报告参考源代码

实验5三种基本结构的综合应用 4.一个素数(设为p)依次从最高位去掉一位,二位,三位,……,若得到的各数仍都是素数(注:除1和它本身外,不能被其它整数整除的正整数称为素数,1不是素数,2是素数),且数p的各位数字均不为零,则称该数p为逆向超级素数。例如,617,17,7都是素数,因此617是逆向超级素数,尽管503,03,3都是素数,但它不是逆向超级素数,因为它包含有零。试求[100,999]之内的所有逆向超级素数的个数。 #include "stdio.h" main() {int i,j,k,m,p,q,n=0; for(i=100;i<=999;i++) {for(j=2;j=i) /*三位数是素数时*/ {k=i%100; /*去掉百位数字*/ if(k>=10) /*十位数字不是0时*/ {for(m=2;m=k) /*两位数是素数时*/ {p=i%10; /*p为个位数字*/ for(q=2;q=p)n++;}}}} printf("%d\n",n);} Key:57 5.求[2,400]中相差为10的相邻素数对的对数。 #include "stdio.h" main() {int i,j,k,m,p,q,n=0; for(i=2;i<=400;i++) {for(j=2;j=i) /*i是素数时*/ {for(k=i+1;k=k)break;} /*k是素数时终止if语句的外层循环*/ if(k>=i+10) /*[i+1,i+9]不是素数时*/ {for(q=2;q

人工智能电脑鼠搜迷宫实验

北京科技大学实验报告 学院:自动化学院专业:智能科学学技术班级: 姓名:学号:实验日期:2017年11月6日 实验名称:人工智能电脑鼠搜迷宫实验 实验目的:掌握电脑鼠的基本操作及智能搜索算法操作。 实验仪器:KEIL MDK、电脑鼠、J-Link、VS 实验原理:所谓“电脑鼠”,英文名叫做Micromouse,是一种具有人工智能的轮式机器人,是由嵌入式微控制器、传感器和机电运动部件构成的一种智能行走装置的俗称。当电脑鼠放入起点,按下启动键之后,他就必须自行决定搜索法则并且在迷宫中前进,转弯,记忆迷宫墙壁资料,计算最短路径,搜索终点等功能。电脑鼠更结合了机械、电机、电子、控制、光学、程序设计和人工智能等多方面的科技知识。本实验中,通过红外传感器检测电脑鼠所处位置状态,通过智能算法保存地图并实现地图的搜索,通过pid等控制算法控制电机,达到电脑鼠搜索迷宫并计算最短路径等功能。 实验内容与步骤: 实验内容 1)KEIL MDK的安装 2)电脑鼠硬件的检查及调整 3)智能搜索算法的编写 4)算法的调试与优化 5)实验结果

实验步骤 (一)KEIL MDK的安装 1双击运行Ke i l MDK 4.12 安装程序,出现软件安装界面,如图所示: 2点击Next,勾选安装协议; 3选择安装路径,建议安装在C 盘,运行速度快些 4 填入用户信息,个人用户随意填入即可; 点击Next 就进入实质的安装过程了,Wait for a Whle… 5点击Finish,Keil MDK 就完成安装了,可以发现桌面上生成了名为“Keil uVis ion4”的可执行文件快捷方式。

(二)检查和调整电脑鼠的硬件 1.电机检查:在电脑鼠程序文件中找到Motor.c文件,直接为两侧电机赋相同的速度值,用G-link连接电脑鼠和电脑,传入程序,打开电脑鼠放在地面上,如果电脑鼠能正常直线行进,即证明两侧电机正常工作。如果有电机有问题,拆下原来的电机换新的再次进行电机检查即可。 2.传感器检查:用G-link连接电脑鼠和电脑,打开传感器查询模式,用手逐渐靠近每一个传感器,如果相应的传感器值由小变大,那么此传感器工作正常。且每个传感器在手指位于相同距离时,回传的传感器值近似相等即证明传感器都正常工作,如果有传感器有问题,拆下原来的传感器换新的再次进行传感器检查即可。 传感器回传值查询界面 (三)智能搜索算法的编写 在含底层驱动的程序的基础上加上算法,实现智能搜索,把电脑鼠变成一只真正的智能的老鼠。

迷宫电脑鼠的硬件设计简介

迷宫电脑鼠的硬件设计简介应用科技 N●l 吴曼展 (同济大学中德学院上海市200092) f摘要】人工智能技术是一门融合了众多学科的新星科学,它被广泛地应用于勘探、侦察、医疗救援、抢险以及日常生活的各个方面。智能机器人竞赛则是~项旨在开发人工智能技术而举行的比赛,它集科学、娱乐和比赛于_t体,在各国引起了广泛关注和极大兴趣。目前豳际上有很多针对机器人技术的比赛,两IEEE迷宫鼠竞赛鬻楚其中的一个典羹代表。本文首先辩近年来在国际上迅速开矮的迷宫槐器入竞赛作了简簧介绍,簿要说碉了迷宫鬣竞赛的竞赛规则以及发展历史,同时也分析了国内外关于此课题的研究现状。其次,本文对迷寓鼠的硬件设计作了一个擞体规划,将迷宫鼠的设计分为微控制器模块、马达驱动模块、传感器模块、人工智能模块移数据存镳及佼埝模块。最嚣还瓣参据IEEE迷寥甄竞赛弱餐毵毫}lI嚣久雩筝了~些溅试。 【关键词】人工智能迷宫电脑鼠智能传感器嵌入式系统 中期分类号:TP文献标识码:A1009-91毒x(2009)27—0025-02 1.引言 人工智能楚一门由诗算机科学、控制谂、信息论、聿搴经生理学、心理学、落害学等多种学科互相渗透而发震起来的综合性学科。它所研究的是如何制造出入造的智能机器或智能系统,来模拟人类智能活动的能力,以延伸人们的智能。智能枫器入竞赛是一项罄在秀发人王餐戆技零焉举办麓毙赛,宅融合7众多最薅沿领域的研究技术,是一颈集科学、娱乐和比赛于一体的活幼,近年来在世界各国引起了广泛关注和极大兴趣。 2‘遮塞电麓纛蠢奏餐务 MicromouseCompetition,鼢迷宫鼠竞赛,起源于上世纪70年代。该竞赛要求一智能机器人在一个指定16.16格迷宫中自动寻找到规定的目标地点,然质疑指定熊落基发剃达强熬逵,曩辩短老获魅。困其终形醚{羰老鼠,爱黻褥名迷塞电脑鼠竟赛。 第一次迷宫电脑鼠竞赛是在1972年由《MachineDesign}发起的,参赛的迷塞撬器入是撬壤雏,矮弹簧辍裁力。在疆悉瓣卡豆年孛,该院赛穗继在英国、荧国、日本、新加坡、澳大利弧等国家举办,吸引了众多国家和地区的参赛者参加。而随着迷宫设计和竞赛规则的不断完善、电脑鼠的不断智能化发展,目前IEEE迷富毫瓣鬣竞赛瑟经戒鸯掘嚣久镶域懿有趣懿、其蠢攘战性豹、技术先进翡耋瑟研究方向。在国内的迷宫机器人研究方面,尽管起步较晚(迷宫机器人进入中闼麓不多是上世纪九十年代),但随着各方面按术的不断完善,特别是微控制器技术、铸惑器技本、入工智能技术的发鼹,国内黪班嚣入巍赛也褒翅必鲤蒙建开最。而迷宫鼠竞赛在台湾、香港等发达地区也已缀举办过多次。 3.迷寓■的硬件设计思想 迷宫鬣夔硬黪设谤是一瑗系统瓣工程。‘玄涉及到诲多方裁,毽括微控镧嚣攒块、马达驱动模块、传感器模块以及备模块间的相互连接。在设计之前,设计者岿须要对照个电脑鼠的各部分构造有一个大致的了解,由于迷宫是由256块18cmXl8cm夔单元接缀戒,除去墙体辱度1。2cm,嚣壤淹熬实赫距离兔16.8cm,因此可以考虑将整个电脑鼠就设计在一块lOcm见方的底板上,以使其能能方便、灵活地转向。 迷宫鬣戆电路援缕梅分必上下辩层。上瓣隽挖嗣援,其孛镪捂镞控穰器MCU、传感器检测电路和一些数据存储与连接模块。下层为驱动板,主要包括左右两侧的车轮、驱动马达、两翼的CNY70光电传感器、万向轮、H桥驱动芯片等。两层之间经震蠡壤镧柱用予支撑。这样的设诗安簿,栽够燕诧迷富鬣各部分的稳造、继分备模块的功能,同时也有利于拆装和臼后保养维护。 3.1微控制器模块 徽控稍嚣单元,帮MicrocontrollerUnit,或称单片税(Mcu),悬指将中央处理单元CPU、程序存储嚣ROM、数据存储嚣RAM以及输入输出端口(i/0口)等 单独翘囊两者缀合成不阏性能的交换黼络结构来实现。根据交换网络入端信道数与出端倍道数的不同,可以把交换网络分成集线器、扩线器和分配嚣。 集线器的功能是将用户电路的串行码进行串并转换,经过话存进入交换网络,通常采用“顺序写入、控制读出”的控制方式。T级话存的功能主要耀来完成话音的交换,邋常采霜“随机写入、控翻读出”静控稍方式。扩线器的功能是将T级话存的话音信息,经过扩线器话存后进行并串转换,送鬣苓疆戆PCm蝼口。扩线爨话存遴褰采援“控铡写入、蹶彦读遗”戆羧刳方式。 4时分交换网络中元器件的接口、驱动和改进措施 4。1根据所需容量来选择掰型的存健器芯片 由上可知,在对分交换弼络中,话音存储器和控制存储器都是由存储器芯片米实现的,现代程控交换机中将用到大量的存储芯片,实现使用中逶常鬏攥爨纛鸯墨来选择存键嚣蕊冀,焚整戆芯片襄选麓SYSTEMS公司豹SRM2016、S01idTateScientific公词的SCM6116以及HITACHT公司的HM6264等系列。 4.2采用先进的BiCMOS技术 传统的存储器芯片通常是通过CMOS工艺实现,随糟微电子技术的发震,塞瑗了毅型瓣BiCMOS器锌,臻BiCMOS器l孛实现熬存德器芯片与CMOS实现的存储器相比,性能指标将大大优化,反映猩衡量速度性能的传输她迟时阀搬标将缩小,传输速度明鼹提高,德量其舆效率搜能的功耗指标将大大减小,只有几磷大小。 先进的BiCMOS技术集中了双极型晶体管和CMOS器件的优点,两者互枣},在数字程控交换懿交换网络瓣实瑗中占有翡驻霞势。麓CMOS工艺实现的存储器芯片构成的交换网络,在实现使用中,会因为其速度指标问题而如现数搬码流丢失的误鼹现象,这说明,利用CMOS工艺缀难进一步生产遽信发展所需的速度更高、驱动能力更强的存储器芯片,而先进的BiCMOS技术在存储器芯片的速度、容量和功耗等性能指标上提供了数据交换所要求瓣哥靠戆。铡翔瓣予典黧戆六管静态存镰器,稠麓BiCMOS菝术,胃菝壤葵在较低的电源电压(3.3V)下工作,同时可提高存取速度,缩短读碍时间,功耗也可降副较低承平。 此外,交换网络及SPCE中的其它元器件也可以选用BiCMOS器件来实现。BiCMOS逻辑门在逶髂数字部传(翔编鹚器、译诲嚣秘摸/数转羧器等)和门阵列的应用中极为广泛,因为它的扇出数一般为5~8,如此大的扇出数意味着具有较强的带负载能力,而且BiCMOS门比CmOSf1能更快速地驱动这些负载。另矫,BiCMOSfj中的器件尺寸可以怒一致的,这就降低了通信数字部件在物理设计上的难度;不同的CMOS电路对减小单位负载的舆惩送往缝不溺,对予BiCMOS电爨,蠹予双稷墅捺捷BJT嚣俘隔开了CMOS电路的主体与负载,使得不同电路中负载的状况变差都是相同的,这样就简化了通信和信感处理用数字逻辑部{牛和电路的设计任务,提毫了工作效寨。 5结论 交换阏络是数字程控交换橇翡关键缝成部分之一,其髋能壹羧影豌着稷控交换机的技术指标和通话质墩。随着计算机技术、超大规模集成电路投本、微激子技本鞍半导体存德按零懿进~步发震,震瑟黪麦透静BiCMOS工艺制作的器件用于程控交换机交换网络的实现将成为现实,这将使通信成璧褥到可靠的保证,同时将会有越来越多鲍裹毅暹售技术窝电子元器侈_暾用于交换网络的实现中。目前,已有专用集成电路芯片朋于程羧交换机按续(典型的如用户电路芯片)。面利用BiCMOs工艺制作稷控交换机内部的交换弼络元器件,使之集成记并应孺子电信工稷实践中,关于这一方面的研究和腹用,将是我们今后继续进行的研究方向之一。 参考文献 [1]叶敏.糕控数字交换与交换网[M].北京:北京邮电学院出版技,1993。 (2]躲正友,杨为理.程控数字交换机硬件软件及应用[M].北京:清华大学出舨社,1995。 【3]成立,陈照章,董索玲,等.一种低压耗快闪式静态随机读写存储器[J].微电子学。2003■ 科技博览l25

相关主题
文本预览
相关文档 最新文档