《2022年运动会分数统计系统》由会员分享,可在线阅读,更多相关《2022年运动会分数统计系统(29页珍藏版)》请在金锄头文库上搜索。
1、课程设计评审表姓 名学 院学 号专业班级题 目运动会分数统计系统评审意见评审成绩指导教师签名职称评审时间年月日精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 29 页课程设计作品验收表题目运动会分数统计系统参与人员姓 名班 级学 号设计任务与要求:1) 可以输入各个学校各个项目的前三名或前五名的成绩;2) 能统计各学校总分;3) 可以按学校编号或名称、学校总分、男女团体总分排序输出;4) 可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校;5) 数据存入文件并能随时查询。作品完成情况:能按要求实现信息的输入、
2、统计,按多种方式输出、查询等基本功能。能将输入的信息存入文档,可供随时调用。能够正确应对部分不合理的输入。验收情况:验收教师签名: _ 年月日注:1. 除“验收情况”栏外,其余各栏均由学生在作品验收前填写。2. “验收情况”栏由验收小组按实际验收的情况如实填写。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 29 页目录1 问题描述与分析 . 1 课程设计的目的. 1 系统需求分析.1 2 概要设计 . .2 系统功能设计. .2 函数构造.2 3 详细设计.3 3.1 数据类型及重要变量的定义.3 3.2 函数的设计和实现.4 4 测
3、试.7 5 课程设计总结.11 5.1 调试中遇到的较重要问题的回忆.11 5.2 算法的效率及改良思想12 5.3 心得体会.12 参考文献 .13 附录.13 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 29 页1 . 运动会分数统计系统1 问题描述与分析1.1 课程设计目的为 了 稳 固 我 们 数 据 结 构 知 识 , 加 强 我 们 的 实 际 动 手 能 力 和 提 高 我 们 综合 素 质 , 提高我们对电脑软件工程的认识学院 组 织 我 们 进 行 了 数 据 结 构 课 程 设计 。 此次课程设计要到达以下几点目
4、的:1了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力。2提高程序设计和调试能力。学生通过上机实习,验证自己设计的算法的正确性。学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。3培养算法分析能力。分析所设计算法的时间复杂度和空间复杂度,进一步提高程序设计水平。4初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。1.2 系统需求分析问题描述:参加运动会有n 个学校,学校编号为1n。比赛分成 m个男子项目,和 w 个女子项目。项目编号为男子1m ,女子 m+1 m+w 。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前
5、三名的积分分别为: 5、3、2;哪些取前五名或前三名由学生自己设定。 m=20,n=20 。功能要求:1) 可以输入各个学校各个项目的前三名或前五名的成绩;2) 能统计各学校总分;3) 可以按学校编号或名称、学校总分、男女团体总分排序输出;4) 可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校;精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 29 页2 . 5) 数据存入文件并能随时查询;6) 规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称。输出形式:有中文提示,各学校分数为整形。界面要求:有
6、合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。2 概要设计2.1 系统功能设计根据运动会分数统计系统问题的分析和设计要求,可以将该系统可以分为三个模块:信息统计模块、信息输出模块、信息查询模块,其系统功能结构图如图1 所示。1信息统计模实现信息的输入、统计、存档。2信息输出模块,实现信息的输出。3信息查询实现信息的查询。运动会分数统计系统信息统计模块信息输出模块信息查询模块分数统计信息输入信息存档图 1 系统功能结构图2.2 函数构造根 据 系 统 功 能 结 构 图 的 描 述 , 可 以 构 造 出 该 系 统 的 几 个 基 本 的 函 数 ,其 方 法 名 和 功
7、 能 如 表 1 所 示 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 29 页3 . 表 1 函数功能表函数功能void inputinformation( ) 输入和统计信息函数void output( ) 输出信息函数void inquiry( ) 查询信息函数void writedata( ) 数据存储函数void readdata( ) 读入数据函数3 详细设计3.1 数据类型及重要变量的定义1定义运动项目数据类型,用于存放运动项目,包括项目编号、项目所取名次数、名次、分数。/定义项目结点的类型typedef struct
8、 int itemnum; / 项目编号int top; /项目取名次的数目,由用户定义3或 5 int range5; / 名次int mark5; /分数itemnode; 2定义学校数据类型,用来存储参赛学校信息,包括学校编号、学校总分、男团总分、女团总分、项目数组。/定义学校结点类型typedef struct int schoolnum; /学校编号int score; /学校总分int mscore; /男团体总分int wscore; /女团体总分itemnode cm+w; / 项目数组schoolnode; 精选学习资料 - - - - - - - - - 名师归纳总结 -
9、- - - - - -第 6 页,共 29 页4 . 3定义学校数组 schoolnode hn 。采用数组结构有利于随机的存储和查询。定义全局标志变量 int flag1 、flag2 ,分别用以标志是否已经向系统输入了信息和标志系统中是否已经存在信息。定义文件指针FILE * report,用来指向存档的文件。函数的设计和实现在概要设计中已经对该系统涉及的抽象数据类型和函数及其功能做了说明,这里就不在对每个函数进行一一说明,只对其中比较重要的功能模块进行描述。1信息输入及分数统计功能void inputinformation( ) 为输入信息及分数统计函数。在输入信息的同时进行分数的统计。
10、可以输入各个学校各项目前三名或前五名的成绩。在输入学校的参赛项目时,结果取前三名还是前五名自己定,用一个选择语句实现。利用swith 语句前三名的分数赋为 5、3、2,前五名的成绩赋为 7,5、3、2、1,未取得成绩则赋为 0。并统计团体总分,男团总分和女团总分。其主要功能代码如下:for(s=0;sk;s+) printf(*名次 :); scanf(%d,&hi.cj.ranges); /输入所获名次信息if(hi.cj.top=3) switch(hi.cj.ranges) case 0: hi.cj.marks=0; break; case 1: hi.cj.marks=5; brea
11、k; case 2: hi.cj.marks=3; break; case 3: hi.cj.marks=2; break; else switch(hi.cj.ranges) case 0: hi.cj.marks=0; break; case 1: hi.cj.marks=7; break; case 2: hi.cj.marks=5; break; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 29 页5 . case 3: hi.cj.marks=3; break; case 4: hi.cj.marks=2; break;
12、case 5: hi.cj.marks=1; break; hi.score=hi.score+hi.cj.marks; 2信息输出功能void output( )为输出函数。列出一个输出目录利用swich 语句使函数按学校编号输出或按学校总分、男团总分、女团总分由高到低排序输出。利用辅助数组remember和冒泡排序的方法使之按分数的由高到低输出。利用循环语句do while( ) 当输入 2 时返回输出目录,输入0 是跳出循环返回主菜单。其流程图如图2 所示。开始显示选择菜单输入选项按学校总分输出按女团总分输出按学校编号输出按男团总分输出Case 1 Case 2Case 3Case 4跳
13、出 -结束是否跳出是否图 2 输出信息模块流程图3信息查询功能void inquiry( ) 为查询函数。列车一个查询目录利用swich 语句使函数按学校编号或项目编号查询,输出某学校的某个项目的得分情况或某个项目的前几名的学校。再利用精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 29 页6 . 循环语句 do while( ) 当输入 2 是返回查询目录,输入0 时跳出循环返回主菜单。其程序流程图如图 3 所示。开始显示选择菜单输入选项按学校编号查询按项目编号查询Case 1Case 2跳出 -结束是否跳出是否图 3 查询信息模块程
14、序流程图5主函数void main( )是主函数。 列出主菜单, 利用 switch 语句调用以上函数实现各个菜单的功能。想在每次查询结束想返回主菜单进行其它项时,应在 main( )函数中调用其它函数时再调用 main( )函数,如:switch(choice) case 1: 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 29 页7 . printf( 输入信息 :n);inputinformation();writedata();printf(信息已存入档案!);main(); case 2: printf( 输出信息 :n);
15、if(flag1)readdata();output();main(); 在进入主菜单后为了确保系统中已经输入了信息,用标志标量 flag1 和 flag2 来控制循环。如果系统中没有任何信息,用户就不能选择输入或查询操作,此时会输出提示信息,并返回主菜单。直到用户输入了信息或退出系统。其实现代码如下: do printf(=欢送使用 =n); printf(nn*运动会分数统计系统*n); printf(nn*1.输入信息 *n); printf(*2.输出信息 *n); printf(*3.查询信息 *n); printf(*4.退出系统 *nnn); printf(=nn); print
16、f(*请选择要实现步骤的编号( 请确保已经输入信息! ):nn); scanf(%d,&choice); if(choice=4)break; else if(choice=1)flag1=0; else if(report=fopen(sportsdata.txt,r)!=null )flag2=0; else system(cls); printf(nnnn系统中无任何信息!nn 请先输入信息 !nnnn); while(flag1 & flag2); 4 测试运行程序,进入系统主菜单。用户可以选择输入、输出、查询信息或退出系统,界面如图 4 所示。精选学习资料 - - - - - - -
17、 - - 名师归纳总结 - - - - - - -第 10 页,共 29 页8 . 图 4 系统主界面1输入信息输入 1 得到进入输入信息模块。根据系统提示将以下信息输入系统中:学校编号 1,项目编号 1,取前 5 名,获得 1 个名次,是第 5 名;项目编号 2,取前3 名,获得 3 个名次,分别是 1、2、3 名。学校编号 2,项目编号 1,取前 5 名,获得 4 个名次,分别是 1、2、3、4 名;项目编号 2,取前 5 名,获得 0 个名次。输入信息后,会自动存档,并提示存档成功,然后自动返还主菜单,如图 5 所示。图 5 信息成功输入系统并存入了文档2输出信息输入 2 进入输出信息模
18、块,该模块分四项,分别代表一种输出方式,如图6 所示。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 11 页,共 29 页9 . 图 6 输入信息模块界面用户可以按照自己的喜好,选择一种方式输入信息,输入2 返回输出信息模块,输入 0 返回主菜单。如图79 分别是按照学校编号、学校总分、女团总分输出的情况。图 7 按学校总分输出图 8 按学校总分输出精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 12 页,共 29 页10 . 图 9 按女团总分输出3查询信息输入 3 进入信息查询模块,该模块分为两项
19、,如图10所示。图 10 信息查询模块用户可以选择不同菜单进行查询,如图 11和图 12 分别是按照学校编号和项目编号查询的情况。图 11 按学校编号查询精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 13 页,共 29 页11 . 图 12 按项目编号查询4退出系统在主菜单下输入4 可以退出系统,并有中文提示,如下图。图 13 退出系统5 课程设计总结5.1 调试中遇到的较重要问题回忆1提出问题:所有输入输出内容只能在一屏内显示,学过c 语言,很知道” n”是换行, ”f”是换屏的,可是在这里就是无法实现。解决问题 : 输入 clrscr();
20、2提出问题:设置选项,供用户输入选择时,当按任意键时都会跳入下一步操作,或者直接退出系统。分析问题:在供用户选择时,提供了几个选项,就写几个case语句,但是当用户输入的并不是这几个数字时,系统就不能做出正确判断。解决问题:修改case语句,添加 default 语句提示出错,要求重新输入。源代码如下:Default: 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 14 页,共 29 页12 . clrscr(); /*清屏 */ printf( 输入错误,请重新选择); 3提出问题:用户在系统主菜单上进行选择时,假设没有输入任何初始信息,而选择
21、输出或查询操作,系统也会做出相应操作。解决问题:增加标识变量作为循环终止变量, 用来判断系统中是否已经输入了信息。假设没有就提示用户先输入信息。5.2 算法的效率及改良设想算法的效率:总的来讲,严重引响执 行速度的便是查找,查找任意一个数据,便要将其所在的结构从头至尾遍历一次,消耗大量的时间。改良设想:因大部分显示均是以学校为单位,所以将以由有关人的各种信息为集合的结构改为以由有关学校的各种信息为集合的结构。5.3 心得体会在这次上机过程中遇到过一些问题,但经过不懈努力,解决了部分,还有的现在不能解决,留待日后思考和解决。比方说在运用数据结构排序的时候,方法的选择上,总是想用时间复杂度小的算法
22、,但结果出了问题,最后还是用了我们熟悉的选择法排序。在编写之前,做整体规划和详细设计很重要。只有思路清晰,设计合理可行,编码才有可能有的放矢,才能更加有效的完成任务。本次集中上机实验,对我来说可以算是一次挑战,因为在理论学习中没有好好的掌握,现在要独立完成一个较复杂的程序编写,确实有一点困难。但我对于难度一向是以积极迎战的态度来面对,认真积极努力完成这次集中上机的任务。对我来说这是一次很好的时机,同时我也很好的把握了这次时机,认真的完成了此次上机学习的任务,对自己今后在程序编写方面以及文档撰写方面相信会有很大的帮助,在此也对学校安排这样一次学习表示感谢, 最后希望自己在数据结构以及电脑的其他学
23、习方面能够得到很好的提高。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 15 页,共 29 页13 . 参考文献1李云清、杨庆红、揭安全.数据结构 C 语言版 M. 人民邮电大学出版社 ,200 2潘彦.算法设计与分析基础 M. 北京:清华大学出版社 ,200 原理、方法与应用 M. 中国水利水电出版社 ,200 4 吕凤翥 .C+语言程序设计第2 版.电子工业出版社 ,200 5 严蔚敏、吴伟民 .数据结构 C 语言版 M. 清华大学出版社 ,200 附录源代码:#include #include #include #include #defi
24、ne n 2/ 学校数目#define m 1/ 男子项目数目#define w 1/ 女子项目数目#define null 0 int flag1=1; int flag2=1;/ 全局变量,用来标识是否已经向系统输入信息FILE *report; /定义项目结点的类型typedef struct int itemnum; / 项目编号int top; /项目取名次的数目,由用户定义3或 5 int range5; / 名次int mark5; /分数itemnode; /定义学校结点类型typedef struct int schoolnum; /学校编号int score; /学校总分i
25、nt mscore; /男团体总分int wscore; /女团体总分itemnode cm+w; / 项目数组精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 16 页,共 29 页14 . schoolnode; schoolnode hn;/ 定义一个学校结点数组/信息输入模块,用来输入信息,建立系统void inputinformation() int i,j,k,s; for(i=0;in;i+) hi.score=0; hi.mscore=0; hi.wscore=0; /初始化各结点for(i=0;in | hi.schoolnum=0
26、);/输入学校结点信息for(j=0;jm+w | hi.cj.itemnum=0); do printf(*取前 3 名 or 前 5 名:); scanf(%d,&hi.cj.top); while(hi.cj.top!=3 & hi.cj.top!=5); printf(*获得几个名次:); scanf(%d,&k); / 输入项目信息for(s=0;s5;s+) hi.cj.ranges=0, hi.cj.marks=0; /初始化排名和分数for(s=0;sk;s+) printf(*名次 :); scanf(%d,&hi.cj.ranges); /输入所获名次信息if(hi.cj.
27、top=3) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 17 页,共 29 页15 . switch(hi.cj.ranges) case 0: hi.cj.marks=0; break; case 1: hi.cj.marks=5; break; case 2: hi.cj.marks=3; break; case 3: hi.cj.marks=2; break; else switch(hi.cj.ranges) case 0: hi.cj.marks=0; break; case 1: hi.cj.marks=7; break; cas
28、e 2: hi.cj.marks=5; break; case 3: hi.cj.marks=3; break; case 4: hi.cj.marks=2; break; case 5: hi.cj.marks=1; break; hi.score=hi.score+hi.cj.marks; /按取前三名还是取前五名分别记分if(j=m-1) hi.mscore=hi.mscore+hi.cj.marks; /是男子项目则记到男子分数里面去else hi.wscore=hi.wscore+hi.cj.marks; /是女子项目则记到女子项目里面去 printf(n); /信息输出模块,用来输
29、出信息,可以选择按不同的方式输出信息void output() int choice,i,j,k; int remembern; int sign; do printf(*1.按学校编号输出.*n); printf(*2.按学校总分输出.*n); printf(*3.按男团总分输出.*n); printf(*4.按女团总分输出.*n); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 18 页,共 29 页16 . printf(nn* 请选择编号 *nn:); scanf(%d,&choice); switch(choice) case 1: /
30、按编号顺序输出for(i=0;in;i+) printf(nn*学校编号 :%dn,hi.schoolnum); printf(*学校总分 :%dn ,hi.score); printf(*男团总分 :%dn,hi.mscore); printf(*女团总分 : %dnnn,hi.wscore); break; case 2: /按学校总分输出for(i=0;in;i+) rememberi=i; for(i=0;in;i+) for(j=i+1;jn;j+) if(hrememberi.scorehj.score) k=rememberi; rememberi=rememberj; reme
31、mberj=k; / 用冒泡排序方法,用辅助数组记住学校结点下标for(i=0;in;i+) printf(nn*学校编号: %dn,hrememberi.schoolnum); printf(*学校总分 :%dn ,hrememberi.score); printf(*男团总分 :%dn,hrememberi.mscore); printf(*女团总分 : %dnnn,hrememberi.wscore); /按所记下标顺序输出 break; case 3: /按男团总分输出for(i=0;in;i+) rememberi=i; for(i=0;in;i+) for(j=i+1;jn;j+)
32、 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 19 页,共 29 页17 . if(hrememberi.scorehj.score) k=rememberi; rememberi=rememberj; rememberj=k; for(i=0;in;i+) printf(nn*学校编号 :%dn,hrememberi.schoolnum); printf(*学校总分 :%dn ,hrememberi.score); printf(*男团总分 :%dn,hrememberi.mscore); printf(*女团总分 : %dnnn,hreme
33、mberi.wscore); break; case 4: /按女团总分输出for(i=0;in;i+) rememberi=i; for(i=0;in;i+) for(j=i+1;jn;j+) if(hrememberi.scorehj.score) k=rememberi; rememberi=rememberj; rememberj=k; for(i=0;in) printf( 错误:这个学校没有参加此次运动会!nnn); else printf( 要查询的项目编号:); scanf(%d,&j); if(jm+w|j=0) printf( 此次运动会没有这个项目nnn); /学校编号超
34、出范围,则输出警告else printf( 这个项目取前%d 名 ,该学校的成绩如下:n, h0.cj-1.top); for(k=0;km+w|s=0) printf( 此次运动会不包括这个项目.nnn); /项目编号超出范围则输出警告else printf( 该项目取前%d 名,取得名次的学校n,h0.cs-1.top); for(i=0; in;i+) for(j=0;j5;j+) if(hi.cs-1.rangej!=0) printf( 学校编号 :%d,名次 :%dn,hi.schoolnum,hi.cs-1.rangej); /输出该项目取得名次学校的成绩printf(nnn 继
35、续2,跳出0n); scanf(%d,&i); printf(nnn); while(i=2); break; void writedata() /把数据存储在文件中 /FILE *report; int i; if(report=fopen(sportsdata.txt,w)=null) printf( 文件不存在,不能打开文件!n); exit(1); for(i=0;in;i+) fwrite(&hi,sizeof(schoolnode),1,report); fclose(report); /按头结点块写入void readdata() /读出文件中数据的函数 /FILE *repor
36、t; int i,j,s; if(report=fopen(sportsdata.txt,r)=null) printf( 文件不存在,不能打开文件!n); exit(1); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 22 页,共 29 页20 . for(i=0;in;i+) /printf(*学校编号 :); fread(&hi.schoolnum,sizeof(int),1,report); /printf(*学校总分 :); fread(&hi.score,sizeof(int),1,report); /printf(%dn,k);
37、/printf(*男团总分 :); fread(&hi.mscore,sizeof(int),1,report); /printf(%dn,k); /printf(*女团总分 :); fread(&hi.wscore,sizeof(int),1,report); for(j=0;jm+w;j+) fread(&hi.cj.itemnum,sizeof(int),1,report); fread(&hi.cj.top,sizeof(int),1,report); for(s=0;s5;s+) fread(&hi.cj.ranges,sizeof(int),1,report); for(s=0;s
38、5;s+) fread(&hi.cj.marks,sizeof(int),1,report); fclose(report); /关闭文件 /按照读一个数据就输出一个数据的方式显示数据内容/主函数void main() int choice; do printf(=欢送使用 =n); printf(nn*运动会分数统计系统*n); printf(nn*1.输入信息 *n); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 23 页,共 29 页21 . printf(*2.输出信息 *n); printf(*3.查询信息 *n); printf(*
39、4.退出系统 *nnn); printf(=nn); printf(*请选择要实现步骤的编号( 请确保已经输入信息! ):nn); scanf(%d,&choice); if(choice=1)flag1=0; else if(report=fopen(sportsdata.txt,r)!=null )flag2=0; else system(cls); printf(nnnn系统中无任何信息!nn 请先输入信息 !nnnn); while(flag1 & flag2); switch(choice) case 1: printf( 输入信息 :n);inputinformation();wr
40、itedata();printf(信息已存入档案!);main(); case 2: printf( 输出信息 :n); if(flag1)readdata(); output();main(); case 3: printf( 查询信息 :n); if(flag1)readdata(); inquiry();main(); case 4: printf( 退出系统 !谢谢使用 !nnn); exit(0); default: printf( 输入错误 !n); exit(0); #include #include #define M 15 #define N 15 struct mark /
41、 定义迷宫内点的坐标类型 int x; int y; ; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 24 页,共 29 页22 . struct Element / 恋栈元素,嘿嘿。 int x,y; /x 行,y 列int d; /d 下一步的方向; typedef struct LStack / 链栈 Element elem; struct LStack *next; *PLStack; /* 栈函数 */ int InitStack(PLStack &S)/构造空栈 S=NULL; return 1; int StackEmpty(P
42、LStack S)/判断栈是否为空 if(S=NULL) return 1; else return 0; int Push(PLStack &S, Element e)/压入新数据元素 PLStack p; p=(PLStack)malloc(sizeof(LStack); p-elem=e; p-next=S; S=p; return 1; int Pop(PLStack &S,Element &e) /栈顶元素出栈 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 25 页,共 29 页23 . PLStack p; if(!StackEmpt
43、y(S) e=S-elem; p=S; S=S-next; free(p); return 1; else return 0; /* 求迷宫路径函数 */ void MazePath(struct mark start,struct mark end,int mazeMN,int diradd42) int i,j,d;int a,b; Element elem,e; PLStack S1, S2; InitStack(S1); InitStack(S2); mazestart.xstart.y=2; /入口点作上标记elem.x=start.x; elem.y=start.y; elem.d
44、=-1; / 开始为 -1 Push(S1,elem); while(!StackEmpty(S1) /栈不为空 有路径可走 Pop(S1,elem); i=elem.x; j=elem.y; d=elem.d+1; / 下一个方向while(d(%d,%d,%d),e.x,e.y,e.d); return; / 跳出两层循环,本来用break, 但发现出错, exit 又会结束程序,选用return 还是不错滴 if(mazeab=0) / 找到可以前进的非出口的点 mazeab=2; / 标记走过此点elem.x=i; elem.y=j; elem.d=d; Push(S1,elem);
45、/ 当前位置入栈i=a; /下一点转化为当前点j=b; d=-1; d+; printf( 没有找到可以走出此迷宫的路径n); /* 建立迷宫 */ void initmaze(int mazeMN) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 27 页,共 29 页25 . int i,j; int m,n; / 迷宫行 ,列 /M printf( 请输入迷宫的行数m=); scanf(%d,&m); printf( 请输入迷宫的列数n=); scanf(%d,&n); printf(n 请输入迷宫的各行各列 :n 用空格隔开 ,0 代表路
46、,1 代表墙 n,m,n); for(i=1;i=m;i+) for(j=1;j=n;j+) scanf(%d,&mazeij); printf( 你建立的迷宫为 (最外圈为墙 ).n); for(i=0;i=m+1;i+) / 加一圈围墙 mazei0=1; mazein+1=1; for(j=0;j=n+1;j+) maze0j=1; mazem+1j=1; for(i=0;i=m+1;i+) / 输出迷宫 for(j=0;j=n+1;j+) printf(%d ,mazeij); printf(n); void main() int stoMN; struct mark start,en
47、d; /start,end入口和出口的坐标int add42=0,1,1,0,0,-1,-1,0;/行增量和列增量方向依次为东西南北/M initmaze(sto);/ 建立迷宫printf( 输入入口的横坐标 ,纵坐标 逗号隔开 n); scanf(%d,%d,&start.x,&start.y); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 28 页,共 29 页26 . printf( 输入出口的横坐标 ,纵坐标 逗号隔开 n); scanf(%d,%d,&end.x,&end.y); MazePath(start,end,sto,add); /find path system(PAUSE); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 29 页,共 29 页