c++课程设计大作业指导与要求
C语言大作业要求

C语言程序设计上机实践大作业专业:班级:姓名:学号:课题名称:说明1、设计的目的1)复习巩固C语言的基础知识,进一步加深对C语言编程的理解和掌握;2)利用所学知识,理论和实际结合,利用资源,采用模块化的结构,使用模仿修改自主设计相结合的方法,锻炼学生综合分析解决实际问题的编程能力;3)培养学生在项目开发中团队合作精神、创新意识及实战能力。
2、设计的任务根据学生的实际情况,进行分组选题。
主要的课程设计题目如下(学生也可自主选题):1、图书管理系统 2、学生信息管理系统3、学生成绩管理系统4、学生通讯录管理系统5、设计简单的计算器3、设计要求与设计报告设计要求:1、任选上述题目之一,或自选题目。
2、模块化的程序设计3、锯齿形的程序书写格式。
4、必须通过编译连接运行设计报告:1、设计目的和任务2、总体设计:包括程序设计组成框图、流程图。
3、详细设计:包括模块功能说明:函数功能、入口及出口参数说明,函数调用关系描述等。
4、调试与测试:包括调试方法,测试结果分析与讨论,测试过程中遇到的主要问题及采取的解决措施。
5、源程序清单和执行结果:清单中应有足够的注释。
设计目的和任务(主要介绍设计的任务,为什么要设计,设计要达到什么样的目的。
)设计目的:(1)基本掌握面向过程程序设计的基本思路和方法;(2)达到熟练掌握C语言的基本知识和技能;(3)能够利用所学的基本知识和技能,解决简单的程序设计问题程序功能:(1)学生基本信息及成绩所选科目成绩的录入。
(2)基本信息的查询(分系、班级;分科目)与修改。
(3)对每系或每班各科成绩进行分析(即求单科平均成绩、及格率和优秀率);(4)对所开课程的成绩分析(求其平均成绩,最高分和最低分);(5)对学生考试成绩进行排名;目录一、总体设计··································································- 4 -二、详细设计··································································- 4 -三、调试与测试····························································- 4 -四、源程序清单和执行结果 ··········································- 4 -五、建议和体会······························································- 4 -六、参考文献··································································- 5 -一:总体设计设计流程图如下:二、详细设计1、输入初始的学生信息:其中包括学生的姓名、学号和性别以及学生的语文、数学、英语和计算机等相关信息;可用函数cin(stu *p1)来实现此操作。
c语言大作业课程设计

c语言大作业课程设计一、课程目标知识目标:1. 学生能掌握C语言的基本语法,包括变量定义、数据类型、运算符、控制结构等;2. 学生能理解函数的定义和调用,灵活运用函数实现模块化编程;3. 学生能掌握数组、指针、结构体等C语言高级特性,并应用于实际编程中;4. 学生了解文件操作的基本方法,能够读写文件,实现数据的持久化存储。
技能目标:1. 学生能够运用C语言编程解决实际问题,具备独立分析和解决问题的能力;2. 学生能够运用所学知识,设计并实现一个小型的C语言项目;3. 学生能够通过编程实践,提高逻辑思维能力和编程技巧;4. 学生能够熟练使用集成开发环境(IDE),调试程序并优化代码。
情感态度价值观目标:1. 学生培养对编程的兴趣,激发学习计算机科学的热情;2. 学生养成合作、探究的学习习惯,培养团队协作能力;3. 学生通过编程实践,体验解决问题的成就感,增强自信心;4. 学生遵循编程规范,注重代码质量,培养良好的编程习惯。
课程性质:本课程为C语言大作业课程设计,旨在巩固和拓展学生对C语言知识的掌握,提高学生的编程能力和实践能力。
学生特点:学生已经掌握了C语言的基本知识,具备一定的编程基础,但缺乏实际项目经验。
教学要求:注重实践,引导学生通过动手编程解决问题,培养学生独立思考和解决问题的能力。
将课程目标分解为具体的学习成果,以便于后续教学设计和评估。
二、教学内容1. 复习C语言基础知识,包括变量、数据类型、运算符、控制结构等,参考教材第1-4章;2. 函数的定义、调用、参数传递及作用域,引用教材第5章;3. 数组、字符串、指针的概念及应用,深入讲解教材第6-7章;4. 结构体、联合体、枚举类型的使用,分析教材第8章;5. 文件操作,包括文件的打开、读写、关闭,依据教材第9章;6. 面向过程的编程思想,以实际项目为例,引导学生运用所学知识设计程序;7. 编程规范和调试技巧,培养学生的良好编程习惯;8. 小型项目实践,分组进行项目设计和开发,涵盖整个C语言知识体系。
C语言作业要求及设计说明书(初学者)

