兩個(gè)任意長(zhǎng)的整數(shù)的求和運(yùn)算_第1頁(yè)
兩個(gè)任意長(zhǎng)的整數(shù)的求和運(yùn)算_第2頁(yè)
兩個(gè)任意長(zhǎng)的整數(shù)的求和運(yùn)算_第3頁(yè)
兩個(gè)任意長(zhǎng)的整數(shù)的求和運(yùn)算_第4頁(yè)
兩個(gè)任意長(zhǎng)的整數(shù)的求和運(yùn)算_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、軟件綜合課程設(shè)計(jì) 兩個(gè)任意長(zhǎng)的整數(shù)的求和運(yùn)算進(jìn)制的轉(zhuǎn)換 2014 年月目 錄1、 問(wèn)題陳述二、需求分析3、 概要設(shè)計(jì)4、 詳細(xì)設(shè)計(jì)5、 程序代碼6、 運(yùn)行結(jié)果與測(cè)試七、設(shè)計(jì)體會(huì)與總結(jié) 兩個(gè)任意長(zhǎng)的整數(shù)的求和運(yùn)算1、 問(wèn)題陳述設(shè)計(jì)一個(gè)程序?qū)崿F(xiàn)兩個(gè)任意長(zhǎng)的整數(shù)的求和運(yùn)算。利用雙向循環(huán)鏈表,設(shè)計(jì)一個(gè)實(shí)現(xiàn)任意長(zhǎng)的整數(shù)進(jìn)行加法運(yùn)算的演示程序。要求輸入和輸出每四位一組,組間用逗號(hào)隔開(kāi)。如:1,0000,0000,0000,0000。二、需求分析 1、本程序?qū)崿F(xiàn)計(jì)算任意長(zhǎng)的整數(shù)的加法運(yùn)算. 以用戶和計(jì)算機(jī)對(duì)話的方式,即在計(jì)算機(jī)終端上顯示“提示信息”之后,由用戶在鍵盤(pán)上輸入演示程序中規(guī)定的運(yùn)算命令,然后程序就

2、計(jì)算并顯示出這兩個(gè)數(shù)的運(yùn)算。 2、本演示程序中,集合的元素限定為數(shù)字字符09,輸入字符可以任意長(zhǎng),輸入形式以“#”為結(jié)束標(biāo)志,串中字符順序不限,且允許出現(xiàn)重復(fù)字符。 3、利用雙向循環(huán)鏈表現(xiàn)實(shí)長(zhǎng)整數(shù)的存儲(chǔ),每個(gè)結(jié)點(diǎn)含一個(gè)整形變量。輸入的形式以#結(jié)束,每四位一組。三、概要設(shè)計(jì)在此說(shuō)明數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)和關(guān)鍵的算法設(shè)計(jì)思想 Add()函數(shù)是實(shí)現(xiàn)該問(wèn)題的主要函數(shù)即相加。typedef struct et 定義雙循環(huán)鏈表的存儲(chǔ)結(jié)構(gòu).void setin(dtp *a) 讀入數(shù)據(jù)存儲(chǔ)在雙鏈表中的函數(shù);void print1(dtp *w,int len) 原樣輸出輸入的數(shù),略去結(jié)束符"#"v

3、oid print2(dtp a,int len) 輸出運(yùn)算結(jié)果,以每四位一個(gè)","樣式;四、詳細(xì)設(shè)計(jì)程序流程圖開(kāi)始輸入第一個(gè)數(shù),以#鍵結(jié)束 如果4位間沒(méi)有“,”隔開(kāi)輸入第二個(gè)數(shù),以#鍵結(jié)束 如果4位間沒(méi)有“,”隔開(kāi)轉(zhuǎn)換成4位一個(gè)逗號(hào)的格式求和輸出結(jié)果五、程序代碼#include<iostream>using namespace std;#define null 0typedef struct et /自定義雙循環(huán)鏈表的存儲(chǔ)結(jié)構(gòu). int data; struct et * pr,* next; dtp;void setin(dtp *a) /讀入數(shù)據(jù)存儲(chǔ)在雙鏈

