您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 天津科技大学C语言课程设计指导书
天津科技大学C语言课程设计指导书C语言课程设计实验指导书教研室:计算机科学与技术教研室计算机科学与信息工程学院一、课程设计的目的与要求1.教学目的本课程设计是学生学习完《C语言程序设计》课程后,进行的一次全面的综合训练,通过课程设计,更好地掌握使用C语言进行程序设计的方法,加深对C语言特点和使用C语言进行程序设计开发过程的理解,加强动手能力。其主要目的是:(1)进一步培养学生结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解;(2)针对C语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。(3)掌握C语言的编程技巧和上机调试程序的方法。(4)掌握程序设计的常用算法。2.教学要求(1)要求从所给题目中任选若干个,每个学生必须独立完成课程设计,不能互相抄袭。(2)设计完成后,对所完成的工作进行答辩。(3)要求写出一份详细的课程设计报告。(4)程序设计题目,须提交相应的程序,并需提供加注释的源程序,能正常运行。二、课程设计的基本要求设计步骤的规范不但可以培养学生科学的工作方法和作风,而且还能有效地减少错误,提高工作效率。因此必须严格执行良好的实验步骤规范(包括上级操作规范)。本课程设计的基本步骤与要求是:(1)问题分析及解决方案框架确定充分地分析和理解问题本身,弄清要求是要做什么。在确定解决方案框架过程中,考虑怎样使程序结构清晰、合理、简单和易于调试,并确定每个函数的简单功能,以及函数之间的调用关系。(2)详细设计和编码确定算法的主要流程,再此基础上进行代码设计(Coding),每个明确的功能模块程序一般不超过60行,否则要进一步划分。(3)上机前编写程序与检查上机前程序检查可有效提高调试效率,减少上机调试程序时的无谓错误。程序检查主要有两种途径:用一组测试数据手工执行程序;通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑。把程序中的明显错误事先排除。(4)上机调试程序(5)完成课程设计报告1)问题描述:题目要解决的问题是什么。2)设计设计算法:主要算法思想,用流程图表示。实现注释:各项功能的实现程度。调试报告:调试过程中遇到的主要问题,是如何解决的;对设计和编码的回顾讨论和分析;改进设想;经验和体会等。3)附录:源程序清单和结果。如果题目规定了测试数据,则结果要包含这些测试数据和运行输出,当然还可以含其他测试数据和运行输出。三、课程设计的内容1.各种排序算法比较程序说明:编写一程序,其中包含各种较为常见和典型的排序算法,通过设计程序比较各种排序算法的特点,其中包括排序过程中比较的次数和排序过程中交换的次数,通过这些比较可以看出各种排序算法之间的不同。本程序主要考察对排序算法的了解程度,其中还包括很多对函数和文件的操作。设计要求:(1)通过随机函数随机生成100000个数字,这些数字都是在[0,99]之间。(2)并通过设计的排序算法进行排序。这些排序算法中包括冒泡法、选择法、插入法,也可以适当选择其他算法,但必须是较为典型的排序算法。(3)排序完毕后应给出相应的比较信息,其中包括排序时间,比较次数和交换次数等信息。(4)在程序的主界面显示出最后的比较结论。(5)将排序前生成的100000个随机数存入一个文本文件中,该文件命名为BeforeSort.txt。(6)将排序好的数字分别按照不同的排序方式存入不同的文件中,冒泡法排序后的数字存入PopSort.txt中,选择法排序后的数字存入SelectSort.txt中,插入法排序后的数字存入InsertSort.txt中。(7)查看完比较结果后,即可点击回车退出系统程序参考界面:提示:(1)随机函数的用法,参考如下程序,本程序生成10个[0,99]的数字,并输出#include#include#includevoidmain(){inti,k;srand((unsigned)time(NULL));for(i=0;i{k=rand()%100;printf(k=%d\n,k);}}(2)时间函数的用法,参考如下程序,使用时间函数,需要引入头文件time.h,同时需要使用函数clock(),clock()函数返回近似调用程序运行时间量的值,该值除以CLOCKS_PER_SEC后转换为秒数.返回-1值表示无法取得时间。#include#includevoidmain(){clock_tstart;clock_tend;intt;longi;start=clock();//得到程序运行时的时间量的值for(i=0;iend=clock();t=(end-start)/CLOCKS_PER_SEC;//得到空循环运行的时间printf(%d,t);}(3)冒泡排序的基本思想是,将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个“气泡”序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即“轻”的元素在下面,就交换它们的位置。显然,处理一遍之后,“最轻”的元素就浮到了最高位置;处理二遍之后,“次轻”的元素就浮到了次高位置。在作第二遍处理时,由于最高位置上的元素已是“最轻”元素,所以不必检查。一般地,第i遍处理时,不必检查第i高位置以上的元素,因为经过前面i-1遍的处理,它们已正确地排好序。(4)选择排序的基本思想是,对待排序的记录序列进行n-1遍的处理,第i遍处理是将L[i..n]中最小者与L[i]交换位置。这样,经过i遍处理之后,前i个记录的位置已经是正确的了。(5)插入排序的基本思想是,经过i-1遍处理后,L[1..i-1]己排好序。第i遍处理仅将L[i]插入L[1..i-1]的适当位置,使得L[1..i]又是排好序的序列。要达到这个目的,我们可以用顺序比较的方法。首先比较L[i]和L[i-1],如果L[i-1]≤L[i],则L[1..i]已排好序,第i遍处理就结束了;否则交换L[i]与L[i-1]的位置,继续比较L[i-1]和L[i-2],直到找到某一个位置j(1≤j≤i-1),使得L[j]≤L[j+1]时为止。2.趣味小游戏要求:有一定游戏规则,图形显示,数据使用数组(链表)、结构体、链表等均可。键盘操作或鼠标均可。(1)八皇后问题和骑士游历问题【八皇后问题问题描述】在一个8×8的国际象棋棋盘上放置8个皇后,要求每个皇后两两之间不“冲突”,即没有一个皇后能“吃掉”任何其他一个皇后,简单的说就是没有任何两个皇后占据棋盘上的同一行或同一列或同一对角线,即在每一横列、竖列、斜列都只有一个皇后。【骑士游历问题问题描述】给出一块具有n2个格子的n×n棋盘(如图3-14所示),一位骑士从初始位置(x0,y0)开始,按照“马跳日”规则在棋盘上移动。问:能否在n21步内遍历棋盘上的所有位置,即每个格子刚好游历一次,如果能,请找出这样的游历方案来。(2)蓝黄棋游戏【游戏规则】游戏双方相互翻转对方棋子,以最后棋盘上棋子多者为胜。游戏使用一个8×8的方格棋盘,棋子下在空格中间,而不是像围棋一样下在交叉点上。开始时棋盘正中有两蓝、两黄四个棋子交叉放置,总是蓝方先下子。以所落棋子为中心,若横、竖、斜等八个方向内有一个自己的棋子时,则被夹在中间的对方棋子会全部被翻转成为己方棋子;而且只有在可以翻转对方棋子的地方才可以落子。当棋盘格子落满棋子时,游戏结束,或者游戏双方都无法继续落子翻转对方棋子时,游戏者可按Esc键来终止游戏,并输出当前的胜负信息。(3)贪吃蛇游戏【游戏规则】游戏开始时弹出初始菜单,游戏者按任意键进入游戏。游戏者用←↓→↑键来控制蛇在游戏场景内运动,每吃到一个食物,游戏者得10分,分数累加结果会在计分板上显示;与此同时蛇身长出一节。当贪吃蛇的头部撞击到游戏场景边框或者蛇的身体时游戏结束,并显示游戏者最后得分。(4)五子棋游戏【游戏规则】五子棋是深受大家喜爱的游戏之一,游戏采用俗称的“黑先白后”规则,即总是黑方先走对局的第一步。黑白双方依次落子,在棋盘上横向、竖向,以及斜向等八个方向形成相同颜色的连续五个棋子称为“五连”。对局双方首先形成五连者为胜,在双方均认为不能形成五连时为和棋。3.学生信息管理系统程序说明:本程序属于非数值计算型算法设计,学生需要设计出学生管理系统所需要的基本功能,并设计简单的界面(无需图形化)。本程序主要考察对自定义函数的熟悉程度,本程序中主要使用到的是数组(链表)的相关操作,包括数组(链表)的输入、输出、查找、插入、删除等操作,需要对数组(链表)有比较深入的掌握。设计要求:(1)通过提示菜单选择可以进行的操作。(2)将学生的信息存入文件中,并命名为StudentInfo.txt。(3)在本系统中可以进行管理系统包含的基本操作,其中包括a)查看所有学生的信息b)输入一个学生的学号,从当前学生中进行查找,如果找到则显示该学生的相关信息,如果没有找到则给出提示信息c)添加一个学生的基本信息,通过输入学号,首先查找是否存在该学号的学生,如果存在则提示重新输入,否则将该学生按照顺序插入到相应位置d)删除一个学生的基本信息,通过输入学号,首先查找是否存在该学号的学生,如果存在则将该学生删除,否则给出提示信息,提示该学生不存在(4)学生基本信息包括学号、姓名、性别和专业这些简单信息(5)学生信息文件中每一行存放一个学生的信息程序参考界面:提示:(1)当程序执行的时候所读取的学生信息文件必须存在,否则可能会出现错误(2)学生信息文件中存放学生信息的时候是按照行来存放的,即一行一个学生(3)程序执行的基本过程为:a)在所有操作之前,也就是加载操作菜单之前,先从文件中读取所有学生的信息,并存入一个数组(链表)中,此时数组(链表)可以定义为包含100个元素b)然后根据菜单所进行的所有操作都是对当前数组(链表)进行操作,此时也就是对数组(链表)的查找、定位、添加、修改、删除操作c)当退出系统的时候再将当前数组(链表)中的所有元素按照一个学生一行的方式写回学生信息文件中,此时注意选择覆盖方式,这样就可以将原来的所有数据覆盖,只保留最新的数据d)当按行读取学生信息文件的时候,有可能最后一行只有一个回车,这时候实际上所读取的数据为空字符串,需要对此作判断,如果是空字符串,则说明已经没有学生,就必须将当前读入的空字符串写入数组(链表)中4.职工信息管理系统程序说明:本程序属于非数值计算型算法设计,学生需要设计出职工管理系统所需要的基本功能,并设计简单的界面(无需图形化)。本程序主要考察对自定义函数的熟悉程度,本程序中主要使用到的是数组(链表)的相关操作,包括数组(链表)的输入、输出、查找、插入、删除等操作,需要对数组(链表)有比较深入的掌握。设计要求:(1)通过提示菜单选择可以进行的操作。(2)将职工的信息存入文件中,并命名为EmployeeInfo.txt。(3)在本系统中可以进行管理系统包含的基本操作,其中包括a)查看所有职工的信息b)输入一个职工的职工号,从当前职工中进行查找,如果找到则显示该职工的相关信息,如果没有找到则给出提示信息c)添加一个职工的基本信息,通过输入职工号,首先查找是否存在该职工号的职工,如果存在则提示重新输入,否则将该职工按照顺序插入到相应位置d)删除一个职工的基本信息,通过输入职工号,首先查找是否存在该职工号的职工,如果存在则将该职工删除,否则给出提示信息,提示该职工不存在(4)职工基本信息包括职工号、姓名、性别、生日、工作、薪水和电话这些简单信息(5)职工信息文件中每一行存放一个职工的信息程序参考界面:其他界面同学生管理系统相似,请参考学生管理系统界面提示:(1)当程序执行的时候所读取的职工信息文件必须存在,否则可能会出现错误(2)职工信息文件中存放职工信息的时候是按照行来存放的,即一行一个职工(3)程序执行的基本过程为:a)在所有操作之前,也就是加载操作菜单之前,先从文件中读取所有职工的信息,并存入一个数组(链表)中,此时数组(链表)可以定义为包含100个元素b)然后根据
本文标题:天津科技大学C语言课程设计指导书
链接地址:https://www.777doc.com/doc-7851149 .html