數(shù)制轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)課程設(shè)計_第1頁
數(shù)制轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)課程設(shè)計_第2頁
數(shù)制轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)課程設(shè)計_第3頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告書題 目數(shù)制轉(zhuǎn)換系 另比計算機科學(xué)與應(yīng)用系學(xué) 號:學(xué)生姓名:指導(dǎo)教師:完成日期: 2013 6 1數(shù)制轉(zhuǎn)換1. 需求分析任意給定一個 M進制的數(shù)x ,實現(xiàn)如下要求1) 求出此數(shù)x的10進制值(用MD表示)2) 實現(xiàn)對x向任意的一個非M進制的數(shù)的轉(zhuǎn)換。3) 至少用兩種或兩種以上的方法實現(xiàn)上述要求(用棧解決,用數(shù)組解決,其它方法解決)2. 概要設(shè)計程序流程可以用以下流程圖來刻畫:B用棧實現(xiàn)A用數(shù)組實現(xiàn)3. 詳細設(shè)計A用數(shù)組實現(xiàn)該問題D2M()函數(shù)和M2D()函數(shù)是實現(xiàn)該問題的主要函數(shù)。D2M()函數(shù)是實現(xiàn)十進制轉(zhuǎn)換為其他進制的函數(shù),它是將輸入的十進制數(shù) x首先對需要轉(zhuǎn)換的進制

2、M取余,然后在對其取整, 接著通過遞歸調(diào)用 D2M()函數(shù)一次將得到的整數(shù)部分一次先取余后取整,并將所得的余數(shù) 依次存入下一數(shù)組,然后逆向去除數(shù)組中的元素,即得到轉(zhuǎn)換后的結(jié)果。而M2D()函數(shù)是實現(xiàn)其他進制 M轉(zhuǎn)換為十進制,并將其轉(zhuǎn)換為非 M進制。M進制轉(zhuǎn)十進制則是從該 M進制數(shù)的最后一位開始運算,依次列為第0、1、2、.N位并分別乘以 M的0、1、2、.N次方,將得到的次方相加便得到對應(yīng)的十進制數(shù),再調(diào)用D2M()函數(shù)將其轉(zhuǎn)換為非 M進制的數(shù)。B.用棧實現(xiàn)棧具有后進先出的性質(zhì),具體實現(xiàn)方法和數(shù)組的方法有很大聯(lián)系,不再過多解釋。4. 調(diào)試分析(1) 構(gòu)造棧的方法通過查閱書籍知道了。(2) 數(shù)組

3、的遞歸調(diào)用查閱相關(guān)書籍了解了。(3) 為了讓界面表達更清晰,多次調(diào)試完善了界面。5. 測試結(jié)果下面是我的測試函數(shù)及運行結(jié)果:A.數(shù)組測試結(jié)果 P:誦伍文件耒Debug'數(shù)制轉(zhuǎn)挨狄擔exh1*8><8d o 0 2 M 2 2 e < < rr u M mh n 刖5剖結(jié)tl 進:4進的ull 的常制c sco 篦換16y 需鴛成ke 個丁竇y 一一葉“ 定人人ys 士冃土冃主冃主R%r 百:k新建料耒Debug密潔帽翩陋exe continue:ll!lXi 口-即一即甬 肓土冃主冃青 I I i I i IntZorBoFlMorlbB棧實現(xiàn)測試結(jié)果3 12J

