程序设计课程设计指导书软件学院软件工程系2017年6月1日太原理工大学课程设计任务书学生姓名专业班级软件课程名称程序设计课程设计(ProgrammingCurriculumDesign)设计名称相邻数对,ISBN识别码,文本文件单词统计等设计周数2设计任务主要设计参数1.基本要求掌握C或C++语言、结构化程序和面向对象程序设计方法、数据结构和离散数学理论知识,熟悉C或C++程序的开发环境及调试过程,巩固和加深对理论课中知识的理解,提高学生对所学知识的综合运用能力。2.培养学生以下技能①培养学生查阅参考资料、手册的自学能力,通过独立思考深入钻研问题,学会自己分析、解决问题。②通过对所选题目分析,找出解决方法,设计算法,编制程序与调试程序。③能熟练调试程序,在教师的指导下,完成课题任务。④按课程设计报告的要求撰写设计报告。设计内容设计要求1.设计内容①相邻数对;②ISBN识别码;③文本文件单词统计;④构造可以使n个城市连接的最小生成树;⑤送货;⑥学生信息管理系统2.设计要求①至少完成上述设计内容中的4个设计题目;②对每个题目要给出设计方案、功能模块划分、算法思想;③选择使用的数据结构;④给出题目的程序实现;⑤按要求撰写设计报告。主要参考资料1.《程序设计课程设计》指导书;2.《程序设计技术》、《数据结构》等课程教材;3.其他自选的相关资料。学生提交归档文件课程设计报告封面应给出专业、班级、姓名、学号、指导教师和完成日期。每个设计题目的内容包括以下几项:设计题目、问题描述、问题分析、功能实现、测试实例及运行结果、源程序清单。注:1.课程设计完成后,学生提交的归档文件应按照:封面—任务书—说明书—图纸的顺序进行装订上交(大张图纸不必装订)。2.可根据实际内容需要续表,但应保持原格式不变。指导教师签名:日期:2017.6.3-1-前言《程序设计课程设计》是计算机科学与技术专业的重要实践性课程。目的在于培养学生分析问题和解决问题的能力,为学生提供了一个既动手又动脑,独立实践的机会。将数据结构、算法设计与分析、离散数学和C(C++)语言等课本上的的理论知识和实际应用问题进行有机结合,提高学生问题分析、程序设计、程序调试及项目开发能力。为后续课程:操作系统、软件工程,编译原理等课程的学习奠定必要的实践基础。本课程设计是利用数据结构、算法设计与分析、离散数学、C语言理论知识和实验课中学到的编程知识和编程技巧,通过布置具有一定难度、一定编程量的课程设计题目,利用C(C++)语言作为开发工具,使学生通过课程设计掌握高级编程语言的知识和编程技术,掌握程序设计的思想和方法,初步具备利用计算机求解实际问题的能力。通过《程序设计课程设计》课程的学习,能够帮助学生加深理解数据结构、离散数学、C语言基本概念,达到培养学生良好程序设计的习惯和运用C语言编写程序解决实际问题的能力。使学生学会把书本知识用于解决实际问题,起到深化理解和灵活掌握教学内容的目的。同时使学生在程序设计方法及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。通过该课程设计,学生应该掌握C或C++语言程序设计、结构化程序和面向对象程序设计方法、数据结构和离散数学理论知识,熟悉C或C++程序的开发环境及C或C++程序的调试过程,巩固和加深对理论课中知识的理解,提高学生对所学知识的综合运用能力。通过本课程设计训练,学生应该具备如下基本技能:①培养学生查阅参考资料、手册的自学能力,通过独立思考深入钻研问题,学会自己分析、解决问题。②通过对所选题目方案分析比较,确立方案,编制程序与调试程序。③能熟练调试程序,在教师的指导下,完成课题任务。④根据个人的设计调试过程,按课程设计报告的要求撰写设计报告。选用教材及主要参考书:1教材呼克佑.C语言程序设计电子工业出版社,2013严蔚敏.数据结构(C语言版)清华大学出版社,2012-2-设计题目(6选4)1.相邻数对1.1【问题描述】给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1。输入格式输入的第一行包含一个整数n,表示给定整数的个数。第二行包含所给定的n个整数。输出格式输出一个整数,表示值正好相差1的数对的个数。1.2【测试数据】输入输出610263783测试数据输出说明值正好相差1的数对包括(2,3),(6,7),(7,8)。所以输出:3数据约定1=n=1000,给定的整数为不超过10000的非负整数。2.ISBN识别码2.1【问题描述】每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。识别码的计算方法如下:首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,…,9,再求和,即0×1+6×2+……+2×9=158,然后取158mod11的结果4作为识别码。编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出是正确的ISBN号码。输入格式输入只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。输出格式输出一行,假如输入的ISBN号码的识别码正确,那么输出“Right”,否则,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”)。-3-2.2【测试数据】输入1输出10-670-82162-4Right输入2输出20-670-82162-00-670-82162-43.文本文件单词统计3.1【问题描述】假设有如下的英文文本文档:(此处为太原理工大学学校简介英文版)TAIYUANUNIVERSITYOFTECHNOLOGYTaiyuanUniversityofTechnology(TUT)hasitshistorytracedallthewaybacktotheWesternLearningSchoolofShanxiGrandAcademy(1902),whichwasoneofthethreeearliestnationaluniversitiesinChina.Withthetraditionanddevelopmentofover100years,TUTisnowageneraluniversitywithengineeringasthemajor,sciencesandtechnologyintegratedandcoordinatedevelopmentofmultipledisciplines.Itisauniversitythatisincludedinthe“Project211”---thenationalhighereducationpromotionprogramfor100topuniversitiesinChina.……Recollectingthecentennialhistory,generationsofTUThavecreateditsmissionandgloryofacenturywithresponsibilityandconfidence;expectingthepromisingtomorrow,over30,000TUTstudentsandfacultyareproducingsplendorandperspectivesbytheirwisdomanddiligence.Inthenewera,TaiyuanUniversityofTechnology,followingtheConceptionofScientificDevelopment,isdeterminedtofurtherthereformationoneducation,toreinforcetheteachingmanagementsoastoupgradeitsteachingandresearchinglevels.TaiyuanUniversityofTechnologywillbeturningitselfintoaresearch-baseduniversity.设计C或C++程序,统计在这样的英文文本文件中,出现了多少个单词,每个单词出现了几次。连续的英文字符都认为单词(不包括数字),单词之间用空格或标点符号分隔。3.2【设计需求及分析】要统计英文文本文件中出现了哪些单词,就要从文件中读取字符,读取出来的连续英文字符认为是一个单词,遇空格或标点符号单词结束。使用线性表记录单词以及每个单词出现的次数。线性表中的单词按字典顺序存储。线性表的顺序存储结构如下:#defineLIST_INIT_SIZE100//线性表存储空间的初始分配量#defineLISTINCREMENT10//线性表存储空间的分配增量typedefstruct{charword[21]//存储单词,不超过20个字符intcount;//单词出现的次数}ElemType;typedefstruct{ElemType*elem;//存储空间基址intlength;//当前长度intlistsize;//当前分配的存储容量-4-}Seqlist;3.3【设计功能】3.3.1实现顺序表的基本操作⑴顺序表的初始化:InitList(SqList&L)⑵顺序表上查找指定的单词:LocateElem(SqList&L,char*s)若找到,单词的出现次数增1,返回0,否则返回该单词的插入位置。⑶在顺序表上插入新的单词:InsertList(SqList&L,inti,char*s)要求按字典顺序有序。新单词的出现次数为1.⑷输出顺序表上存储的单词统计信息:PrintList(SqList&L)输出文件中每个单词出现的次数以及文件中总的单词数(可输出到文件中)。3.3.2统计单词数统计过程如下:(1)输入要统计单词的文本文件名,打开相应的文件;(2)初始化顺序表;(3)从文本文件中读取字符,直到文件结束。具体描述如下:while(读文件没有结束结束){过滤单词前的非字母字符;读取一个单词,以字符串形式存储在一个字符数组中;在线性表中查找该单词,若找到,单词的出现次数加1,否则返回其插入位置;上一步中,若没找到,则进行插入操作;处理下一个单词。}(4)关闭文件,输出统计结果。3.4【测试数据】参考给定的文件:tyut.txt,或学生自己找一些英文文本文件。4.构造可以使n个城市连接的最小生成树4.1【问题描述】给定一个地区的n个城市间的距离网,用Prim算法或Kruskal算法建立最小生成树,并计算得到的最小生成树的代价。4.2【基本要求】1、城市间的距离网采用邻接矩阵表示,邻接矩阵的存储结构定义采用课本中给出的定义,若两个城市之间不存在道路,则将相应边的权值设为自己定义的无穷大值。2、要求在屏幕上显示得到的最小生成树中包括了哪些城市间的道路,并显示得到的最小生成树的代价。3、表示城市间距离网的邻接矩阵(要求至少6个城市,10条边)。-5-4.3【测试数据】学生自主确定或参考图4-1。图4-1一个带权图(网络)5.送货5.1【问题描述】为了增加公司收入,F公司新开设了物流业务。由于F公司在业界的良好口碑,物流业务一开通即受到了消费者的欢迎,物流业务马上遍及了城市的每条街道。然而,F公司现在只安排了小明一个人负责所有街道的服务。任务虽然繁重,但是小明有足够的信心,他拿到了城市的地图,准备研究最好的方案。城市中有n个交叉路口,m条街道连接在这些交叉路口之间,每条街道的