




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、长整数四则运算+数据结构课程设计长整数四则运算题目:编制一个演示长整数的四则运算的程序一、需求分析1 .本程序实现计算任意长的整数的四则运算.以用户和计算机对话的方式,先后输入数字的最多位数,然后程序就计算并显示出这两个数的运算。2 .利用双向循环链表现实长整数的存储,每个结点含一个整形变量。输入的形式以回车结束,可以直接输入正数或负数,程序会过滤掉无效的字符。按中国对于长整数的表示习惯,每四位一组,除数字和位于首位置的负号外,其它一切字符都将作为分隔符,连续多个分隔符当一个处理。但不使用分隔符也不影响结果。3 .测试数据(1)0;0;输出“0”;(2)-2345,6789;-7654,321
2、1;输出-1,000,000”;(3)-9999,9999;1,0000,0000,0000;输出“9999,0000,0001”;(4)1,0001,0001;-1,0001,0001;输出“0”;(5)1,0001,0001;-1,0001,0001;输出“1”;(6)-9999,9999,9999;-9999,9999,9999;输出-1,9999,9999,9998”;(7)1,0000,9999,9999;1;输出"1,0001,0000,0000".二、概要设计为实现上述程序功能,应以双向循环链表表示长整数。为此,需要定义一个抽象数据类型。1 .抽象数据类型定义
3、为:ADTOrderedList2 .数据对象:D=ai|aiint,i=1,2,.n,n>0基本操作:init(&a,digit4)操作结果:构造一个位数是digit4*4长整数。pass(&a,&b,&c)初始条件:a,b,c都已存在操作结果:c等于a和b的和。nep(&a)初始条件:a已存在。操作结果:a变为输入参数的相反数。printlong(&a)初始条件:a已存在。操作结果:按四位一组,分隔符为","的格式,在屏幕上输出aston(&S,&a)初始条件:a已存在。操作结果:把字符串形式的长数字
4、赋给a。ADTOrderedList2.本程序包含两个模块:1)主程序模块:Voidmain()选择操作:1:帮助。2:加法。3:减法。4:乘法。5:除法。6:退出。打印结果;三、详细设计1 .元素类型,结点类型,指针类型#defineNULL0#include<stdio.h>#include<stdlib.h>#include<conio.h>typedefstructlongnode/f每个节点的结构*/intnum;/*数字*/structlongnode*low1;/*指向低一位节点*/structlongnode*high1;/*指向高一位节点*
5、/longnode;typedefstructxlong/*每个长整数的结构*/longnode*High;/*每个长整数的最高节点*/longnode*Low;/*每个长整数的最低节点*/intdigit4;/*每个长整数的总位数(不包括高位的0)/4*/*xlong;intinit(xlong*a,intdigit4KintI;/*.init.*/longnode*j;(*a)=(xlong)malloc(sizeof(structxlong);/*为a的头结构申请空间,并赋初始值*/(*a)>High=NULL;(*a)->Low=NULL;(*a)->High=NUL
6、L;(*a)->Low=NULL;(*a)->digit4=0for(i=0;i<digit4;i+)/*申请digit4个节点,初始化*/j=(longnode*)malloc(sizeof(longnode);j->num=0;j->high1=NULL;j->low1=(*a)->High;if(*a)->High)(*a)->High->high1=j;else(*a)->Low=j;(*a)->High=j;(*a)->digit4+;intpass(xlonga,xlongb,xlongc)intcf=0
7、;/*两个数字的相加*/longnode*a1=a->Low,*b1=b->Low,*c1=c->Low;while(a1)c1->num=a1->num+b1->num+cf;if(c1->num>9999)cf=1;/*如果产生进位(借位)*/c1->num-=10000;elsecf=0;a1=a1->high1;b1=b1->high1;c1=c1->high1;returncf;/*最高位的进位(借位)*/intpassa(xlonga,xlongb,xlongc)intcf=0;/*两个数字的相减*/longn
8、ode*a1=a->Low,*b1=b->Low,*c1=c->Low;while(a1)c1->num=a1->num-b1->num-cf;if(c1->num>9999)cf=1;/*如果产生进位(借位)*/c1->num-=10000;elsecf=0;a1=a1->high1;b1=b1->high1;c1=c1->high1;returncf;/*最高位的进位(借位)*/intpassb(xlonga,xlongbelongc)intcf=oy*两个数字的相乘*/longnode*al=a->Low9*b
9、l=b->Low,*cl=c->Low;while(al)cl->num=al->num*bl->num*cf;if(cl->num>9999)cf=l;/*如果产生进位(借位)*/cl4nlim=10000;elsecf=O;al=al->highl;bl=bl->highl;cl=cl->highl;return cf;/*最高位的进位(借位)*/intpassc(xlongaxlongbelongc)intcf=0*两个数字的相除*/longnode*al=a->Low,*b1=b->Low,*cl=c->Lo
10、w;while(al)cl->num=a1->num/b1->num/cf;if(cl->num>9999)cf=l;/*如果产生进位(借位)*/cl->num-=10000;elsecfH);al=al->highl;bl=bl->highl;cl=cl->highl;;return cf;/*最高位的进位(借位)*/nep(xlong a)int cf=l;/*求a的相反数*/*因为求相反数是取反加一,所以这里cfM;*/longnode*al=a->Low;while(al)a1->num=9999-(al->num
11、)+cf;if(a1->num>9999)al->num=10000;elsecM);a1=al->highl;)return;printlong(xlonga)longnode*i=a->High*打印长整数a*iif(i->num>=5000)printf(n-n);/*最高位(bit)=l表示负数,即用补码表示*/nep(a);/*求反打印其绝对值*/while(i&&i->num=O)i=i->lowl;/*跳过最位的0*/if(i)printf(n%dn,i->num);i=i->Iowl;if(i)p
12、rintf(w,w);elseprintf(uOw);/*a=0打0*/while(i)printf(n%04d,i->num);printf(M/1);/*把字符串转化为数字赋给a */i=i->Iowl;intston(charin|9xlongout)intbit,i,jishu=l,numO=O;longnode*j=out->Low;i=strlen(in)-l;while(i>=0&&j)/*循环每一个字节*/bit=in|il>09y*把字符形式的值赋给整数形式的bit*/if(bit>=0&&bit<=9
13、)num0+=jishu*bit;/*力口进numO*/jishu*=1O;/*基数自乘10*/if(jishu>l&&(jishu>=10000|bit<0|bit>9)/*数字以外的字符*/j->num=num0;j=j->highl;/*存入一个节点num0=0;jishu=l;if(num0)j->num=numO;j=j->highl;/*把最后一个没存入节点的数存入节点*/*最位不足补0 */for(;jy=j->highl)j->num=0;if(out->High->num>=5000
14、)return 1;/* 如果1高位是1,返回1表示出*/如果最后一个字符是,一,则取反*/ return/ 加*/if(in|0|=fJ)nep(out);/*0;intadd()charintdigit4,cM);xlonga,b,c;doprlntf(MHovvmuchdigitsdoyouneed?");/人输入最多位数3scanf(n%df&digit4);vvhile(digit4<=0);a1=(char*)malloc(digit4+1);b1=(char*)malloc(digit4+1);digit4=digit4/4+1;init(&a,d
15、igit4);init(&b,digit4);init(&c,digit4);/*初始化a,b,c*/docf=0;printf("Enter2number:n");scanf("%s”,a1);printf("+n");scanf("%s”,b1);cf|=ston(a1,a);cf|=ston(b1,b);while(cf);/*输入被加数和加数,如果转换出错,则重输*/pass(a,b,c);/*执行相加运算*/printlong(a);printf("+");/*打印结果*/printlon
16、g(b);printf("=");printlong(c);printf("n");printf("n");bioskey(0);intsubtract。/*减*/char*a1,*b1;intdigit4,cf=0;xlonga,b,c;doprintf("Howmuchdigitsdoyouneed?");/*输入最多位*/scanf("%d”,&digit4);while(digit4<=0);a1=(char*)malloc(digit4+1);b1=(char*)malloc(di
17、git4+1);digit4=digit4/4+1;init(&a,digit4);init(&b,digit4);init(&c,digit4);/*初始化a,b,c*/docf=0;printf("Enter2number:n");scanf("%s”,a1);printf("n");scanf("%s”,b1);cf|=ston(a1,a);cf|=ston(b1,b);while(cf);/*输入被减数和减数,如果转换出错,则重输*/passa(a,b,c);/*执行相减运算*/printlong(a)
18、;printf("-");/*打印结果*/printlong(b);printf("=");printlong(c);printf("n");printf("n");bioskey(0);intmultiply。/*乘*/char*a1,*b1;intdigit4,cf=0;xlonga,b,c;doprintf("Howmuchdigitsdoyouneed?");/*输入最多位数*/scanf("%d”,&digit4);while(digit4<=0);a1=(ch
19、ar*)malloc(digit4+1);b1=(char*)malloc(digit4+1);digit4=digit4/4+1;init(&a,digit4);init(&b,digit4);init(&c,digit4);/*初始化a,b,c*/docf=0;printf("Enter2number:n");scanf("%s”,a1);printf("*n");scanf("%s”,b1);cf|=ston(a1,a);cf|=ston(b1,b);while(cf);/*输入被乘数和乘数,如果转换出错
20、,则重输*/passb(a,b,c)/*执行相乘运算*/printlong(a);printf("*打明结果*/printlong(b);printf("=");printlong(c);printf("n");printf("n");bioskey(0);intdivision。/*除*/char*a1,*b1;intdigit4,cf=0;xlonga,b,c;doprintf("Howmuchdigitsdoyouneed?");/*输入最多位数*/scanf("%d",&
21、;digit4);while(digit4<=0);a1=(char*)malloc(digit4+1);b1=(char*)malloc(digit4+1);digit4=digit4/4+1;init(&a,digit4);init(&b,digit4);init(&c,digit4);/*初始化a,b,c*/docf=0;printf("Enter2number:n");scanf("%s”,a1);printf("八n");scanf("%s”,b1);cf|=ston(a1,a);cf|=sto
22、n(b1,b);while(cf);/*输入被除数和除数,如果转换出错,则重输*/passc(a,b,c);/*执行相除运算*/printlong(a);printf("/");/*打印结果*/printlong(b);printf("=");printlong(c);printf("n");printf("n");bioskey(0);2 .主函数代码voidmain()/*main*/intc;clrscr();textcolor(BLUE);printf( *n");printf("*We
23、lcometoThunderstudio!*n");printf( *n");printf(”*本程序实现长整数四则运算*n");one:printf("1:HELP'n");printf("2:ADD'n");printf("3:SUBTRACTn");printf("4:MULTIPLYn");printf("5:DiVISION'n");printf("6:EXIT'n");for(;)c=getch();switch(atoi(&c)case1:clrscr();gotoone;break;case2add();break;case 3: subtract。;break;case 4: multiply。;break;case 5: division。;break;case 6: textcolor(BLUE);An");printf("nprintf("Thankscw'swork!n");break;def
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 IEC 60068-2-30:2005 FR-D Environmental testing - Part 2-30: Tests - Test Db: Damp heat,cyclic (12 h + 12 h cycle)
- 高铁动车组维修保养规范及流程
- 《光的折射与反射现象:小学自然常识实验教案》
- 音响考试试题及答案
- 六一入队活动方案
- 六一寻宝活动方案
- 六一患儿活动方案
- 六一果冻活动方案
- 六一活动具体活动方案
- 六一活动方案
- 《基础护理学》给药课件
- 绘本故事三只小猪盖房子课件
- 《WPS办公应用职业技能等级》课件-1. WPS初级-文字
- 抗日战争与中国的文化自觉
- QB∕T 1744-2013 电热毯、电热垫及类似柔性发热器具用非织造针刺毯
- 中国人民大学强基计划文科试卷
- 生物-云南省昆明市2023-2024学年高二下学期期末质量检测试题和答案
- 幼儿园小班语言课件:《池塘夏夜》
- 虹吸式雨水排水系统施工方案
- 北京草场改造规划方案
- 水利施工安全培训课件
评论
0/150
提交评论