数据结构课程设计汇总_第1页
数据结构课程设计汇总_第2页
数据结构课程设计汇总_第3页
免费预览已结束,剩余17页可下载查看

下载本文档

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

文档简介

1、需求分析一.变量。输入的形式以回车结束,可以直接输入正数或负数,程序1 本程序;、现计算任意长的整数的四那么运算.以用V : %、.;户和计算机对话的方式,先 后输入数字的最多位数,然后程序就计算并显示出这两个数的运算。2.;利用双向循环链表现实长整数的存储每个结点含一个整形会过滤掉无效的字符。按中国对于长整数的表示习惯,每四位一“* 产 L k °°组,除数字和位于首位置的负号外,其它一切字符都将作为分隔 . £. .3 测试数据10; 0;输出絃丄000,000"输出 “0 ;(2)-2345,6789;76543211; (3)-9999,9999

2、; 1,0000,0000,0000;输岀符,连续多个分隔符当一个处理。但不使用分隔符也不彤响结果.“9999,0000,0001 ; (4)1,0001,0001;,0001,0001;输出 “0卩;(5)1,0001,0001; -1,0001,0001;输出 銘1 ;(6).999999999999;9999,9999,9999;输出 作1,9999,9999.9998 ; (7)1,0000,9999,9999; 1; 输出,00010000,0000.二、概要设计为实现上述程序功能,应以双向循环链表表示长整数。为此,需要定义一个抽象数据类型。1.抽象数据类型定义为: ; 16flAD

3、T OrderedList 对彖:D=:ai|aieinti=l,2,.n, nO墓本操作::init(&a,digif4)操作结果:构造一个位数是digit4*4长整数。 ". q pass(&a,&b,&c)初始条件i a,b3c都已存在操作结果:c等于a和b的和uep(&a)4F初始条件:a己存在e操作结果:a变为输入参数的相反数。printlong (&a)初始条件帚a己存在。操作结果:按四位一组,分隔符为?的格式,在屏幕上输岀滾stcm(&S,&a)初始条件£ a已存在©操作结果:把字符串形

4、式的长数字赋给g ADT OrderedList2本程序包含两个模块:1)主模块:Vbid main() 选择操作:1:蠶助62:加法壬3:减法616/2 4:乘法。5:除法©6:退出。打印结果%去详细设计1.元素类型,结点类型,指针类型#define NULL 0#include<stdio .h>#include<stdlib .h>#iiiclude<conio.h> . . typedef stinct longnode 每个节点的结构対int num; /導数字资/*指向低一位节点勺s-r1 struct longnode *lowl;s

5、tinctlongnode *highl- /*指向高一位书点慕/% . longnode;typedef stinct xlong 严每个长整数的结构*/longnode *High;严每个长整数的最高节点引 严每个长整数的最低节点*/ " longnode 审 Low;int digit4;/*每个长整数的总位数(不包括高位的0)/4 /J*xlong;int iiiit(xlong digit4)int I; /*.init:/longnode *j;(*a)=(xlong)malloc(sizeof(struct xlong);/*为 a 的头结构申请空间,并赋初始值*/ (

6、*a)>High=NULL;(*a)>Low=NULL;(*a)->Higli=NULL; (*a)-Low=NULL; * * . (a)->digit4=0:for(i=0; i<digit4;i-H-) /* 申请 digit4 个节点,初始化 */j=(longiiode)malloc(sizeof(longnode);j->num=O;j->highl=NULL; j ->lo w 1a>>High; 夕 夕 、 了 if(*a)->High) (*a)->High->higlil=j & . el

7、se(a)->Lowj ;(*a)->High=j ;(*a)->digit4+;int pass(xlong a,xlong b?xlong c) <1 f厂"int cf=O;/*两个数字的相加*/.怙wliile(a l)cl->iium=a 1 ->num+b 1 ->num+cf;if(c l->num>9999?I16/*如果产生进位借位勺 14cE;cl>imm-=10000;elsecf=0;retiim cf; /*最高位的进位(借位)*/%int passa(xlong a?xlong b.xlong c

