長整數(shù)四則運(yùn)算數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)_第1頁
長整數(shù)四則運(yùn)算數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)_第2頁
長整數(shù)四則運(yùn)算數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)_第3頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、長整數(shù)四則運(yùn)算題LI:編制一個(gè)演示長整數(shù)的四則運(yùn)算的程序一、需求分析1. 本程序?qū)崿F(xiàn)計(jì)算任意長的整數(shù)的四則運(yùn)算.以用戶和計(jì)算機(jī)對話的方式, 先后輸入數(shù)字的最多位數(shù),然后程序就訃算并顯示出這兩個(gè)數(shù)的運(yùn)算。2. 利用雙向循環(huán)鏈表現(xiàn)實(shí)長整數(shù)的存儲(chǔ),每個(gè)結(jié)點(diǎn)含一個(gè)整形變量。輸入的 形式以回車結(jié)束,可以直接輸入正數(shù)或負(fù)數(shù),程序會(huì)過濾掉無效的字符。按中國對于 長整數(shù)的表示習(xí)慣,每四位一組,除數(shù)字和位于首位置的負(fù)號(hào)外,其它一切字符都將 作為分隔符,連續(xù)多個(gè)分隔符當(dāng)一個(gè)處理。但不使用分隔符也不影響結(jié)果。3. 測試數(shù)據(jù)(1) 0; 0;輸出 “0” ;(2) -2345, 6789; -7654, 3211;輸

2、出 “-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".二、概要設(shè)訃為實(shí)現(xiàn)上述程序功能,應(yīng)以雙向循環(huán)鏈表表示

3、長整數(shù)。為此,需要定義一個(gè)抽 象數(shù)據(jù)類型。1抽象數(shù)據(jù)類型定義為:ADT OrderedList2.數(shù)據(jù)對象:D= ai aiGint, i=l, 2,. n, nMO基本操作:init(&d, digit4)操作結(jié)果:構(gòu)造一個(gè)位數(shù)是digit4*4長整數(shù)。pass (&a, &b, &c)初始條件:a,b,c都已存在操作結(jié)果:c等于a和b的和。nep (&a)初始條件:&已存在。操作結(jié)果:°變?yōu)檩斎雲(yún)?shù)的相反數(shù)。printlong(&d)初始條件:a已存在。操作結(jié)果:按四位一組,分隔符為","的格式,在屏幕上

4、輸出ao ston(&S,&a)初始條件:&已存在。操作結(jié)果:把字符串形式的長數(shù)字賦給a。ADT OrderedList2.本程序包含兩個(gè)模塊:1)主程序模塊:V oid main() 選擇操作:1:幫助。2:加法。3:減法。4:乘法。5:除法。6:退出。打印結(jié)果;三、詳細(xì)設(shè)訃1.元素類型,結(jié)點(diǎn)類型,指針類型#define NULL 0ncludestdio. h>#include<stdlib h>#includeconio. h>typedef struct longnode /*每個(gè)節(jié)點(diǎn)的結(jié)構(gòu)*/int num; /*數(shù)字*/struct

