




版權(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 i 數(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ù),
2、它是將輸入的十進制數(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)系,不再過多解釋。 4.
3、調(diào)試分析 (1) 構(gòu)造棧的方法通過查閱書籍知道了。 (2) 數(shù)組的遞歸調(diào)用查閱相關(guān)書籍了解了。 (3) 為了讓界面表達更清晰,多次調(diào)試完善了界面。 5. 測試結(jié)果 下面是我的測試函數(shù)及運行結(jié)果: A.數(shù)組測試結(jié)果 18 回 百:新起文禪無.Debug廖制轉(zhuǎn)換數(shù)氫exh r8D O 2 2斧 M弄 和5甬結(jié)til 進:4進的on C 團換16y 陰義ke 一一霍an _/ 刖 S ,二-4.TT4,rr 丄# E 青青青青咗 r W擁文件無.氐buy做制轉(zhuǎn)換數(shù)氫exe r r 4 D o 1 2 2 1 c : M M頭 制E制制 進:7進陽 刃 IM 需10蔦ke 一一韋an _1 人 F 4
4、ijgj|g青請pp 賣 B棧實現(xiàn)測試結(jié)果 3 i 2S: 擇玄 :選選請 進進亠: 制八二十選 進一.奪fr WHS 詵 W,山?fETfF誹 In lhi進併 _ TT 面一一 冒習(xí)g 同果果果果果 FlD _u _u D nu -司女-PI/女女女 R 9 八圣 y4J 1_ !%起請 豐舜 聲進八擇 制八二十選 進為為諮思 的 選 IF 畧進進全岀 誓習(xí)SU 一想 囲果果果果果 - u. u. D- D- 誦女-pc女女女 2 n=8=23 10111 請按任意鍵繼續(xù) 3 :選選* S進八擇 制八二十選 進藥力“詰S 的扯 專進進全岀 - - nn-lfl 你退 逆lsFEhEFsT
5、n D n D D 誦女-pc女女H:x 3 nC=B=23 1100111111 請按任意鍵繼續(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) #include #include #de
6、fine N 1000 int i,j,y,n,s; int m,r,reminder; int x; /全局變量默認初始化為 0,不必再賦0 了 D2M(int g,int h) int cN; i=0; reminder=g%h; g=g/h; if(reminder9) ci=reminder+55; i+; else ci=reminder; i+; if(g0) D2M(g,h); for(j=i-1;j=0;j-) if(cj=65) printf(%c,cj); /十進制數(shù)轉(zhuǎn)換為其他進制數(shù) else printf(%d,cj); return 0; M2D(int e) / 二進
7、制和八進制數(shù)轉(zhuǎn)換為十進制數(shù) ,并這轉(zhuǎn) 換為其他進制數(shù) int aN; printf( 請輸入 %d 進制位數(shù) :,m); scanf(%d, printf( 請輸入 %d 進制的每位并使每位用空格隔開 :,m); for(i=0;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, printf( 請輸出轉(zhuǎn)換成 %d 進制的結(jié)果 :,s); D2M(y,s); return 0; H2D(int f
8、)/十六進制數(shù)轉(zhuǎn)換為十進制數(shù), 并轉(zhuǎn)換為其 他進制數(shù) int bN; printf( 請輸入 %d 進制位數(shù) :,m); scanf(%d, printf( 請輸入 %d 進制的每位并使每位用空格隔開 :,m); for(i=0;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, printf( 請輸出轉(zhuǎn)換成 %d 進制的結(jié)果 :,s); D2M(y,s); return 0; void main
9、() printf( 請給定一個需轉(zhuǎn)換的進制 M(2or8or10or16):); scanf(%d, 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, printf( 請輸入需要轉(zhuǎn)換成的進制 M(2or8or16):); scanf(%d, printf( 請輸出轉(zhuǎn)換成 %d 進制的結(jié)果 :,r); D2M(x,r); printf(n); B. 棧實現(xiàn) #include stdi
10、o.h #include string.h #include math.h #include 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
11、*base ; SElement *top ; int stacksize ; SqStack; int InitStack (SqStack *S) * sizeof (*S).base = (SElement *)malloc(STACK_INIT_SIZE (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 =
12、 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,int *e)若棧不為空,用e返回s的棧頂元素, 返回 ok
13、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-base ) exit (OVERFLOW); S-top = S-base + S-stacksize; S-stacksi
14、ze += STACKINCREMENT; *(S-top) = e; S-top +; return OK; int Pop(SqStack *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
15、 OK; void conversion8(SqStack s) unsigned n; int e; InitStack (/ 初始化棧 printf (n(=0)=); scanf (%u, while (n)/ 當(dāng) n 不為 0 Push ( n=n/8; while (!StackEmpty(s)/ 當(dāng)棧不為空 :(a.P%J uud :他呦dod 卓華立辭樂(s)eduimpE)si) !3/u=u us$) qsnj 0 u 樂 (u)e|!i|M jueos !(11=(O=|oejsi!U| 3! !u pauBisun (S ”O(jiān)E)SbS)乙UOISJ9AUO3 piOA
16、(,u J HU!d :(a.P%J uud dod 制Eaiq:(3P%HU!d4=ej aseo !|eajq!(ai11p%11)4;uud!o=e:O eseo (a)qoiMS dod 卓華立辭樂(s)eduimpE)si) eiM !3/u=u us$) qsnj 0 u 樂 (u)e|!i|M jueos !(11=(O=|oejsi!U| !a ui !p ueqo !u pauBisun (s |3esbs)9puoisuaAuoo piOA (,u J Buud case 2:e=2;printf(%d,e);break; case 3:e=3;printf(%d,e);b
17、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;
18、printf(%c,d);break; case 14:d=e;printf(%c,d);break; case 15:d=f;printf(%c,d);break; printf (%d,e); printf (n); /選擇 int choose() int d; 1n); 2n); 3n); printf( 請選擇你要進行的進制的轉(zhuǎn)換: n printf( 如果是十進制轉(zhuǎn)換為八進制請選擇 printf( 如果是十進制轉(zhuǎn)換為二進制請選擇 printf( 如果是十進制轉(zhuǎn)換為十六進制請選擇 printf( 如果您想全部轉(zhuǎn)換請選擇 9n); printf( 如果想退出請選擇 0n); printf(n); scanf(%d, return d; void main() int f=0; SqStac
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025標準國有企業(yè)員工勞動合同
- 2025年房屋買賣合同的履行與違約行為解析
- 2024年日用織物制品項目資金籌措計劃書代可行性研究報告
- 2025電子產(chǎn)品轉(zhuǎn)讓合同范本
- 2025年合同履行過程中的變更解析
- 2025網(wǎng)站設(shè)計服務(wù)合同范本
- 2025年北京市勞動合同模板
- 2025年杭州市勞動合同范本全文
- 2025短期勞動合同全面解析
- 2025網(wǎng)站建設(shè)合同協(xié)議模板
- 銅陵恒達新材料科技有限公司《年產(chǎn)5萬噸鋁錠和5萬噸鋁棒項目(重新報批)》
- 焊接工序首件檢驗記錄表
- (通橋【2018】8370)《鐵路橋梁快速更換型伸縮縫安裝圖》
- 南昌大學(xué)論文格式樣板
- “四會”教學(xué)基本概述
- 義務(wù)教育語文課程標準(2022)測試題帶答案(20套)
- 05G359-3 懸掛運輸設(shè)備軌道(適用于一般混凝土梁)
- 《紅樓夢》人名課件完整版
- 工藝美術(shù)設(shè)計師理論知識考核試題及答案
- 研發(fā)技術(shù)人員工時統(tǒng)計表 模板
- 校企協(xié)作下國防教育類在線開放課程開發(fā),國防教育論文
評論
0/150
提交評論