8、)两个数字的相减int c=0;longuode *al-a->Low,*b l=b->Low,*cl =c->Low; . wliile(a );c 1 ->niun=a Eum-b 1 ->niun-cf;借位 if(cl->num>9999)cf=l;/* 如果产生进位0 */cl>num-=10000;elsecf=0;:al=al ->liigli l;b l=bl ->high 1; c lcl->high 1 ;/严/最高位的进位严retuni cf;借位?iiit passb(xlong a,xlong b,xl

9、ong c) J a a o*/两个数字的相乘int cM;/*longnodewliile(a l)cl ->iium=a 1 ->niun*b 1 ->mun*cf;if(c 1 ->niun>9999) cf=l;怪 如果产生进位(借位)W cl->inuii=10000-O :elsecf=0;al=al->liighl;bl=bl->highl;cl=cl->highl;J:return cf; :/最高位的进位借位尸/int passc(xlong a?xlong b,xlong c)° H“*/ int cf=0;/

10、*两个数字的相除longiiode * a 1 =d>Low *b 1 =b->Low,*c 1 =c->Low: while(al) c">num=a">niim/b_>niuii/cfif(c 1 ->inun>9999) c* 如果产空进仆(伫(5J:劑 else cf=0j.al-al->liigli 1 ;b 1 =b 1 ->highl;cl-cl->high 1; J: : retiun cf; /*最高位的进位(借位)*/$/的相反数求/* nep(xlong a) a/欄因为求相反数是取反加

11、一,所以这里 int cf= 1; c匸 1 ;longiiode 杓 l=a>Low;1616while(al)al ->inun=9999-(a b>mim)+cf;if(a lr>num>9999) al->nu:=10000;else cf=0; a 1 =a l->highl;return;%piiiitlong(xlong a) a */ longnode *i=a->Higli:/* fT印长整数 if(i->num>=5000) F L */表示负数,即用补码表示printf(-); /*最高位(bit)=l */ &

12、#176; f Z*求反打印其绝对值nep(a); J while(i&&i>num=O) i=i->lowl; /* 跳过最位的 0 */iffi) printf(%d,i->num)i /i=i->lowl;);“ ,if(i) printf( J L else printf( “0*/ 扌丁 0"、); /* a=0while(i) printf(d?i->num); if(i->lowl) printfQ;i=i->lowU 号16/7int ston(char in,xlong out)/*把字符串转化为数字赋给a*

13、/int bitj jishu=l,num0=0: longnode *j=out->Low;i=strlen(in)-l ;while(i>=0 && j) /*循环每一个字节*/bit=ini- P尸 把字符形式的值赋给整数形式的bit */iflg绊=0 && bit <=9):mun0+=j ishu*bit; /加进 numO */r 丁 r. .jishu*=10; /* 基数自乘 10 */ if(jishu>l&&(jishu>=10000|bit<0|bit>9)jf/* 数字以外的字符

14、 */ j->num=numO;j=j->highl; /* 存入一个节点 */ num0=0;jishu=T;卜;if(numO) j->num=numO;jj->highl;严把最后一个没存入节点的数存入节点*/fty;j=j->liiglil) j->nxun=O; /* 最位缺乏补 0 */if(out->Higli->iium>=5000)return 1; /* 如果最高位是1,返回1表示出*/if(inO-') nep(out); /* 如果最后一个字符是贝!I取反 */retiun 0;16/sint add() c

15、har *a 11;/* 加 */int digit4,cf=0;xlong a?b,c;do priiitf(How much digits do you need?);/* 输入最多位数*/: xscaiif(%d,&digit4); Jwliile(digit4<=0);a l=(char*)malloc(digit4+l);b 1 =(char*)malloc(digit4+l);digit4=digit4/4+l;init(&a,digit4);init(&bdigit4):init(&c,digit4); /* 初始化 a,b,c */: .

16、g 丄 J . .Ado cf=O; printf(Enter 2 number:n); scanf(%s,a 1 );pi'intf(+n);亠.« scanf(%s,bl);cfl=ston(al ,a); cf=ston(bl,b);引,如果转换出错侧重输输入被加数和加数wliile(cf);/*':携“ */ pass(a,b,c);/*执行相加运算*/ printlong(a);printf(+); /* ;打印结果:printlong(b);printf(=);printlong (c);bioskey(0);16/9int subtract。/* 减ch

17、ar 細 1 衣bl;iiit digit4,c0;xlong a,b,c;do piintf(How much digits do you need?);/* 输入最多位*/scanf(%d,&digit4); while(digit4<=0);a 1 =(char*)malloc(digit4+1); y / bl =(char*)malloc(digit4+l);digit4=digit4/4+l;init(&a,digit4);init(&b,digit4);init(&c,digit4); /* 初始化 a,b,c */wdo cf=0;piin

18、tf(Eiiter2mimber:n);scanf(%s,al);piintf(;scanf(%s,bl); .0 cfl=stoii(al,a);cf=stou(bl.b);while(cf);: /*输入被减数和减数如果转换出错侧重输*/*执行相减运算*J passa(abc);16/ioprintlong(a);priiitf(-);/* 打印结果 */ piiiitlong(b);piintf();ejpiintlong(c);printffprintf( );bioskey(0);int multiplyO /* 乘 */J chai al?*bl;int digit4,cf=0;x

19、long a,b,c;do printf(How much digits do you need?); /* 输入最多位数 */scanf(%d,&digit4); wliile(digit4<=0);a 1 =(char*)malloc(digit4+l);b 1 =(char * )niallo c(digit4+1 j;digit4=digit4/4+l;init (&a,digit4);init(&b,digit4);init(&c,digit4); /* 初始化 a,b,c */ do cf=O;piiiitf(Enter2number:n);A

20、 J scanf(%s,a l);printf(*n); 夕scanf(%s,bl);cf=ston(al,a);fit e <cf=ston(blnb);while(cf)/*输入被乘数和乘数如果转换出错侧重输*/仔:抒* * * 怎: 叮 rpassb(a?b.c);/*执行相乘运算*/凭-: . o :: printloiig(a);priiitf(滋和);/* 扛印结果 */piiiitlong(b);pidntf(=);4 piiiitlong(c);printf( printffx );bioskey(0); int divisionQ /* I;余勺char *al,*bl

21、;int digit4?cf=0;输入最多位数严° xlong abc;do priiitf(How much digits do you need?); */ scanf(%d,&digit4);while(digit4<=0); a l=(chai*)malloc(digit4+l);b l=(char*)malloc(digit4+l);b,« digit4=digit4/4+l ;init(&a,digit4);init(&b,digit4);init(&c,digit4); /* a?b,c */ 初始化 cf=O;priii

22、tf(Enter 2 numb悠如胆40$scanf(%s,a l);piintf(An);16/12scanf(%s,bl)-% cf=ston(al,a);:.cfl=ston(bl,b);while(cf); /*输入被除数和除数,如果转换岀错,那么重输*/* passc(a,b?c);执行相除运算/ priiitlong(a);printf(/); /* 打印结果 */ piiiitlong(b) ;printf(=);- piiiitlong(c);piintf(a A * V););bioskey(0);2 主函数代码void main() /*maiii*/ 'int c

23、;clrscrOltextcolor(BLUE);one: printf(:HELPn);piiiitf(: - ADDii);e % 16/13DiVISIONXn);piiiitf(:-EXITm);fbr(;)c=getchO;switch(atoi(&c) case 1: cliscrQ;goto one; break;case 2: add(); break;case 3:subtractQ ; break;case 4:multiplyO;break;; case 5*divisionO;break;case 6:textcoloiBLUE);printfOpiintf(Thanks cw's work!n);break

温馨提示

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

评论

0/150

提交评论