




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1、 需求分析 1.本程序?qū)崿F(xiàn)計(jì)算任意長(zhǎng)的整數(shù)的四則運(yùn)算. 以用戶和計(jì)算機(jī)對(duì)話的方式,先 后輸入數(shù)字的最多位數(shù),然后程序就計(jì)算并顯示出這兩個(gè)數(shù)的運(yùn)算。 2. 利用雙向循環(huán)鏈表現(xiàn)實(shí)長(zhǎng)整數(shù)的存儲(chǔ),每個(gè)結(jié)點(diǎn)含一個(gè)整形變量。輸入的形 式以回車結(jié)束,可以直接輸入正數(shù)或負(fù)數(shù),程序會(huì)過濾掉無效的字符。按中 國(guó)對(duì)于長(zhǎng)整數(shù)的表示習(xí)慣,每四位一組,除數(shù)字和位于首位置的負(fù)號(hào)外,其 它一切字符都將作為分隔符,連續(xù)多個(gè)分隔符當(dāng)一個(gè)處理。但不使用分隔符 也不影響結(jié)果。3. 測(cè)試數(shù)據(jù) (1)0; 0; 輸出“0”; (2)-2345,6789; -7654,3211; 輸出 “-1,000,000”; (3)-9999,9
2、999; 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". 2、 概要設(shè)計(jì) 為實(shí)現(xiàn)上述程序功能,應(yīng)以雙向循環(huán)鏈表表示長(zhǎng)整數(shù)。為此,需要定義一個(gè)抽象數(shù)據(jù)類型。 1. 抽象數(shù)據(jù)類型定義為:
3、ADT OrderedList 數(shù)據(jù)對(duì)象:D=ai|aiint,i=1,2,.n, n0 基本操作: 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é)果:
4、把字符串形式的長(zhǎng)數(shù)字賦給a。 ADT OrderedList 2.本程序包含兩個(gè)模塊: 1)主程序模塊: Void main() 選擇操作:1:幫助。 2:加法。 3:減法。4:乘法。5:除法。6:退出。 打印結(jié)果; 三、詳細(xì)設(shè)計(jì) 1.元素類型,結(jié)點(diǎn)類型,指針類型#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ù)字*/struct longnode *low1;/*指向低一位節(jié)點(diǎn)*/str
5、uct longnode *high1;/*指向高一位節(jié)點(diǎn)*/ longnode;typedef struct xlong/*每個(gè)長(zhǎng)整數(shù)的結(jié)構(gòu)*/longnode *High;/*每個(gè)長(zhǎng)整數(shù)的最高節(jié)點(diǎn)*/longnode *Low;/*每個(gè)長(zhǎng)整數(shù)的最低節(jié)點(diǎn)*/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)>
6、;High=NULL;(*a)->Low=NULL; (*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;(
7、*a)->digit4+; int pass(xlong 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;/*
8、 最高位的進(jìn)位(借位) */ int passa(xlong 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;/*
9、最高位的進(jìn)位(借位) */int passb(xlong 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;/* 最高位的
10、進(jìn)位(借位) */int passc(xlong 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; else cf=0;a1=a1->high1;b1=b1->high1;c1=c1->high1;return cf;/* 最高位的進(jìn)
11、位(借位) */nep(xlong a)/* 求a的相反數(shù) */int cf=1;/* 因?yàn)榍笙喾磾?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("-&quo
12、t;); /* 最高位(bit)=1表示負(fù)數(shù),即用補(bǔ)碼表示 */nep(a);/* 求反打印其絕對(duì)值 */ while(i&&i->num=0) i=i->low1;/* 跳過最位的0 */if(i)printf("%d",i->num);i=i->low1; if(i) printf(“,”);else printf(“0”);/* a=0 打0 */ while(i)printf("%04d",i->num);if(i->low1) printf(",");i=i->low
13、1;int ston(char in,xlong out)/* 把字符串轉(zhuǎn)化為數(shù)字賦給a */int bit,i,jishu=1,num0=0;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;/* 加進(jìn)num0 */jishu*=10;/* 基數(shù)自乘10 */if(jishu>1&&(jishu&
14、gt;=10000|bit<0|bit>9) /* 數(shù)字以外的字符 */j->num=num0;j=j->high1;/* 存入一個(gè)節(jié)點(diǎn) */ num0=0; jishu=1; i-;if(num0)j->num=num0;j=j->high1;/* 把最后一個(gè)沒存入節(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)
15、;/* 如果最后一個(gè)字符是''則取反 */return 0;int add() 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(digit4+1); b1=(char*)malloc(digit4+1); digit4=digit4/4+1; init(&am
16、p;a,digit4);init(&b,digit4);init(&c,digit4); /* 初始化a,b,c */ do cf=0;printf("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)算 */ printlong(a);printf(&
17、quot;+");/* 打印結(jié)果 */ printlong(b);printf("="); printlong(c);printf("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(dig
18、it4<=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|=st
19、on(b1,b); while(cf);/* 輸入被減數(shù)和減數(shù),如果轉(zhuǎn)換出錯(cuò),則重輸 */ passa(a,b,c);/* 執(zhí)行相減運(yùn)算 */ printlong(a);printf("-");/* 打印結(jié)果 */ printlong(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(&
20、quot;How much digits do you need?");/* 輸入最多位數(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"
21、);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);/* 執(zhí)行相乘運(yùn)算 */ printlong(a);printf(“*”);/* 打印結(jié)果 */ printlong(b);printf("="); printlong(c);printf("n"); printf("n");bi
22、oskey(0);int division() /*除*/ 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(digit4+1); b1=(char*)malloc(digit4+1); digit4=digit4/4+1; init(&a,digit4);init(&b,
23、digit4);init(&c,digit4); /* 初始化a,b,c */ do cf=0;printf("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ò),則重輸 */ passc(a,b,c);/* 執(zhí)行相除運(yùn)算 */ printlong(a);printf("/");/* 打印結(jié)果 *
24、/ printlong(b);printf("="); printlong(c);printf("n"); printf("n");bioskey(0); 2.主函數(shù)代碼void main() /*main*/int c; clrscr(); textcolor(BLUE); printf("*n"); printf("*Welcome to Thunder studio!*n"); printf("*n"); printf("*本程序?qū)崿F(xiàn)長(zhǎng)整數(shù)四則運(yùn)算*n&quo
25、t;); 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)case 1: clrscr(); goto one; break; case 2:add(); break; case 3: subtract(); break;case 4: multiply(); break; case 5: division(); break; case 6: textcolor(BLUE); printf("n-n"); printf("Thanks cw's work!n"); break; default:textcolor(4); printf("Sorry please input right num
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- Module 3 Unit 2 Around my home (教學(xué)設(shè)計(jì))-2024-2025學(xué)年牛津上海版(試用本)英語四年級(jí)上冊(cè)
- 2023九年級(jí)數(shù)學(xué)下冊(cè) 第2章 圓2.4 過不共線三點(diǎn)作圓教學(xué)實(shí)錄 (新版)湘教版
- 項(xiàng)目文檔管理培訓(xùn)
- 2025年家具、建筑用金屬附件及架座項(xiàng)目合作計(jì)劃書
- 防墜物安全教育
- 人教版小學(xué)數(shù)學(xué)三上各單元知識(shí)點(diǎn)梳理
- 2025年氣相色譜儀項(xiàng)目合作計(jì)劃書
- 動(dòng)物護(hù)理與康復(fù)技能試題及答案
- Unit 3 We're going to have an English test教學(xué)設(shè)計(jì)-2023-2024學(xué)年教科版(廣州)英語五年下冊(cè)
- T-CASME 1719-2024 阻燃型防霉抗菌壁紙
- 2025年勞動(dòng)實(shí)踐課面試題及答案
- 2025年市場(chǎng)營(yíng)銷測(cè)試試題及答案
- 康養(yǎng) 項(xiàng)目可行性研究報(bào)告
- 第一單元 珍惜青春時(shí)光單元測(cè)試-2024-2025學(xué)年統(tǒng)編版道德與法治七年級(jí)下冊(cè)
- 2025年《插畫設(shè)計(jì)》標(biāo)準(zhǔn)教案 完整版
- 流行性感冒診療方案(2025 年版)解讀課件
- 小學(xué)數(shù)學(xué)跨學(xué)科學(xué)習(xí)案例
- 2024年07月重慶重慶渝北銀座村鎮(zhèn)銀行招考(703)筆試歷年參考題庫(kù)附帶答案詳解
- 企業(yè)上市培訓(xùn)課件(修訂)
- 中級(jí)注冊(cè)安全工程師考試題庫(kù)含完整答案
- 【正版授權(quán)】 ISO 16321-1:2021/Amd 1:2024 EN Eye and face protection for occupational use - Part 1: General requirements - Amendment 1
評(píng)論
0/150
提交評(píng)論