程序设计说明书姓名:简正聪班级:轮机136学号:2013132106262015—12-27AHA-C语言程序设计大作业要求一、作业目的1、掌握用C语言进行程序设计的基本方法。
2、熟练掌握window控制台应用程序的编写。
3、初步完成一个应用程序的设计、编码、调试,了解程序设计过程,锻炼实际应用能力.二、作业内容猜数字游戏:计算机随机生成没有重复的n个数,用户从键盘输入猜测的数。
每猜一次,电脑给出提示信息。
如果用户输入的数跟计算机生成的数,数值和位置都完全相等,则胜出。
基本功能要求:1.随机生成没有重复的4个数。
(每个数字在0-9范围内).2.用户从键盘输入4个不重复的数,程序能对用户输入的数与随机生成的数进行匹配,并给出提示信息:“有x个数数值和位置都相同!有y个数数值相同,但位置不同。
”3.控制用户的尝试次数为10次。
4.计算、输出并保存用户的得分,计分规则:总分是100分,每失败一次扣10分。
5.有操作菜单,能根据不同选择运行不同功能:1:开始游戏!2:查看上次成绩!3:输出帮助信息!0:退出程序!扩展功能要求:1.对用户输入的数字进行检查,如果用户输入重复的数,给出提示,要求重新输入。
2.能对游戏进行设置:在操作菜单中增加相应的选项:“4:系统设置”.(1)修改要猜的数字的个数n,根据修改后的n值,计算机可随机生成n个数,用户进行n个数的猜测游戏。
(2)修改可以尝试的次数。
3.若游戏胜出且成绩在前五名,可输入并记录对应的用户姓名,并添加到积分榜中.操作菜单中相应选项改为“2:积分榜!",用于把积分榜中保存的前五名成绩及用户姓名显示出来。
4.能对积分榜的成绩进行排序和输出。
提示:(1)生成一个0~9的随机数,使用rand函数:#include<stdio.h〉#include<stdlib.h〉//使用rand函数必须使用此头文件#include<time。
h〉int main(){ int a;srand(time(0));//生成一个种子。
《C程序设计》课程设计指导书

《C程序设计》课程设计指导书一、课程设计目的《C 程序设计》课程设计是对学生在学习 C 语言程序设计课程之后的一次全面综合训练,旨在加深学生对 C 语言基本语法、数据类型、控制结构、数组、指针、结构体、文件操作等知识的理解和掌握,培养学生运用 C 语言解决实际问题的能力,提高学生的程序设计和调试能力,为今后学习其他编程语言和从事软件开发工作打下坚实的基础。
二、课程设计要求1、学生应独立完成课程设计任务,不得抄袭他人成果。
2、课程设计题目应具有一定的实用性和综合性,能够涵盖 C 语言的主要知识点。
3、学生应按照要求编写程序代码,并进行调试和测试,确保程序能够正确运行。
4、学生应撰写课程设计报告,详细描述程序的设计思路、算法实现、调试过程和测试结果。
三、课程设计题目以下是一些可供选择的课程设计题目,学生也可以根据自己的兴趣和实际需求自行确定题目:1、学生成绩管理系统设计一个学生成绩管理系统,能够实现学生成绩的录入、查询、修改、删除、统计等功能。
2、图书管理系统设计一个图书管理系统,能够实现图书的入库、借阅、归还、查询、统计等功能。
3、职工信息管理系统设计一个职工信息管理系统,能够实现职工信息的录入、查询、修改、删除、统计等功能。
4、简易计算器设计一个简易计算器,能够实现加、减、乘、除、求余数等基本运算。
5、猜数字游戏设计一个猜数字游戏,系统随机生成一个 1 到 100 之间的整数,玩家通过输入猜测的数字来猜,系统给出提示,直到猜对为止。
6、贪吃蛇游戏设计一个贪吃蛇游戏,实现蛇的移动、吃食物、变长、撞墙或自撞死亡等功能。
四、课程设计步骤1、问题分析仔细分析题目要求,确定问题的输入、输出和处理流程,明确需要解决的关键问题和技术难点。
2、算法设计根据问题分析的结果,设计合适的算法来解决问题。
算法应具有正确性、可读性和高效性。
3、代码实现使用 C 语言编写程序代码,实现算法的功能。
在编写代码时,应注意代码的规范和风格,添加必要的注释。
c语言课程设计报告要求

c语言课程设计报告要求一、课程目标知识目标:1. 理解C语言课程设计的基本要求,掌握C语言编程的基本规范。
2. 学会运用C语言编写程序,实现简单的算法和数据结构。
3. 掌握C语言中的函数定义、调用和模块化编程思想。
技能目标:1. 能够运用所学知识独立完成C语言课程设计任务,具备分析和解决问题的能力。
2. 学会使用调试工具,对程序进行调试和优化,提高代码质量。
3. 培养良好的编程习惯,提高编程效率。
情感态度价值观目标:1. 培养学生对计算机编程的兴趣,激发学习热情,增强自信心。
2. 培养学生的团队协作精神,提高沟通与表达能力。
3. 培养学生严谨、认真、负责的学习态度,树立正确的价值观。
课程性质:本课程为C语言编程实践课,注重培养学生的编程能力和实际操作能力。
学生特点:学生具备一定的C语言基础,对编程感兴趣,但独立完成课程设计的能力有待提高。
教学要求:结合学生特点,注重理论与实践相结合,以任务驱动教学,引导学生主动探究,培养学生的编程能力和解决问题的能力。
在教学过程中,关注学生的学习进度,及时给予指导和反馈,确保课程目标的实现。
将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容本课程教学内容紧密结合课程目标,选取以下重点内容进行讲解和实践:1. C语言基本语法:变量定义、数据类型、运算符、表达式、控制语句(如if、for、while等)。
2. 函数:函数定义、调用、参数传递、返回值、递归。
3. 数组与字符串:一维数组、二维数组、字符串操作。
4. 指针:指针定义、指针与数组、指针与函数、指针与动态内存分配。
5. 结构体与联合:结构体定义、结构体数组、结构体指针、联合体。
6. 文件操作:文件打开、关闭、读写、定位。
教学大纲安排如下:第一周:C语言基本语法复习,讲解课程设计要求。
第二周:函数定义与调用,实践编写简单函数。
第三周:数组与字符串操作,完成相关编程任务。
第四周:指针概念及操作,实践指针在程序中的应用。
c课程设计要求

c 课程设计要求一、教学目标本章节的教学目标包括以下三个方面:1.知识目标:学生能够掌握课本中涉及的学科基本概念、原理和方法,理解相关知识点,并能够运用到实际问题中。
2.技能目标:学生能够运用所学知识,具备一定的解决问题的能力,如分析问题、提出解决方案等。
3.情感态度价值观目标:学生在学习过程中,培养对学科的兴趣和热情,形成积极的学习态度,培养团队合作精神。
二、教学内容根据课程目标,本章节的教学内容主要包括以下几个部分:1.教材中的基本概念、原理和方法的讲解,通过举例和案例分析,使学生能够理解和掌握。
2.针对相关知识点,设计一定的练习题和案例分析,帮助学生巩固所学知识,并能够应用到实际问题中。
3.结合教材内容,进行学科知识的拓展,引导学生思考和探讨,提高学生的学习兴趣和主动性。
三、教学方法为了实现教学目标,本章节将采用以下几种教学方法:1.讲授法:教师对教材中的基本概念、原理和方法进行系统的讲解,帮助学生理解和掌握。
2.讨论法:教师引导学生进行小组讨论,共同探讨问题,培养学生的思考和表达能力。
3.案例分析法:教师通过举例和分析实际案例,使学生能够将所学知识应用到实际问题中。
4.实验法:教师学生进行实验,让学生亲自动手操作,培养学生的实验技能和观察能力。
四、教学资源为了支持教学内容和教学方法的实施,本章节将准备以下教学资源:1.教材:为学生提供学习的基本资料,指导学生进行学习。
2.参考书:提供更多的学习资料,帮助学生深入理解教材内容。
3.多媒体资料:通过视频、图片等形式,丰富学生的学习体验,提高学习兴趣。
4.实验设备:为学生提供实验所需的仪器和设备,培养学生的实验技能。
五、教学评估本章节的教学评估主要包括以下几个方面:1.平时表现:评估学生的课堂参与度、提问回答、小组讨论等,以了解学生的学习态度和积极性。
2.作业:评估学生完成作业的情况,包括作业的质量、准时性和创新性等。
3.考试:设计考试题目,评估学生对教材知识的掌握程度和应用能力。
C语言程序设计-大作业的三点要求

大作业的三点要求1.基本技能训练(习题+3x, 代码量不少于150行)基本编程任务:教材第八章习题(p288: 8.6~8.8)个性化编程:3x(定制内容不少于3项)⑴设计基本要求(必选):①数据描述:用typedef定义结构体类型,定义变量、函数传参等;②人机交互设计:简单菜单-调用各函数-输入/输出;③读写数据文件:读写/修改的数据文件操作。
【提示】友好性和健壮性。
⑵定制内容(自选功能至少3项或更多, 且不限于此范围)查找-添加-删除-排序;平均分数-优秀-不及格;不及格率-通过率-优秀率;成绩方差等等。
2. 上机调试训练(实训)①分块(函数)调试;②整体程序调试;③运行效果测试。
3. 总结与提高的写作训练(不超过3页)①选题意义②方案(组成框图)及数据描述(定义);③功能框图(或流程图), 主要函数原型及功能;④个人贡献(针对定制部分)、体会及运行效果截图;⑤程序操作的相关说明。
【注】报告封皮规范, 装订线, 正文及图表格式, 参考教材第11章。
3. 提交作业(1) 大作业组织形式形式一:电子文档包括:(文件夹名格式“班级+姓名”,压缩为单文件)①源程序(源文件名不超过8个英文字符,如:star.c)②程序设计总结(word文档)形式二:纸质文档——程序设计总结打印稿(3页以内, 有运行结果截屏)。
【注】纸质稿页眉里·右对齐·注明::班级、姓名、学号。
(2) 程序无法运行或运行无故退出, 且无操作说明,则本大作业不得分, 查出代码相互雷同者均0分。
电子文档网上提交时间:5.25(第十三周星期日)8:00~23:00。
总结报告纸质稿提交时间:5.26(第十四周星期一),15:00~17:00,地点:创新园大厦A711【提醒】总结报告统一以班为单位,派代表送交。
c大实验课程设计

c 大实验课程设计一、课程目标知识目标:1. 学生能理解并掌握C大调的相关理论知识,包括音阶结构、和弦构成及其应用。
2. 学生能通过实际操作,识别并演奏C大调的常见旋律和和弦进行。
3. 学生了解C大调在音乐创作与演奏中的重要性,理解不同调性间的相互关系。
技能目标:1. 学生能够独立演奏C大调的简单曲目,具备基本的视奏能力。
2. 学生通过实验课程,培养音乐创作能力,能运用C大调进行小段音乐的创作。
3. 学生能够在小组合作中,进行有效的沟通与协作,共同完成音乐作品的演绎。
情感态度价值观目标:1. 培养学生对音乐的兴趣和热爱,激发他们对音乐探索的热情。
2. 通过音乐实践活动,增强学生的自信心和自我表达能力。
3. 学生在音乐学习中,培养团队协作精神,尊重他人,理解多样音乐文化。
课程性质:本课程为音乐实验课,注重理论与实践相结合,强调学生的主动参与和亲身体验。
学生特点:考虑到学生所在年级,已具有一定的音乐基础和认知能力,对于新鲜的音乐表现形式具有强烈的好奇心。
教学要求:教师需采用生动活泼的教学方式,鼓励学生主动探索和创造,关注个体差异,提供个性化的指导与帮助。
通过课程目标的实现,分解为具体可操作的学习成果,以便于教学设计和后续的评估反馈。
二、教学内容1. C大调音阶结构与和弦理论:- 音阶构成:自然大调、音级名称与音程关系- 和弦构成:大三和弦、小三和弦及其转位- 教材章节:第三章“调式与和弦”第一节“大调与小调”2. C大调视奏与演奏:- 简单旋律的视奏练习- 经典C大调曲目的演奏实践- 教材章节:第五章“视奏与演奏”第一节“调性练习”3. C大调音乐创作:- 运用C大调进行旋律创作- 和弦进行与小段音乐编配- 教材章节:第八章“音乐创作”第一节“调性创作”4. 小组合作与音乐演绎:- 小组分工与合作- 音乐作品的排练与演绎- 教材章节:第十章“团队协作”第一节“音乐团队协作”教学内容安排与进度:第一课时:C大调音阶结构与和弦理论第二课时:C大调视奏与演奏第三课时:C大调音乐创作第四课时:小组合作与音乐演绎教学内容确保科学性和系统性,结合教材章节,让学生在实践中掌握C大调相关知识,培养音乐技能和情感态度。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++大作业题目一、约瑟夫环问题1. 问题描述设有编号为1 ,2 ,……,n 的n ( n >0 ) 个人围成一个圈,每个人持有一个密码m ,从第1 个人开始报数,报到m 时停止报数,报m 的人出圈,再从他的下一个人起重新报数,报到m 时停止报数,报m 的出圈,……,如此下去,直到所有人全部出圈为止。
当任意给定n 和m 后,设计算法求n 个人出圈的次序。
2. 基本要求⑴建立模型,确定存储结构;⑵对任意n 个人,密码为m ,实现约瑟夫环问题;⑶出圈的顺序可以依次输出,也可以用一个数组存储。
3. 设计思想首先,设计实现约瑟夫环问题的存储结构。
由于约瑟夫环问题本身具有循环性质,考虑采用循环链表,为了统一对表中任意结点的操作,循环链表不带头结点。
其次,建立一个不带头结点的循环链表并由头指针first 指示。
最后,设计约瑟夫环问题的算法。
下面给出伪代码描述,操作示意图如图2-1 所示。
二、一元多项式相加1. 问题描述已知A ( x ) = a 0 + a 1 x + a 2 x 2 + …… + a n x n 和B ( x ) = b 0 + b 1 x + b 2 x 2 + …… + b m x m ,并且在A ( x ) 和B ( x ) 中指数相差很多,求A ( x ) = A ( x ) + B ( x ) 。
2. 基本要求⑴设计存储结构表示一元多项式;⑵设计算法实现一元多项式相加;⑶分析算法的时间复杂度和空间复杂度。
3. 设计思想一元多项式求和实质上是合并同类项的过程,其运算规则为:⑴若两项的指数相等,则系数相加;⑵若两项的指数不等,则将两项加在结果中。
一元多项式A ( x ) =a 0 +a 1 x+a 2 x 2 + …… +a n x n 由n +1 个系数唯一确定,因此,可以用一个线性表( a 0 ,a 1 ,a 2 ,……,a n ) 来表示,每一项的指数i 隐含在其系数a i 的序号里。
但是,当多项式的指数很高且变化很大时,在表示多项式的线性表中就会存在很多零元素。
一个较好的存储方法是只存非零元素,但是需要在存储非零元素系数的同时存储相应的指数。
这样,一个一元多项式的每一个非零项可由系数和指数唯一表示。
由于两个一元多项式相加后,会改变多项式的系数和指数,因此采用顺序表不合适。
采用单链表存储,则每一个非零项对应单链表中的一个结点,且单链表应按指数递增有序排列。
结点结构如图 2 - 2 所示。
其中,coef :系数域,存放非零项的系数; exp :指数域,存放非零项的指数;next :指针域,存放指向下一结点的指针。
将两个一元多项式用两个单链表存储后,如何实现二者相加呢?设两个工作指针p 和q ,分别指向两个单链表的开始结点。
通过对结点p 的指数域和结点q 的指数域进行比较进行同类项合并,则出现下列三种情况:⑴若p -> exp <q->exp ,则结点p 应为结果中的一个结点;⑵若 p -> exp>q -> exp ,则结点q 应为结果中的一个结点,将q 插入到第一个链表中结点p 之前;⑶若p -> exp=q -> exp ,则结点p 与结点q 为同类项,将 q 的系数加到p 的系数上。
若相加结果不为0 ,则结点p 应为结果中的一个结点,同时删除结点q ;若相加结果为0 ,则表明结果中无此项,删除结点p 和结点q ;算法用伪代码描述如下:三、信号放大器1. 问题描述天然气经过管道网络从其生产基地输送到消耗地,在传输过程中,其性能的某一个或几个方面可能会有所衰减(例如气压)。
为了保证信号衰减不超过容忍值,应在网络中的合适位置放置放大器以增加信号(例如电压)使其与源端相同。
设计算法确定把信号放大器放在何处,能使所用的放大器数目最少并且保证信号衰减不超过给定的容忍值。
2. 基本要求⑴建立模型,设计数据结构;⑵设计算法完成放大器的放置;⑶分析算法的时间复杂度。
3. 设计思想为了简化问题,假设分布网络是二叉树结构,源端是树的根结点,信号从一个结点流向其孩子结点,树中的每一结点(除了根)表示一个可以用来放置放大器的位置。
图5-3是一个网络示意图,边上标出的是从父结点到子结点的信号衰减量。
对于网络中任一结点i,设d(i)表示结点i与其父结点间的衰减量,D(i)为从结点i到结点i的子树中任一叶子结点的衰减量的最大值,并有如下递推公式:在此公式中,要计算某结点的D值,必须先计算其孩子结点的D值,因而必须后序遍历二叉树,当访问一个结点时,计算其D值。
例如,D(B)=max{D(D)+d(D),D(E)}=4,若容忍值为3,则在B点或其祖先的任意一点放置放大器,并不能减少B与其后代的衰减量,必须在D点放置一个放大器或在其孩子结点放置一个或多个放大器。
若在结点D 处放置一个放大器,则D(B)=2。
根据上述分析,设计如下存储结构:struct element{int D; // 该结点的衰减量int d; // 父结点的衰减量bool boost; //当且仅当本处设置放大器,则boost为true};struct BiNode{element data;BiNode *lchild,*rchild;};计算并放置放大器的伪代码为:四、医院选址问题1. 问题描述n个村庄之间的交通图可以用有向网图来表示,图中边<v i, v j>上的权值表示从村庄i到村庄j的道路长度。
现在要从这n个村庄中选择一个村庄新建一所医院,问这所医院应建在哪个村庄,才能使所有的村庄离医院都比较近?2. 基本要求⑴建立模型,设计存储结构;⑵设计算法完成问题求解;⑶分析算法的时间复杂度。
3. 设计思想医院选址问题实际是求有向图中心点的问题。
首先定义顶点的偏心度。
设图G=(V,E),对任一顶点k,称E(k)=max{d(i, k)}(i∈V)为顶点k的偏心度。
显然,偏心度最小的顶点即为图G的中心点。
如图6-2(a)所示是一个带权有向图,其各顶点的偏心度如图(b)所示。
医院选址问题的算法用伪代码描述如下:五、简单个人电话号码查询系统1. 问题描述人们在日常生活中经常需要查找某个人或某个单位的电话号码,本实验将实现一个简单的个人电话号码查询系统,根据用户输入的信息(例如姓名等)进行快速查询。
2. 基本要求⑴在外存上,用文件保存电话号码信息;⑵在内存中,设计数据结构存储电话号码信息;⑶提供查询功能:根据姓名实现快速查询;⑷提供其他维护功能:例如插入、删除、修改等。
3. 设计思想由于需要管理的电话号码信息较多,而且要在程序运行结束后仍然保存电话号码信息,所以电话号码信息采用文件的形式存放到外存中。
在系统运行时,需要将电话号码信息从文件调入内存来进行查找等操作,为了接收文件中的内容,要有一个数据结构与之对应,可以设计如下结构类型的数组来接收数据:const int max=10;struct TeleNumber{string name; //姓名string phoneNumber; //固定电话号码string mobileNumber; //移动电话号码string email; //电子邮箱} Tele[max];为了实现对电话号码的快速查询,可以将上述结构数组排序,以便应用折半查找,但是,在数组中实现插入和删除操作的代价较高。
如果记录需频繁进行插入或删除操作,可以考虑采用二叉排序树组织电话号码信息,则查找和维护都能获得较高的时间性能。
更复杂地,需要考虑该二叉排序树是否平衡,如何使之达到平衡。
六、机器调度问题1. 问题描述机器调度是指有m台机器需要处理n个作业,设作业i的处理时间为t i,则对n个作业进行机器分配,使得:⑴一台机器在同一时间内只能处理一个作业;⑵一个作业不能同时在两台机器上处理;⑶作业i一旦运行,则需要t i个连续时间单位。
设计算法进行合理调度,使得在m台机器上处理n个作业所需要的处理时间最短。
2. 基本要求⑴建立问题模型,设计数据结构;⑵设计调度算法,为每个作业分配一台可用机器;⑶给出分配方案。
3. 设计思想假设有七个作业,所需时间分别为{2, 14, 4, 16, 6, 5, 3},有三台机器,编号分别为m1、m2和m3。
这七个作业在三台机器上进行调度的情形如图8-2所示,阴影区代表作业的运行区间。
作业4在0到16时间被调度到机器1上运行,在这16个时间单位中,机器1完成了对作业4的处理;作业2在0到14时间被调度到机器2上处理,之后机器2在14到8时间处理作业7;在机器3上,作业5在0~6时间完成,作业6在6~11时间完成,作业3在11~15时间完成,作业1在15~8时间完成。
注意到作业i只能在一台机器上从s i时刻到s i+t i时间完成且任何机器在同一时刻仅能处理一个作业,因此最短调度长度为8。
在上述处理中,采用了最长时间优先(LPT)的简单调度策略。
在LPT算法中,作业按其所需时间的递减顺序排列,在分配一个作业时,将其分配给最先变为空闲的机器。
下面设计完成LPT算法的存储结构。
·为每个机器设计数据类型:struct MachineNode{int ID; //机器号int avail; //机器可用时刻};·为每个作业设计数据类型:struct JobNode{int ID; //作业号int time; //处理时间};LPT算法用伪代码描述如下:七、集合的交、并和差运算的实现1. 问题描述用有序单链表表示集合,实现集合的交、并和差运算。
2. 基本要求⑴对集合中的元素,用有序单链表进行存储;⑵实现交、并、差运算时,不另外申请存储空间;⑶充分利用单链表的有序性,算法有较好的时间性能。
3. 设计思想首先,建立两个带头结点的有序单链表表示集合 A 和B 。
单链表的结点结构和建立算法请参见2.1.2 ,需要注意的是:利用头插法建立有序单链表,实参数组应该是降序排列。
其次,根据集合的运算规则,利用单链表的有序性,设计交、并和差运算。
⑴根据集合的运算规则,集合中包含所有既属于集合A 又属于集合B 的元素。
因此,需查找单链表 A 和 B 中的相同元素并保留在单链表 A 中。
算法如下:⑵根据集合的运算规则,集合中包含所有或属于集合 A 或属于集合 B 的元素。
因此,对单链表 B 中的每个元素x ,在单链表 A 中进行查找,若存在和x 不相同的元素,则将该结点插入到单链表 A 中。
算法请参照求集合的交集自行设计。
⑶根据集合的运算规则,集合 A - B 中包含所有属于集合 A 而不属于集合 B 的元素。
因此,对单链表 B 中的每个元素x ,在单链表 A 中进行查找,若存在和x 相同的结点,则将该结点从单链表 A 中删除。