《计算机高级语言程序设计》课程设计报告.docx
- 文档编号:9297200
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:12
- 大小:293.75KB
《计算机高级语言程序设计》课程设计报告.docx
《《计算机高级语言程序设计》课程设计报告.docx》由会员分享,可在线阅读,更多相关《《计算机高级语言程序设计》课程设计报告.docx(12页珍藏版)》请在冰豆网上搜索。
《计算机高级语言程序设计》课程设计报告
《计算机高级语言程序设计》
课程设计报告
学号:
20151001096
班级序号:
113151-04
姓名:
霍泓宇
指导老师:
刘修国陈启浩
成绩:
中国地质大学(武汉)信息工程学院遥感系
2015年12月
实习题目一
【题目及其需求】
(1)简易万年历主要实现以下功能
1.显示任意一年的日历
2.显示任意一个月的日历
3.显示任意一日是星期几
4.退出
5.用户可以通过主菜单选择不同的选项
【实现方法及其过程】
(1)思想:
主要运用了以下知识点:
1、输入/输出人机界面交互。
2、逻辑表达式、条件控制语句、闰年/平年判断、全年天数计算等。
3、函数的调用、数组的使用、文件的操作。
4、掌握输出格式控制方法,实现对打印结果进行输出控制。
5.判断是否为闰年的语句:
(year%4==0&&year%100!
=0)||(year%400==0)
(2)实现过程:
功能关系图:
1.定义了具有31个元素的数组everyMonth。
2.定义PC类。
3.定义操作选择的函数,定义判断输入是否合法的函数,定义三个对应于三个模式输出日历的函数,定义判断是否是闰年的函数,定义输出到界面的函数,定义计算此日期前天数的函数,定义打印到文档的函数。
这些函数均为类pc的公有成员函数。
4.调用并实现这些成员函数。
5.在主函数中定义类PC的对象pc,调用成员函数pc.Input()。
【遇到的问题及其解决后的感想】
我认为这道题比较难得地方是模式的选择以及将日历输出到界面上,而通过书上的例题我们得知了判断是否是闰年的语句,判断是否是闰年也是这个程序的关键之处。
一开始我的日历日期和星期对应不上后来在网上找了源代码才解决。
通过这次实习我深深体会到了实践的重要性,由于我平时没有在课后即使看书,知识总是学了又忘,以后一定要及时看书,多上机实践,补上之前的漏洞。
实习题目二
【题目及其需求】
利用point类进行点的线性拟合,直线模型为y(x)=ax+b。
这个问题称为线性回归。
设y随自变量x变化,给定n组观测数据(xi,yi),用直线来拟合这些点,其中a,b是直线的斜率和截距,称为回归系数。
为确定回归系数,通常采用最小二乘法。
【实现方法及其过程】
(1)思想:
监督学习中,如果预测的变量是离散的,我们称其为分类(如决策树,支持向量机等),如果预测的变量是连续的,我们称其为回归。
回归分析中,如果只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。
如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。
对于二维空间线性是一条直线;对于三维空间线性是一个平面,对于多维空间线性是一个超平面...这里,谈一谈最简单的一元线性回归模型。
1.一元线性回归模型
模型如下:
总体回归函数中Y与X的关系可是线性的,也可是非线性的。
对线性回归模型的“线性”有两种解释:
(1)就变量而言是线性的,Y的条件均值是X的线性函数
(2)就参数而言是线性的,Y的条件均值是参数
的线性函数
线性回归模型主要指就参数而言是“线性”,因为只要对参数而言是线性的,都可以用类似的方法估计其参数。
2.参数估计——最小二乘法
对于一元线性回归模型,假设从总体中获取了n组观察值(X1,Y1),(X2,Y2),…,(Xn,Yn)。
对于平面中的这n个点,可以使用无数条曲线来拟合。
要求样本回归函数尽可能好地拟合这组值。
综合起来看,这条直线处于样本数据的中心位置最合理。
选择最佳拟合曲线的标准可以确定为:
使总的拟合误差(即总残差)达到最小。
有以下三个标准可以选择:
(1)用“残差和最小”确定直线位置是一个途径。
但很快发现计算“残差和”存在相互抵消的问题。
(2)用“残差绝对值和最小”确定直线位置也是一个途径。
但绝对值的计算比较麻烦。
(3)最小二乘法的原则是以“残差平方和最小”确定直线位置。
用最小二乘法除了计算比较方便外,得到的估计量还具有优良特性。
这种方法对异常值非常敏感。
最常用的是普通最小二乘法(Ordinary LeastSquare,OLS):
所选择的回归模型应该使所有观察值的残差平方和达到最小。
(Q为残差平方和)
样本回归模型:
残差平方和:
则通过Q最小确定这条直线,即确定
,以
为变量,把它们看作是Q的函数,就变成了一个求极值的问题,可以通过求导数得到。
求Q对两个待估参数的偏导数:
解得:
(2)实现过程:
首先声明一个Point类类型的数组,用来存放需要拟合的点。
在数组声明的同时,对数组进行了初始化,这种初始化时逐个调用Point类的构造函数来完成的。
接着调用Point类的友元函数lineFit进行线性回归运算,最后输出回归系数a,b和线性系数r。
【遇到的问题及其解决后的感想】
我一开始调用对象的成员函数时没有给出形参,在定义nPoint时忘了加int,还有一些语法错误例如少了分号和括号。
整个程序的设计思路我参考了书上的例题,但是没有将程序分为一个头文件和一个cpp。
这次实习确实暴露出了我的很多问题,也是一次第六章及以前知识的综合运用。
我对于数组和指针的知识确实需要认真复习,达到理解和运用的程度。
实习题目三
【题目及其需求】
2、五子棋游戏:
在一个方阵上通过两人对弈的形式,依次在棋盘上放置两种颜色的棋子,哪一方先让五个棋子形成一条直线(包括横、竖、对角线3个方向),即为获胜。
要求:
(1)程序默认采用10*10的棋盘,棋盘采用字符‘l’和‘-’来绘制。
并在棋盘的外边界显示棋盘的行号和列号。
(有余力的同学可考虑通过参数进行修改棋盘大小。
)
(2)用字母“B”代表黑方棋子,用字母“W”代表白方棋子。
(3)采用两人对弈的方式,黑方先走,走子时,通过键盘输入棋子的行号和列号。
(4)程序判断1方获胜时,显示“黑方胜”或“白方胜”。
【实现方法及其过程】
(1)思想:
由两个玩家分别下棋,当某一玩家五子相连,则赢。
界面要求:
界面要求:
初始状态——显示棋盘并显示玩家名称。
游戏进行状态——动态显示棋盘,不同玩家的棋子用不同的符号表示,并显示当前玩家的名称。
结束时显示赢家名称。
判断胜负是此程序的一个重要模块,具体判断方法是看有没有一个点从水平,垂直,和两条对角线四个方向都能找到五个连成一线的棋子。
(2)实现过程:
是
是
否
程序主要分为以下几个模块:
绘制棋盘模块、玩家信息模块、获胜判断模块、落子判断模块、获胜显示和程序结束模块。
此程序分为五个文件,分别是两个头文件和三个源文件。
获胜判断模块可以说是程序的核心,我采用的方法是以玩家棋子为中心从四个方向判断,使用了多重选择结构和swith语句。
在绘制棋盘时使用了嵌套的循环结构。
【遇到的问题及其解决后的感想】
我第一次调试时虽然成功连接和运行,可是只有当六颗棋子连线时才显示获胜,我在检查后发现是一个选择语句的表达式错了,我把cin=4输成了cin=5,就是因为一个选择语句,导致判断获胜出了错。
通过这次实习我们的分析问题和解决问题的能力得到了锻炼,同时也是对我们学习成果的检验。
这个程序是我从网上找的,之后自己修改了一部分,虽然一开始有些地方看不懂,但是通过请教学长和查资料我已经基本了解了五子棋程序的设计思路和原理。
现在我明白了一个道理,其实无论是什么样的难题,都难不倒肯钻研的人,只有自己体验编程,自己动脑,才能学到知识。
算法流程图
是
是
否
否
否
总结
由于是第一次做课程设计,平时也没有及时复习,所以第一次做万年历时简直可以说是无从下手。
这时候才开始后悔上课时没有认真听讲,课后也没有及时复习。
C++对我们来说是一门全新的课程,所以相对于其他课来说,C++更应该得到重视,可是我这学期却没有用最认真的态度学习,现在可真是后悔。
还好实习的时间比较长,给了我复习的机会。
开始的时候我真的感觉编程挺无聊,可是当一个程序运行成功时的喜悦真的是无法形容的,那种成就感是无法比拟的。
虽然最后的程序可能功能不完善,有欠缺,但毕竟是自己的劳动成果,是通过努力换来的成绩,也是学习C++语言的一次实践作业,自己进步的证明。
在编程中肯定会有觉得枯燥乏味的时候,这个时候就要想想那些在编程上造诣颇深的学长学姐们,他们肯定是通过坚持不懈的努力才使自己一步步的提高的。
所以这次实习也是一次精神上的磨练,对意志的考验。
我相信,只要我真心的付出,就能学好C++,爆发我的小宇宙吧,Fight!
!
!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机高级语言程序设计 计算机 高级 语言程序设计 课程设计 报告