4、表中的函數(shù);char k; int w,len=0; dtp *p; a->next=null; a->data=null; a->pr=null;cout<<"input the number: " while (cin>>k) /一次讀入數(shù)字或一個(gè)字符"," if(k='n')continue; if(k='#')break; /以"#"表示該數(shù)也講讀完; if(k=44) continue; /讀到字符','繼續(xù)讀下一個(gè)數(shù); p=new d

5、tp; /讀入一個(gè)四位數(shù)為它開(kāi)辟一個(gè)存儲(chǔ)空間 w=k-'0' p->data=w;len+; if(a->next) a->next->pr=p; p->next=a->next; a->next=p; p->pr=a; k=0;void add(dtp a,dtp b,dtp *c,int *len) /兩個(gè)數(shù)相加的函數(shù); dtp *s,*r,*t; int i,j,sum,k=0,w=0; c->next=null; c->data=null; c->pr=null; s=a.next; r=b.next;

6、while(s&&r) /從最后一位開(kāi)始加,若多于10,進(jìn)到下一個(gè)存儲(chǔ)空間; /直到一個(gè)數(shù)被加完為止;i=s->data; j=r->data; sum=i+j+k;k=sum/10; sum=sum%10; t= new dtp; t->data=sum; w=w+1; if(c->next) c->next->pr=t; t->next=c->next; c->next=t; t->pr=c; s=s->next; r=r->next; if(s|r) /如果有一個(gè)數(shù)還有更高位,則繼續(xù)加上去; if(s

7、) while(s) t= new dtp; sum=s->data+k; k=sum/10; sum=sum%10; t->data=sum; w=w+1; if(c->next) c->next->pr=t; t->next=c->next; c->next=t; t->pr=c; s=s->next; if(r) while(r) t= new dtp; sum=r->data+k; k=sum/10; sum=sum%10; t->data=sum; w=w+1; if(c->next) c->next

8、->pr=t; t->next=c->next; c->next=t; t->pr=c; r=r->next; if(k!=0) /如果最后還有就要多開(kāi)辟一個(gè)空間來(lái)存儲(chǔ). t= new dtp; t->data=k; w=w+1; if(c->next) c->next->pr=t; t->next=c->next; c->next=t; t->pr=c; *len=w;void print1(dtp *w,int len)/原樣輸出輸入的數(shù),略去結(jié)束符"#" dtp *q; int i=l

9、en; q=w->next; while (q->next) q=q->next ; while (q->pr) cout<<q->data; q=q->pr; i-; if(i%4=0&&i) cout<<"," cout<<endl;void print2(dtp a,int len)/輸出運(yùn)算結(jié)果,以每四位一個(gè)","樣式; int i=len; dtp *q; q=a.next; while (q) cout<<q->data;q=q->

10、next; i-; if(i%4=0&&i) cout<<"," cout<<endl;void main () int length; char ma; dtp la,lb,lc; cout<<"輸入方式,按從后面每四位之間一個(gè)字符','的形式.以'#'表示輸入結(jié)束: "<<endl; cout<<"請(qǐng)輸入第一個(gè)數(shù) a: "<<endl; setin(&la); cout<<"請(qǐng)輸入第

11、二個(gè)數(shù) b: "<<endl; setin(&lb); add (la,lb,&lc,&length); cout<<"你輸入的兩個(gè)數(shù)的和為: " cout<<endl<<" " print1 (&la,length); cout<<"+ " print1 (&lb,length); cout<<"-" cout<<endl<<" " print2(l

