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

下載本文檔

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

文檔簡介

1、目錄1前言11.1 設計背景和意義11.1.1 數(shù)據(jù)結(jié)構(gòu)簡介21.1. 2選擇算法的原因21.2 設計的原理和內(nèi)容22正文22.1 設計的目的和意義22.2 目標和總體方案22.3 設計方法和內(nèi)容32. 3. 1模塊劃分32. 3. 2主要程序模塊32.4程序的設計思想和內(nèi)容61 .4.1用數(shù)組實現(xiàn)該問題.62 . 4. 2用棧實現(xiàn)該問題62.5設計創(chuàng)新和關鍵技術62. 6粉調(diào)試62.7程序流程圖72. 8結(jié)論8參考文獻9附錄9word1前言1.1 設計背景和意義1.1.1 數(shù)據(jù)結(jié)構(gòu)簡介數(shù)據(jù)結(jié)構(gòu)是計算機程序設計的重要理論設計基礎,是一門綜合性的專業(yè)基礎科。數(shù)據(jù)結(jié) 構(gòu)是研究數(shù)據(jù)之間的相互關系,也

2、即數(shù)據(jù)的組織形式的一門科學。它不僅是計算機學科的核 心課程,數(shù)據(jù)結(jié)構(gòu)是計算機存儲、組織數(shù)據(jù)的方式。通常情況下,精心選擇的數(shù)據(jù)結(jié)構(gòu)可以 帶來更高的運行或者存儲效率的算法。在計算機科學中,“數(shù)據(jù)結(jié)構(gòu)”不僅是一般程序設計 的基礎,而且是設計和實現(xiàn)編譯程序、操作系統(tǒng)、數(shù)據(jù)庫系統(tǒng)及其他系統(tǒng)程序和大型應用程 序的重要基礎。1.1.2 選擇算法的原因在許多類型的程序的設計中,數(shù)據(jù)結(jié)構(gòu)的選擇是一個基本的設計考慮因素。許多大型系 統(tǒng)的構(gòu)造經(jīng)驗表明,系統(tǒng)實現(xiàn)的困難程度和系統(tǒng)構(gòu)造的質(zhì)量都嚴重的依賴于是否選擇了最優(yōu) 的數(shù)據(jù)結(jié)構(gòu)。許多時候,確定了數(shù)據(jù)結(jié)構(gòu)后,算法就容易得到了。有些時候事情也會反過來, 我們根據(jù)特定算法來

3、選擇數(shù)據(jù)結(jié)構(gòu)與之適應。不論哪種情況,選擇合適的數(shù)據(jù)結(jié)構(gòu)都是非常 重要的。1.2 設計的原理和內(nèi)容設計了一個10進制轉(zhuǎn)換其它進制(36進制以內(nèi))及逆轉(zhuǎn)換的軟件,該軟件具有簡單的將 10進制數(shù)轉(zhuǎn)換成2、8、16進制數(shù)以及較復雜的高進制數(shù)的轉(zhuǎn)換和逆轉(zhuǎn)功能。本軟件采用C 語言編寫以VC+作為軟件開發(fā)環(huán)境,采用順序棧存儲方式來存儲運算中的數(shù)位,借助棧后 進先出的特點,易于結(jié)果輸出。操作簡單,界面清晰,易于為用戶所接受。2正文1.1 設計的目的和意義我們是計算機科學與技術專業(yè)的本科生,數(shù)據(jù)結(jié)構(gòu)是我們重要的必修課程。當代社 會學要大學培養(yǎng)出理論扎實,動手實踐能力強的大學生。所以,本次課程設計的目的就在于 通

4、過一次實踐性的活動加深對這門課程的理解,使我們在感性的認識上進一步升華為理性的 認識。為后繼課程的學習打下堅實的基礎。通過本次數(shù)據(jù)結(jié)構(gòu)課程設計,我們基本上掌握了 課程設計流程,還掌握了一些知識和技能,這對于我們以后對于數(shù)據(jù)結(jié)構(gòu)的學習有了很大的 幫助和提高,加深了我們對數(shù)據(jù)結(jié)構(gòu)的理解,為今后的學習打下了堅實的基礎。同時也提 高了我們對于編程這方面的能力。1.2 目標和總體方案本次設計的目標在于設計出一個能夠?qū)崿F(xiàn)數(shù)制轉(zhuǎn)換的程序,于是特制訂了一個總體的方 案:程序的設計第一步:查閱有關數(shù)據(jù)結(jié)構(gòu)數(shù)制轉(zhuǎn)換操作的資料,用半天的時間。第二步:設計這個項目的整體架構(gòu)和算法。用一到兩天的時間。第三步:使用C語言

