![数据结构课设任务书_第1页](http://file4.renrendoc.com/view/3c986e2fae662e21dfecf7937f6e6a6a/3c986e2fae662e21dfecf7937f6e6a6a1.gif)
![数据结构课设任务书_第2页](http://file4.renrendoc.com/view/3c986e2fae662e21dfecf7937f6e6a6a/3c986e2fae662e21dfecf7937f6e6a6a2.gif)
![数据结构课设任务书_第3页](http://file4.renrendoc.com/view/3c986e2fae662e21dfecf7937f6e6a6a/3c986e2fae662e21dfecf7937f6e6a6a3.gif)
![数据结构课设任务书_第4页](http://file4.renrendoc.com/view/3c986e2fae662e21dfecf7937f6e6a6a/3c986e2fae662e21dfecf7937f6e6a6a4.gif)
![数据结构课设任务书_第5页](http://file4.renrendoc.com/view/3c986e2fae662e21dfecf7937f6e6a6a/3c986e2fae662e21dfecf7937f6e6a6a5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计报告课程名称数据结构课题名称1.通讯录管理2.迷宫求解专业计算机科学与技术班级学号2013130301201381姓名杨承志指导教师刘铁武刘杰君2015年7月5日湖南工程学院课程设计任务书一.设计目标强化学生编码、调试错误的能力;了解和掌握数据结构相关技术、并合理利用其解决实际应用问题;了解软件开发的流程和项目管理控制;掌握企业级IDE的使用;了解当前IT行业及职业人应具备的素质;完全模拟真实软件开发流程和管理;增强团队意识和团队合作精神。二.设计内容:问题1:拓扑排序大学期间各专业都要制订相应的教学计划。每个专业开设的课程预先已确定。而各门课程间有的是相互独立的,而有的则有先修后修的限定。试设计相应的课程设置程序,实现对某专业各学期的课程的排布,其中每门课需设定课时,而各学期的总课时不能超过上限。测试数据:学期课时上限数:350;各课程所需学时:48;课程先、后修关系如图:194212101136578问题2:huffman编码对于确定的字符集的电文字符串编码,实现最高的通信效率。编程实现对于给定的输入串及各字符的已知频度,输出其编码方式(各字符的二进制编码)及对应的输出流。测试数据:字符A频度1866413223210321154757BCDEFGHIJK1LM232字符频度NOPQRSTUVWXYZ20576315148518023181168问题3:成绩管理编制一应用软件实现对班级成绩管理。基本功能有学生信息的增删(转入或退学)、查找(从当前点向前或向后双向的)、录入、统计(如总分,及格率等)。建议用双链表实现。问题4:成绩排序对某次考试成绩排序,输入为多门课程成绩,可以任一课程成绩为关键字进行检索。建议采用快速排序等算法效率高的算法。问题5:迷宫求解一个M*N的长方阵迷宫,0和1分别表示迷宫中的通路和墙壁。对任意设定的迷宫,东、南、西、北四个方向是可能的行走方向。求出一条从入口到出口的路径。(或没有通路)。测试数据:迷宫的测试数据如下:左上角(1,1)为入口,右下角(8,9)为出口。000000011000101111110100100000110100001000100001001010110100000001001110问题6:一元多项式计算。对于任意输入的多项式A=anxn+an-1xn-1+…a1x+a0和B=bmxm+bm-1xm-1+…b1x+b0,用链表存储后实现A+B;A-B。测试数据:a.;b.;c.;d.;e.;问题7:通讯录管理设计一个通讯录管理,包括通讯录链表的建立、通讯者的插入、通讯者的删除、通讯者的查询以及信息修改等。要求有运行界面,从菜单中进入选项。三.设计要求:1.选题:每位学生需完成两个课题,其中一个必选,另一个自选,必选题次为,学号/7+1。2.课程设计报告内容说明1)需求分析程序的功能;输入输出的要求。2)概要设计程序的模块构成以及模块之间的层次结构、各模块的调用关系;每个模块的功能;课题涉及的数据结构和数据库结构;即要存储什么数据,这些数据是什么样的结构,它们之间有什么关系等。3)详细设计采用C语言定义相关的数据类型;写出各模块的类C码算法;画出各函数的调用关系图、主要函数的流程图。4)调试分析以及设计体会测试数据:准备典型的测试数据和测试方案,包括正确的输入及输出结果和含有错误的输入及输出结果;程序调试中遇到的问题以及解决问题的方法;课程设计过程经验教训、心得体会。5)使用说明用户使用手册:说明如何使用你编写的程序,详细列出每一步的操作步骤。6)书写格式见附带说明。7)附录参考书目;源程序清单(带注释)3.成绩评定:指导老师负责验收程序的运行结果,并结合学生的工作态度、实际动手能力、创新精神和设计报告等进行综合考评,并按优秀、良好、中等、及格和不及格五个等级给出每位同学的课程设计成绩。具体考核标准包含以下几个部分:①平时出勤(占10%)②系统需求分析、功能设计、数据结构设计及程序总体结构合理与否(占10%)③程序能否完整、准确地运行,个人能否独立、熟练地调试程序(占40%)④设计报告(占30%)注意:不得抄袭他人的报告(或给他人抄袭),一旦发现,成绩为零分。⑤独立完成情况(占10%)。四.进度安排第17周星期一星期二星期三星期四星期五上午9:00~12:00下午E512E411E414E414第18周星期一星期二星期三星期四星期五上午9:00~12:00下午13:30~16:30E412E413附:课程设计报告装订顺序:封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的原代码,要求对程序写出必要的注释)。正文总字数要求在5000字以上(不含程序原代码)。一,通讯录管理系统1.需求分析2.概要设计3.详细设计4.调试分析二,迷宫求解1.问题描述2.需求分析3.概要设计4.流程图5.详细设计6.调试分析三,课程设计总结四,附录通讯录管理系统1,需求分析设计一个实用的小型通讯录,用双向链表做数据结构,编写一个通讯录管理系统实现通讯录信息的输入、添加、显示、以姓名做关键字进行查找、删除信息等功能。每条信息至少包含:姓名、街道、城市、邮编、国家等信息。2,概要设计载入文件load():将磁盘中可能存在的文件载入到内存中。信息输入enter():系统将提示输入新纪录所需信息,信息包含:姓名、街道、城市、邮编、国家。信息删除del():首先提示用户输入要删除的纪录姓名,然后调用删除函数,删除该纪录的相关资料,支持重名选择删除和循环删除。查找search():提示用户输入要查找的姓名,然后系统调用查找函数查找,接着系统使用相关命令输出查到的全部信息。显示全部display():将内存中的纪录内容全部输出,包括未保存到磁盘的记录项。保存save():将操作结果实时保存到磁盘文件txl.txt中,完成后返回到主菜单界面。退出系统exit(0):直接退出系统,不保存修改。流程图:3,详细设计1.各个操作的算法实现:(1)链表初始化voidinitlist()//链表初始化函数{l=(linklist)malloc(sizeof(pnode));//动态申请内存l->next=l;l->prior=l;}(2)载入可能存在的通讯录文件voidload()//装载已有文件信息{//无文件,新建立文件……;……;//已有文件,导入文件……;……;}(3)增加新结点voidlistinsert()//增加新结点{//插入新结点,读入内存信息……;……;}(4)添加新纪录(可循环)voidenter()//添加新纪录{//信息输入……;……;//是否继续添加?……;……;}(5)按姓名查找(同时显示全部符合要求的结果,包括没有保存到磁盘的)voidsearch(){//输入姓名……;……;//输出查询结果……;……;//检索可能的重名纪录……;……;}(6)显示所有记录(包括没有保存到磁盘的)voiddisplay()//显示所有纪录{//显示内存中的所有记录……;……;}(7)删除指定记录(可循环)voiddel()//删除纪录{//输入要删除的姓名……;……;//查找符合条件的记录,对于每条记录询问是否删除;//满足条件的输出结束,询问是否删除其他记录,循环……;……;}(8)保存到磁盘文件(实时写入文件)voidsave()//{//写入文件操作……;……;}3,调试分析程序主界面新增联系人现实所有联系人查找联系人经过反复测试,最终提供了一个较为友好的界面和操作模式,而且容错能力较好,稳定性很强。下面做一些简单的说明:(1)2级菜单只是作为一种尝试,并非必须!(2)在界面排版上,我学习了互联网上部分程序的界面编排,其中以格式控制方式显示提高了界面显示的稳定性,较为理想。(3)在文件读取和保存方面,该程序做到了实时保存保存和读取,操作非常简便。(4)在查找方面,我将其设计为一次多记录的显示方式,也更合乎操作习惯,界面较为友好,对于无符合条件的结果,只是结果集为空,界面保持不变。同时,它是实时读取的,可以将刚刚输入而未保存的记录也读取到!另外,一次查询结束后返回的是查询菜单,可以直接进行下一次的查询,也较为合理。(5)删除功能我做了较多的工作,整体界面和设计都较为合理。对于输入的姓名,查找出结果后提示是否删除。若有重名,则会二次显示,提示是否删除,一直到所有记录查询结束(可以在重名中选中需要的进行删除,并不需要删除每一个纪录)。结束之后可以直接再次删除其他纪录,因为它提供循环删除操作功能。迷宫求解问题描述:a.问题描述:以一个m*n的长方阵表示迷宫,0和1分别表示迷宫的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。b.基本要求:(1)实现一个以链表做存储的栈类型,然后编写一个求解迷宫的非递归程序。求的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。如:对于下列数据的迷宫,输出一条通路:(1,1,1),(1,2,2),(2,2,2),(3,2,3),(3,1,2)……。(2)编写递归形式的算法,求得迷宫中所有可能的道路;(3)以方阵形式输出迷宫及其到道路(选做)c.测试数据:迷宫的测试数据如下:左上角(1,1)为入口,右下角(8,9)为出口。000000011000101111110100100000110100001000100001001010110100000001001110d.实现提示:计算机解迷宫通常用的是“穷举求解”方法,即从入口出发,顺着米一个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求的一条通路。假如所有的可能的通路都探索到而未能到出口,则所设定的迷宫没有通路。可以二维数组存储迷宫数据,通常设定入口点的下标为(1,1),出口点的下标为(n,n)。为处理器方便起见,可在迷宫的四周加上一圈障碍。对于迷宫中任一位置,均可约定有东、西、南、北四个方向可通。需求分析:本课程设计是解决迷宫求解的问题,从入口出发,顺某一方向向前探索,若能走通,则继续往前走;否则沿原路退回,换一个方向再继续探索,直至所有可能的通路都探索到为止。为了保证在任何位置上都能沿原路退回,显然需要用一个后进先出的结构来保存从入口到当前位置的路径。因此,在求迷宫通路的算法中要应用“栈”的思想假设“当前位置”指的是“在搜索过程中的某一时刻所在图中某个方块位置”,则求迷宫中一条路径的算法的基本思想是:若当前位置“可通”,则纳入“当前路径”,并继续朝“下一位置”探索,即切换“下一位置”为“当前位置”,如此重复直至到达出口;若当前位置“不可通”,则应顺着“来向”退回到“前一通道块”,然后朝着除“来向”之外的其他方向继续探索;若该通道块的四周4个方块均“不可通”,则应从“当前路径”上删除该通道块。所谓“下一位置”指的是当前位置四周4个方向(上、下、左、右)上相邻的方块。假设以栈记录“当前路径”,则栈顶中存放的是“当前路径上最后一个通道块”。由此,“纳入路径”的操作即为“当前位置入栈”;“从当前路径上删除前一通道块”的操作即为“出栈”。概要设计1.①构建一个二维数组maze[M+2][N+2]用于存储迷宫矩阵②自动或手动生成迷宫,即为二维数组maze[M+2][N+2]赋值③构建一个队列用于存储迷宫路径④建立迷宫节点structpoint,用于存储迷宫中每个节点的访问情况⑤实现搜索算法⑥屏幕上显示操作菜单2.本程序包含10个函数:(1)主函数main()(2)手动生成迷宫函数shoudong_maze()(3)自动生成迷宫函数zidong_maze()(4)将迷宫打印成图形print_maze()(5)打印迷宫路径(若存在路径)result_maze()(6)入队enqueue()(7)出队dequeue()(8)判断队列是否为空is_empty()(9)访问节点visit()(10)搜索迷宫路径mgpath()流程图:详细设计实现概要设计中定义的所有数据类型及操作的伪代码算法1.节点类型和指针类型迷宫矩阵类型:intmaze[M+2][N+2];为方便操作使其为全局变量迷宫中节点类型及队列类型:structpoint{introw,col,predecessor}que[512]2.迷宫的操作(1)手动生成迷宫voidshoudong_maze(intm,intn){定义i,j为循环变量for(i<=m)for(j<=n)输入maze[i][j]的值}(2)自动生成迷宫voidzidong_maze(intm,intn){定义i,j为循环变量for(i<=m)for(j<=n)maze[i][j]=rand()%2//由于rand()产生的随机数是从0到RAND_MAX,RAND_MAX是定义在stdlib.h中的,其值至少为32767),要产生从X到Y的数,只需要这样写:k=rand()%(Y-X+1)+X;}(3)打印迷宫图形voidprint_maze(intm,intn){用i,j循环变量,将maze[i][j]输出□、■}(4)打印迷宫路径voidresult_maze(intm,intn){用i,j循环变量,将maze[i][j]输出□、■、☆}(5)搜索迷宫路径①迷宫中队列入队操作voidenqueue(structpointp){将p放入队尾,tail++}②迷宫中队列出队操作structpointdequeue(structpointp){head++,返回que[head-1]}③判断队列是否为空intis_empty(){返回head==tail的值,当队列为空时,返回0}④访问迷宫矩阵中节点voidvisit(introw,intcol,intmaze[41][41]){建立新的队列节点visit_point,将其值分别赋为row,col,head-1,maze[row][col]=2,表示该节点以被访问过;调用enqueue(visit_point),将该节点入队}⑤路径求解voidmgpath(intmaze[41][41],intm,intn){先定义入口节点为structpointp={0,0,-1},从maze[0][0]开始访问。如果入口处即为障碍,则此迷宫无解,返回0,程序结束。否则访问入口节点,将入口节点标记为访问过maze[p.row][p.col]=2,调用函数enqueue(p)将该节点入队。判断队列是否为空,当队列不为空时,则运行以下操作:{调用dequeue()函数,将队头元素返回给p,如果p.row==m-1且p.col==n-1,即到达出口节点,即找到了路径,结束如果p.col+1<n且maze[p.row][p.col+1]==0,说明未到迷宫右边界,且其右方有通路,则visit(p.row,p.col+1,maze),将右边节点入队标记已访问如果p.row+1<m且maze[p.row+1][p.col]==0,说明未到迷宫下边界,且其下方有通路,则visit(p.row+1,p.col,maze),将下方节点入队标记已访问如果p.col-1>0且maze[p.row][p.col-1]==0,说明未到迷宫左边界,且其左方有通路,则visit(p.row,p.col-1,maze),将左方节点入队标记已访问如果p.row-1>0且maze[p.row-1][p.col]==0,说明未到迷宫上边界,且其上方有通路,则visit(p.row,p.col+1,maze),将上方节点入队标记已访问}访问到出口(找到路径)即p.row==m-1且p.col==n-1,则逆序将路径标记为3即maze[p.row][p.col]==3;while(p.predecessor!=-1){p=queue[p.predecessor];maze[p.row][p.col]==3;}最后将路径图形打印出来。3.菜单选择while(cycle!=(-1))手动生成迷宫请按:1自动生成迷宫请按:2退出请按:3scanf("%d",&i);switch(i){case1:请输入行列数(如果超出预设范围则提示重新输入)shoudong_maze(m,n);print_maze(m,n);mgpath(maze,m,n);if(X!=0)result_maze(m,n);case2:请输入行列数(如果超出预设范围则提示重新输入)zidong_maze(m,n);print_maze(m,n);mgpath(maze,m,n);if(X!=0)result_maze(m,n);case3:cycle=(-1);break;}调试分析程序主界面手动输入迷宫在调试过程中,首先使用的是栈进行存储,但是产生的路径是多条或不是最短路径,所以通过算法比较,改用此算法调试过程出现了最多60个错误。后经多次调试检查,发现有些格式问题没有注意比如函数括号的放置等。课程设计总结通过这段时间的数据结构课程设计,本人对计算机的应用,数据结构的作用以及C语言的使用都有了更深的了解。尤其是C语言的进步让我深刻的感受到任何所学的知识都需要实践,没有实践就无法真正理解这些知识以及掌握它们,使其成为自己的财富。在理论学习和上机实践的各个环节中,通过自主学习和认真听老师讲课分析,我收获了不少。当然也遇到不少的问题,也正是因为这些问题引发的思考给我带了收获。从当初不喜欢上机写程序到现在能主动写程序,从当初拿着程序不只如何下手到现在知道如何分析问题,如何用专业知识解决实际问题的转变,我发现无论是专业知识还是动手能力,自己都有很大程度的提高。在这段时间里,我对for、while等的循环函数用法更加熟悉,逐渐形成了较好的编程习惯。在老师的指导帮助下,同学们课余时间的讨论中,这些问题都一一得到了解决。在程序的调试能力上,无形中得到了许多的提高。例如:头文件的使用,变量和数组的范围问题,定义变量时出现的问题等等。在实际的上机操作过程中,不仅是让我们了解数据结构的理论知识,更重要的是培养解决实际问题的能力,所以相信通过此次实习可以提高我们分析设计能力和编程能力,为后续课程的学习及实践打下良好的基础。时间过得真快,大学生活不知不觉就走过了一学期,这一学期的大学学习和课程实践阶段的提高,使我们本身知识得到提高的同时,也增强了我们对未来工作的信心,我们相信自己未来两年半的学习更使我们有能力胜任将来的工作。附录通讯录源程序#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>structrecord{charname[20];charstreet[20];charcity[20];chareip[20];//邮编charstate[20];}people[500];//500个记录,可修改structpnode{recorddata;structpnode*next,*prior;//双循环链表};typedefpnode*linklist;linklistl;intlen=0;//链表长度FILE*fp;//文件指针voidmainmenu();//主菜单voidsearchmenu();//查询菜单voidenter();//添加新纪录voidsearch();//按条件搜索记录voiddisplay();//显示全部记录voidload();//载入文件内容voidsave();//写入文件voiddel();//删除记录voidlistinsert();//插入结点函数voidinitlist();//初始化链表函数voidmain()//主函数{initlist();load();listinsert();while(1)mainmenu();//进入主菜单,有非法输入仍停留在主菜单}voidinitlist()//链表初始化函数{l=(linklist)malloc(sizeof(pnode));//动态申请内存l->next=l;l->prior=l;}voidload()//装载已有文件信息{if((fp=fopen("txl.txt","rb"))==NULL){printf("\n\t\t通讯录文件不存在");if((fp=fopen("txl.txt","wb"))==NULL){printf("\n\t\t建立失败");exit(0);}else{printf("\n\t\t通讯录文件已建立");printf("\n\t\t按任意键进入主菜单");getch();return;}exit(0);}//导入文件功能部分fseek(fp,0,2);if(ftell(fp)>0){rewind(fp);for(len=0;!feof(fp)&&fread(&people[len],sizeof(structrecord),1,fp);len++);printf("\n\t\t文件导入成功");printf("\n\t\t按任意键返回主菜单");getch();return;}printf("\n\t\t文件导入成功");printf("\n\t\t通讯录文件中无任何纪录");printf("\n\t\t按任意键返回主菜单");getch();return;}voidlistinsert()//增加新结点{linklists,p=l;for(inti=0;i<len;i++){s=(linklist)malloc(sizeof(pnode));strcpy(s->,people[i].name);strcpy(s->data.city,people[i].city);strcpy(s->data.street,people[i].street);strcpy(s->data.eip,people[i].eip);strcpy(s->data.state,people[i].state);s->prior=p->prior;s->next=p;p->prior->next=s;p->prior=s;p=p->next;}}voidmainmenu()//主菜单{charch;system("cls");printf("\n\t\tprintf("\n\t\tprintf("\n\t\tprintf("\n\t\tprintf("\n\t\tprintf("\n\t\tprintf("\n\t\t");欢迎进入通讯录系统");1-新添纪录");2-查找联系人");3-删除联系人");4-保存5-退出");");printf("\n\t\t请选择:");printf("%c",ch=getch());switch(ch){case'1':enter();break;case'2':searchmenu();break;case'3':del();break;case'4':save();break;case'5':exit(0);default:mainmenu();}}voidenter()//添加新纪录{printf("\n\t\t****************请输入学生信息****************\n");printf("\n\t\t姓名:");scanf("%s",&people[len].name);printf("\n\t\t街道:");scanf("%s",&people[len].street);printf("\n\t\t城市:");scanf("%s",&people[len].city);printf("\n\t\t邮编:");scanf("%s",&people[len].eip);printf("\n\t\t国家:");scanf("%s",&people[len].state);len++;printf("\n\t\t是否继续添加?(Y/N):");if(getch()=='y')enter();return;}voidsearchmenu()//查询菜单{charch;system("cls");printf("\n\t\tprintf("\n\t\tprintf("\n\t\tprintf("\n\t\tprintf("\n\t\t");查询菜单");1-显示所有记录");2-按姓名查询");3-返回主菜单");printf("\n\t\t请选择:");printf("%c",ch=getch());switch(ch){case'1':display();break;case'2':search();break;case'3':mainmenu();break;}}voidsearch(){printf("\n\t\t*****************按姓名查找*******************");charname[20];printf("\n\t\t请输入姓名:");scanf("%s",name);printf("查询到的信息:\n");printf("%-18s%-18s%-18s%-15s%s\n","姓名","街道","城市","邮编","国家");//格式控制输出printf("-----------------------------------------------------------------------------\n");for(inti=0;i<len;i++){if(strcmp(name,people[i].name)==0)printf("%-18s%-18s%-18s%-15s%s\n",people[i].name,people[i].street,people[i].city,people[i].eip,people[i].state);if(i+1<len)continue;//重名纪录再检索}printf("-----------------------------------------------------------------------------\n");printf("\n\t\t按任意键返回查询菜单");getch();searchmenu();}voiddisplay()//显示所有纪录{inti;system("cls");if(len!=0){printf("\n\t\t***************以下为通讯录所有信息************\n\n");printf("%-18s%-18s%-18s%-15s%s\n","姓名","街道","城市","邮编","国家");printf("-----------------------------------------------------------------------------\n");for(i=0;i<len;i++){printf("%-18s%-18s%-18s%-15s%s\n",people[i].name,people[i].street,people[i].city,people[i].eip,people[i].state);if(i+1<len)continue;}printf("-----------------------------------------------------------------------------\n");}elseprintf("\n\t\t通讯录中无任何纪录");printf("\n\t\t按任意键返回查询菜单:");getch();searchmenu();}voiddel()//删除纪录{inta=0,i,j,findmark;//findmark为查找结果标志//intfindmark=0,delmark=0;charname[20];printf("\n\t\t请输入要删除学生姓名:");scanf("%s",name);for(i=a;i<len;i++){if(findmark=strcmp(people[i].name,name)==NULL)//找到一条符合条件的记录{//findmark++;printf("\n\t\t以下是您要删除的学生纪录:\n");printf("%-18s%-18s%-18s%-15s%s\n","姓名","街道","城市","邮编","国家");printf("-----------------------------------------------------------------------------\n");printf("%-18s%-18s%-18s%-15s%s\n",people[i].name,people[i].street,people[i].city,people[i].eip,people[i].state);printf("-----------------------------------------------------------------------------\n");printf("\n\t\t是否删除?(y/n)");if(getch()=='y'){for(j=i;j<len-1;j++)people[j]=people[j+1];len--;i--;//delmark++;printf("\n\t\t删除成功");if((i+1)<len){printf("\n\t\t是否继续删除相同姓名的同学信息?(y/n)");//是否删除同名纪录if(getch()=='y'){a=i;continue;//删除上一条记录之后搜索是否有同名纪录}}}//endifif((i+1)<len){printf("\n\t\t是否继续删除相同姓名的同学信息?(y/n)");//不删前一条纪录,删当前纪录if(getch()=='y'){a=i;continue;}}}//endifelsecontinue;}//endforif(!findmark)//没有找到任何符合条件的记录printf("\n\t\t没有符合条件的记录!");printf("\n\t\t是否继续删除?(y/n)");//无同名纪录,是否继续删除其他纪录if(getch()=='y')del();//继续删除其他纪录}voidsave()//写入文件{inti;if((fp=fopen("txl.txt","wb"))==NULL){printf("\n\t\t文件打开失败");}for(i=0;i<len;i++){if(fwrite(&people[i],sizeof(structrecord),1,fp)!=1)printf("\n\t\t写入文件错误!\n");}fclose(fp);//关闭文件指针printf("\n\t\t通讯录文件已保存,按任意键继续...");getch();return;}迷宫求解源程序#include<stdlib.h>#include<stdio.h>#defineN39#defineM39intX;intmaze[N+2][M+2];structpoint{introw,col,predecessor;}queue[512];inthead=0,tail=0;voidshoudong_maze(intm,intn){inti,j;printf("\n\n");printf("请按行输入迷宫,0表示通路,1表示障碍:\n\n");for(i=0;i<m;i++)for(j=0;j<n;j++)scanf("%d",&maze[i][j]);}voidzidong_maze(intm,intn){inti,j;printf("\n迷宫生成中……\n\n");system("pause");for(i=0;i<m;i++)for(j=0;j<n;j++)maze[i][j]=rand()%2;//由于rand()产生的随机数是从0到RAND_MAX(最大)//RAND_MAX是定义在stdlib.h中的,其值至少为32767)//要产生从X到Y的数,只需要这样写:k=rand()%(Y-X+1)+X;}voidprint_maze(intm,intn){inti,j;printf("\n迷宫生成结果如下:\n\n");printf("迷宫入口\n");printf("↓");for(i=0;i<m;i++){printf("\n");for(j=0;j<n;j++){if(maze[i][j]==0)printf("□");if(maze[i][j]==1)printf("■");}}printf("→迷宫出口\n");}voidresult_maze(intm,intn){inti,j;printf("迷宫通路(用☆表示)如下所示:\n\t");for(i=0;i<m;i++){printf("\n");for(j=0;j<n;j++){if(maze[i][j]==0||maze[i][j]==2)printf("□");if(maze[i][j]==1)printf("■");if(maze[i][j]==3)printf("☆");}}}voidenqueue(structpointp){queue[tail]=p;tail++;}structpointdequeue(){head++;returnqueue[head-1];}intis_empty(){returnhead==tail;}voidvisit(introw,intcol,intmaze[41][41]){structpointvisit_point={row,col,head-1};maze[row][col]=2;enqueue(visit_point);}intmgpath(intmaze[41][41],intm,intn){X=1;structpointp={0,0,-1};if(maze[p.row][p.col]==1){printf("\n===============================================\n");printf("此迷宫无解\n\n");X=0;return0;}maze[p.row][p.col]=2;enqueue(p);while(!is_empty()){p=dequeue();if((p.row==m-1)&&(p.col==n-1))break;if((p.col+1<n)&&(maze[p.row][p.col+1]==0))visit(p.row,p.col+1,maze);if((p.row+1<m)&&(maze[p.row+1][p.col]==0))visit(p.row+1,p.col,maze);if((p.col-1>=0)&&(maze[p.row][p.col-1]==0))visit(p.row,p.col-1,maze);if((p.row-1>=0)&&(maze[p.row-1][p.col]==0))visit(p.row-1,p.col,maze);}i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国尼龙66行业市场运行态势及发展趋势预测报告-智研咨询发布
- 《计算机网络基础与应用(第三版)》 课件 项目十 局域网服务器的架设
- 《PLC应用技术(西门子 下册)(第二版)》中职全套教学课件
- 2024年12月浙江嘉兴市海宁市儿童福利院公开招聘1人笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 高考写作素材【知识精研】电影《哪吒2魔童闹海》作文素材运用
- Unit 7 Lets go to the museum Lesson 2 Grammar Past Simple【知识精研】KET剑桥英语
- 《KPM教学资料》课件
- 《风险企业价值评估》课件
- 2025至2031年中国双道烘银炉行业投资前景及策略咨询研究报告
- 2025至2030年中国高温高压液流染色机数据监测研究报告
- 车辆委托保管合同 车辆委托保管协议
- 保育员教学大纲和教学计划
- 领子的分类详解课件
- 工厂员工消防安全培训内容
- XX站SCADA系统升级改造施工方案(模板)
- 调节与集合的相关性 相对调节和相对集合的关系
- 《金融工程》课程教案
- 信贷管理系统需求说明书
- 蒙台梭利教育理论
- 水轮机结构总体介绍
- “求是鹰眼”反无人机系统
评论
0/150
提交评论