12、c,length); for(;2;) cin>>ma; if (ma='n') continue ; else break; 六、運(yùn)行結(jié)果與測(cè)試進(jìn)制的轉(zhuǎn)換一、 問(wèn)題陳述任意給定一個(gè)M進(jìn)制的數(shù)x ,請(qǐng)實(shí)現(xiàn)如下要求1)求出此數(shù)x的10進(jìn)制值(用MD表示)2)實(shí)現(xiàn)對(duì)x向任意的一個(gè)非M進(jìn)制的數(shù)的轉(zhuǎn)換。3)至少用兩種或兩種以上的方法實(shí)現(xiàn)上述要求(用棧解決,用數(shù)組解決,其它方法解決)。二、需求分析1、應(yīng)用環(huán)境設(shè)定:生活中我們需要將M進(jìn)制的數(shù)轉(zhuǎn)換為我們所需要的進(jìn)制,從鍵盤(pán)任意輸入一個(gè)M進(jìn)制的數(shù),對(duì)其進(jìn)行轉(zhuǎn)換成其他三種進(jìn)制的數(shù),然后再?gòu)碾娔X中顯示出來(lái),最終得到我們的結(jié)果。2、用戶

13、界面:命令行界面,根據(jù)自己的要求,對(duì)界面的提示進(jìn)行操作,正確輸入我們需要的數(shù)據(jù)。3、輸入方式:首先輸入將轉(zhuǎn)換的進(jìn)制數(shù),回車(chē)確認(rèn);然后輸入確定的數(shù)據(jù),回車(chē)確認(rèn);接著選擇要轉(zhuǎn)換為的進(jìn)制數(shù),回車(chē)確認(rèn)。輸出方式:界面直接輸出,啟動(dòng)程序后,按照界面提示,輸入數(shù)據(jù),直接回車(chē)確認(rèn),顯示屏即輸出我們的數(shù)據(jù)結(jié)果。數(shù)據(jù)儲(chǔ)存方式:全部在內(nèi)存存放,不使用硬盤(pán)上的文件或其他數(shù)據(jù)源,程序執(zhí)行過(guò)程中和結(jié)束后不保存數(shù)據(jù)。程序功能:(1)、根據(jù)界面提示輸入M進(jìn)制數(shù)據(jù)。(2)、對(duì)任意M進(jìn)制數(shù)據(jù)實(shí)行非M進(jìn)制的轉(zhuǎn)換。三、概要設(shè)計(jì)在此說(shuō)明數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)和關(guān)鍵的算法設(shè)計(jì)思想1、用數(shù)組實(shí)現(xiàn)該問(wèn)題D2M()函數(shù)和M2D()函數(shù)是實(shí)現(xiàn)該問(wèn)題的主

14、要函數(shù)。D2M()函數(shù)是實(shí)現(xiàn)十進(jìn)制轉(zhuǎn)換為其它進(jìn)制的函數(shù),它是將輸入的十進(jìn)制數(shù)取首先對(duì)需要轉(zhuǎn)換的進(jìn)制M取余,然后再對(duì)其取整,接著通過(guò)遞歸調(diào)用D2M()函數(shù)依次將得到的整數(shù)部分依次先取余后取整,并將所得的余數(shù)依次存入一個(gè)數(shù)組中,然后逆向取出數(shù)組中的元素,即得到轉(zhuǎn)換后的結(jié)果。而M2D()函數(shù)則是實(shí)現(xiàn)其他進(jìn)制M轉(zhuǎn)換為十進(jìn)制,并將其轉(zhuǎn)換為非M進(jìn)制的數(shù)。M進(jìn)制轉(zhuǎn)十進(jìn)制則是從該M進(jìn)制數(shù)的最后一位開(kāi)始算,依次列為第、位并分別乘以M的、次方,將得到的次方相加便得到對(duì)應(yīng)的十進(jìn)制數(shù),再調(diào)用D2M()函數(shù)將其轉(zhuǎn)換為非M進(jìn)制的數(shù)。2、用棧實(shí)現(xiàn)該問(wèn)題同樣是利用D2M()和M2D()兩個(gè)函數(shù)實(shí)現(xiàn)。兩個(gè)函數(shù)的思想同利用數(shù)組實(shí)

