ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:527.71KB ,
资源ID:7369109      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7369109.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(任意两个整数之间的四则运算课程设计.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

任意两个整数之间的四则运算课程设计.docx

1、任意两个整数之间的四则运算课程设计 课程设计报告 课程名称: 信息系统开发语言(二) 学 期: 2013-2014学年第2学期 学时学分: 64学时 4学分 专业班级: 信管1 学 号: 姓 名: 指导老师: 提交日期: 2014 年 6月10日 一、课程设计目的 通过课程设计需要达到三个目的: 第一是检验和巩固专业知识。通过课程设计,有助于加深我们对C+这门课程的理解,我们在课堂上学的都是基础理论知识,对于如何用程序语言来描述所学知识还是有一定难度。通过课程设计,我们可以真正理解其内涵。 第二是提高综合素质和能力。通过课程设计,逐渐培养学生的编程能力、用计算机解决实际问题的能力。程序设计能直

2、接有效地训练我们分析问题、解决问题的能力。 第三是有利于培养认真严谨的学习态度。在程序设计过程里,当我们入程序代码的时候,如果不够认真或细心,就可能导致语法错误,从而无法得出运行结果。我们反复调试,反复修改的过程,可以培养我们认真严谨的作风。二、问题描述与分析1、问题描述:题号1:两个任意长度整数之间的四则运算总体需求:任意给定两个数字,计算它们之间的加减乘除结果。功能需求:(1)输入并保存两个整数,长度不限。 (2)通过菜单选择运算类型并输出结果。用户界面:输入: 输入两个整数,长度不限 输出:(1)应用程序正常运行后,要在屏幕上显示一个文字菜单。 (2)要求用户输入数据时,要给出清晰明确的

3、提示信息,包括输入的数据内容、格式及结束方式等。2、问题分析: 本程序要求实现任意长度的两个整数的加减乘除的运算。由题意得,题目的难点在于任意长度,计算的数值和结果精度是任意的。但是在C+语言中定义的类型中精度最多只有二十多位,因而采用数组存储的方式来存放数字。运用do.While和switch语句进行选择判断。 假设字符串为sa ,sb 。定义大数为a,b,c。并分别把sa和sb 赋值给a和b。定义一个int型变量flag,并且给flag赋初始值为0。 (1)当输入值为1时,case1:c=a+b ,调用函数重载,进行加法的运算。因为flag=1不等于0,所以输出c的结果。 (2)当输入值为

4、2时,case2:c=a+b ,调用函数重载,进行减法的运算。因为flag=2不等于0,所以输出c的结果。 (3)当输入值为3时,case3:c=a+b ,调用函数重载,进行乘法的运算。因为flag=3不等于0,所以输出c的结果。 (4)当输入值为4时,case4:c=a+b ,调用函数重载,进行除法的运算。因为flag=4不等于0,所以输出c的结果。 (5)当输入值为0时,跳出switch这个选择语句,因为flag=0等于0,所以又进入do.while循环语句。 (6)当输入值为其他时,执行default语句。四、算法分析、设计与描述 本题要求任意长度的整数,所以采用数组存储的方式来存放和表

5、示大整数。一个数组元素,存放大整数中的一位。用字符串作为文本的数据类型。定义一个类为大数,如class BigNum。定义一个比较大的整型数组,控制位数为500,如int a500;构造一个BigNum的函数,如BigNum() len = 1;memset(a,0,sizeof(a);将一个int类型的变量转化为大数,如BigNum(const int); 将一个字符串类型的变量转化为大数,如BigNum(const char*); 重载赋值、输入输出、加减乘除等运算符。通过对+,-,*,/运算符的重新定义,使它们可以完成对对象加减乘除的运算。重载赋值运算符,大数之间就行赋值运算,如BigN

6、um& BigNum:operator=(const BigNum & n)。程序开始,运行主函数,虽然需要进行多次判断选择,但是每一次都是判断同一表达式的值,就没必要在每一个嵌套的if 语句中都计算一遍表达式的值,为此用switch语句来解决这问题。所以运用do.While和switch语句进行选择判断。假设字符串为sa ,sb 。定义大数为a,b,c。并分别把sa和sb 赋值给a和b。定义一个int型变量flag,并且给flag赋初始值为0。(1)当输入值为1时,case1:c=a+b ,调用函数重载,进行加法的运算。因为flag=1不等于0,所以输出c的结果。(2)当输入值为2时,cas

7、e2:c=a+b ,调用函数重载,进行减法的运算。因为flag=2不等于0,所以输出c的结果。3)当输入值为3时,case3:c=a+b ,调用函数重载,进行乘法的运算。因为flag=3不等于0,所以输出c的结果。(4)当输入值为4时,case4:c=a+b ,调用函数重载,进行除法的运算。因为flag=4不等于0,所以输出c的结果。(5)当输入值为0时,跳出switch这个选择语句,因为flag=0等于0,所以又进入do.while循环语句。(6)当输入值为其它数时,则是default语句。五、程序设计1、程序设计的基本思路:Class BigNum /大数运算类的定义private: in

8、t a500; /可以控制大数的位数 int len; /大数长度public: BigNum() len = 1;memset(a,0,sizeof(a); /构造函数 BigNum(const int); /将一个int类型的变量转化为大数 BigNum(const char*); /将一个字符串类型的变量转化为大数 BigNum(const BigNum &); /复制构造函数 BigNum &operator=(const BigNum &); /重载赋值运算符,大数之间进行赋值运算 friend istream& operator(istream&, BigNum&); /重载输入运

9、算符 friend ostream& operator(const BigNum & T)const; /大数和另一个大数的大小比较 bool operator(const int & t)const; /大数和一个int类型的变量的大小比较 void print(); /输出大数 2、类BigNum的UML图如下: BigNum -a500:int -len:int +BigNum(const int)+BigNum(const char*)+BigNum(const BigNum &)+operator=(const BigNum &):BigNum+operator(istream&,B

10、igNum&):friend istream+operator(const BigNum & T)const:bool +operator(const int & t)const:bool+ print():void2程序代码及说明#include /预处理命令,调用标准输入输出头文件iostream#include /调用字符串文件#include /调用声明 “流操作符”的头文件#include /调用标准库的算法的头文件#include /调用字符串的头文件using namespace std; / 使用名称空间std#define MAXN 9999 /宏定义,用MAXN代替9999

11、#define MAXSIZE 10 /宏定义,用MAXSIZE代替10#define DLEN 4 /宏定义,用DLEN代替4class BigNum /大数运算类的定义private: int a500; /可以控制大数的位数 int len; /大数长度public: BigNum() len = 1;memset(a,0,sizeof(a); /构造函数 BigNum(const int); /将一个int类型的变量转化为大数 BigNum(const char*); /将一个字符串类型的变量转化为大数 BigNum( const string &src ); BigNum(const

12、 BigNum &); /复制构造函数 BigNum &operator=(const BigNum &); /重载赋值运算符,大数之间进行赋值运算 friend istream& operator(istream&, BigNum&); /重载输入运算符 friend ostream& operator(const BigNum & T)const; /大数和另一个大数的大小比较 bool operator(const int & t)const; /大数和一个int类型的变量的大小比较 void print(); /输出大数;BigNum:BigNum(const int b) /将一个i

13、nt类型的变量转化为大数 int c,d = b; len = 0; memset(a,0,sizeof(a);/ 把从a开始的20个值设置为0while(d MAXN) c = d - (d / (MAXN + 1) * (MAXN + 1); d = d / (MAXN + 1); alen+ = c; alen+ = d;BigNum:BigNum(const char*s) /将一个字符串类型的变量转化为大数 int t,k,index,l,i; memset(a,0,sizeof(a); l=strlen(s); len=l/DLEN; if(l%DLEN) len+; index=

14、0; for(i=l-1;i=0;i-=DLEN) t=0; k=i-DLEN+1; if(k0) k=0; for(int j=k;j=0;i-=DLEN) t=0; k=i-DLEN+1; if(k0) k=0; for(int j=k;j=i;j+) t=t*10+sj-0; aindex+=t; BigNum:BigNum(const BigNum & T) : len(T.len) /复制构造函数的实现 int i; memset(a,0,sizeof(a); for(i = 0 ; i len ; i+) ai = T.ai;BigNum & BigNum:operator=(co

15、nst BigNum & n) /重载赋值运算符,大数之间进行赋值运算 int i; len = n.len; memset(a,0,sizeof(a); for(i = 0 ; i (istream & in, BigNum & b) /重载输入运算符 char chMAXSIZE*4; int i = -1; inch; int l=strlen(ch); int count=0,sum=0; for(i=l-1;i=0;) sum = 0; int t=1; for(int j=0;j=0;j+,i-,t*=10) sum+=(chi-0)*t; b.acount=sum; count+

16、; b.len =count+; return in;ostream& operator(ostream& out, BigNum& b) /重载输出运算符 int i; out = 0 ; i-) out.width(DLEN); out.fill(0); out len ? T.len : len; for(i = 0 ; i MAXN) t.ai + 1+; t.ai -=MAXN+1; if(t.abig != 0) t.len = big + 1; else t.len = big; return t; BigNum BigNum:operator-(const BigNum & T

17、) const /两个大数之间的相减运算 int i,j,big; bool flag; BigNum t1,t2; if(*thisT) t1=*this; t2=T; flag=0; else t1=T; t2=*this; flag=1; big=t1.len; for(i = 0 ; i big ; i+) if(t1.ai i) t1.aj- += MAXN; t1.ai += MAXN + 1 - t2.ai; else t1.ai -= t2.ai; t1.len = big; while(t1.alen - 1 = 0 & t1.len 1) t1.len-; big-; if

18、(flag) t1.abig-1=0-t1.abig-1; return t1; BigNum BigNum:operator*(const BigNum & T) const /两个大数之间的相乘运算 BigNum ret; int i,j,up; int temp,temp1; for(i = 0 ; i len ; i+) up = 0; for(j = 0 ; j MAXN) temp1 = temp - temp / (MAXN + 1) * (MAXN + 1); up = temp / (MAXN + 1); ret.ai + j = temp1; else up = 0; re

19、t.ai + j = temp; if(up != 0) ret.ai + j = up; ret.len = i + j; while(ret.aret.len - 1 = 0 & ret.len 1) ret.len-; return ret; BigNum BigNum:operator/(const int & b) const /大数对一个整数进行相除运算 BigNum ret; int i,down = 0; for(i = len - 1 ; i = 0 ; i-) ret.ai = (ai + down * (MAXN + 1) / b; down = ai + down *

20、(MAXN + 1) - ret.ai * b; ret.len = len; while(ret.aret.len - 1 = 0 & ret.len 1) ret.len-; return ret;int BigNum:operator %(const int & b) const /大数对一个int类型的变量进行取模运算 int i,d=0; for (i = len-1; i=0; i-) d = (d * (MAXN+1)% b + ai)% b; return d;BigNum BigNum:operator(const int & n) const /大数的n次方运算 BigNu

21、m t,ret(1); int i; if(n1) t=*this; for( i=1;i1=m;i(const BigNum & T) const /大数和另一个大数的大小比较 int ln; if(len T.len) return true; else if(len = T.len) ln = len - 1; while(aln = T.aln & ln = 0) ln-; if(ln = 0 & aln T.aln) return true; else return false; else return false;bool BigNum:operator (const int &

22、t) const /大数和一个int类型的变量的大小比较 BigNum b(t); return *thisb;void BigNum:print() /输出大数 int i; cout = 0 ; i-) cout.width(DLEN); cout.fill(0); cout ai; cout endl;int main(void) while( true ) system( cls ); BigNum a, b, c; string sa, sb; coutsasb; a = sa; b = sb; int flag = 0; do cout1、相加n2、相减n3、相乘n输入序号确定操作,非以上序号时退出nflag; switch( flag ) case 1: c = a + b; break; case 2: c = a - b; break; case 3: c = a * b; break; de

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1