版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、福建農(nóng)林大學計算機與信息學院計算機類課程設計報告課程名稱:數(shù)據(jù)結構課程設計課程設計題目:數(shù)制轉換問題姓 名:xia系:計算機科學與技術專 業(yè):計算機科學與技術年 級:2011級學 號:3116013131指導教師:劉必雄職 稱:講師2011年 12月 24日福建農(nóng)林大學計算機與信息學院計算機類課程設計結果評定評語:評分項目分值得分綜合運用知識能力和實踐動手能力強,設計方案合理,計算、分析正確,設計成果質量高;40設計態(tài)度認真,獨立工作能力強,有獨到見解,水平較高,并具有良好的團隊協(xié)作精神;40設計報告條理清晰、論述充分、文字通順、圖表規(guī)范課程設計報告符合規(guī)范要求。20成績:指導教師簽字:任務下
2、達日期:評定日期:目 錄1.設計目的- 1 -2.設計要求- 1 -3.設計方案- 1 -4.設計內(nèi)容- 1 -4.1需求分析- 1 -4.1.1輸入的形式和輸入值的范圍- 1 -4.1.2輸出的形式- 1 -4.1.3程序所能達到的功能- 1 -4.1.4測試數(shù)據(jù):- 2 -4.2概要設計- 3 -4.2.1抽象數(shù)據(jù)類型的定義- 3 -4.2.2主控程序的流程- 3 -4.2.3各程序模塊之間的層次關系- 3 -4.3詳細設計- 4 -4.3.1流程圖- 4 -4.3.2偽代碼- 5 -4.4調(diào)試分析- 7 -4.5測試結果- 9 -4.5.1鍵盤輸入輸出結果- 9 - 整數(shù)轉換測試- 9
3、- 小數(shù)轉換測試- 9 - 輸入出錯測試- 10 -4.5.2文本輸入輸出結果- 11 -5.總結- 14 -參考文獻- 14 -數(shù)制轉換問題1. 設計目的實現(xiàn)二、八、十和十六進制不同數(shù)制數(shù)據(jù)之間的相互轉換。2. 設計要求 輸入一種數(shù)的數(shù)據(jù)及數(shù)制,輸出這個數(shù)的其他三種數(shù)制的表示。 輸入的數(shù)包括整數(shù)和小數(shù)。 基于vc+6.0平臺,用c語言實現(xiàn)程序設計。3. 設計方案用順序棧實現(xiàn)數(shù)據(jù)的存入和讀取4. 設計內(nèi)容4.1 需求分析1) 輸入的形式和輸入值的范圍 先輸入未轉換前數(shù)的進制:取值范圍只能是2、8、10、16,輸入其他數(shù)據(jù)則提示出錯重輸。 再輸入該進制的數(shù):取值范圍可以是原進制的整數(shù)或小數(shù),根據(jù)
4、提供的原數(shù)據(jù)的數(shù)制,通過ascii碼判斷每次輸入的各個字符是否正確,如:2進制只能輸入1,0和小數(shù)點;8進制只能輸入0到7的數(shù)和小數(shù)點;10進制只能輸入0到9的數(shù)和小數(shù)點;16進制只能輸入輸入0到9的數(shù),a到f的字母和小數(shù)點;輸入其他字符則提示出錯重輸。2) 輸出的形式 分三行分別輸出該數(shù)其他進制的表示。3) 程序所能達到的功能 通過鍵盤輸入、文本讀取數(shù)據(jù),檢測輸入的數(shù)與原進制是否有誤; 將輸入的數(shù)(可以是整數(shù)或小數(shù)),轉換成除本身的進制數(shù)外其他3種進制的數(shù)并輸出; 可以在數(shù)據(jù)轉換后,選擇是否退出或繼續(xù)輸入數(shù)據(jù)進行轉換。4) 測試數(shù)據(jù):正確的輸入及其輸出,示例整數(shù):正確的輸入及其輸出,示例小數(shù)
5、:含錯誤的輸入及其輸出:4.2 概要設計1) 抽象數(shù)據(jù)類型的定義typedef structint *b,*top; int size;stack;stack s;/定義棧int inits(stack &s) /構造空棧int clears(stack &s) /釋放棧sint isempty(stack s) /判斷棧是否為空,若空返回1,否則返回0int push(stack &s , int e) /插入元素e為新的棧頂元素int pop(stack &s, int &e) /刪除s的棧頂元素,用e返回其值char c1000;/c存入未轉換的數(shù)int e,m,n,r,i,j; /定義
6、全局變量/e為棧頂元素臨時變量,m為要轉的進制數(shù), n為轉換前數(shù)的個數(shù)/r是十進制轉m進制的余數(shù),i為自增變量,j存小數(shù)點后有幾位小數(shù)用 float x,y,z;/定義全局變量/x為要轉換的十進制,y是轉后的10進制數(shù),z是十進制的小數(shù)部分2) 主控程序的流程 首先接收未轉換前數(shù)的進制m及數(shù)據(jù),判斷是否非法做出提示; 用c數(shù)組接收數(shù)據(jù),有小數(shù)得記下小數(shù)位數(shù)j。當接收的數(shù)據(jù)為十進制則用float(atof(c)轉成小數(shù)給全局變量x;若接收的數(shù)據(jù)為其他進制數(shù)則逐個讀取push(s,ci)入棧。 根據(jù)全局變量m判斷要調(diào)用的函數(shù):dtom(float a,int b) 十進制轉換成其他進制的函數(shù),mt
7、od()其他進制轉換為十進制的函數(shù)。 在dtom(float,int)函數(shù)中,接收形參為要轉換的十進制數(shù)和要轉成的數(shù)制。先判斷數(shù)據(jù)是否有小數(shù),有小數(shù)則先轉換小數(shù)部分的存入zz。輸出時先輸出轉換的整數(shù)部分,有小數(shù)再讀取zz逐個輸出小數(shù)部分。 在mtod()函數(shù)中,由j判斷數(shù)據(jù)是否有小數(shù),若有小數(shù)先轉換小數(shù)部分。輸出時將轉后的小數(shù)部分(若有)累加上整數(shù)部分輸出。 轉換完成后,清除棧,由用戶選擇是否繼續(xù)輸入數(shù)據(jù)轉換或退出。3) 各程序模塊之間的層次關系void dtom(float a,int b) /十進制轉換成其他進制的函數(shù)void mtod()/其他進制轉換為十進制的函數(shù)void main()
8、/根據(jù)輸入數(shù)據(jù)調(diào)用mtod()和dtom()函數(shù)對數(shù)據(jù)轉換注:其他非十進制的數(shù)轉換時,都先調(diào)用mtod()轉成十進制,得到float類型數(shù)存入全局變量y,再調(diào)用dtom(y,m)轉成需要的進制。4.3 詳細設計 流程圖:m=16m=8m=10m=2nyyynn開始m-未轉換前數(shù)的進制合法c-要轉換的數(shù)合法switch(m)x=float(atof(c)dtom(x,2)dtom(x,8)dtom(x,16)mtod()dtom(y,8)dtom(y,16)繼續(xù)退出mtod()dtom(y,2)dtom(y,16)mtod()dtom(y,2)dtom(y,8) 偽代碼:/十進制轉換成其他進制的
9、函數(shù)dtom()/void dtom(float a,int b) z=a-(int)a;/取小數(shù)部分int zz20;/存轉后的小數(shù)部分i=0;if(z)/有小數(shù)while(z)zzi=int(z*b);i+;z=z*b-int(z*b);n=i;while(int)a)r=(int)a%b;if(r9)r=r+55;push(s,r); /壓入棧a=a/b; /轉換成b進制printf(t該數(shù)進制的結果是:,b);while(!isempty(s)pop(s,e); /彈出棧if(e=65)printf(%c,e);elseprintf(%d,e);if(i)/有小數(shù)printf(.);/
10、小數(shù)點for(i=0;i=65)e=e-55;/轉字母else e=e-48;/轉數(shù)字y+=1/(float)pow(m,j)*e;/1除(e乘(m的j次方))j-;pop(s,e);/小數(shù)點拋出while(!isempty(s)pop(s,e);if(e=65)e=e-55;/轉字母else e=e-48;/轉數(shù)字y+=(int)pow(m,i)*e;/e乘(m的i次方)i+;printf(t該數(shù)進制的結果是:);if(int)y=y) printf(%.0f n,y); elseprintf(%f n,y);/有小數(shù)return;/-主函數(shù)main()-/void main()freope
11、n(ds1.in, r, stdin);freopen(ds1.out, w, stdout);/界面功能說明printf(n);printf(n);printf(t=數(shù)制轉換器= n); printf(n);printf( -實現(xiàn) 2 8 10 16 進制數(shù)據(jù)之間的轉換-n);printf(t| 先輸入未轉換前數(shù)的數(shù)制類型 |n);printf(t| 再輸入未轉換的數(shù) |n);printf(t| |n);printf(t| 程序將輸出該數(shù)的其他進制形式 |n);printf(t| |n);printf( -=);printf(=-n);printf(n);printf(n);first:in
12、t f=1;/判斷標識inits(s); /構造一個空棧printf(t請輸入未轉換前數(shù)的進制:);while(f)if(scanf(%d,&m)=eof|m!=2&m!=8&m!=10&m!=16)printf(t輸入有誤,請重新輸入:);elsef=0;printf(t請輸入該數(shù):);second:scanf(%s,c);n=strlen(c);f=0; /判斷標識for(i=0;i49|ci55|ci57|ci70|(ci57&ci65)|ci46|ci=47)f=1;break;default:break;/有錯f=1;if(f)/檢查輸入格式是否有誤printf(t輸入有誤,請重新輸
13、入:);goto second; if(m!=10)/其他進制轉換成十進制j=0;for(i=0;in;i+)push(s,ci);if(ci=.) j=n-1-i;/存小數(shù)位數(shù)else/十進制轉換成其他進制x=float(atof(c);/字符串轉小數(shù)printf(n);switch(m)/數(shù)制相互轉換case 10: dtom(x,2);dtom(x,8);dtom(x,16);break;case 2: mtod();dtom(y,8);dtom(y,16);break;case 8: mtod();dtom(y,2);dtom(y,16);break;case 16: mtod();d
14、tom(y,2);dtom(y,8);break;default:break;clears(s);/釋放棧sprintf(n);printf( -=);printf(=-n);printf(t是否繼續(xù)? 繼續(xù)【1】or 退出【0】:);scanf(%d,&f);if(f)printf(n);goto first;4.4 調(diào)試分析n 難點:檢查輸入格式是否有誤n 解決:通過ascii碼判斷每次輸入的各個字符是否正確,如:2進制只能輸入1,0和小數(shù)點;8進制只能輸入0到7的數(shù)和小數(shù)點;10進制只能輸入0到9的數(shù)和小數(shù)點;16進制只能輸入0到9的數(shù),a到f的字母和小數(shù)點;用f判斷標識,輸入其他字符則
15、將f=1提示出錯重輸。 n 代碼示例:main()f=0;for(i=0;i49|ci55|ci57|ci70|(ci57&ci65)|ci46|ci=47) f=1;break;default:break; /有錯f=1;n 難點:取未轉換十進制的小數(shù)部分,并輸出轉換后的相應的進制格式n 解決:使用強制轉換,轉義符號 %x、%.0fn 代碼示例:void dtom(float a,int b) /十進制轉換成其他進制的函數(shù)z=a-(int)a;/ 用強制轉換取小數(shù)部分int zz10;/存轉后的小數(shù)部分i=0;if(i)/有小數(shù)printf(.);/小數(shù)點for(i=0;in;i+)prin
16、tf(%x,zzi); /用%x逐個輸出即為輸出相應進制轉換后的數(shù)void mtod()/其他進制轉換為十進制的函數(shù) printf(t該數(shù)進制的結果是:);if(int)y=y)printf(%.0f n,y);/小數(shù)部分沒有有效數(shù)字,用%.0f去除小數(shù)點后的0elseprintf(%f n,y);/有小數(shù)return;n 難點:求輸入數(shù)據(jù)小數(shù)點后有幾位n 解決:用scanf(%s,c)將輸入數(shù)存入數(shù)組中,用n=strlen(c)得到長度,用j存小數(shù)位數(shù):for(i=0;in;i+)if(ci=.) j=n-1-i;4.5 測試結果l 鍵盤輸入輸出結果: 整數(shù)轉換測試 小數(shù)轉換測試 輸入出錯測
17、試l 文本輸入輸出結果: /ds1.in 整數(shù)轉換測試ds1.inds1.out2110118765110111164a30=數(shù)制轉換器= -實現(xiàn) 2 8 10 16 進制數(shù)據(jù)之間的轉換-| | 先輸入未轉換前數(shù)的數(shù)制類型 | 再輸入未轉換的數(shù) | | 程序將輸出該數(shù)的其他進制形式 | | -=-請輸入未轉換前數(shù)的進制:請輸入該數(shù):該數(shù)進制的結果是:13 該數(shù)進制的結果是:15該數(shù)進制的結果是:d -=-是否繼續(xù)? 繼續(xù)【1】or 退出【0】:請輸入未轉換前數(shù)的進制:請輸入該數(shù):該數(shù)進制的結果是:501 該數(shù)進制的結果是:111110101該數(shù)進制的結果是:1f5 -=-是否繼續(xù)? 繼續(xù)【1】
18、or 退出【0】:請輸入未轉換前數(shù)的進制:請輸入該數(shù):該數(shù)進制的結果是:1011該數(shù)進制的結果是:13該數(shù)進制的結果是:b -=-是否繼續(xù)? 繼續(xù)【1】or 退出【0】:請輸入未轉換前數(shù)的進制:請輸入該數(shù):該數(shù)進制的結果是:1187 該數(shù)進制的結果是:10010100011該數(shù)進制的結果是:2243 -=-是否繼續(xù)? 繼續(xù)【1】or 退出【0】: /ds2.in 小數(shù)轉換測試ds2.inds2.out21101.101118765.211011.1251164a3.20=數(shù)制轉換器= -實現(xiàn) 2 8 10 16 進制數(shù)據(jù)之間的轉換-| | 先輸入未轉換前數(shù)的數(shù)制類型 | 再輸入未轉換的數(shù) |
19、| 程序將輸出該數(shù)的其他進制形式 | | -=-請輸入未轉換前數(shù)的進制:請輸入該數(shù):該數(shù)進制的結果是:13.687500 該數(shù)進制的結果是:15.54該數(shù)進制的結果是:d.b -=-是否繼續(xù)? 繼續(xù)【1】or 退出【0】:請輸入未轉換前數(shù)的進制:請輸入該數(shù):該數(shù)進制的結果是:501.250000 該數(shù)進制的結果是:111110101.01該數(shù)進制的結果是:1f5.4 -=-是否繼續(xù)? 繼續(xù)【1】or 退出【0】:請輸入未轉換前數(shù)的進制:請輸入該數(shù):該數(shù)進制的結果是:1011.001該數(shù)進制的結果是:13.1該數(shù)進制的結果是:b.2 -=-是否繼續(xù)? 繼續(xù)【1】or 退出【0】:請輸入未轉換前數(shù)
20、的進制:請輸入該數(shù):該數(shù)進制的結果是:1187.125000 該數(shù)進制的結果是:10010100011.001該數(shù)進制的結果是:2243.1 -=-是否繼續(xù)? 繼續(xù)【1】or 退出【0】: /ds3.in 輸入出錯測試ds3.inds3.out92b1211018z.286711011.awd90.2511689ga6.50=數(shù)制轉換器= -實現(xiàn) 2 8 10 16 進制數(shù)據(jù)之間的轉換-| | 先輸入未轉換前數(shù)的數(shù)制類型 | 再輸入未轉換的數(shù) | | 程序將輸出該數(shù)的其他進制形式 | | -=-請輸入未轉換前數(shù)的進制:輸入有誤,請重新輸入:請輸入該數(shù):輸入有誤,請重新輸入:輸入有誤,請重新輸入
21、:該數(shù)進制的結果是:6 該數(shù)進制的結果是:6該數(shù)進制的結果是:6 -=-是否繼續(xù)? 繼續(xù)【1】or 退出【0】:請輸入未轉換前數(shù)的進制:請輸入該數(shù):輸入有誤,請重新輸入:輸入有誤,請重新輸入:該數(shù)進制的結果是:55 該數(shù)進制的結果是:110111該數(shù)進制的結果是:37 -=-是否繼續(xù)? 繼續(xù)【1】or 退出【0】:請輸入未轉換前數(shù)的進制:請輸入該數(shù):輸入有誤,請重新輸入:輸入有誤,請重新輸入:該數(shù)進制的結果是:1011010.01該數(shù)進制的結果是:132.2該數(shù)進制的結果是:5a.4 -=-是否繼續(xù)? 繼續(xù)【1】or 退出【0】:請輸入未轉換前數(shù)的進制:請輸入該數(shù):輸入有誤,請重新輸入:該數(shù)進制的結果是:166.312500 該數(shù)進制的結果是:10100110.0101該數(shù)進制的結果是:246.24 -=-是否繼續(xù)? 繼續(xù)【1】or 退出【0】:4.6 用戶使用說明 第一次輸入:未轉換前數(shù)的進制(
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年粉質儀合作協(xié)議書
- 2024年碳化硅磨塊合作協(xié)議書
- 2024年滾絲機合作協(xié)議書
- St-John-s-Wort-Extract-生命科學試劑-MCE
- 2025屆高考物理一輪復習第14章振動波動電磁波相對論第2節(jié)機械波教案新人教版
- 2024年高考地理二輪復習世界地理考點專項訓練含解析
- 2024-2025學年新教材高中地理第四單元從人地作用看自然災害1自然災害的成因課時作業(yè)含解析魯教版必修1
- 2025版高考英語一輪復習板塊2第1講名詞轉換為形容詞名詞或動詞學案含解析外研版
- 玉溪師范學院《健身健美副項》2021-2022學年第一學期期末試卷
- 玉溪師范學院《電路與電子技術》2021-2022學年期末試卷
- 高爾夫球場施工方案
- 2024年浙江省中考英語試題卷(含答案解析)
- 2024秋三年級語文上冊 第七單元 22 讀不完的大書教案 新人教版
- 7 中華民族一家親 第一課時 (教學設計)-部編版道德與法治五年級上冊
- 時代樂章第一課城市名片 課件 2024-2025學年人教版(2024)初中美術七年級上冊
- 高一機械制圖期末考試卷
- 2024-2030年中國圣誕裝飾品行業(yè)發(fā)展現(xiàn)狀與競爭力策略分析研究報告
- 【課件】Unit+4+My+Favourite+Subject大單元教學說課課件人教版(2024)七年級英語上冊
- 生化分析儀器市場發(fā)展預測和趨勢分析
- 全國英語等級考試三級閱讀真題
- 表現(xiàn)形式 課件 2024-2025學年人教版初中美術七年級上冊
評論
0/150
提交評論