15、現(xiàn)時(shí)相同。只是棧具有后進(jìn)先出的性質(zhì),故其用Pop()取數(shù)較數(shù)組的逆向取數(shù)方便些。(1)、SqStack定義棧,說(shuō)明base為棧底指針,top為棧頂指針,stacksize為棧容量;(2)、int InitStack(SqStack &S)到int DestroyStack(SqStack &S)六大模塊分別表示構(gòu)造一個(gè)空棧、用表示棧元素、插入元素、刪除元素、判斷棧是否為空以及摧毀棧;(3)、SqStack S是指定義棧S;(4)、D2M(int a,int b)的功能是將十進(jìn)制數(shù)轉(zhuǎn)換成M進(jìn)制的函數(shù);(5)、M2D()的功能是M進(jìn)制轉(zhuǎn)換為十進(jìn)制的函數(shù);(6)、void main(

16、)是主函數(shù)。其功能是輸入需要測(cè)試的數(shù)據(jù)以及需要轉(zhuǎn)換的進(jìn)制,并在特定情形下調(diào)用D2M()函數(shù)和M2D()函數(shù),而且實(shí)現(xiàn)M進(jìn)制數(shù)向任意非M進(jìn)制數(shù)的轉(zhuǎn)換。四、詳細(xì)設(shè)計(jì)程序流程圖開(kāi)始棧數(shù)組輸入需轉(zhuǎn)換的位數(shù)輸入需轉(zhuǎn)換的數(shù)的進(jìn)制N 若N!=10 若N=10輸入需轉(zhuǎn)換的數(shù)輸出結(jié)果輸入將轉(zhuǎn)換的進(jìn)制數(shù)五、程序代碼A用數(shù)組實(shí)現(xiàn)(文件名shuzu.cpp)#include<stdio.h>#include<math.h>#define N 1000int i, j, y, n, s;int m, r, reminder;int x; /全局變量默認(rèn)初始化為0,不必再賦0了D2M(int g,

17、 int h) /十進(jìn)制數(shù)轉(zhuǎn)換為其他進(jìn)制數(shù)int cN;i = 0;reminder = g % h;g = g / h;if (reminder > 9) ci = reminder + 55;i+; else ci = reminder;i+;if (g > 0)D2M(g, h);for (j = i - 1; j >= 0; j-)if (cj >= 65)printf("%c", cj);elseprintf("%d", cj);return 0;M2D(int e) /二進(jìn)制和八進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù),并這轉(zhuǎn)換為其他進(jìn)制

18、數(shù)int aN;printf("請(qǐng)輸入%d進(jìn)制位數(shù):n", m);scanf("%d", &n);printf("請(qǐng)輸入%d進(jìn)制的每位并使每位用空格隔開(kāi):n", m);for (i = 0; i < n; i+)scanf("%d", &ai);for (i = n - 1; i >= 0; i-) y += (int) pow(e, j) * ai; /強(qiáng)制類(lèi)型轉(zhuǎn)換,以免造成數(shù)據(jù)丟失j+;printf("需要轉(zhuǎn)換的進(jìn)制M:n");scanf("%d&quo

19、t;, &s);printf("請(qǐng)輸出轉(zhuǎn)換成%d進(jìn)制的結(jié)果:n", s);D2M(y, s);return 0;H2D(int f) /十六進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù),并轉(zhuǎn)換為其他進(jìn)制數(shù)int bN;printf("請(qǐng)輸入%d進(jìn)制位數(shù):n", m);scanf("%d", &n);printf("請(qǐng)輸入%d進(jìn)制的每位并使每位用空格隔開(kāi):n", m);for (i = 0; i < n; i+)scanf("%x", &bi);for (i = n - 1; i >=

20、 0; i-) y += (int) pow(f, j) * bi; /強(qiáng)制類(lèi)型轉(zhuǎn)換,以免造成數(shù)據(jù)丟失j+;printf("需要轉(zhuǎn)換的進(jìn)制M:n");scanf("%d", &s);printf("請(qǐng)輸出轉(zhuǎn)換成%d進(jìn)制的結(jié)果:n", s);D2M(y, s);return 0;int main() printf("請(qǐng)給定一個(gè)需轉(zhuǎn)換的進(jìn)制M(2or8or10or16):n");scanf("%d", &m);if (m = 2 | m = 8) /二進(jìn)制和八進(jìn)制轉(zhuǎn)換成十進(jìn)制M2D(

21、m);else if (m = 16) /十六進(jìn)制轉(zhuǎn)換成十進(jìn)制H2D(m);else if (m = 10) /十進(jìn)制轉(zhuǎn)換成其它進(jìn)制printf("請(qǐng)輸入一個(gè)%d進(jìn)制數(shù):n",m);scanf("%d", &x);printf("請(qǐng)輸入需要轉(zhuǎn)換成的進(jìn)制M(2or8or16):n");scanf("%d", &r);printf("請(qǐng)輸出轉(zhuǎn)換成%d進(jìn)制的結(jié)果:n",r);D2M(x, r);return 0;B用棧實(shí)現(xiàn)(文件名zhan.cpp)#include<stdio.h

