西北工业大学C语言课程设计大作业
学 院电子信息学院班 级学 号2013301986姓 名张昌武
摘要
本次大作业包括一个标准型大作业,一个界面型大作业,两个数学型大作业和一个算法型大作业。
本次联系我选择的题目是:
A.数学型
a.歌星大奖赛
b.求最大数
B.标准型
a.打印指定年份的公历表和农历表
C.算法型
a.七种排序算法
D.界面型
a.OpenGL图形库程序
目录
1 摘要3
1.1 设计题目3
1.2 设计内容3
1.3 开发工具4
1.4 应用平台4
2 详细设计4
2.1 程序结构4
2.2 主要功能18
2.3 函数实现18
2.4 开发日志25
3 程序调试及运行31
3.1 程序运行结果31
3.2 程序使用说明36
3.3 程序开发总结36
4 附件(源程序)36
1 摘要
1.1 设计题目
A.数学型
a.歌星大奖赛
b.求最大数
B.标准型
a.打印指定年份的公历表和农历表
C.算法型
a.七种排序算法
D.界面型
a.OpenGL图形库程序
1.2 设计内容
A. 数学型
a.十个评委打分,分数在1~100之间,选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。
b.求555555的约数中的最大三位数
B.标准型
a.打印指定年份的公历表和农历表
C.算法型
a.七种排序算法:
快速排序
插入排序
选择排序
冒泡排序
堆排序
归并排序
基数排序
D.界面型
a. OpenGL图形库程序:
绘制黑白框
绘制螺旋曲线
绘制彩色立方体
1.3 开发工具
codeblock
1.4 应用平台
Windows 2000/XP/Vista 32位/win 7、8
2 详细设计
2.1 程序结构
A. 数学型
a.十个评委打分,分数在1~100之间,选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。
该题涉及到数组存储
b.求555555的约数中的最大三位数:
该题只用到循环和判断语句,从999向下搜索即可
B.标准型
a.打印指定年份的公历表和农历表
年历的设计与计算,应首先判断“某年某月某日是星期几”,即能被4且不能被100整除或能被400整除的数。这样,接下来的事情就简单了,输入年份,打印出相应的日历。
快速排序(QuickSort)划分的关键是要求出基准记录所在的位置pivotpos,编程时候的关键点快速排序:既然能把冒泡KO掉,马上就激起我们的兴趣,tnd快排咋这么快,一定要好好研究一下。首先上图: ? ?从图中我们可以看到:left指针,right指针,base参照数。其实思想是蛮简单的,就是通过第一遍的遍历(让left和right指针重合)来找到数组的切割点。第一步:首先我们从数组的left位置取出该数(20)作为基准(base)参照物。第二步:从数组的right位置向前找,一直找到比(base)小的数,? ? ? ? ? ? 如果找到,将此数赋给left位置(也就是将10赋给20),? ? ? ? ? ? 此时数组为:10,40,50,10,60,? ? ? ? ? ? left和right指针分别为前后的10。第三步:从数组的left位置向后找,一直找到比(base)大的数,? ? ? ? ? ? ?如果找到,将此数赋给right的位置(也就是40赋给10),? ? ? ? ? ? ?此时数组为:10,40,50,40,60,? ? ? ? ? ? ?left和right指针分别为前后的40。第四步:重复“第二,第三“步骤,直到left和right指针重合,? ? ? ? ? ? ?最后将(base)插入到40的位置,? ? ? ? ? ? ?此时数组值为: 10,20,50,40,60,至此完成一次排序。第五步:此时20已经潜入到数组的内部,20的左侧一组数都比20小,20的右侧作为一组数都比20大, 以20为切入点对左右两边数按照"第一,第二,第三,第四"步骤进行,最终快排大功告成。?快速排序具有最好的平均性能(average behavior),但最坏性能(worst case behavior)和插入排序
相同,也是O(n^2)。比如一个序列5,4,3,2,1,要排为1,2,3,4,5。按照快速排序方法,每次只会有一个数据进入正确顺序,不能把数据分成大小相当的两份,很明显,排序的过程就成了一