计算器设计课程论文大学毕设论文Word文档格式.docx
《计算器设计课程论文大学毕设论文Word文档格式.docx》由会员分享,可在线阅读,更多相关《计算器设计课程论文大学毕设论文Word文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
实现内容:
设计开发一个计算器演示程序
功能要求:
(1)根据需求设计出图形显示界面
(2)根据计算器原理实现大小不同的盘子移动的全过程演示。
3、主要参考文献
[1]潭浩强,《C++程序设计》,清华大学出版社
[2]周霭如,《C++程序设计基础》,电子工业出版社
[3]潭浩强,《C++程序设计题解与上机指导》,清华大学出版社
[4]刘玲等,《C语言程序设计应用教程》,西南师范大学出版社
4、课程设计工作进度计划
序号
时间(天)
内容安排
备注
1
分析设计准备
周一
2
编程调试阶段
周二至周三
3
编写课程设计报告
周四
4
考核
周五
总计
5(天)
指导教师(签字)
日期
年月日
教研室意见:
学生(签字):
接受任务时间:
年月日
注:
任务书由指导教师填写。
课程设计(论文)指导教师成绩评定表
题目名称
评分项目
分值
得分
评价内涵
工作
表现
20%
01
学习态度
6
遵守各项纪律,工作刻苦努力,具有良好的科学工作态度。
02
科学实践、调研
7
通过实验、试验、查阅文献、深入生产实践等渠道获取与课程设计有关的材料。
03
课题工作量
按期圆满完成规定的任务,工作量饱满。
能力
水平
35%
04
综合运用知识的能力
10
能运用所学知识和技能去发现与解决实际问题,能正确处理实验数据,能对课题进行理论分析,得出有价值的结论。
05
应用文献的能力
5
能独立查阅相关文献和从事其他调研;
能提出并较好地论述课题的实施方案;
有收集、加工各种信息及获取新知识的能力。
06
设计(实验)能力,方案的设计能力
能正确设计实验方案,独立进行装置安装、调试、操作等实验工作,数据正确、可靠;
研究思路清晰、完整。
07
计算及计算机应用能力
具有较强的数据运算与处理能力;
能运用计算机进行资料搜集、加工、处理和辅助设计等。
08
对计算或实验结果的分析能力(综合分析能力、技术经济分析能力)
具有较强的数据收集、分析、处理、综合的能力。
成果
质量
45%
09
插图(或图纸)质量、篇幅、设计(论文)规范化程度
符合本专业相关规范或规定要求;
规范化符合本文件第五条要求。
设计说明书(论文)质量
30
综述简练完整,有见解;
立论正确,论述充分,结论严谨合理;
实验正确,分析处理科学。
11
创新
对前人工作有改进或突破,或有独特见解。
成绩
指导教师评语
指导教师签名:
年 月 日
摘要
目录
摘要I
1需求分析1
1.1需求概述1
1.2需求环境1
1.3功能描述2
2概要设计3
2.1程序功能模块3
2.2程序流程图3
2.3数据结构的设计4
3详细设计5
3.1程序初始化5
3.1.1代码功能5
3.1.2功能实现代码5
3.2盘块的移动过程5
3.2.1代码功能5
3.2.2功能实现代码5
3.3递归函数6
3.3.1流程图6
3.3.2功能实现代码7
4测试与运行8
结束语9
参考文献10
1需求分析
1.1需求概述
汉诺塔演示程序设计是计算机图形学中图形变换的内容之一。
而图形学中的图形变换的概念是由简单图形生成复杂图形,可用二维图形表示三维形体,甚至可以对静态图形经过快速变换而获得图形的动态显示效果。
其任务是研究各点坐标之间的变化规律。
而本次课程设计就是利用C语言以及图形函数实现汉诺塔的递归算法来进行其盘块移动的全过程显示。
在TC环境中要实现这样的功能,就要牵涉到图形设备接口的知识。
Windows图形设备接口是为与设备无关的图形设计的,是Windows系统的重要组成部分,负责系统与用户或绘图程序之间的信息交换,并控制在输出设备上显示图形或文字。
应用程序必须通知图形设备接口来加载特定的设备驱动,一旦驱动得以加载,就可以准备应用设备进行相关的操作这些任务都要通过创建和维护设备描述表来完成。
在实现汉诺塔演示程序设计时,是利用坐标系统而得到的,而在Windows应用程序中有两种坐标系统:
设备坐标系统和逻辑坐标系统。
其中设备坐标系统中又有三种相互独立的坐标系统:
屏幕坐标系统、窗口坐标系统和用户区坐标系统。
这些坐标系统均以像素点来表示度量的单位。
屏幕坐标系统使用整个屏幕作为坐标区域,原点为屏幕原点。
窗口坐标系统使用了边界在内的应用程序的窗口作为坐标区域。
窗口边界的左上角是坐标系统的原点。
用户坐标系统是最经常使用的坐标系统。
用户区是窗口工作区,不包括窗口边界、菜单条及滚动条等。
用户一般只需操作应用程序的用户区,因此用户区坐标系统对大多数应用程序都是适用的。
在计算机机图形学中窗口的定义是指在用户坐标系中定义的确定显示内容的一个矩形区域,只有在这个区域内的图形才能在设备坐标系下输出,而窗口外的部分则被截掉。
视区是在设备坐标中定义的一个区域,用于输出窗口中的图形。
视区决定了窗口中的图形要显示于屏幕上的位置的大小。
1.2需求环境
本课程设计需要的设备为硬件要求和软件配置要求具体要求如下:
①硬件要求:
一台计算机。
②软件配置:
WINDOWS、C/VC++6.0。
1.3功能描述
简单计算器包括双目运算和单目运算功能。
双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦,阶乘,对数,开方,倒数等运算。
可对输入任意操作数,包括小数和整数及正数和负数进行以上的所有运算并能连续运算。
出现错误会给出相应提示,同时包含清除,退格,退出功能以及有与所有按钮相对应的菜单项。
2概要设计
2.1程序功能模块
如图是整个计算器的流程图,打开计算器程序,输入数据,调用输入数据子程序。
子程序开始时m_num为零。
按下数字按钮后,判断m_num的正负号,对其进行相关处理,然后在判断是否有小数点,处理后输出结果。
回到总流程图中,输完第一个操作数后,若按下双目运算符,则把m_num存入num2,按下输入第二个操作数并算出结果。
若按下的是单目运算符,则直接对其处理得出结果。
若按下清零,则m_num等于0.在运算中还要判断运算是否合法,以及结果是否超出显示范围,以做出相关提示,按下清零。
算出后把结果保存至num2。
若需用算出的结果继续运算则回到输入完第一个操作数后,若不需要则判断试否需要开始新一轮的运算,不需要则结束。
2.2程序流程图
2.3数据结构的设计
根据需求分析将用递归算法实现计算器0演示过程的数据结构的设计如下:
1用一个结构体数组structM{intdata[15];
inttop;
}num[3];
来定义三个塔座的高度,以及每个塔座存放每个盘块的代号。
2定义两个变量cx,cy来分别表示程序演示步骤的横坐标和纵坐标的变化。
用函数voidmove(charx,chary,structMnum[3]);
来表示盘块移动的具体过程;
并在move函数中调用函数voidhanoi(charx,chary,charz,intn,structMnum[3]);
来表示递归调用的过程;
最后用一个初始化函数voidInit(void)来对整个程序进行初始化,并调用move函数。
3详细设计
3.1程序初始化
3.1.1代码功能
在初始化程序中,主要实现的是画出结构框图和对计算器的各个按键的功能设置。
3.1.2功能实现代码
1、09107xuzhujieDlg.h里变量的定义:
BOOLele2;
//ele定义为布尔值,判断当前值是否是正数还是负数
intaddt;
inti;
intdint;
//dent判断小数后的位数
BOOLele;
//ele2定义为布尔值,判断是否有小数点
doublenum2;
doublenum1;
2、程序运行时初始化和头文件:
m_num=0;
//输出框清0
num1=0;
//变量1为0
num2=0;
//变量2为0
dint=0;
//小数点位数
addt=0;
//整数位数无
ele=FALSE;
//当前无小数
ele2=TRUE;
09107xuzhujieDlg.cpp里加上头文件#include"
math.h"
3、数字键1的程序:
(数字键2到9类似)
if(addt==0)num2=0;
if(ele2==TRUE)
m_num=m_num*10+1;
//单击数字键1后把数据传送到输出框中
elsem_num=m_num*10-1;
if(ele==TRUE)//当前是否有小数点,如果有
{
num1=1;
dint=dint++;
for(i=0;
i<
dint;
i++)
num1=num1/10;
//1/10,得到的小数放入输出框中
}
if(ele2==TRUE)//当前值是否是正数还是负数,如果是正数
m_num=(m_num-1)/10+num1;
//前面不加负号
else
m_num=(m_num+1)/10-num1;
//否则前面加负号
UpdateData(FALSE);
//数据刷新
5、加法键+的程序:
(-,*,/,x,x^y的代码类似)
if(num2==0)
{num2=m_num;
//把第二个值赋于输出框的成员变量
m_num=0;
//输出框的成员变量清0
//当前小数无
//当前符号为正
//小数位数无
addt=1;
6、Sqrt键的程序:
if(m_num!
=0)num2=m_num;
if(m_num>
=0)
{m_num=sqrt(num2);
//对数进行开根号
num2=m_num;
elseGetDlgItem(IDC_xianshi)->
SetWindowText("
错误,负数不能开根号"
);
7、n!
键的程序:
if(fmod(num2,1)==0)
{m_num=1;
for(i=1;
=num2;
i++)m_num*=i;
//对数进行求阶乘
=1.7E308||m_num<
-