




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、10 / 151 . 本程序?qū)崿F(xiàn)計(jì)算任意長(zhǎng)的整數(shù)的四則運(yùn)算.以用戶(hù)和計(jì)算機(jī)對(duì)話(huà)的方式,先后輸入數(shù)字的最多位數(shù),然后程序就計(jì)算并顯示出這兩個(gè)數(shù)的運(yùn)算。2 .利用雙向循環(huán)鏈表現(xiàn)實(shí)長(zhǎng)整數(shù)的存儲(chǔ),每個(gè)結(jié)點(diǎn)含一個(gè)整形變量。輸入的形式以回車(chē)結(jié)束,可以直接輸入正數(shù)或負(fù)數(shù),程序會(huì)過(guò)濾掉無(wú)效的字符。按中國(guó)對(duì)于長(zhǎng)整數(shù)的表示習(xí)慣,每四位一組,除數(shù)字和位于首位置的負(fù)號(hào)外,其它一切字符都將作為分隔符,連續(xù)多個(gè)分隔符當(dāng)一個(gè)處理。但不使用分隔符也不影響結(jié)果。3.測(cè)試數(shù)據(jù)(1)0; 0;輸出“ 0”(223)45,6789; -7654,3211;輸出“-1,000,000” -;(3)9999,9999; 1,0000,0
2、000,0000輸出;“ 9999,0000,0001 4”)1,;0(001,0001; -1,0001,0001;輸出 “ 0” ;(5)1,0001,000-1;,0001,0001;輸出“ 1” ;(-69)999,9999,9999;-9999,9999,9999;輸出“-1,9999,9999,9998 ” ; (7)1,0000,9999,99輸出99; 1;"1,0001,0000,0000".二、概要設(shè)計(jì)為實(shí)現(xiàn)上述程序功能,應(yīng)以雙向循環(huán)鏈表表示長(zhǎng)整數(shù)。為此,需要定義一個(gè)抽象數(shù)據(jù)類(lèi)型。1 . 抽象數(shù)據(jù)類(lèi)型定義為:ADT OrderedList數(shù)據(jù)對(duì)象:D=a
3、i|ai 6 int,i=1,2,n, n >0基本操作:init(&a,digit4)操作結(jié)果:構(gòu)造一個(gè)位數(shù)是digit4*4 長(zhǎng)整數(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é)果:把字符串形式的長(zhǎng)數(shù)字賦給a。 ADT OrderedList2
4、 .本程序包含兩個(gè)模塊:1 )主程序模塊:Void main()選擇操作:1 :幫助。2:加法。3:減法。4:乘法。5:除法。6:退出。打印結(jié)果;三、詳細(xì)設(shè)計(jì)1. 元素類(lèi)型,結(jié)點(diǎn)類(lèi)型,指針類(lèi)型#define NULL 0#include<stdio.h>#include<stdlib.h>#include<conio.h>typedef struct longnode/* 每個(gè)節(jié)點(diǎn)的結(jié)構(gòu)*/int num;/* 數(shù)字 */* 指向低一位節(jié)點(diǎn)*/struct longnode *low1;struct longnode *high1;/* 指向高一位節(jié)點(diǎn)*/l
5、ongnode;typedef struct xlonglongnode *High;/* 每個(gè)長(zhǎng)整數(shù)的結(jié)構(gòu)*/* 每個(gè)長(zhǎng)整數(shù)的最高節(jié)點(diǎn)*/* 每個(gè)長(zhǎng)整數(shù)的最低節(jié)點(diǎn)*/longnode *Low;int digit4;/* 每個(gè)長(zhǎng)整數(shù)的總位數(shù)(不包括高位的0)/4 */*xlong;int init(xlong *a,int digit4)int I ; /*.init.*/longnode *j;(*a)=(xlong)malloc(sizeof(struct xlong);/*為 a 的頭結(jié)構(gòu)申請(qǐng)空間,并賦初始值*/(*a)>High=NULL;(*a)->Low=NULL;(
6、*a)->High=NULL;(*a)->Low=NULL;(*a)->digit4=0;for(i=0;i<digit4;i+)/* 申請(qǐng) digit4 個(gè)節(jié)點(diǎn),初始化*/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+;int pass(xlong
7、a,xlong b,xlong c)int cf=0;/* 兩個(gè)數(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)生進(jìn)位(借位)*/c1->num-=10000;elsecf=0;a1=a1->high1;b1=b1->high1;c1=c1->high1;return cf;int passa(xlong a,xlong b,xlong c)int c
8、f=0;/* 兩個(gè)數(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)生進(jìn)位(借位)*/ c1->num-=10000;elsecf=0;a1=a1->high1;b1=b1->high1;c1=c1->high1;return cf;int passb(xlong a,xlong b,xlong c)int cf=0;/* 兩個(gè)數(shù)字的相乘*/longn
9、ode /* 最高位的進(jìn)位(借位) */* 最高位的進(jìn)位(借位) */*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)生進(jìn)位(借位)*/elsecf=0;c1->num=10000;a1=a1->high1;b1=b1->high1;c1=c1->high1;return cf;int passc(xlong a,xlong b,xlong c)int cf=0;/* 兩個(gè)數(shù)字的相
10、除*/* 最高位的進(jìn)位(借位) */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)生進(jìn)位(借位)*/else cf=0;c1->num-=10000;a1=a1->high1;b1=b1->high1;c1=c1->high1; nep(xlong a)int cf=1;/* 求 a 的相反數(shù)*/return cf;/* 最高位的進(jìn)位(借位) */* 因?yàn)榍笙?/p>
11、反數(shù)是取反加一,所以這里cf=1; */longnode *a1=a->Low;while(a1) a1->num=9999-(a1->num)+cf;if(a1->num>9999)a1->num=10000;elsecf=0;a1=a1->high1;return;printlong(xlong a)longnode *i=a->High;/* 打印長(zhǎng)整數(shù)a */if(i->num>=5000)printf("-"); /* 最高位 (bit)=1 表示負(fù)數(shù),即用補(bǔ)碼表示*/nep(a);/*求反打印其絕對(duì)值*
12、/ while(i&&i->num=0) i=i->low1;/* 跳過(guò)最位的0 */if(i) printf( “ , ” );/* a=0 打 0 */if(i)printf("%d",i->num);i=i->low1;else printf( “ 0” );while(i)printf("%04d",i->num);if(i->low1)printf(",");i=i->low1; int ston(char in,xlong out)int bit,i,jishu=1
13、,num0=0;/* 把字符串轉(zhuǎn)化為數(shù)字賦給a */longnode*j=out->Low;i=strlen(in)-1;while(i>=0 && j)/* 循環(huán)每一個(gè)字節(jié)*/bit=ini- 0 把字符形式的值賦給整數(shù)形式的 ;/*bit */if(bit>=0 && bit <=9)num0+=jishu*bit;jishu*=10; /* 基數(shù)自乘10 */* 加進(jìn) num0 */if(jishu>1&&(jishu>=10000|bit<0|bit>9) /* 數(shù)字以外的字符*/j->
14、;num=num0;j=j->high1;i-;if(num0)/* 存入一個(gè)節(jié)點(diǎn)*/num0=0;jishu=1;j->num=num0;j=j->high1;/* 把最后一個(gè)沒(méi)存入節(jié)點(diǎn)的數(shù)存入節(jié)點(diǎn)*/for(;j;j=j->high1) j->num=0;/* 最位不足補(bǔ)0 */if(out->High->num>=5000)return 1;/* 如果最高位是1,返回 1 表示出 */if(in0='-') nep(out);/* 如果最后一個(gè)字符是' '則取反*/return 0;int add()char
15、 *a1,*b1;/* 加 */int digit4,cf=0;xlong a,b,c;do printf("How much digits do you need?");/* 輸入最多位數(shù) */scanf("%d",&digit4);while(digit4<=0);a1=(char*)malloc(digit4+1);b1=(char*)malloc(digit4+1);init(&a,digit4);init(&b,digit4);init(&c,digit4); /* 初始化 a,b,c */docf=0;p
16、rintf("Enter 2 number:n");scanf("%s",a1);printf("+n");scanf("%s",b1);cf|=ston(a1,a);cf|=ston(b1,b);while(cf);/* 輸入被加數(shù)和加數(shù),如果轉(zhuǎn)換出錯(cuò),則重輸 */pass(a,b,c);/*執(zhí)行相加運(yùn)算*/* 打印結(jié)果 */printlong(a);printf("+");printlong(b);printf("=");printlong(c);printf("
17、;n");printf("n");bioskey(0);int subtract()/* 減 */char *a1,*b1;int digit4,cf=0;xlong a,b,c;doprintf("How much digits do you need?");/* 輸入最多位*/scanf("%d",&digit4);while(digit4<=0);a1=(char*)malloc(digit4+1);b1=(char*)malloc(digit4+1);init(&a,digit4);init(&
18、amp;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);/*輸入被減數(shù)和減數(shù),如果轉(zhuǎn)換出錯(cuò),則重輸*/*執(zhí)行相減運(yùn)算*/printlong(a);printf("-"); /* 打印結(jié)果*/printl
19、ong(b);printf("=");printlong(c);printf("n");printf("n");bioskey(0);int multiply() /* 乘 */char *a1,*b1;int digit4,cf=0;xlong a,b,c;do printf("How much digits do you need?");/* 輸入最多位數(shù) */scanf("%d",&digit4);while(digit4<=0);a1=(char*)malloc(digit
20、4+1);b1=(char*)malloc(digit4+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);/* 輸入被乘數(shù)和乘數(shù),如果轉(zhuǎn)換出錯(cuò),則重輸*/passb(a,b,c);
21、/*執(zhí)行相乘運(yùn)算*/printlong(a);printf( 打印結(jié)果 “ *” );/*/printlong(b);printf("=");printlong(c);printf("n");printf("n");bioskey(0);int division()/* 除 */char *a1,*b1;int digit4,cf=0;xlong a,b,c;do printf("How much digits do you need?");scanf("%d",&digit4);whi
22、le(digit4<=0);a1=(char*)malloc(digit4+1);b1=(char*)malloc(digit4+1);init(&a,digit4);init(&b,digit4);init(&c,digit4); /* 初始化 a,b,c */docf=0;printf("Enter 2 number:n");scanf("%s",a1);printf("/n");/* 輸入最多位數(shù)*/scanf("%s",b1);cf|=ston(a1,a);cf|=ston(b
23、1,b);while(cf);passc(a,b,c);/*輸入被除數(shù)和除數(shù),如果轉(zhuǎn)換出錯(cuò),則重輸*/*執(zhí)行相除運(yùn)算*/printlong(a);printf("/"); /* 打印結(jié)果*/printlong(b);printf("=");printlong(c);printf("n");printf("n");bioskey(0);2.主函數(shù)代碼void main()/*main*/int c;clrscr();textcolor(BLUE);printf("*n");printf("
24、;*Welcome to Thunderstudio!*n");printf(”*n");printf(”*本程序?qū)崿F(xiàn)長(zhǎng)整數(shù)四則運(yùn)算*n");one:printf("1: HELPn");printf("2: ADDn");printf("3: SUBTRACTn");printf("4: MULTIPLYn");printf("5: DiVISIONn");printf("6: EXITn");for(;)c=getch();switch(atoi(&c)goto one;break;case 1: clrscr();case 2: add();break;case 3:subtract();break;case 4:multiply();break;case 5:division();break;case 6:textcolor(BLUE);n");printf("nprintf("Thanks
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《江城子·乙卯正月二十日夜記夢(mèng)》(教學(xué)設(shè)計(jì))-2024-2025學(xué)年高二語(yǔ)文選擇性必修上冊(cè)同步備課系列(統(tǒng)編版2019)
- 8《斐波那契數(shù)列及圖形設(shè)計(jì)》核心素養(yǎng)目標(biāo)教學(xué)設(shè)計(jì)、教材分析與教學(xué)反思滇人版初中信息技術(shù)八年級(jí)第12冊(cè)
- 2024年北京公交集團(tuán)區(qū)域運(yùn)營(yíng)子公司運(yùn)營(yíng)駕駛員招聘筆試參考題庫(kù)附帶答案詳解
- 第二課 學(xué)會(huì)組裝計(jì)算機(jī) -認(rèn)識(shí)計(jì)算機(jī)的各個(gè)部件(教學(xué)設(shè)計(jì))2023-2024學(xué)年浙教版(廣西、寧波)初中信息技術(shù)七年級(jí)上冊(cè)
- 2025屆高考生物備考教學(xué)設(shè)計(jì):第三章 細(xì)胞代謝 課時(shí)4 光合作用與能量轉(zhuǎn)化
- 全國(guó)青島版初中信息技術(shù)第六冊(cè)第三單元第12課《智能學(xué)習(xí)》教學(xué)設(shè)計(jì)
- 第2課《梅嶺三章》教學(xué)設(shè)計(jì) 2023-2024學(xué)年統(tǒng)編版語(yǔ)文九年級(jí)下冊(cè)
- 2025年湖北黃岡應(yīng)急管理職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)完整
- 2024安徽蕪湖鳩茲水務(wù)有限公司第二批人員招聘復(fù)審及筆試參考題庫(kù)附帶答案詳解
- 生理學(xué)考試模擬題及答案
- 煤礦安全管理人員考試題庫(kù)與答案(G卷)
- 2024年海南省中考英語(yǔ)試題卷(含答案)+2023年中考英語(yǔ)試卷及答案
- 部編人教版四年級(jí)下冊(cè)道德與法制全冊(cè)教案
- 山東省濟(jì)南市2024年中考數(shù)學(xué)試卷【附真題答案】
- 綜合應(yīng)用能力事業(yè)單位考試(綜合管理類(lèi)A類(lèi))試卷及解答參考(2025年)
- Unit1Lesson2HowDoWeLikeTeachers'Feedback-課件高中英語(yǔ)北師大版選擇性
- 香港(2024年-2025年小學(xué)二年級(jí)語(yǔ)文)人教版摸底考試試卷(含答案)
- 民法典物權(quán)編詳細(xì)解讀課件
- 《推力和拉力》課件
- 西師版小學(xué)數(shù)學(xué)二年級(jí)(下)表格式全冊(cè)教案
- 娛樂(lè)場(chǎng)所安全承諾聲明
評(píng)論
0/150
提交評(píng)論