4、? 44TYJJ* 耶進、八擇 制八一I處 送為為卷0 的m貞奐境V豐 亍專吉者專先 ,-扌-d F- (UK urtJB±口 gla全出 懷4-H-想退 送S-束一t|生<r' 土弓Q ODDOin<>=U>=1214請按任意鍵継續(xù) |E文DebugV-exe-|3 12> 7d諳 那S亠八揮 利八二盂B為為蠱S 省帀渙喚【半 I 丿丿/<"、 l?x?xviYX_1| Ur7wv-ss r EW六擇 制一盂 n選 要瞬進全出 K一想退 骨一肯e:< 士 IP D 口 D n n 請女女女女.女. <>=

5、71;> =2 J佶按枉意健維續(xù).6. 總結(jié)通過數(shù)據(jù)結(jié)構(gòu)課程設(shè)計,我了解到數(shù)據(jù)結(jié)構(gòu)是計算機科學(xué)中一門綜合性的專業(yè)基礎(chǔ)課。這次的課程設(shè)計使我對數(shù)組及棧有了初步的認識,雖然課程設(shè)計的不完善,但是在設(shè)計過程中我受益匪淺, 通過查資料、網(wǎng)上搜索例子,讓我學(xué)到了很多以前不知道的東西,提高我的分析和解決問題的能力,進一部掌握了應(yīng)用系統(tǒng)設(shè)計的方法和不步驟,也讓我意識到自己所掌握的實在是太少了,只靠課本知識是不夠的, 應(yīng)該多多上機調(diào)試, 這樣才能提高自己。7附源程序A.數(shù)組實現(xiàn)#in clude<stdio.h>#in clude<math.h>#defi ne N 1000in

6、t i,j,y,n,s;int m,r,re min der;int x;/全局變量默認初始化為 0,不必再賦0 了D2M(int g,int h)/ 十進制數(shù)轉(zhuǎn)換為其他進制數(shù)int cN;i=0; reminder=g%h;g=g/h; if(reminder>9)ci=reminder+55;i+;elseci=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(in

7、t e)/ 二進制和八進制數(shù)轉(zhuǎn)換為十進制數(shù) ,并這轉(zhuǎn)換為其他進制數(shù)int aN;printf(" 請輸入 %d 進制位數(shù) :",m);scanf("%d",&n);printf(" 請輸入 %d 進制的每位并使每位用空格隔開 :",m); for(i=0;i<n;i+)scanf("%d",&ai);for(i=n-1;i>=0;i-)y+=(int)pow(e,j)*ai;/ 強制類型轉(zhuǎn)換, 以免造成數(shù)據(jù)丟失j+;printf(" 請輸出所得的 10進制的結(jié)果 : "

8、;); printf("%d",y);printf("n 需要轉(zhuǎn)換的進制 M:"); scanf("%d",&s);printf(" 請輸出轉(zhuǎn)換成 %d 進制的結(jié)果 :",s);D2M(y,s); return 0;H2D(int f)/ 十六進制數(shù)轉(zhuǎn)換為十進制數(shù), 并轉(zhuǎn)換為其他進制數(shù)int bN;printf(" 請輸入 %d 進制位數(shù) :",m);scanf("%d",&n);printf(" 請輸入 %d 進制的每位并使每位用空格隔開 :&qu

9、ot;,m); for(i=0;i<n;i+)scanf("%x",&bi);for(i=n-1;i>=0;i-)y+=(int)pow(f,j)*bi;/ 強制類型轉(zhuǎn)換,以免造成數(shù)據(jù)丟失j+;printf(" 請輸出所得的 10進制的結(jié)果 : "); printf("%d",y);printf("n 需要轉(zhuǎn)換的進制 M:"); scanf("%d",&s);printf(" 請輸出轉(zhuǎn)換成 %d 進制的結(jié)果 :",s); D2M(y,s);retu

10、rn 0;void main()printf(" 請給定一個需轉(zhuǎn)換的進制 M(2or8or10or16):");scanf("%d",&m);if(m=2|m=8)/二進制和八進制轉(zhuǎn)換成十進制M2D(m);else if(m=16)/十六進制轉(zhuǎn)換成十進制H2D(m);else if(m=10)/十進制轉(zhuǎn)換成其它進制printf(" 請輸入一個 %d 進制數(shù) :",m);scanf("%d",&x);printf(" 請輸入需要轉(zhuǎn)換成的進制 M(2or8or16):"); scan

11、f("%d",&r);printf(" 請輸出轉(zhuǎn)換成 %d 進制的結(jié)果 :",r);D2M(x,r);printf("n");B. 棧實現(xiàn)#include "stdio.h"#include "string.h"#include "math.h"#include "limits.h"#include "stdlib.h"#include "malloc.h"#define TRUE 1#define OK 1

12、#define FALSE 0#define ERROR 0#define INFEASIBLE -1typedef int Status;typedef int SElement;#define STACK_INIT_SIZE 10#define STACKINCREMENT 2typedef struct SqStackSElement *base ; SElement *top ; int stacksize ;SqStack;int InitStack (SqStack *S)* sizeof(*S).base = (SElement *)malloc(STACK_INIT_SIZE(

13、SElement) ;if (!(*S).base)exit (OVERFLOW);S->top=S->base;S->stacksize= STACK_INIT_SIZE;return OK;int DestroyStack (SqStack *S)free (S->base);S->base = NULL;S->top = NULL;S->stacksize = 0;return OK;int ClearStack(SqStack *S)S->top = S->base;return OK;int StackEmpty(SqStack

14、S)/ 判斷 sqstack 是否為空if (S.top = S.base )return TRUE;elsereturn FALSE;int StackLength (SqStack S)/ 返回 s 的元素個數(shù) ,即棧的長度return S.top-S.base ;int GetTop(SqStack S,int *e)若棧不為空,用e返回s的棧頂元素 返回 okif (S.top > S.base )*e=*(S.top-1);return OK;else return ERROR;int Push(SqStack *S,int e)/ 插入元素 e 為新的棧頂元素if (S-&g

15、t;top - S->base >= S->stacksize)S->base = (SElement * )realloc (*S).base,(*S).stacksize + STACKINCREMENT * sizeof (SElement);if (!S->base )exit (OVERFLOW);S->top = S->base + S->stacksize;S->stacksize += STACKINCREMENT;*(S->top) = e;S->top +;return OK;int Pop(SqStack

16、*S,int *e) /*若棧不空,則刪除S的棧頂元素,用e返回其值,并返回0K; 否則返回 ERROR */if(*S).top=(*S).base)return ERR0R;*e=*-(*S).top;return OK;int StackTraverse (SqStack S ,int (*visit)(int )/ while (S.top > S.base ) visit (*S.base + );printf ("n"); return OK;void conversion8(SqStack s) unsigned n;int e;InitStack (&

17、amp;s);/ 初始化棧 printf ("n(>=0)="); scanf ("%u",&n);while (n)/ 當 n 不為 0Push (&s,n%8); n=n/8;while (!StackEmpty(s)/ 當棧不為空Pop (&s,&e);printf ("%d",e);printf ("n");void conversion2(SqStack s)unsigned n;int e;InitStack (&s);/ 初始化棧printf ("

18、;n(>=0)=");scanf ("%u",&n);while (n)/ 當 n 不為 0Push (&s,n%2);n=n/2;while (!StackEmpty(s)/ 當棧不為空Pop (&s,&e);printf ("%d",e);printf ("n");void conversion16(SqStack s)unsigned n; char d;int e; InitStack (&s);/ 初始化棧 printf ("n(>=0)=")

19、;scanf ("%u",&n);while (n)/ 當 n 不為 0Push (&s,n%2); n=n/2;while (!StackEmpty(s)/ 當棧不為空 Pop (&s,&e); switch(e) case 0:e=0;printf("%d",e);break;case 1:e=1;printf("%d",e);break; case 2:e=2;printf("%d",e);break; case 3:e=3;printf("%d",e);b

20、reak; case 4:e=4;printf("%d",e);break; case 5:e=5;printf("%d",e);break; case 6:e=6;printf("%d",e);break;case 7:e=7;printf("%d",e);break; case 8:e=8;printf("%d",e);break;case 9:e=9;printf("%d",e);break;case 10:d='a'printf("%c",d);break;case 11:d='b'printf("%c",d);break;case 12:d='c'printf("%c",d);break;case 13:d='d'printf("%c",d);break;case 14:d='e'printf("%c",d);break;case 15:d='f'printf(&quo

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論