已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象技术实验报告 学号:100801305 姓名:高明行 面向对象技术实验报告专业:计算机科学与技术学号: 100801305 姓名: 高明行 教师: 周 宇 作业二 函数模板与类模板一实验目的l 学习类模板的定义和使用l 学习函数模板的定义和使用l 链表的不同实现方法l 所有标识符命名方式按照匈牙利命名法。二实验内容第题:基本练习设计一个数组类的模板,具体要求如下:l 数组的规模可以任意类型,任意大小。l 重载构造函数实现不同种的初始化方式(自拟)。l 数组排序函数。l 数组查找函数。l 数组查找最大值/最小值函数。l 对运算符重载,支持对该数组类模板对象的下标运算第题:基本练习(未必用类模板) 设计一个循环链表,用来表示大整数,具体要求如下:l 链表的头结点值为-1,其余结点依次存放数据,各结点最多放四位整数,如下图表示233238766:l 利用上述数据结构解决大整数的表示,以及加法、减法运算(用两个链表表示操作数)。l 将上述数据结构应用于10位以上求素数问题和阶乘问题。第题:一设计分析:1. 在主函数中可以任意改变数组大小和类型2. 利用函数模板二程序清单:#include iostream#includeusing namespace std;template/类模板的首部,声明类模板的参数class Array /数组类 int size; T *ap;public: Array() size=s; ap=new Ts; void SetData(); void Display(); void sort(); T Max(); T Min(); int search(T x); T operator (int i); Array()/析构 delete ap;templatevoid Array:SetData()/模板类Carray的构造的输入函数 for(int i=0;iapi;templatevoid Array:Display()/模板类Carray的构造的输出函数 for(int i=0;isize;i+)coutapi ;coutendl;templatevoid Array:sort() int i,j,t; for(i=0;isize-1;i+) for(j=0;japj+1) t=apj; apj=apj+1; apj+1=t; templateT Array:Max() int i; T temp=ap0; for(i=1;iapi)?temp:api; return temp; templateT Array:Min() int i; T temp=ap0; for(i=1;isize;i+) temp=(tempapi)?temp:api; return temp; templateint Array:search(T x) int i; for(i=0;isize;i+) if(api=x) cout是第i+1个数endl; cout不存在该数; templateT Array:operator(int i) return api; int main() int x; Array a; cout请输入整形数组(长度等于10)n; a.SetData(); a.sort(); a.Display(); coutMax=a.Max()endl; coutMin=a.Min()endl; cout输入要查找的x; a.search(x); system(pause); return 0;三运行结果:四思考问题:1. 对模板类有点理解,但是主要局限于课上的内容拓展一下就不灵活第题:(百度的,不会写)一设计分析:3. 在主函数中可以任意改变数组大小和类型4. 利用函数模板二程序清单: #include #include #include #include #define LEN sizeof(longint) using namespace std; struct longint /1.每个节点只存储四位十进制数字即不超过 9999 的非负整 数。 /双向链表有头指针,它的 data 值存储长整数的符号,1 为正,-1 为负,0 代表长整数为0,它的over值存储除头节点节点的个数。 /9999 范围的情况,一般 over0 表示四位数超出 9999,over0 表示四位数小于 0。 int data; int over; longint *pro; longint *next; ; longint *creat()/构造一个空的只有头指针的双向循环链表 longint *head; head=(longint *)malloc(LEN); if(head=NULL) coutmalloc error!data=0; head-over=0; head-pro=head; head-next=head; return(head); void print(longint *head)/输出以 head 为头结点的长整数 /先判断长整数的正负,为负时先输出-号,然后按节点顺序依次输出 /返回到头节点为止,输出前要判断各个节点 data 值的位数来判断先输出几个 0 longint *p; p=head; if(head-next=head) coutlongint error!data=-1) coutnext; coutdata; p=p-next; while(p!=head) /判断各个节点 data 值的位数来判断先输出几个 0 if(p-data=0 & p-data10) cout000data; if(p-data=10 & p-data100) cout00data; if(p-data=100 & p-data1000) cout0data; if(p-data=1000) coutdata; p=p-next; coutnext=head-next; head-next-pro=p; head-next=p; p-pro=head; head-over=head-over+1; /head 存在且 p 指向的节点在头节点后 /将头节点后的那个节点从链表里删除、释放 p 的空间并返回头指针 void del(longint *head,longint *p) head-next=p-next; p-next-pro=head; free(p); head-over=head-over-1; longint *get(char s) /字符串存有字符格式的长整数。 /将以字符串形式存储的长整数转化到双向循环链表中存储并返回头指针。/将长整数的字符形式转化成数字形式,存放到双向循环链表中,先判断长整数 若为负,减去字符串的第一位,将数字部分存到双向循环链表中 longint *head,*q; /将长整数存到双向循环链表 int i,j,l=0; head=creat(); /判断长整数的符号,并将信息存到头节点中 if(s00) head-data=1; if(s0=0) head-data=0; if(s0=-) l=1; head-data=-1; j=strlen(s)-1; for(i=l;i=3) q=(longint *)malloc (LEN); q-data=sj+sj-1*10+sj-2*100+sj-3*1000; insert(head,q); j=j-4; if(j=l) /当最后几位数的位数不足四位时 q=(longint *)malloc(LEN); q-data=0; while(ldata=q-data*10+sl; l+; insert(head,q); return(head); void plus(longint *a,longint *b) /两个循环链表分别存有两个长整数 /将两个长整数做和并输出结果 /先将各位做加减,然后根据所得长整数正负和各结点 data 值进位或退位计算所得长整数的值并输出。 longint *m,*n,*p,*chead,*q; if(a-over=0|b-over=0) coutlong int error!pro; n=b-pro; chead=creat(); while(m!=a&n!=b) p=(longint *)malloc(LEN); p-data=a-data*m-data+b-data*n-data; insert(chead,p); m=m-pro; n=n-pro; while(m!=a|n!=b) if(m=a) p=(longint *)malloc(LEN); p-data=b-data*n-data; n=n-pro; insert(chead,p); else if(n=b) p=(longint *)malloc(LEN); p-data=a-data*m-data; m=m-pro; insert(chead,p); p=chead-next; chead-data=0; while(p!=chead) if(p-data0) chead-data=1; break; if(p-datadata=-1; break; p=p-next; p=chead-pro; while(p!=chead) if(p-next!=chead) p-data=p-data*chead-data+p-next-over; if(p-next=chead) p-data=p-data*chead-data; p-over=0; if(p-data=10000) p-over=1; if(p-dataover=-1; p-data=p-data-p-over*10000; p=p-pro; p=chead-next; while(p-data=0 & p-over=0 & p-next!=chead) q=p; p=p-next; del(chead,q); if(p-over0) q=(longint*)malloc(LEN); q-data=p-over; insert(chead,q); if(chead-next-data=0) chead-data=0; print(chead); void minus(longint *a, longint *b) /两个循环链表分别存有两个长整数。 /用第一个长整数减第二个长整数并输出结果 b-data=(-1)*b-data; /将被减数的符号改变 plus(a,b); int main() longint *a,*b; char s1100,s2100; int n; coutplease input
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人财务工作总结
- 孝老爱亲事迹材料
- 中国肾脏移植受者侵袭性镰刀菌病临床诊疗指南解读
- 职业健康安全知识手册:应知应会100条
- 用二元一次方程组解决问题(第3课时)课件2025-2026学年苏科版七年级数学下册
- 2026年音乐吉他行业分析报告及未来发展趋势报告
- 2026年酸碱催化剂行业分析报告及未来发展趋势报告
- 2026年羰基钴行业分析报告及未来发展趋势报告
- 2026年干发帽行业分析报告及未来发展趋势报告
- 凝血功能检查解读(患者科普指南)
- 恒丰银行笔试题库及答案
- 《导游实务》课件-6.1出境旅游领队服务程序
- DL∕T 531-2016 电站高温高压截止阀闸阀技术条件
- 智能制造概论
- 单元写作任务 统编版高中语文必修下册
- 个人查摆问题清单和整改措施
- 架空配电线路及设备运行规程
- GB/T 2484-2023固结磨具形状类型、标记和标志
- 苏泊尔电磁炉标准板电路分析
- 五行称命书--源自唐朝手抄本(檀香四逸)
- 失血性休克的诊治麻醉病例讨论
评论
0/150
提交评论