22、>#include<malloc.h>#include<stdlib.h>#include<math.h>#define STACK_INIT_SIZE 100 /存儲(chǔ)空間初始分配量#define STACKINCREMENT 10 /存儲(chǔ)空間分配增量int e, m, x, s, t; /x為要轉(zhuǎn)換的十進(jìn)制數(shù),e 為臨時(shí)用的的int型變量int r, y, i, n;typedef structint *base; /棧底int *top; /棧頂int stacksize; /棧容量 SqStack;int InitStack(SqStack &a

23、mp;S) /構(gòu)造一個(gè)空棧S.base=(int *)malloc(STACK_INIT_SIZE *sizeof(int);if(!S.base) exit(0); /存儲(chǔ)空間失敗S.top=S.base;S.stacksize=STACK_INIT_SIZE;return 0;int GetTop(SqStack S, int &e) /若棧不為空,則用e返回S的棧頂元素,并返回0,否則返回1if(S.top=S.base) return 1;e=*(S.top-1);return 0;int Push(SqStack &S , int e) /插入元素e為新的棧頂元素if

24、(S.top-S.base>=S.stacksize) /棧滿,追加存儲(chǔ)空間S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int);if(!S.base) return 1; /存儲(chǔ)分配失敗S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;*S.top+=e;return 0;int Pop(SqStack &S, int &e) /若棧不空,則刪除S的棧頂元素,用e返回其值,并返回0,否則返回1if(S.top=S.base) re

25、turn 1;e=*-S.top;return 0;int StackEmpty(SqStack S) /若???,則返回1,否則返回0if (S.top = S.base)return 1;return 0;int DestroyStack(SqStack &S) /銷(xiāo)毀棧S,棧S不再存在free(S.base);S.top=NULL; /防止程序后面不小心使用了它S.base=S.top;return 0;SqStack S; /定義棧Sint D2M(int a, int b) /十進(jìn)制轉(zhuǎn)換成其他進(jìn)制的函數(shù)D2M()while (a)r = a % b;if (r > 9)r

26、 = r + 55;Push(S, r); /壓入棧a /= b; /轉(zhuǎn)換成M進(jìn)制printf("該數(shù)轉(zhuǎn)換成%d進(jìn)制的結(jié)果:", b);while (!StackEmpty(S)Pop(S, e); /彈出棧if (e >= 65)printf("%c", e);elseprintf("%d", e);return 0;void M2D() /其他進(jìn)制轉(zhuǎn)換為十進(jìn)制的函數(shù)M2D()char c1000;printf("請(qǐng)輸入需要轉(zhuǎn)換的數(shù)的位數(shù):");scanf("%d", &n);p

27、rintf("請(qǐng)輸入需要轉(zhuǎn)換的數(shù)的每位并用空格隔開(kāi):");for (i = 0; i < n; i+)scanf("%x", &ci);Push(S, ci);i = 0;while (!StackEmpty(S)Pop(S, e);y += (int) pow(m, i) * e;i+;int main()InitStack(S); /構(gòu)造一個(gè)空棧printf("請(qǐng)輸入需要轉(zhuǎn)換的進(jìn)制M(2or8or10or16):");scanf("%d", &m);if (m = 10) /十進(jìn)制轉(zhuǎn)換成其他進(jìn)制printf("請(qǐng)給定一個(gè)需要轉(zhuǎn)換的10進(jìn)制數(shù):");s

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論