數(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頁
數(shù)制轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)課程設(shè)計_第4頁
數(shù)制轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)課程設(shè)計_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(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)教師: 完成日期:201361數(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è)計程序流程可以用以下流程圖來刻畫:A用數(shù)組實現(xiàn) B用棧實現(xiàn)開始開始創(chuàng)建棧構(gòu)造數(shù)組數(shù)制轉(zhuǎn)換函數(shù)數(shù)制轉(zhuǎn)換函數(shù)輸出結(jié)果輸出結(jié)果3. 詳細設(shè)計A用數(shù)組實現(xiàn)該問題D2M()函數(shù)和M2D()函數(shù)是實現(xiàn)該問題的主要函數(shù)。D2M

2、()函數(shù)是實現(xiàn)十進制轉(zhuǎn)換為其他進制的函數(shù),它是將輸入的十進制數(shù)x首先對需要轉(zhuǎn)換的進制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)系,不再過多

3、解釋。4. 調(diào)試分析(1) 構(gòu)造棧的方法通過查閱書籍知道了。(2) 數(shù)組的遞歸調(diào)用查閱相關(guān)書籍了解了。(3) 為了讓界面表達更清晰,多次調(diào)試完善了界面。5. 測試結(jié)果下面是我的測試函數(shù)及運行結(jié)果:A. 數(shù)組測試結(jié)果 B棧實現(xiàn)測試結(jié)果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è)計的方法和不步驟,也讓我意識到自己所掌握的實在是太少了,只靠課本知識是不夠的,

4、應(yīng)該多多上機調(diào)試,這樣才能提高自己。7. 附源程序A. 數(shù)組實現(xiàn) #include<stdio.h> #include<math.h> #define N 1000 int i,j,y,n,s; int m,r,reminder; 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+; else ci=reminder; i+; if(g>0) D2M(g,h);

5、 for(j=i-1;j>=0;j-) if(cj>=65) printf("%c",cj); else printf("%d",cj); return 0; M2D(int 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"

6、,&ai); for(i=n-1;i>=0;i-) y+=(int)pow(e,j)*ai; /強制類型轉(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); return 0; H2D(int f) /十六進制數(shù)轉(zhuǎn)換為十進制數(shù),并轉(zhuǎn)換為其他進制數(shù) int bN;

7、 printf("請輸入%d進制位數(shù):",m); scanf("%d",&n); printf("請輸入%d進制的每位并使每位用空格隔開:",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

8、需要轉(zhuǎn)換的進制M:"); scanf("%d",&s); printf("請輸出轉(zhuǎn)換成%d進制的結(jié)果:",s); D2M(y,s); return 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(&

9、quot;請輸入一個%d進制數(shù):",m); scanf("%d",&x); printf("請輸入需要轉(zhuǎn)換成的進制M(2or8or16):"); scanf("%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" #in

10、clude "limits.h" #include "stdlib.h" #include "malloc.h" #define TRUE 1 #define OK 1 #define FALSE 0 #define ERROR 0 #define INFEASIBLE -1 typedef int Status; typedef int SElement; #define STACK_INIT_SIZE 10 #define STACKINCREMENT 2 typedef struct SqStack SElement *base

11、 ; SElement *top ; int stacksize ; SqStack; int InitStack (SqStack *S) (*S).base = (SElement *)malloc(STACK_INIT_SIZE * sizeof (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

12、= NULL; S->top = NULL; S->stacksize = 0; return OK; int ClearStack(SqStack *S) S->top = S->base; return OK; int StackEmpty(SqStack S)/判斷sqstack 是否為空 if (S.top = S.base ) return TRUE; else return FALSE; int StackLength (SqStack S)/返回s的元素個數(shù),即棧的長度 return S.top-S.base ; int GetTop(SqStack S,

13、int *e)/若棧不為空,用e返回s的棧頂元素,返回ok if (S.top > S.base ) *e=*(S.top-1); return OK; else return ERROR; int Push(SqStack *S,int e)/插入元素e為新的棧頂元素 if (S->top - S->base >= S->stacksize) S->base = (SElement * )realloc (*S).base,(*S).stacksize + STACKINCREMENT * sizeof (SElement); if (!S->bas

14、e ) exit (OVERFLOW); S->top = S->base + S->stacksize; S->stacksize += STACKINCREMENT; *(S->top) = e; S->top +; return OK; int Pop(SqStack *S,int *e) /* 若棧不空,則刪除S的棧頂元素,用e返回其值,并返回OK;否則返回ERROR */ if(*S).top=(*S).base) return ERROR; *e=*-(*S).top; return OK; int StackTraverse (SqStack

15、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 (&s);/初始化棧 printf ("n(>=0)="); scanf ("%u",&n); while (n)/當n不為0 Push (&s,n%8); n=n/8; while (!StackEmpt

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

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

18、tch(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);break; case 4:e=4;printf("%d",e);break; case 5:e=5;printf("%d",e);break; case 6:e=6;printf("%d",e)

19、;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("%c",d);break; printf ("%d",e); printf ("

溫馨提示

  • 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

提交評論