版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
年4月19日長整數(shù)四則運算數(shù)據(jù)結(jié)構(gòu)課程設(shè)計文檔僅供參考,不當(dāng)之處,請聯(lián)系改正。長整數(shù)四則運算題目:編制一個演示長整數(shù)的四則運算的程序一、需求分析1.本程序?qū)崿F(xiàn)計算任意長的整數(shù)的四則運算.以用戶和計算機對話的方式,先后輸入數(shù)字的最多位數(shù),然后程序就計算并顯示出這兩個數(shù)的運算。 2.利用雙向循環(huán)鏈表現(xiàn)實長整數(shù)的存儲,每個結(jié)點含一個整形變量。輸入的形式以回車結(jié)束,能夠直接輸入正數(shù)或負(fù)數(shù),程序會過濾掉無效的字符。按中國對于長整數(shù)的表示習(xí)慣,每四位一組,除數(shù)字和位于首位置的負(fù)號外,其它一切字符都將作為分隔符,連續(xù)多個分隔符當(dāng)一個處理。但不使用分隔符也不影響結(jié)果。3.測試數(shù)據(jù)(1)0;0;輸出“0”; (2)-2345,6789;-7654,3211;輸出“-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è)計 為實現(xiàn)上述程序功能,應(yīng)以雙向循環(huán)鏈表表示長整數(shù)。為此,需要定義一個抽象數(shù)據(jù)類型。抽象數(shù)據(jù)類型定義為:ADTOrderedList{ 數(shù)據(jù)對象:D={ai|ai∈int,i=1,2,...n,n≥0}基本操作:init(&a,digit4)操作結(jié)果:構(gòu)造一個位數(shù)是digit4*4長整數(shù)。pass(&a,&b,&c)初始條件:a,b,c都已存在操作結(jié)果:c等于a和b的和。 nep(&a) 初始條件:a已存在。 操作結(jié)果:a變?yōu)檩斎雲(yún)?shù)的相反數(shù)。printlong(&a) 初始條件:a已存在。 操作結(jié)果:按四位一組,分隔符為","的格式,在屏幕上輸出a。ston(&S,&a) 初始條件:a已存在。 操作結(jié)果:把字符串形式的長數(shù)字賦給a。}ADTOrderedList2.本程序包含兩個模塊: 1)主程序模塊:Voidmain(){選擇操作:1:幫助。2:加法。 3:減法。 4:乘法。 5:除法。6:退出。打印結(jié)果;}三、詳細(xì)設(shè)計1.元素類型,結(jié)點類型,指針類型#defineNULL0#include<stdio.h>#include<stdlib.h>#include<conio.h>typedefstructlongnode{ /*每個節(jié)點的結(jié)構(gòu)*/ intnum; /*數(shù)字*/ structlongnode*low1; /*指向低一位節(jié)點*/structlongnode*high1; /*指向高一位節(jié)點*/}longnode;typedefstructxlong{ /*每個長整數(shù)的結(jié)構(gòu)*/ longnode*High; /*每個長整數(shù)的最高節(jié)點*/ longnode*Low; /*每個長整數(shù)的最低節(jié)點*/ intdigit4; /*每個長整數(shù)的總位數(shù)(不包括高位的0)/4*/}*xlong;intinit(xlong*a,intdigit4){ intI;/*.init.*/ longnode*j;(*a)=(xlong)malloc(sizeof(structxlong));/*為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個節(jié)點,初始化*/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;/*兩個數(shù)字的相加*/ 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;/*如果產(chǎn)生進位(借位)*/c1->num-=10000; }else{cf=0;} a1=a1->high1;b1=b1->high1;c1=c1->high1;} returncf; /*最高位的進位(借位)*/}intpassa(xlonga,xlongb,xlongc){intcf=0;/*兩個數(shù)字的相減*/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;/*如果產(chǎn)生進位(借位)*/ c1->num-=10000; }else{cf=0;}a1=a1->high1;b1=b1->high1;c1=c1->high1;} returncf; /*最高位的進位(借位)*/}intpassb(xlonga,xlongb,xlongc){ intcf=0;/*兩個數(shù)字的相乘*/ 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; /*如果產(chǎn)生進位(借位)*/ c1->num=10000;}else{cf=0;} a1=a1->high1;b1=b1->high1;c1=c1->high1;} returncf; /*最高位的進位(借位)*/}intpassc(xlonga,xlongb,xlongc){ intcf=0;/*兩個數(shù)字的相除*/ 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; /*如果產(chǎn)生進位(借位)*/ c1->num-=10000; }else{cf=0; }}a1=a1->high1;b1=b1->high1;c1=c1->high1; } returncf; /*最高位的進位(借位)*/}nep(xlonga){ /*求a的相反數(shù)*/ intcf=1; /*因為求相反數(shù)是取反加一,因此這里cf=1;*/ longnode*a1=a->Low; while(a1){a1->num=9999-(a1->num)+cf;if(a1->num>9999){ a1->num=10000;}else{cf=0;}a1=a1->high1; }return;}printlong(xlonga){ longnode*i=a->High;/*打印長整數(shù)a*/ if(i->num>=5000){ printf("-");/*最高位(bit)=1表示負(fù)數(shù),即用補碼表示*/ nep(a); /*求反打印其絕對值*/ }while(i&&i->num==0)i=i->low1; /*跳過最位的0*/ if(i){printf("%d",i->num); i=i->low1; if(i)printf(“,”); }elseprintf(“0”); /*a=0打0*/while(i){printf("%04d",i->num); if(i->low1) printf(","); i=i->low1; }}intston(charin[],xlongout){ /*把字符串轉(zhuǎn)化為數(shù)字賦給a*/ intbit,i,jishu=1,num0=0; longnode*j=out->Low;i=strlen(in)-1;while(i>=0&&j){ /*循環(huán)每一個字節(jié)*/bit=in[i]-‘0’;/*把字符形式的值賦給整數(shù)形式的bit*/if(bit>=0&&bit<=9){num0+=jishu*bit; /*加進num0*/ jishu*=10; /*基數(shù)自乘10*/ }if(jishu>1&&(jishu>=10000||bit<0||bit>9)){/*數(shù)字以外的字符*/ j->num=num0; j=j->high1; /*存入一個節(jié)點*/ num0=0; jishu=1;}i--;} if(num0){j->num=num0;j=j->high1;}/*把最后一個沒存入節(jié)點的數(shù)存入節(jié)點*/for(;j;j=j->high1)j->num=0; /*最位不足補0*/if(out->High->num>=5000)return1; /*如果最高位是1,返回1表示出*/if(in[0]=='-')nep(out); /*如果最后一個字符是'-'則取反*/ return0;}intadd(){char*a1,*b1;/*加*/intdigit4,cf=0;xlonga,b,c;do{printf("Howmuchdigitsdoyouneed?");/*輸入最多位數(shù)*/scanf("%d",&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*/do{cf=0; printf("Enter2number:\n");scanf("%s",a1);printf("+\n");scanf("%s",b1);cf|=ston(a1,a); cf|=ston(b1,b);}while(cf);/*輸入被加數(shù)和加數(shù),如果轉(zhuǎn)換出錯,則重輸*/pass(a,b,c); /*執(zhí)行相加運算*/printlong(a);printf("+"); /*打印結(jié)果*/printlong(b);printf("=");printlong(c);printf("\n");printf("\n");bioskey(0);}intsubtract()/*減*/{char*a1,*b1;intdigit4,cf=0;xlonga,b,c;do{printf("Howmuchdigitsdoyouneed?");/*輸入最多位*/scanf("%d",&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*/do{cf=0;printf("Enter2number:\n"); scanf("%s",a1);printf("\n");scanf("%s",b1);cf|=ston(a1,a); cf|=ston(b1,b);}while(cf); /*輸入被減數(shù)和減數(shù),如果轉(zhuǎn)換出錯,則重輸*/passa(a,b,c); /*執(zhí)行相減運算*/printlong(a);printf("-"); /*打印結(jié)果*/printlong(b);printf("=");printlong(c);printf("\n");printf("\n");bioskey(0);}intmultiply()/*乘*/{char*a1,*b1;intdigit4,cf=0;xlonga,b,c;do{printf("Howmuchdigitsdoyouneed?"); /*輸入最多位數(shù)*/ scanf("%d",&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*/do{cf=0;printf("Enter2number:\n");scanf("%s",a1);printf("*\n");scanf("%s",b1); cf|=ston(a1,a); cf|=ston(b1,b);}while(cf);/*輸入被乘數(shù)和乘數(shù),如果轉(zhuǎn)換出錯,則重輸*/passb(a,b,c); /*執(zhí)行相乘運算*/printlong(a);printf(“*”);/*打印結(jié)果*/printlong(b);printf("=");printlong(c);printf("\n");printf("\n");bioskey(0);}intdivision()/*除*/{char*a1,*b1;intdigit4,cf=0;xlonga,b,c;do{printf("Howmuchdigitsdoyouneed?"); /*輸入最多位數(shù)*/scanf("%d",&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*/do{cf=0;printf("Enter2number:\n");scanf("%s",a1);printf("/\n"); scanf("%s",b1); cf|=ston(a1,a); cf|=ston(b1,b);}while(cf); /*輸入被除數(shù)和除數(shù),如果轉(zhuǎn)換出錯,則重輸*/passc(a,b,c); /*執(zhí)行相除運算*/printlong(a);printf("/"); /*打印結(jié)果*/printlong(b);printf("=");printlong(c);printf("\n");printf("\n");bioskey(0);}2.主函數(shù)代碼voidmain()/*main*/{ intc;clrscr();textcolor(BLUE);printf("***********************************************\n");printf("*********WelcometoThunderstudio!************\n");printf("***********************************************\n");printf("*********本程序?qū)崿F(xiàn)長整數(shù)四則運算**************\n");one:printf("1:HELP\n");printf("2:ADD\n");printf("3:SUBTRACT\n");printf("4:MULTIPLY\n");printf("5:DiVISION\n");printf("6:EXIT\n");for(;;){c=getch(); switch(atoi(&c)){case1:clrscr(); gotoone; break; case2: add();break; case3: subtract();break; case4: multiply();break;case5:division();break;case6:textcolor(BLUE); printf("\n\n");printf("Thankscw'swork!!\n"); break; default: textcolor(4); printf("So
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大學(xué)地理(平原地貌)試題及答案
- 2025年中職機電設(shè)備(機電安裝調(diào)試)試題及答案
- 2025年高職第三學(xué)年(語文教育)現(xiàn)代漢語教學(xué)階段測試題及答案
- 2025年高職電工電子技術(shù)(電路裝調(diào))試題及答案
- 2025年中職中藥資源與開發(fā)(種植技術(shù))試題及答案
- 2025年中職計算機應(yīng)用(辦公自動化應(yīng)用)試題及答案
- 2025年中職(大數(shù)據(jù)與會計)稅務(wù)申報實訓(xùn)階段測試題及答案
- 2025年中職土木建筑(建筑構(gòu)造基礎(chǔ))試題及答案
- 2025年大學(xué)大三(護理)兒科護理技術(shù)試題及答案
- 2025年中職烹飪工藝與營養(yǎng)(面包制作基礎(chǔ))試題及答案
- 三年級上冊生命與安全教案
- 第二章第三節(jié)中國的河流第二課時長江-八年級地理上冊湘教版
- 《建筑工程定額與預(yù)算》課件(共八章)
- (完整版)設(shè)備安裝工程施工方案
- 跨區(qū)銷售管理辦法
- 超聲年終工作總結(jié)2025
- 鉆井工程施工進度計劃安排及其保證措施
- 管培生培訓(xùn)課件
- 梗阻性黃疸手術(shù)麻醉管理要點
- 民用機場場道工程預(yù)算定額
- 膀胱切開取石術(shù)護理查房
評論
0/150
提交評論