5、程序設計程序語言進行算法的描述。兩天的時間。程序的調(diào)試進行程序的調(diào)試。用一天。最后,我在完整的整理一遍,完成課設。1.3 設計方法和內(nèi)容2. 3.1模塊劃分3. 3.1.1用數(shù)組實現(xiàn)該問題(1) i,s,m,r, reminder, x是定義的全局變量,初始值都為0 ;(2) D2M(int g, int h)是實現(xiàn)十進制數(shù)轉(zhuǎn)換為M進制數(shù)的函數(shù):(3) M2D0是實現(xiàn)V(僅指二進制數(shù)和八進制數(shù))進制數(shù)轉(zhuǎn)換為十進制數(shù)的函數(shù),并在其 中調(diào)用D2M(int g, int h)實現(xiàn)向非M進制數(shù)的轉(zhuǎn)換:(4) H2D(int f)是實現(xiàn)十六進制數(shù)轉(zhuǎn)換為十進制數(shù)的函數(shù),并在其中調(diào)用D2M(int g, i

6、nt h)實現(xiàn)向非十六進制數(shù)的轉(zhuǎn)換;(5) void main。是主函數(shù),功能是給出測試的數(shù)據(jù),并在特定條件下調(diào)用D2M()函數(shù) 和M2DO函數(shù)。2. 3. 1.2用棧實現(xiàn)該問題(1) SqStack定義棧,說明base為棧底指針,top為棧頂指針,stacksize為棧容量;(2) int InitStack(SqStack &S)到 int DestroyStack(SqStack &S)六大模塊分別表 示構(gòu)造一個空棧、用e表示棧元素、插入元素、刪除元素、判斷棧是否為空以及摧毀棧:(3) SqStack S是指定義棧S;(4) D2M(int a, int b)的功能是將十