5、longnode *lowl; /襯旨向低一位節(jié)點(diǎn)*/struct longnode *highl; /*指向高一位節(jié)點(diǎn)*/longnode;typedef struct xlong /*每個(gè)長整數(shù)的結(jié)構(gòu)*/longnode *High; /*每個(gè)長整數(shù)的最高節(jié)點(diǎn)*/longnode水Low; /*每個(gè)長整數(shù)的最低節(jié)點(diǎn)水/int digit4; /*每個(gè)長整數(shù)的總位數(shù)(不包括高位的0)/4 */ *xlong;int init(xlong *a,int digit4)int I;/*.init. */longnode *j;(*a) = (xlong)malloc (sizeof (struc

6、t xlong) ;/*為 a 的頭結(jié)構(gòu)申請空間,并賦初始值*/(*a)High二NULL;(*a)一Low二NULL;(*a)->High=NULL; (*a)->Low=NULL;(*a)->digit4-0;for(i=0; i<digit4; i+) /* 申請 digit4 個(gè)節(jié)點(diǎn),初始化*/ j=(longnode*)malloc(sizeof(longnode);j->num=0;j->highl=NULL; j->lowl=(*a)>High;if(*a)->High) (*a)->High->highl=j;e

7、lse(*a)->Low=j;(*a)->High=j;(*a)->digit4+;int pass (xlong a,xlong b,xlong c) int cf二0; /*兩個(gè)數(shù)字的相加*/longnode *al=:a->Low, *bl=b->Low, *cl=c->Low;while(al)cl->num=al->num+bl->num+cf;辻(cl->num>9999)Cf二1; /*如果產(chǎn)生進(jìn)位(借位)*/cl->num-=10000;elsecf=O;al=al->highl;bl=bl->

8、highl;cl=cl->highl;return cf; /*最高位的進(jìn)位(借位)*/int passa(xlong a,xlong b,xlong c) int cf二0; /*兩個(gè)數(shù)字的相減*/longnode *al=a->Low, *bl=b->Low, *cl=c->Low; while (al) cl-'nuniFl->num-bl->num-cf;if (cl->num>9999) cf=l;/* 如果產(chǎn)生進(jìn)位(借位)*/ cl->num-=10000;elsecf=0;al=al->highl;bl=bl-&

9、gt;highl;cl=cl->highl;return cf; /*最高位的進(jìn)位(借位)*/int passb(xlong a,xlong b,xlong c) int cf=0;/*兩個(gè)數(shù)字的相乘*/longnode*al=a->Low, *bl=b->Low, *cl=c->Low;while(al)cl->nunF31->num*bl->num*cf;if (cl->num>9999) cf=l; /* 如果產(chǎn)生進(jìn)位(借位)*/ cl->num=10000;elsecf=0;al=al->highl;bl=bl->

10、highl;cl=cl->highl;return cf; /*最高位的進(jìn)位(借位)*/int passe(xlong a,xlong b,xlong c) int cf二0;/*兩個(gè)數(shù)字的相除*/longnode *al=a->Low, *bl=b->Low, *cl=c->Low;while (al) cl->num=:al->num/bl->num/cf:if (cl->num>9999) cf=l; /* 如果產(chǎn)生進(jìn)位(借位)*/ cl->num-=10000;else cf=0; al=al->highl;bl=bl-

11、>highl;cl=cl->highl; return cf: /*最高位的進(jìn)位(借位)*/nep (xlong a) /* 求& 的相反數(shù)*/longnodeint cf二1; /*因?yàn)榍笙喾磾?shù)是取反加一,所以這里cf=l; */ *al=a->Low;while(al) al-num二9999-(al->num)+cf;辻(al->num>9999) al->num=10000;elsecf=0;al=al->highl;return;printlong(xlong a)longnode *i=a->High;/* 打印長整數(shù)

12、a */辻(i->num>=5000)printf (,/-/,) ; /*最高位(bit)=l表示負(fù)數(shù),即用補(bǔ)碼表示*/nep (a) ; /*求反打印其絕對值*/ while(i&&i-num=0) i=i->lowl; /* 跳過最位的 0 */if(i)printfi->num); i=i->lowl;if(i) printf(“,”);else printf ( “0”);/* a=0 打 0 */while(i)printf("%04d", i->num);辻(i->lowl)printff,"

13、);i=i->lowl: int ston(char in, xlong out) /* 把字符串轉(zhuǎn)化為數(shù)字賦給 a */ int bit, i, jishu二 1, numO二0;longnode *j=out-Low;i=strlen(in)-1;while(i>=0 && j) /* 循環(huán)每一個(gè)字節(jié)*/bit=ini0?;/*把字符形式的值賦給整數(shù)形式的bit */if (bit>=0 && bit <=9) numO+=jishu*bit; /* 加進(jìn) numO */ jishu*二 10; /*基數(shù)自乘10 */ 辻(jishu

14、l&&(jishu二 10000 bit<0 bit>9) /* 數(shù)字以外的字符水/ j- >num=num0;j=j->highl; /* 存入一個(gè)節(jié)點(diǎn)*/numO二0;jishu=l;i-;if(numO)j->num=numO: j=j->highl: /*把最后一個(gè)沒存入節(jié)點(diǎn)的數(shù)存入節(jié)點(diǎn)*/for (: j; j=j->highl) j->num=0; /* 最位不足補(bǔ) 0 */if(out->High->num>=5000)return 1; /*如果最高位是1,返回1表示出*/if (in0=-')nep (out); /如果最后一個(gè)字符

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論