數(shù)據(jù)結構課程設計-進制的轉換_第1頁
數(shù)據(jù)結構課程設計-進制的轉換_第2頁
數(shù)據(jù)結構課程設計-進制的轉換_第3頁
數(shù)據(jù)結構課程設計-進制的轉換_第4頁
數(shù)據(jù)結構課程設計-進制的轉換_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、數(shù)據(jù)結構課程設計設計說明書進制轉換的實現(xiàn)學生姓名 學 號 班 級 成 績 指導教師 數(shù)學與計算機科學學院年月 日 課程設計任務書20132014學年第一學期課程設計名稱: 數(shù)據(jù)結構課程設計 課程設計題目: 進制轉換的實現(xiàn) 完 成 期 限:自 年 月日至 年月 日共 周設計內容:計算機中數(shù)據(jù)的存儲形式是0,1代碼,也就是以二進制的形式進行存儲.運用C或VC+結合數(shù)據(jù)結構等基礎知識,按以下要求編程實現(xiàn)各種進制的轉換。任務要求:1)闡述設計思想,畫出流程圖;2)能完成用戶輸入的十進制數(shù)轉換為二進制、八進制、十六進制及其他進制數(shù),以及將其他任意的進制數(shù)(如12進制)轉換為十進制的功能,尤其注意不同進制

2、數(shù)的表示符號;3)除十進制以外的其他進制間的相互轉換功能的實現(xiàn);4)將用戶的輸入及要求的結果能對應打印輸出;5)應有較好的界面設計,說明程序測試方法;6)按照格式要求完成課程設計說明書。設計要求:1)問題分析和任務定義:根據(jù)設計題目的要求,充分地分析和理解問題,明確問題要求做什么?(而不是怎么做?)限制條件是什么?確定問題的輸入數(shù)據(jù)集合。2)邏輯設計:對問題描述中涉及的操作對象定義相應的數(shù)據(jù)類型,并按照以數(shù)據(jù)結構為中心的原則劃分模塊,定義主程序模塊和各抽象數(shù)據(jù)類型。邏輯設計的結果寫出每個抽象數(shù)據(jù)類型的定義(包括數(shù)據(jù)結構的描述和每個基本操作的功能說明),并畫出模塊之間的調用關系圖;3)詳細設計:

3、定義相應的存儲結構并寫出各函數(shù)的偽碼算法。在這個過程中,要綜合考慮系統(tǒng)功能,使得系統(tǒng)結構清晰、合理、簡單和易于調試,抽象數(shù)據(jù)類型的實現(xiàn)盡可能做到數(shù)據(jù)封裝,基本操作的規(guī)格說明盡可能明確具體。詳細設計的結果是對數(shù)據(jù)結構和基本操作做出進一步的求精,寫出數(shù)據(jù)存儲結構的類型定義,寫出函數(shù)形式的算法框架;4)程序編碼:把詳細設計的結果進一步求精為程序設計語言程序。同時加入一些注解和斷言,使程序中邏輯概念清楚;5)程序調試與測試:能夠熟練掌握調試工具的各種功能,設計測試數(shù)據(jù)確保程序正確。調試正確后,認真整理源程序及其注釋,形成格式和風格良好的源程序清單和結果;6)結果分析:程序運行結果包括正確的輸入及其輸出

4、結果和含有錯誤的輸入及其輸出結果。算法的時間、空間復雜性分析;7)編寫課程設計報告;以上要求中前三個階段的任務完成后,先將設計說明書的草稿交指導老師面審,審查合格后方可進入后續(xù)階段的工作。設計工作結束后,經(jīng)指導老師驗收合格后將設計說明書打印裝訂,并進行答辯。指導教師(簽字): 教研室負責人: 批準日期: 年 月 日課程設計評閱評語: 指導教師簽名: 年 月 日摘 要 編寫一個C語言程序,該程序可實現(xiàn)六十進制以內的任意進制(二進制,八進制,十進制,十二進制,二十四進制等)之間的轉換。本程序采用VC+作為軟件開發(fā)環(huán)境,采用棧的存儲結構實現(xiàn)了進制的轉換。操作簡單,界面清晰,易于為用戶所接受。關鍵詞:

