面向对象重点技术C++平时作业_第1页
面向对象重点技术C++平时作业_第2页
面向对象重点技术C++平时作业_第3页
面向对象重点技术C++平时作业_第4页
面向对象重点技术C++平时作业_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、平时作业共2次平时作业(1)定义、实现并测试表达由整型数元素构成旳集合类型IntSet。需提供旳操作至少应涉及:构造函数析构函数拷贝构造函数插入元素删除元素清空集合集合并集合交集合差集合显示输出集合显示输出旳格式为元素1, 元素2,空集旳输出为。/* intset.h */#ifndef INTSET_H#define INTSET_Hclass IntSet int cursize,maxsize; int *x; bool member(int t) const;public:IntSet(int m = 100);/构造函数IntSet(const IntSet&);/拷贝构造函数Int

2、Set();/析构函数void insert(int t);/插入元素void remove(int t);/删除元素void clear();/清空集合void print();/集合显示输出IntSet setunion(const IntSet&);/集合并IntSet setdifference(const IntSet&);/集合差IntSet setintsection(const IntSet&);/集合交;#endif/* intset.cpp */#include stdafx.h#include #include using namespace std;#include i

3、ntset.hIntSet:IntSet(int m) if (m1) exit(1); cursize=0; x=new intmaxsize=m; IntSet:IntSet() delete x; IntSet:IntSet(const IntSet& m)cursize=m.cursize; x=new intmaxsize=m.maxsize; for (int i=0;icursize;i+) xi=m.xi;bool IntSet:member(int t) constint l=0;int u=cursize-1;while (l=u)int m=(u+l)/2;if (txm

4、)l=m+1;elsereturn true;return false;void IntSet:insert(int t)if (member(t) return; if (cursize=maxsize) exit(1); xcursize+=t;for (int i=cursize-1;i0;i-) if (xixi-1) int temp=xi; xi=xi-1; xi-1=temp; else break;void IntSet:remove(int t)int flag = 0;int pos;for (int i = 0; i cursize; i+) if (t=xi) flag

5、 = 1; pos = i; if (flag = 0)cout该集合中不存在t这个元素,删除失败。endl;elseint *temp = x;cursize-;x = new intcursize;for (int j = 0; j pos; j+) xj = tempj; for (int i = pos; i cursize; i+) xi = tempi+1; void IntSet:clear()if (cursize=0) return; x = new intmaxsize; cursize =0;void IntSet:print()cout 0) for (int i=0;

6、icursize;i+) cout xi; if (i!=cursize-1) cout ,; cout ;IntSet IntSet:setdifference(const IntSet& anotherset)IntSet r;for (int i=0;icursize;i+)if(!anotherset.member(xi)r.insert(xi);return r;IntSet IntSet:setunion(const IntSet& anotherset)IntSet r = anotherset;for (int i=0;icursize;i+)if(!anotherset.me

7、mber(xi)r.insert(xi);return r;IntSet IntSet:setintsection(const IntSet& anotherset)IntSet r;for (int i=0;icursize;i+)if(anotherset.member(xi)r.insert(xi);return r; 平时作业(2)第1题.定义HugeInt类,计算并显示出5000阶乘旳值和它旳位数。5000!旳值是多少?测试示例主程序/*/* f5000.cpp */*/#include #include using namespace std;#include hugeint.hi

8、nt main() HugeInt product =1; long N; cout N; /运营时输入5000 for (long idx=1; idx=N;idx+) product = product*idx; cout endl N ! = product endl; return 0;/* hugeint.h */#include const int MAXLEN=00;class HugeIntpublic:HugeInt();HugeInt(const int& iOperand);friend std:ostream& operator (std:ostream& out,Hu

9、geInt &R);HugeInt operator *(HugeInt &R);HugeInt operator *(int R);int Len()return m_len;private:int m_sign; /符号int m_len; /长度char m_numMAXLEN; /存储空间;/* hugeint.cpp */#include stdafx.h#include hugeint.h#include #include #include #include using namespace std;HugeInt:HugeInt() memset(m_num,0,sizeof(ch

10、ar)*MAXLEN); m_sign=0; m_len=0; HugeInt:HugeInt(const int &ioperand)memset(m_num,0,sizeof(char)*MAXLEN);if(ioperand!=0)if(ioperand0)m_sign=1;elsem_sign=-1;int i=0,k=1;int abs_R=abs(ioperand);do i+; m_numi=abs_R%10; abs_R/=10; while(abs_R);m_len=i;else m_num1=0; m_len=1; m_sign=1; HugeInt HugeInt:ope

11、rator *(int R) HugeInt hInt=R; return (*this)*hInt; HugeInt HugeInt:operator *(HugeInt &R)HugeInt Result=0;Result.m_sign=this-m_sign*R.m_sign;char *muti1,*muti2,*result=Result.m_num;int len1,len2;if(this-m_lenR.Len() muti1=this-m_num; muti2=R.m_num; len1=this-m_len; len2=R.m_len; else muti1=R.m_num;

12、 muti2=this-m_num; len2=this-m_len; len1=R.m_len; int i=1,j=1,k=1,carry=0;while(j=len2)i=1;k=j;while(i=len1) resultk+=muti1i+*muti2j+carry; carry=resultk/10; resultk%=10; k+; if(carry!=0) resultk+=carry; Result.m_len=k; carry=0; else Result.m_len=k-1; j+;return Result;std:ostream& operator (std:ostr

13、eam &out,HugeInt &R) int i; if(R.m_sign=-1) out-; for(i=R.m_len;i!=0;i-) outR.m_numi+0; outstd:endl; return out; 第2题.改善第一次作业中旳IntSet,分别使用运算符+、*、-和表达集合并、集合交、集合差和集合输出。(必须上机验证) /* intset.h */#ifndef INTSET_H#define INTSET_Hclass IntSet int cursize,maxsize; int *x; bool member(int t) const;public:IntSet

14、(int m = 100);/构造函数IntSet(const IntSet&);/拷贝构造函数IntSet();/析构函数void insert(int t);/插入元素friend ostream& operator(ostream&,const IntSet&);IntSet operator-(const IntSet&);/集合差IntSet operator+(const IntSet&);/集合并IntSet operator*(const IntSet&);/集合交;#endif/* intset.cpp */#include stdafx.h#include #include

15、 using namespace std;#include intset.hIntSet:IntSet(int m) if (m1) exit(1); cursize=0; x=new intmaxsize=m; IntSet:IntSet() delete x; IntSet:IntSet(const IntSet& m)cursize=m.cursize; x=new intmaxsize=m.maxsize; for (int i=0;icursize;i+) xi=m.xi;bool IntSet:member(int t) constint l=0;int u=cursize-1;w

16、hile (l=u)int m=(u+l)/2;if (txm)l=m+1;elsereturn true;return false;void IntSet:insert(int t)if (member(t) return; if (cursize=maxsize) exit(1); xcursize+=t;for (int i=cursize-1;i0;i-) if (xixi-1) int temp=xi; xi=xi-1; xi-1=temp; else break;ostream& operator(ostream& os, const IntSet& is)cout 0)for (int i=0;iis.cursize;i+)os is.xi;if (i!=is.cursize-1)os ,;cout ;return os;IntSet IntSet:operator-(const IntSet& anotherset)IntSet r;for (int i=0;icursize;i+)if(!anotherset.member(xi)r.insert(xi);return r;IntSet In

温馨提示

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

评论

0/150

提交评论