7、進制數(shù)轉(zhuǎn)換成M進制的函數(shù):(5) M2D0的功能是M進制轉(zhuǎn)換為十進制的函數(shù):(6) voidmainO是主函數(shù)。其功能是輸入需要測試的數(shù)據(jù)以及需要轉(zhuǎn)換的進制,并在 特定情形下調(diào)用D2MO函數(shù)和M2DO函數(shù),而且實現(xiàn)M進制數(shù)向轉(zhuǎn)任意非M進制數(shù)的換。2. 3. 2主要程序模塊(1):D2M(int g, int h)(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-l;j>=0;j) if(cj>=

8、65) printf(“%c",cEj);else printfcj); return 0;)自定義函數(shù)D2M用于在用數(shù)組實現(xiàn)該問題的程序中十進制數(shù)轉(zhuǎn)換為其他進制數(shù) (2):M2D(int e) ( int aN; printf ("請輸入為d進制位數(shù):m); scanf &n); printf (請輸入加進制的每位并使每位用空格隔開:",m); for(i=0;i<n;i+) scanf("與d”, &ai); for(i=n-l;i>=0;i) ( y+=(int)pow(e,強制類型轉(zhuǎn)換,以免造成數(shù)據(jù)丟失j+;)prin

9、tf (請輸出所得的10進制的結(jié)果:);printf (%d”, y);printf (?,n需要轉(zhuǎn)換的進制M:); scanf (%d", &s);printf (請輸出轉(zhuǎn)換成對進制的結(jié)果:,s);D2M(y, s); return 0; ) 自定義函數(shù)也D用于在用數(shù)組實現(xiàn)該問題的程序中二進制和八進制數(shù)轉(zhuǎn)換為十進制數(shù), 并且轉(zhuǎn)換為其他進制數(shù) (3): H2D(int f) ( int bN; printf (請輸入%d進制位數(shù):”,m); scanf ("d”, &n); printf ("請輸入刎進制的每位并使每位用空格隔開for(i=0;i&

10、lt;n;i+)scanf (%;for(i=n-l;i>=0;i)( y+=(int)pow(f, ;強制類型轉(zhuǎn)換,以免造成數(shù)據(jù)丟失j+;)printf ("請輸出所得的10進制的結(jié)果:);prirrtf (飛d”, y);printf(n需要轉(zhuǎn)換的進制M:);scanf (線d, &s);printf (”請輸出轉(zhuǎn)換成對進制的結(jié)果:,s);D2M(y, s);return 0;自定義函數(shù)H2D用于在用數(shù)組實現(xiàn)該問題的程序中十六進制數(shù)轉(zhuǎn)換為十進制數(shù),并轉(zhuǎn)換 為其他進制數(shù)(4):D2M(int a, int b)(while(a)(r=a%b;if(r>9)r=r

11、+55;Push(S, r); 壓入棧a/二b;轉(zhuǎn)換成M進制) printf (該數(shù)轉(zhuǎn)換成用d進制的結(jié)果:",b);while(JStackEmpty(S)(Pop(S, e) ;/彈出棧if(e>=65)printfe);elseprintfe);)return 0;)自定義函數(shù)D2M用于在用棧實現(xiàn)該問題的程序中十進制數(shù)轉(zhuǎn)換成其他進制數(shù)(5):M2DO其他進制數(shù)轉(zhuǎn)換為十進制數(shù)char c1000;printf (請輸入需要轉(zhuǎn)換的數(shù)的位數(shù):“);scanf (飛d”, &n);printf ("請輸入需要轉(zhuǎn)換的數(shù)的每位并用空格隔開:);for(i=0;i<

12、;n;i+)scanf &ci);Push(S, ci);i=0;while(JStackEmpty(S)Pop(S, e); y+=(int)pow(m, i)*e; i+;printf (轉(zhuǎn)換成10進制的結(jié)果是:); printfCz%dy);return 0;)自定義函數(shù)X2D用于用棧實現(xiàn)該問題的程序中其他進制數(shù)轉(zhuǎn)換為十進制數(shù)2.4程序的設計思想和內(nèi)容2. 4.1用數(shù)組實現(xiàn)該問題D2M()函數(shù)和M2DO函數(shù)是實現(xiàn)該問題的主要函數(shù)。D2M()函數(shù)是實現(xiàn)十進制轉(zhuǎn)換為其 它進制的函數(shù),它是將輸入的十進制數(shù)x取首先對需要轉(zhuǎn)換的進制M取余,然后再對其取整, 接著通過遞歸調(diào)用D2Mo函數(shù)依次

13、將得到的整數(shù)部分依次先取余后取整,并將所得的余數(shù)依 次存入一個數(shù)組中,然后逆向取出數(shù)組中的元素,即得到轉(zhuǎn)換后的結(jié)果。而M2D()函數(shù)則是 實現(xiàn)其他進制M轉(zhuǎn)換為十進制,并將其轉(zhuǎn)換為非M進制的數(shù)。M進制轉(zhuǎn)十進制則是從該M進 制數(shù)的最后一位開始算,依次列為第0、1、2n位并分別乘以M的0、1、2n次方, 將得到的次方相加便得到對應的十進制數(shù),再調(diào)用D2XO函數(shù)將其轉(zhuǎn)換為非M進制的數(shù)。2. 4. 2用棧實現(xiàn)該問題同樣是利用D2Mo和M2D0兩個函數(shù)實現(xiàn)。兩個函數(shù)的思想同利用數(shù)組實現(xiàn)時相同。只 是棧具有后進先出的性質(zhì),故其用Pop()取數(shù)較數(shù)組的逆向取數(shù)方便些。2.5 設計創(chuàng)新和關鍵技術利用了棧的先進后

14、出特點來滿足數(shù)制轉(zhuǎn)換中從最后一位余數(shù)依次取出的要求,利用數(shù)組 的特性依次存儲取于數(shù)運算的結(jié)果余數(shù),再從該數(shù)組的最后一個元素從后往前依次取出即為 轉(zhuǎn)換后的數(shù)。2.6 程序調(diào)試1十進制數(shù)527的調(diào)試情況如下:請請請該P不要成 ¥-S 人定人轉(zhuǎn) .H趣的10進制數(shù):527 專換成的進制數(shù),2 進制的結(jié)果壯麗的aunkey to continue2十六進制數(shù)1A2c9的調(diào)試情況如下:-入人成要整 止數(shù)L.I|M<2oi*Sop10op16):16的數(shù)的位數(shù)=5琴售整電數(shù)的每位并用空格隔開"10進制的結(jié)果是"07209轉(zhuǎn)換成的進能換成8進制的結(jié)果:32i3乜any k

15、ey to continue2.7程序流程圖2.8結(jié)論通過本次課程設計,我認識到熟練掌握基礎算法的重要性,對棧的含義及其基本算法有 了更好的理解和應用。?!跋冗M后出”的算法加上Push。和Pop()方便了對要轉(zhuǎn)換的數(shù)進 行讀取,和對轉(zhuǎn)換后數(shù)倒置的輸出。在編寫過程中常遇到的不少問題,例如,變量類型的轉(zhuǎn) 換和ASCH碼轉(zhuǎn)義字符的應用,變量的定義和范圍,算法循環(huán)語句的退出條件等,我通過不 斷調(diào)試,翻閱課本和網(wǎng)上搜索材料得到了解決,也認識到這些細節(jié)上的處理更當注意。在調(diào) 試時,學會了在有問題的地方注釋并能經(jīng)常使用printf ()函數(shù)測試輸出結(jié)果。在測試時對測 試數(shù)據(jù)的選取更當考慮全面能檢測錯誤輸入并