5、C語言程序; 進制轉換;棧目 錄1 課題描述12 問題分析和任務定義23 邏輯設計34 詳細設計45 程序編碼56 程序調試與測試97 結果分析158 總結16參考文獻171 課題描述數(shù)制有很多種,在計算機中用到的數(shù)制有:十進制,二進制、八進制、十六進制等。N進制數(shù)有兩個基本特點:由個字符09以及若干字母組成(二十四進制由0-9,A-M組成,表示0-23;六十進制由0-9,A-Z,a-x組成,表示0-59),N進制數(shù)運算規(guī)律是逢N進一,例如:十六進制數(shù)4AC8可寫成(4AC8)16,或寫成4AC8H。更大一些的數(shù)制則擴展十六進制未用的其他大寫字母及小寫字母。 順序棧是順序存儲結構的棧,是利用一

6、組地址連續(xù)的存儲單元依次存放自棧底到棧頂?shù)臄?shù)據(jù)元素。同時附設棧頂指針top和棧基指針base,來方便棧內數(shù)據(jù)元素的存取和棧的擴充。2 問題分析和任務定義2.1 問題分析編寫進制轉換及其逆轉換,其算法過程恰好是結果的逆序,因此建立一個順序棧將計算過程中得到的數(shù)位順序進棧,則按出棧順序就會輸出對應的轉換結果。逆轉換程序借助字符數(shù)組按順序將每個數(shù)位轉換成十進制數(shù)后求和,得到逆轉換結果。例如:11轉換成二進制數(shù) 11%2=1; 11/2=5;1入棧; 5%2=1; 5/2=2;1入棧; 2%2=0; 2/2=0;0入棧; 被除數(shù)不為0; 按順序出棧,得到結果為110;2.2任務定義1)畫出流程圖;2)

7、任意建立一個容量為100個棧元素的空棧;3)將N進制數(shù)與要轉進制先求余,將余數(shù)順序入棧;4)闡明測試方法,寫出完整的運行結果;3 邏輯設計3.1數(shù)據(jù)類型定義 typedef struct int *base; int *top; int stacksize; SqStack;3.2 算法流程圖 (1)進制轉換的主流程圖如圖3.1所示。圖3.1 進制轉換主流程圖 (2)十進制轉換為任意進制D2M()流程圖,如圖3.2所示。圖3.2 函數(shù)D2M()流程圖(3) 任意進制轉換為十進制M2D()流程圖,如圖3.3所示。圖3.3 函數(shù)D2M()流程圖4 詳細設計(1) SqStack定義棧,base為棧

8、底指針,top為棧頂指針,stacksize為棧容量; (2) int InitStack(SqStack &S),int GetTop(SqStack S, int &e),int Push(SqStack &S , int e),int Push(SqStack &S , int e),int Push(SqStack &S , int e),int DestroyStack(SqStack &S),六大模塊分別表示構造一個空棧、用表示棧頂元 素,插入元素,刪除棧頂元素,判斷棧是否為空,及銷毀棧。(3) D2M(int a,int b)的功能是將十進制數(shù)轉換成M進制的函數(shù)。該算法思路為:

9、例如:16轉換成二進制數(shù) 16/2=8; 16%2=0; 0入棧; 8/2=4; 8%2=0; 0入棧; 4/2=2; 4%2=0; 0入棧; 2/2=1; 2%2=0; 0入棧; 1/2=0; 1%2=1; 1入棧; 被除數(shù)不為0; 0,1,1依次出棧; 轉換結果為110; (4) 2D()的功能是M進制轉換為十進制的函數(shù)。該算法思路為: 例如:二進制數(shù)110轉換成十進制數(shù) 0*20=0; 1*21=2; 1*22=4; 轉換結果為:0+2+4=6;(5) void main()是主函數(shù)。其功能是輸入需要測試的數(shù)據(jù)以及需要轉換的進制,并 特定 情形下調用D2M()函數(shù)和M2D()函數(shù),而且實

10、現(xiàn)M進制數(shù)向任意非M進制 的轉換。5 程序編碼#include#include#include#include#define STACK_INIT_SIZE 100 /存儲空間初始分配量#define STACKINCREMENT 10 /存儲空間分配增量int e,m,s,t; /e 為臨時用的的int型變量float x; /x為要轉換的十進制數(shù)int r,y,i,n;typedef struct int *base; /棧底int *top; /棧頂int stacksize; /棧容量SqStack;int InitStack(SqStack &S) /構造一個空棧S.base=(in

