版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计1线性表课程设计组长:邬萍二、组员:周婷、马玲三、实验日期:2011/4/13四、实验任务(2分):任务7:设计两个任意长的整数加减法的运算器(2分)基本功能要求:(1)输入两个长整数。(2)利用双向循环链表存储长整数,每个结点存储四位数。(3)计算结果存储于双向循环链表。(4)输出运算式子及结果。五、实验原理:(1)采用循环双链表存储长整数A,B,及二者的和差。(2)程序中包含四个函数。分别为:1.用于创建循环双向链表来存储长整数和处理每个节点存四位数的GreatList函数2.用于输出的DisplayList函数3.用于计算长整数的加法的plus函数4.用于计算长整数的减法的subtraction函数5.用于主函数main函数此题的难点突破分析:题中需要将一个结点存放4位数,然后逐个结点构成的循环双向链表来存放长整数,所以要利用用字符串来存放长整数,利用指针统计所输入的长整数的位数,随后再转化为整数型。(4)用到的主要算法和知识点1.循环双向链表特点的应用2.运用c语言中的函数:atoi函数(arraytointeger的缩写)它的主要功能:把字符串转换成整型数.原型:intatoi(constchar*nptr)函数说明:参数nptr字符串,如果第一个非空格字符不存在或者不是数字也不是正负号则返回零,否则开始做类型转换,之后检测到非数字或结束符\0时停止转换,返回整型数。3.此题中需要创建一片新内存并初始化,并使用内存比较之类的内存操作功能,需要用#include<memory>4.运用strcmp(X,Y)函数来判断X和Y的大小。实验源程序:#include<iostream>#include<stdlib.h>#include<memory>#include<cstring>usingnamespacestd;constMaxSize=100;typedefstructDNode{ intdata; structDNode*next; structDNode*prior;}DLinkList;voidGreatList(DLinkList*&L,chara[],intn)//创建循环双向链表来存储长整数和处理每个节点存四位数{ DLinkList*s;inti=0,j=0,k=0; charX[5]; L=(DLinkList*)malloc(sizeof(DLinkList)); L->prior=L->next=L; if(n<4) { s=(DLinkList*)malloc(sizeof(DLinkList)); for(i=n-1;i>=0;i--) X[j++]=a[i]; s->data=atoi(X); s->next=L->next; s->prior=L; L->next->prior=s; L->next=s; } else { while(i<n&&n-k>=4) { s=(DLinkList*)malloc(sizeof(DLinkList)); for(j=3;j>=0;j--) { X[j]=a[i++]; k++; } s->data=atoi(X); s->next=L->next; s->prior=L; L->next->prior=s; L->next=s; } charY[4]; for(j=n-k-1;j>=0;j--) if(i<n) Y[j]=a[i++]; s=(DLinkList*)malloc(sizeof(DLinkList)); s->data=atoi(Y); if(s->data!=0) { s->next=L->next; s->prior=L; L->next->prior=s; L->next=s; } }}voidDisplayList(DLinkList*L)//输出函数{ DLinkList*p=L->next; inti=0; if(p->data==0)p=p->next; while(p!=L) { if(p!=L->next&&p->data==0)cout<<"000"; cout<<p->data; p=p->next; } cout<<endl;}voidplus(DLinkList*L1,DLinkList*L2,DLinkList*&Lp)//任意长整数的加法{ DLinkList*p1=L1->prior,*p2=L2->prior,*s; intx=0; Lp=(DLinkList*)malloc(sizeof(DLinkList)); Lp->prior=Lp->next=Lp; while(p1!=L1&&p2!=L2) { s=(DLinkList*)malloc(sizeof(DLinkList)); s->data=(p1->data+p2->data+x)%10000; x=(p1->data+p2->data+x)/10000; s->next=Lp->next; s->prior=Lp; Lp->next=s; p1=p1->prior; p2=p2->prior; } while(p1!=L1) { s=(DLinkList*)malloc(sizeof(DLinkList)); s->data=p1->data; s->next=Lp->next; s->prior=Lp; Lp->next=s; p1=p1->prior; } while(p2!=L2) { s=(DLinkList*)malloc(sizeof(DLinkList)); s->data=p2->data; s->next=Lp->next; s->prior=Lp; Lp->next=s; p2=p2->prior; }}voidsubtraction(DLinkList*L1,DLinkList*L2,DLinkList*&Ls)//任意长整数的减法{ DLinkList*p1=L1->prior,*p2=L2->prior,*s; Ls=(DLinkList*)malloc(sizeof(DLinkList)); Ls->prior=Ls->next=Ls; while(p1!=L1&&p2!=L2) { s=(DLinkList*)malloc(sizeof(DLinkList)); if(p1->data>=p2->data) s->data=p1->data-p2->data; else { s->data=p1->data+10000-p2->data; p1->prior->data=p1->prior->data-1; } s->next=Ls->next; s->prior=Ls; Ls->next=s; p1=p1->prior; p2=p2->prior; } while(p1!=L1) { s=(DLinkList*)malloc(sizeof(DLinkList)); s->data=p1->data; s->next=Ls->next; s->prior=Ls; Ls->next=s; p1=p1->prior; } while(p2!=L2) { s=(DLinkList*)malloc(sizeof(DLinkList)); s->data=p2->data; s->next=Ls->next; s->prior=Ls; Ls->next=s; p2=p2->prior; }}voidmain(){ DLinkList*L1,*L2,*Lp,*Ls; intc; charX[MaxSize],Y[MaxSize],string1[MaxSize],string2[MaxSize]; char*p; cout<<"此为两位任意长的整数加减法器!"; cout<<endl<<endl; cout<<"1:begin!\n2:beginagain!\n3:over!\n"; cin>>c; while(c!=3) { intn=0,n1=0; cout<<"请输入整数A:"; cin>>string1; p=string1; while(*p) { n++; p++; } p=string1; for(inti=n-1;i>=0;i--) { X[i]=*p; p++; } GreatList(L1,X,n); cout<<"请输入整数B:"; cin>>string2; p=string2; while(*p) { n1++; p++; } p=string2; for(i=n1-1;i>=0;i--) { Y[i]=*p; p++; } GreatList(L2,Y,n1); plus(L1,L2,Lp); cout<<"A+B="; DisplayList(Lp); cout<<"A-B="; if(strcmp(X,Y)==0) { cout<<"0"; } elseif(n==n1&&strcmp(X,Y)>0||n>n1) { subtraction(L1,L2,Ls); DisplayList(Ls); } else { subtraction(L2,L1,Ls); cout<<"-"; DisplayList(L
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 课题申报参考:金代民族交往交流交融的考古学观察
- 课题申报参考:减税降费政策实施效果评估和策略优化研究
- 二零二五版环保项目临时工劳动合同4篇
- 基于2025年度计划的环保项目合作协议3篇
- 2025年智能水电表更换与数据采集服务合同4篇
- 2025年度个人退房协议书范本(适用于商业地产)4篇
- 二零二五版建筑工程公司资质借用与施工监督服务协议3篇
- 二零二五年度商业综合体场地租赁合同范本6篇
- 专利授权事务全权委托合同书版B版
- 2025年度排水沟施工安全协议书范本
- GB/T 45107-2024表土剥离及其再利用技术要求
- 2024-2025学年八年级上学期1月期末物理试题(含答案)
- 商场电气设备维护劳务合同
- 2023年国家公务员录用考试《行测》真题(行政执法)及答案解析
- 全国教学设计大赛一等奖英语七年级上册(人教2024年新编)《Unit 2 Were Family!》单元教学设计
- 2024智慧医疗数据字典标准值域代码
- 年产12万吨装配式智能钢结构项目可行性研究报告模板-立项备案
- 【独家揭秘】2024年企业微信年费全解析:9大行业收费标准一览
- 医疗器械经销商会议
- 《±1100kV特高压直流换流变压器使用技术条件》
- 1-1 拥抱梦想:就这样埋下一颗种子【2022中考作文最热8主题押题24道 构思点拨+范文点评】
评论
0/150
提交评论