16、進行提示。通過這次實驗我學會運用課本和老 師平時講授知識進行切身實踐,通過網(wǎng)絡搜索學到了新的庫函數(shù),提高了我實際編寫程序的 能力。弁考文獻1嚴蔚敏,吳偉民編著.數(shù)據(jù)結(jié)構(gòu)(C語言版).清華大學出版社,2006年2李春葆,曾慧,張植民編著.數(shù)據(jù)結(jié)構(gòu)程序設計題典.清華大學出版社,2002年3郭翠英編著.C語言課程設計案例精編.中國水利水電出版社,2004年4譚浩強編著.C程序設計.清華大學出版社,2005年5許卓群,張乃孝,楊冬青,唐世渭編著.數(shù)據(jù)結(jié)構(gòu).高等教育出版社,1988年6晉良潁編著.數(shù)據(jù)結(jié)構(gòu).人民郵電出版社,2002年附錄用數(shù)組實現(xiàn):#include<stdio.h>#incl

17、ude<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;1=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-l; j>=0; j)if(cj>=65)printf (飛c”, cj); elseprintf

18、 (飛d”, cj);return 0; )M2D(int e)二進制和八進制數(shù)轉(zhuǎn)換為十進制數(shù),并這轉(zhuǎn)換為其他進制數(shù)(int aN;printf ("請輸入為d進制位數(shù):”,m);scanf &n);printf (”請輸入加進制的每位并使每位用空格隔開:",m);for(i=0;i<n;i+)scanf("$d”,&ai);for(i=n-l;i>=0;i)(y+=(int)pow(e,強制類型轉(zhuǎn)換,以免造成數(shù)據(jù)丟失j+;)printf (請輸出所得的10進制的結(jié)果:);printf y);printfCn需要轉(zhuǎn)換的進制M:);sca

19、nf (“"d”, &s);printf (請輸出轉(zhuǎn)換成對進制的結(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 ("請輸入刎進制的每位并使每位用空格隔開:",m); for(i=0;i<n;i+) scanf;for(i=n-l;i>=0;i) (y+=(int)pow(f,強制類型轉(zhuǎn)換,以免造成數(shù)據(jù)丟失j+; ) printf ("

20、;請輸出所得的10進制的結(jié)果:); printf y); printf (n需要轉(zhuǎn)換的進制M:); scanf (飛d', &s);printf (”請輸出轉(zhuǎn)換成對進制的結(jié)果:,s);D2M(y, s);return 0;void mainO (printf ("請給定一個需轉(zhuǎn)換的進制M(2or8orl0orl6); 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ù)

21、:,m);scanf ("$d”, &x);printf ("請輸入需要轉(zhuǎn)換成的進制M(2or8orl6):");scanf (“$d", &r);printf (請輸出轉(zhuǎn)換成對進制的結(jié)果:",r);D2M (x, r);)printf (/zn*);)用棧實現(xiàn):#include<stdio. h>#include<malloc. h>#include<stdlib. h>#include<math. h>define STACK_INIT_SIZE 100存儲空間初始分配量#de

22、fine STACKINCREMENT 10存儲空間分配增量int e,m, x, s, t; /x為要轉(zhuǎn)換的十進制數(shù),e為臨時用的的int型變量int r, y, i,n;typedef structint *base;棧底int *top;棧頂int stacksize; 棧容量SqStack;int InitStack (SqStack &S) 構(gòu)造一個空棧S. base=(int *)malloc(STACK_INIT_SIZE *sizeof (int);if(!S. base) exit(0); 存儲空間失敗S. top=S. base;S. stacksize=STACK

23、 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) /棧滿,追加存儲空間S. base=(int *)realloc(S. base,(S. stacksize+STACKINCREENT)*sizeof(in

24、t);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(SqStack S) /若???,則返回1,否則返回0if (S. top=S. base) return 1;return 0 ;)int DestroyStack (SqStack &S) 銷毀棧 S,棧 S 不再存在 free(S. base);5. top=NULL;防止程序后而不小心使用了它6. base=S. top;return 0 ;)SqStack S;定義棧 SD2M(int a, int b)十進制轉(zhuǎn)換成其他進制的函數(shù)D2M()(while (a)(r=a%b;if(r>9)r=r+55;Pus

溫馨提示

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

評論

0/150

提交評論