11、t *)malloc(STACK_INIT_SIZE *sizeof(int);if(!S.base) exit(0); /存儲空間失敗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(S.top-S.base=S.stacksize) /棧滿,

12、追加存儲空間S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int);if(!S.base) return 1 ; /存儲分配失敗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) return 1;e=*-S.top;return 0;int StackEmpty(S

13、qStack S) /若???,則返回1,否則返回0if(S.top=S.base)return 1;return 0 ;int DestroyStack(SqStack &S) /銷毀棧S,棧S不再存在free(S.base);S.top=NULL; /防止程序后面不小心使用了它S.base=S.top;return 0 ;SqStack S; /定義棧SD2M(int a,int b) /十進制轉換成其他進制的函數(shù)D2M()while(a)r=a%b;if(r9)r=r+55;Push(S,r); /壓入棧a/=b; /轉換成M進制printf(該數(shù)轉換成%d進制的結果:n,b);print

14、f(*n); printf(二進制:0和1*八進制:0-7*十進制:0-9*十二進制:0-9,A-Bn);printf(十六進制:0-9,A-F*二十四進制:0-9,A-M*六十進制:0-9,A-Z,a-xn);printf(*n);while(!StackEmpty(S)Pop(S,e); /彈出棧if(e=65)printf(%c,e);elseprintf(%d,e);return 0;M2D() /其他進制轉換為十進制的函數(shù)M2D() char c1000;printf(請輸入需要轉換的數(shù)的位數(shù):);scanf(%d,&n);printf(請輸入需要轉換的數(shù)的每位并用空格隔開:n);p

15、rintf(*n); printf(二進制:0和1;八進制:0-7;十進制:0-9;十二進制:0-9,A-Bn);printf(十六進制:0-9,A-F;二十四進制:0-9,A-M;六十進制:0-9,A-Z,a-xn);printf(*n);for(i=0;i=65&ci=97&ci=120) Push(S,ci-61);else if(ci=48)Push(S,ci-48);if(ci=65&ci=97&ci=120) Push(S,ci-61);else if(ci=48)Push(S,ci-48); i=0;while(!StackEmpty(S)Pop(S,e);y+=(int)pow

16、(m,i)*e;i+;return 0;void main()InitStack(S); /構造一個空棧printf(請輸入源進制:);scanf(%d,&m);if(m=10) /十進制轉換成其他進制printf(請給定一個需要轉換的10進制數(shù)(0-9):);scanf(%f,&x);if(int)x!=x)while(int)x!=x) printf(輸入有誤,請輸入一個整數(shù):);scanf(%f,&x);(int)x; printf(請輸入目的進制:); scanf(%d,&t); D2M(x,t);else(int)x;printf(請輸入目的進制:); scanf(%d,&t);D2

17、M(x,t);if(m!=10) /其他進制轉換成十進制,且其他任意進制的相互轉換M2D();printf(n輸入目的進制M:);scanf(%d,&s);D2M(y,s);printf(n);DestroyStack(S); /銷毀棧S,棧S不再存在6 程序測試與調試 (1)八進制數(shù)274轉換成二進制,結果為,如圖6.1所示:圖6.1 八進制數(shù)274轉換為二進制 (2)十進制數(shù)356轉換為二進制,結果為,如圖6.2所示:圖6.2 十進制數(shù)356轉換為十六進制 (3)十六進制數(shù)3AF轉換為二十四進制,結果為1F7,如圖6.3所示:圖6.3 十六進制數(shù)3AF轉換為二十四進制 (4)二十四進制數(shù)G

18、MN轉換為六十進制,結果為2af,如圖6.4所示:圖6.4 二十四進制數(shù)GMN轉換為六十進制 (5)六十進制數(shù)2AX轉換為十進制,結果為7833,如圖6.5所示:圖6.5 六十進制數(shù)2AX轉換為十進制(6) 輸入錯誤提示,如圖6.6所示:圖6.6 輸入錯誤提示7 結果分析 分析過程如下:(1)實現(xiàn)了任意進制之間的轉換,棧操作定義中,初始化??臻g可能出現(xiàn)空間不足,解決的辦法是當空間不足時自動進行擴充。(2)任意進制轉換為十進制時,用字符串數(shù)組接收,利用ASC碼值轉換為所對應的進制數(shù),最后輸出轉換結果。(3)當輸入有誤時會提示出錯,重新輸入后會再次判斷是否合法,若合法則進行進制轉換,若不合法則繼續(xù)輸出錯誤提示,直到輸入合法。8 總結 通過本次課程設計,我認識到熟練掌握基礎算法的重要性,對棧的含義及其基本算法有了更好的理解和應用。?!跋冗M后出”的算法加上Push()和Pop()方便了對要轉換的數(shù)進行讀取,和對轉

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論