《计算机程序设计基础(c语言)》(学时)课程设计任务书
《计算机程序设计基础(C语言)》课程设计任务书
院长(主任)教研室主任执笔人许建仁杨忠宝李波
一、实习目的和要求
通过课程设计的实践环节的教学,可以加深学生对课堂所学基础知识的掌握与理解,提高学生对所学内容的综合运用能力;同时也可以通过查询相关资料,培养学生自学能力、接受新知识的能力,提高学习兴趣;增强学生程序设计能力,掌握编程技巧,并可培养学生实际上机调试程序的能力。“理论与实践”相结合,使学生得到很好的锻炼,为以后学习、工作打下坚实的基础。每个学生需要独立完成教师安排的设计题目或由学生自拟实际的设计题目,但是自拟题目需要经过指导教师批准方可生效。
二、实习内容
(一)数据结构类题目
1、用梯形法或辛普森法求解定积分的值
题目详述:
求一个函数f(x)在[ab]上的定积分,其几何意义是求f(x)曲线和直线x=ay=0,x=b所围成的曲边梯形面积。为了近似求出此面积,可将[ab]区间分成若个小区间,每个区间的宽度为(b-a)/nn为区间个数。近似求出每个小的曲边梯形面积,然后将n个小面积加起来,就近似的到总的面积既定积分的近似值当n大(即区间分的小),近似程度高。数值积分常用的算法有:梯形法用小梯形代替小曲边梯形。辛普(Sinpson)法在小区间范围内,用一条抛物线代替该区间的f(x)将(ab)区间分成2n个小区间是根据一个传说形成的一个问题:有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须上述两条规则。问:如何移?最少要移动多少次?3个步骤:第一,把上的-1个盘通过移动到第二,把上的最下面的盘移到第三,因为-1个盘全在上了,所以把当做重复以上步骤。n个小孩围成一圈,从第一个人开始报数,报到k的人退出圈子,下面的人继续从1开始报数……直到圈里空无一人为止。
算法分析:
这是一个典型的单循环链表问题。先建立链表,接着从第一个结点开始计数,将第k个结点删除,然后再从下一个节点开始计数,第k个结点删除……,直到链表为空为止。
7、一元多项式求和
题目详解:
把任意给定的两个一元多项式P(x),Q(x)输入计算机,计算它们的和并输出计算结果。
算法分析:
用单链表存储多项式的结构,每个结点存储一项的系数和指数,所以链表的结点结构应该含有三个成员:系数、指数、和后继的指针。先比较,再求和。
8、建立单向链表,实现增、删、改、查等操作
9、建立双向链表,实现增、删、改、查等操作
10、哈夫曼编码问题
题目详解:
哈夫曼编码是根据字符出现的频率对数据进行编码解码,以便于对文件进行压缩的一种方法,目前大部分有效地压缩算法(如MP3编码方法)都是基于哈夫曼编码的。
算法分析:
首先,定义哈夫曼树叶子结点的结构以及存放哈夫曼编码的结构体,然后做叶子结点初始化,接着构造哈夫曼树。构造哈夫曼树方法如图3.9:
图3.9 哈夫曼树
(二)绘图类题目(注意:绘图类程序可安装eaxyX插件,无须使用Turbo C环境)
1、曼德布洛特集曼德布洛特集合是一种在复平面上组成分形的点的集合,以数学家本华·曼德博的名字命名使用复二次多项式来进行迭代。谢尔宾斯基三角形(英语:Sierpinski triangle)是一种分形,由波兰数学家谢尔宾斯基在1915年提出。它是自相似集的例子。它的豪斯多夫维是log(3)/log(2) ≈ 1.585希尔伯特曲线是一种能填充满一个平面正方形的分形曲线(空间填充曲线)由大卫·希尔伯特在1891年提出。由于它能填满平面,它的豪斯多夫维是2。取它填充的正方形的边长为1,第n步的希尔伯特曲线的长度是2n-2-n。
图3.12 希尔伯特曲线
4、运行时钟的动画
题目详解:
实现一个时钟的绘制。在图形输出窗口中输出一个简易的时钟。如图3.13:
图3.13 简易时钟图例
5、模拟弹球的动画
题目详解:
小球从空中落下,弹起,再落下,弹起幅度越来越小,直至停下。
6、运动小车的动画
题目详解:
模拟小车,从左至右或从右至左运动,可以加速、匀速、减速。
7、火箭发射的动画
题目详解:
模拟火箭从下至上飞行,到空中停止。
8、卫星环绕地球的动画
题目详解:
地球的轨道椭圆,卫星围绕地球匀速运动。如图3.14:
图3.14 卫星环绕地球图例
9、动画地呈现满天星
题目详解:
绘制一个充满星星的夜空。星空绘制程序中,可使用结构体数组实现对星星数据的保存。星星可用画点函数画出来白色的点,并使用随机函数随机产生星星,对结构体中保存的星星进行移动。
10、动画地填充图形
题目详解:
绘制一个形状(圆,椭圆,矩形都可以),用线条动态地填充其内部,可以从中心填充,也可从一边填充。