c++课程设计实验报告.docx_第1页
c++课程设计实验报告.docx_第2页
c++课程设计实验报告.docx_第3页
c++课程设计实验报告.docx_第4页
c++课程设计实验报告.docx_第5页
免费预览已结束,剩余24页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学院信息科学与工程专业电子信息科学与技术学生姓名董雪学号1503070207设计题目一大整数类的设计与实现 二大整数类MFC的设计与实现内容及要求:PART I大整数类的设计与实现计算机中表示整数的位数是有限的,设计并实现一个能够进行任意长度整数准确计算的类,完成以下功能:(1)用构造函数实现大整数的构造。(2)重载“”运算符,实现两个大整数的相加运算;(3)重载“”运算符,实现两个大整数的相减运算;(4)重载“*”运算符,实现两个大整数的相乘运算;(5)重载“”运算符,实现大整数的输出。提示:长整数用一维字符型数组来存储,数组的每一个元素顺序存储长整数的一位数字。设有k位长整数m,用数组a存储:m=ak*10(k-1)+ak-1*10(k-2)+.+a2*101+a1*100并用a0存储长整数m的位数,即a0=k。可以自行编写链表类,或者使用STL中的list容器,也可以采用vector类实现PART II大整数类MFC的设计与实现进度安排:第17周:分析题目,查阅课题相关资料,进行类设计、算法设计;第18周:上机调试程序,程序测试与分析,撰写课程设计报告,准备答辩。指导教师(签字):年 月 日学院院长(签字)年 月 日目 录PART I1 需求分析.2 算法基本原理.3 类设计.4 详细设计.4.1 类的接口设计.4.2 类的实现.4.3 主函数设计.5 运行结果与分析.5.1 程序运行结果.5.2运行结果分析.6 参考文献.PART II1 问题描述.2 功能描述.3 需求分析.4 概要设计.5 详细设计.6 设计和调试分析.7 用户手册.8 测试结果.9 参考文献.PART I大整数类的设计与实现1 需求分析(1) 大整数运算在科学计算中有着很重要的位置,所谓的大整数运算,是指参与运算的数(加数,减数,因子等)范围大大超出了标准数据类型(整型,实型)能表示的范围的运算。(2) “大整数”运算在数学验证方面有重要的应用价值。数学中的大整数运算验证工作如果靠手工计算完成,从时间上看几乎是不可能,而借助于计算机,由于传统编程方法精确度远远达不到要求,所以也无法完成。有了大整数运算程序,这些工作才能得以进行。(3) 大整数运算在密码学中具有实用价值。随着计算机发展,密码运算对整数运算长度、速度等要求越来越高,因而对大整数运算的精准精度也越来越高,高效的大整数运算系统不仅可用于密码学的实践教学环节,也可用于实际的密码处理工作中。(4) 大整数运算在微观模拟(如生物信息、基因工程、数量遗传)中的应用前景广泛。微观世界中的许多对象的活动可以进行数字化模拟,而且其活动变化也可以通过大整数的运算来表示,其表达与处理就非常方便了。2 算法基本原理(1) 大整数的概念“大整数”一般指位数达到十几或成百上千甚至更多的整数,而更准确地说,应该是指普通程序设计语言中的整数类型值集范围以上的整数。如标准的C的Unsigned long 型整数所能处理的整数范围最大,有效数位也最多,为4294967295(错误!未找到引用源。占据32 位(4 个字节)存贮空间,此时,大整数就是指十位以上的十进制整数了。(2) “大整数”运算是指“大整数”之间的加减乘除等运算结果依然保持其数学理论上准确和精确的结果。(3) 我们采用数组存储的方式存储,并且存储的位数不能大于256位,否则会发生溢出错误而导致大整数处理错误。对于负数,程序将不能处理,可以输入,计算结果输出为整数。所以程序需要满足如下几点要求:(1)建立一维数组a500 用以存放大整数的位数,长整数用一维字符型数组来存储,数组的每一个元素顺序存储长整数的一位数字。设有k位长整数m,用数组a存储:m=ak*10(k-1)+ak-1*10(k-2)+.+a2*101+a1*100 并用a0存储长整数m的位数,即a0=k。(2)构造函数的建立Longint();(3)运算符重载函数的建立建立重载运算符+ Longint operator + (Longint &longint2); 建立重载运算符-Longint operator - (Longint &longint2); 建立重载运算符*Longint operator * (Longint &longint2);3 类设计类模板就是设计一种类的框架,可以适用不同的数据类型,只是一种类的抽象,因此,利用类模板可以针对不同的数据类型定义出具有共性的一组类。定义形式如下:template class 类名类声明体;与函数模板类似,通过使用类模板可以使得所定义的类中的某些数据成员某些成员函数的参数某些成员函数的返回值都可以是任意的数据类型(包括基本类型和自定义类型)。所以,可以通过类模板将程序所处理的对象的类型参数化,从而使得同一段程序可用于处理多种不同类型的对象,提高了程序的抽象层次和可重用性。由于哈希表中的数据元素可以是char, int, float等多种数据类型,因此可以使用类模板来构造本程序的实现框架。本设计是建立一个大整数类Longint,通过建立构造函数,并对运算符+、*进行重载,实现了大整数类的运算。4 详细设计4.1 类的接口设计#include stdafx.h#include #include using namespace std; class Longintprivate: int length_;/整数的位数int a500; public:Longint()/构造函数for (int i = 0; i 500; i+)length_ = 500;ai = 0;void set_Longint();void get_Longint();Longint operator + (Longint &longint2);Longint operator - (Longint &longint2);Longint operator * (Longint &longint2);Longint operator / (Longint &longint2);经过定义了类里的各种函数和变量,再通过接口的一些实现,可通过主函数进行调用。4.2 类的实现inline void Longint:set_Longint()/输入大数据以数组的形式保存cout 具体的数据 input;length_ = input.length();for (int i = length_-1 ; i=0 ; i-)ai = inputinput.length() - i - 1 - 0; inline void Longint:get_Longint()cout 的数据为 = 0; i-)cout ai;Longint Longint:operator + (Longint &longint2) /重载“+”运算符Longint c;int i, j;for (i = 0, j = 0; i length_ & j j ? i : j;c.ak = ai + longint2.aj;if (i!=length_)for (; i length_; i+)c.ai = ai;elseif (jlongint2.length_)for (; j longint2.length_; j+)c.aj = longint2.aj;for (i = 0; i 9)c.ai + 1 = c.ai + 1 + 1;c.ai = c.ai % 10;return c;Longint Longint:operator - (Longint &longint2)Longint c;int i, j;for (i = 0, j = 0; i length_ & j j ? i : j;c.ak = ai - longint2.aj;if (i != length_)for (; i length_; i+)c.ai = ai;elseif (jlongint2.length_)for (; j length_; j+)c.aj = -longint2.aj;for (i = 0; i c.length_ - 1; i+)if (c.ai 0)c.ai + 1 = c.ai + 1 - 1;c.ai = c.ai + 10;return c;Longint Longint:operator * (Longint &longint2) /重载“*”运算符Longint c;int temp_result = 0, carry = 0;c.a0 = 0;for (int i = 0; i length_; i+)for (int j = 0; j longint2.length_; j+)temp_result = ai * longint2.aj;/得到零时的结果c.ai + j += temp_result; /如果以0为标号,被乘数和乘数的下标分别从右到左依次增加,则结果保存位置为i+jint i = 499;while (c.ai = 0)-i;c.length_ = i + 1;for (i=0; i 9)carry = c.ai / 10;c.ai = c.ai % 10;c.ai + 1 += carry;return c;4.3 主函数设计int _tmain(int argc, _TCHAR* argv)Longint longint1;Longintlongint2;Longintlongint3;longint1.set_Longint();longint2.set_Longint();cout 两个数相加; longint3 = longint1 + longint2;longint3.get_Longint();cout endl 两个数相乘;longint3 = longint1 * longint2;longint3.get_Longint();cout endl 两个数相减;longint3 = longint1 - longint2;longint3.get_Longint();cout endl;system(pause);return 0;在程序的主函数部分,定义了三个对象,longint1,longint2,longint3,通过调用运算符重载,实现了对两个对象longint1,longint2的加、减、乘的运算,并将结果赋值给longint3。5 运行结果与分析5.1 程序运行结果5.2运行结果分析程序初始化运行的结果如图所示。从图中可以看出通过运算符重载的使用,实现了大正数类的加减乘法的运算。6参考文献1郑振杰.C+程序设计 北京:人民邮电出版社,20052柴欣,C/C+程序设计 河北大学出版社,2002x093余苏宁、王明福,C+程序设计 北京:高等教育出版社,20034 吕凤翥.C+语言程序设计(第2版).电子工业出版社,2007.25 李云清、杨庆红、揭安全.数据结构M.人民邮电大学出版社,2004.66程磊,李爱华 面向对象程序设计C+语言 清华大学出版社2010.2PART II大整数类MFC的设计与实现1 问题描述超大整数(超100位)的运算和输出、输出2 功能描述(1)定义大整数类;(2)大整数的输入/输出 ;(3)计算功能:大整数的数的加、减、乘、除、除运算;(4)菜单功能:每种功能的操作都是在菜单中进行相应选择;(5)计算器上数字09为一个控件数组,加、减、乘、除为一个控件数组;(6)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中;(7)计算功能基本上是用系统内部函数;(8)“0”不能做除数;(9)“Backspace”按钮可以清除上一次输入的数据,“Clear”按钮可以清除所有已输入的数据从头计算。3 需求分析(1)本设计是大整数计算器。日常计算机使用中,常常涉及到一些有关计算的问题,一个小型的计算器软件变得非常有用,该校型计算器需要空间资源较少,对电脑其他程序的应用影响较小。它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性;醒目美观的软件封面。使用人员能快捷简单地进行操作。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。(2)本软件主要用于计算机windows 2000/XP以上版本的用户的使用,这次课程设计一般是实现大整数计算器的功能。要程序能实现:加,减,乘,除,模运算等运算功能;还可以实现数据的输入,输出,计算,显示及程序退出等功能。4 概要设计本软件主要应用的设计工具是Visual C+6.0以及Visual C+6.0中的MFC。MFC是Win API与C+的结合,MFC不只是一个功能单纯的界面开发系统,它提供的类绝大部分用来进行界面开发,关联一个窗口的动作,但它提供的类中有好多类不与一个窗口关联,即类的作用不是一个界面类,不实现对一个窗口对象的控制(如创建,销毁),而是一些在WinDOS(用MFC编写的程序绝大部分都在WinDOS中运行)中实现内部处理的类。使用Visual C+6.0进行设计编程非常方便实用。5详细设计(1)打开Visual C+6.0,选择FileNewlProject命令,选择MFC AppWizard(exe)创建Project名为“计算器”,按确定。在弹出界面选择创建对话框,单击“完成”按钮。(2)这样,MFC AppWizard就建立了一个基于对话窗口的程序框架,如图1所示:图1(3)在生成的设计界面中加入控件,得到计算器应用界面。如图2:图2(4)为控件编辑框编辑ID,如下表:(5)进入ClassWizard界面选择Message Maps为控件插入消息映射,插入消息函数,实现控件命令功能。如图3:图3(6) 进入ClassWizard界面Message Varibles为编辑框添加成员变量m_stredit用以显示结果。如图:(7)在“计算器Dlg.h”中加入在主要成员函数和成员变量的申明,在“计算器Dlg.cpp”中加入主要成员函数实现过程和成员变量的初始化。在头文件中“计算器Dlg.h”中public下添加:int sos; /操作附鉴别符int cal; CString m_str2; /存放按下操作符之前m_stredit的值 CString m_str1; /中间变量,当前m_stredit的值在“计算器Dlg.cpp”中要定义各种数学算添加:#includemath.h3、菜单功能的实现(1)添加菜单栏如图:(2)添加需要弹出的新对话框如图:(3)在主对话框的类(CMyDlg)头文件中定义一个菜单类对象m_Menu用于加载菜单:CMenu m_Menu; /定义一个菜单类对象(4) 在CmyDlg类的BOOL CMyDlg:OnInitDialog()成员函数中添加如下代码:m_Menu.LoadMenu(IDR_MENU1); SetMenu(&m_Menu);(5) 给要弹出的对话框创建一个类CPopDlg:(6)给菜单项响应一个点击事件:(7)在菜单项的响应函数中添加执行函数,弹出新对话框: CPopDlg dlg; /定义一个新对话框的对象dlg.DoModal(); /弹出对话框(8)然后就是记得在主对话框前面加上新对话框类的头文件: #include PopDlg.h4、相关程序代码(1)加、减、乘、除算法void CMyDlg:OnBUTTONjia()/ TODO: Add your control notification handler code hereUpdateData(TRUE);m_str1=m_stredit;m_stredit=;sos=1;UpdateData(FALSE);void CMyDlg:OnBUTTONjian()/ TODO: Add your control notification handler code here UpdateData(TRUE);m_str1=m_stredit;m_stredit=;sos=2;UpdateData(FALSE);void CMyDlg:OnBUTTONcheng()/TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);m_str1=m_stredit;m_stredit=;sos=3;UpdateData(FALSE);voidCMyDlg:OnBUTTONchu()/TODO:AddyourcontrolnotificationhandlercodehereUpdateData();m_str1=m_stredit;m_stredit=;sos=4;UpdateData(FALSE);(2)“=”号 void CMyDlg:OnBUTTONdeng()/ TODO: Add your control notification handler code here double f1,f2,f3;int f4,f5,f6;/%运算符操作数只能是整型switch(sos)case 1:UpdateData(TRUE);m_str2=m_stredit;f1=atof(m_str1); f2=atof(m_str2); f3=f1+f2; m_stredit.Format(%f,f3);UpdateData(FALSE);break; case 2:UpdateData(TRUE);m_str2=m_stredit;f1=atof(m_str1);f2=atof(m_str2); f3=f1-f2; m_stredit.Format(%f,f3); UpdateData(FALSE); break; case 3:UpdateData(TRUE);m_str2=m_stredit; f1=atof(m_str1);f2=atof(m_str2); f3=f1*f2;m_stredit.Format(%f,f3); UpdateData(FALSE);break; case 4:UpdateData(TRUE); m_str2=m_stredit; f1=atof(m_str1); f2=atof(m_str2;if(f2=0) MessageBox(被除数不能为零!);else f3=f1/f2;m_stredit.Format(%f,f3); UpdateData(FALSE);break;case 6:(3)“Backspace”void CMyDlg:OnBUTTONbk()/ TODO: Add your control notification handler code here UpdateData(TRUE); m_str2=m_ stredit;f4=atoi(m_str1);/将字符型转化为整型,下面做相应修改f5=atoi(m_str2); f6=int(f4)%int(f5); m_stredit.Format(%d,f6);UpdateData(FALSE); break;UpdateData(TRUE);m_stredit=m_stredit.Left(m_stredit.GetLength()-1);UpdateData(FALSE);(4)“Clear”void CMyDlg:OnButtonc()/ TODO: Add your control notification handler code here UpdateData(TRUE);m_stredit=;sos=0;UpdateData(FALSE);各按钮的响应程序代码:(1)“09”按钮:void CMyDlg:OnButton0()/ TODO: Add your control notification handler code here UpdateData(TRUE)if(cal=1)else if(m_stredit=0.)m_stredit=;m_stredit+=0;UpdateData(FALSE);void CMyDlg:OnButton1()/ TODO: Add your controlnotification handler code here UpdateData(TRUE);if(cal=1)else if(m_stredit=0.)m_stredit=;m_stredit+=1;UpdateData(FALSE);void CMyDlg:OnButton2()/ TODO: Add your control notification handler code here UpdateData(TRUE);if(cal=1)else if(m_stredit=0.)m_stredit=;m_stredit+=2;UpdateData(FALSE);void CMyDlg:OnButton3()/ TODO: Add your control notification handler code here UpdateData(TRUE);if(cal=1)else if(m_stredit=0.)m_stredit=;m_stredit+=3;UpdateData(FALSE);void CMyDlg:OnButton4()/ TODO: Add your control notification handler code here UpdateData(TRUE);if(cal=1)else if(m_stredit=0.)m_stredit=;m_stredit+=4;UpdateData(FALSE);void CMyDlg:OnButton5()/ TODO: Add your control notification handler code here UpdateData(TRUE);if(cal=1)else if(m_stredit=0.)m_stredit=;m_stredit+=5;UpdateData(FALSE);void CMyDlg:OnButton6()/ TODO: Add your controlnotification handler code here UpdateData(TRUE);if(cal=1)else if(m_stredit=0.)m_stredit=;m_stredit+=6;UpdateData(FALSE);void CMyDlg:OnButton7()/ TODO: Add your control notification handler code here UpdateData(TRUE);if(cal=1)else if(m_stredit=0.)m_stredit=;m_stredit+=7;UpdateData(FALSE);void CMyDlg:OnButton8()/ TODO: Add your control notification handler code here UpdateData(TRUE);if(cal=1)else if(m_stredit=0.m_stredit=;m_stredit+=8;UpdateData(FALSE);void CMyDlg:OnButton9()/ TODO: Add your control notification handler code here UpdateData(TRUE);if(cal=1)else if(m_stredit=0.)m_stredit=;m_stredit+=9;UpdateData(FALSE);(2)“.”void CMyDlg:OnBUTTONpt()/ TODO: Add your control notification handler code here UpdateData();m_stredit+=.;cal=1;UpdateData(FALSE);(3)“+/-”号void CMyDlg:OnBUTTONor()/ TODO: Add your controlnotification handler code here UpdateDa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论