版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)題目名稱(chēng):數(shù)制轉(zhuǎn)換問(wèn)題課程名稱(chēng):數(shù)據(jù)結(jié)構(gòu)學(xué)生姓名:學(xué)號(hào):學(xué)院名稱(chēng):指導(dǎo)教師:目錄一.需求分析………二.概要設(shè)計(jì)………三.詳細(xì)設(shè)計(jì)………四.調(diào)試測(cè)試………五.總結(jié)……………利用數(shù)組實(shí)現(xiàn)時(shí)相同。只是棧具有后進(jìn)先出的性質(zhì),故其用Pop()取數(shù)較數(shù)組的逆向取數(shù)方便些。⑴SqStack定義棧,說(shuō)明base為棧底指針,top為棧頂指針,stacksize為棧容量;⑵intInitStack(SqStack&S)到intDestroyStack(SqStack&S)六大模塊分別表示構(gòu)造一個(gè)空棧、用e表示棧元素、插入元素、刪除元素、判斷棧是否為空以及摧毀棧;⑶SqStackS是指定義棧S;⑷D2M(inta,intb)的功能是將十進(jìn)制數(shù)轉(zhuǎn)換成M進(jìn)制的函數(shù);⑸M2D()的功能是M進(jìn)制轉(zhuǎn)換為十進(jìn)制的函數(shù);⑹voidmain()是主函數(shù)。其功能是輸入需要測(cè)試的數(shù)據(jù)以及需要轉(zhuǎn)換的進(jìn)制,并在特定情形下調(diào)用D2M()函數(shù)和M2D()函數(shù),而且實(shí)現(xiàn)M進(jìn)制數(shù)向任意非M進(jìn)制數(shù)的轉(zhuǎn)換。數(shù)據(jù)類(lèi)型定義如下:typedefstruct{int*base;棧底int*top;棧頂intstacksize;棧容量}SqStack;intInitStack(SqStack&S)構(gòu)造一個(gè)個(gè)空棧intGetTop(SqStackS,int&e)若棧不為空,則用e返回S的棧頂元素,并返回0,否則返回1intPush(SqStack&S,inte)插入元素e為新的棧頂元素intPop(SqStack&S,int&e)若棧不空,則刪除S的棧頂元素,用e返回其值,并返回0,否則返回1。1.程序流程圖開(kāi)始開(kāi)始棧數(shù)組棧數(shù)組輸入需轉(zhuǎn)換的位數(shù)輸入需轉(zhuǎn)換的數(shù)的進(jìn)制輸入需轉(zhuǎn)換的位數(shù)輸入需轉(zhuǎn)換的數(shù)的進(jìn)制N若N!=10若N=10輸入需轉(zhuǎn)換的數(shù)輸入需轉(zhuǎn)換的數(shù)輸出結(jié)果輸入將轉(zhuǎn)換的進(jìn)制數(shù)輸出結(jié)果輸入將轉(zhuǎn)換的進(jìn)制數(shù)2.程序源代碼A.用數(shù)組實(shí)現(xiàn)(文件名shuzu.cpp)#include<stdio.h>#include<math.h>#defineN1000inti,j,y,n,s;intm,r,reminder;intx;//全局變量默認(rèn)初始化為0,不必再賦0了D2M(intg,inth)//十進(jìn)制數(shù)轉(zhuǎn)換為其他進(jìn)制數(shù){ intc[N]; i=0; reminder=g%h; g=g/h; if(reminder>9) { c[i]=reminder+55; i++; }else { c[i]=reminder; i++; } if(g>0) D2M(g,h); for(j=i-1;j>=0;j--) if(c[j]>=65) printf("%c",c[j]); else printf("%d",c[j]); return0;}M2D(inte)//二進(jìn)制和八進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù),并這轉(zhuǎn)換為其他進(jìn)制數(shù){ inta[N];printf("請(qǐng)輸入%d進(jìn)制位數(shù):",m); scanf("%d",&n); printf("請(qǐng)輸入%d進(jìn)制的每位并使每位用空格隔開(kāi):",m); for(i=0;i<n;i++)scanf("%d",&a[i]); for(i=n-1;i>=0;i--) { y+=(int)pow(e,j)*a[i];//強(qiáng)制類(lèi)型轉(zhuǎn)換,以免造成數(shù)據(jù)丟失 j++; }printf("需要轉(zhuǎn)換的進(jìn)制M:"); scanf("%d",&s); printf("請(qǐng)輸出轉(zhuǎn)換成%d進(jìn)制的結(jié)果:",s); D2M(y,s); return0;}H2D(intf)//十六進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù),并轉(zhuǎn)換為其他進(jìn)制數(shù){ intb[N]; printf("請(qǐng)輸入%d進(jìn)制位數(shù):",m); scanf("%d",&n); printf("請(qǐng)輸入%d進(jìn)制的每位并使每位用空格隔開(kāi):",m); for(i=0;i<n;i++)scanf("%x",&b[i]); for(i=n-1;i>=0;i--) { y+=(int)pow(f,j)*b[i];//強(qiáng)制類(lèi)型轉(zhuǎn)換,以免造成數(shù)據(jù)丟失 j++; } printf("需要轉(zhuǎn)換的進(jìn)制M:"); scanf("%d",&s); printf("請(qǐng)輸出轉(zhuǎn)換成%d進(jìn)制的結(jié)果:",s); D2M(y,s); return0;}voidmain(){ printf("請(qǐng)給定一個(gè)需轉(zhuǎn)換的進(jìn)制M(2or8or10or16):"); scanf("%d",&m); if(m==2||m==8)//二進(jìn)制和八進(jìn)制轉(zhuǎn)換成十進(jìn)制 M2D(m); elseif(m==16)//十六進(jìn)制轉(zhuǎn)換成十進(jìn)制 H2D(m); elseif(m==10)//十進(jìn)制轉(zhuǎn)換成其它進(jìn)制 { printf("請(qǐng)輸入一個(gè)%d進(jìn)制數(shù):",m); scanf("%d",&x); printf("請(qǐng)輸入需要轉(zhuǎn)換成的進(jìn)制M(2or8or16):"); scanf("%d",&r); printf("請(qǐng)輸出轉(zhuǎn)換成%d進(jìn)制的結(jié)果:",r); D2M(x,r); } printf("\n");}B.用棧實(shí)現(xiàn)(文件名zhan.cpp)#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<math.h>#defineSTACK_INIT_SIZE100//存儲(chǔ)空間初始分配量#defineSTACKINCREMENT10//存儲(chǔ)空間分配增量inte,m,x,s,t;//x為要轉(zhuǎn)換的十進(jìn)制數(shù),e為臨時(shí)用的的int型變量intr,y,i,n;typedefstruct{int*base;//棧底int*top;//棧頂intstacksize;//棧容量}SqStack;intInitStack(SqStack&S){//構(gòu)造一個(gè)空棧 S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int)); if(!S.base)exit(0);//存儲(chǔ)空間失敗 S.top=S.base; S.stacksize=STACK_INIT_SIZE; return0;}intGetTop(SqStackS,int&e){//若棧不為空,則用e返回S的棧頂元素,并返回0,否則返回1 if(S.top==S.base)return1; e=*(S.top-1); return0;}intPush(SqStack&S,inte){//插入元素e為新的棧頂元素 if(S.top-S.base>=S.stacksize){//棧滿,追加存儲(chǔ)空間 S.base=(int*)realloc(S.base, (S.stacksize+STACKINCREMENT)*sizeof(int)); if(!S.base)return1;//存儲(chǔ)分配失敗 S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++=e; return0;}intPop(SqStack&S,int&e){//若棧不空,則刪除S的棧頂元素,用e返回其值,并返回0,否則返回1 if(S.top==S.base)return1; e=*--S.top; return0;}intStackEmpty(SqStackS){//若棧空,則返回1,否則返回0 if(S.top==S.base) return1; return0;}intDestroyStack(SqStack&S){//銷(xiāo)毀棧S,棧S不再存在 free(S.base); S.top=NULL;//防止程序后面不小心使用了它 S.base=S.top; return0;}SqStackS;//定義棧SD2M(inta,intb)//十進(jìn)制轉(zhuǎn)換成其他進(jìn)制的函數(shù)D2M(){ while(a) { r=a%b; if(r>9) r=r+55; Push(S,r);//壓入棧 a/=b;//轉(zhuǎn)換成M進(jìn)制 } printf("該數(shù)轉(zhuǎn)換成%d進(jìn)制的結(jié)果:",b); while(!StackEmpty(S)) { Pop(S,e);//彈出棧 if(e>=65) printf("%c",e); else printf("%d",e); } return0;}M2D()//其他進(jìn)制轉(zhuǎn)換為十進(jìn)制的函數(shù)M2D(){charc[1000]; printf("請(qǐng)輸入需要轉(zhuǎn)換的數(shù)的位數(shù):"); scanf("%d",&n); printf("請(qǐng)輸入需要轉(zhuǎn)換的數(shù)的每位并用空格隔開(kāi):"); for(i=0;i<n;i++) { scanf("%x",&c[i]); Push(S,c[i]); }i=0; while(!StackEmpty(S)) { Pop(S,e); y+=(int)pow(m,i)*e; i++; } }voidmain(){ InitStack(S);//構(gòu)造一個(gè)空棧 printf("請(qǐng)輸入需要轉(zhuǎn)換的進(jìn)制M(2or8or10or16):"); scanf("%d",&m); if(m==10)//十進(jìn)制轉(zhuǎn)換成其他進(jìn)制 { printf("請(qǐng)給定一個(gè)需要轉(zhuǎn)換的10進(jìn)制數(shù):"); scanf("%d",&x); printf("請(qǐng)輸入需要轉(zhuǎn)換成的進(jìn)制數(shù):"); scanf("%d",&t); D2M(x,t); } if(m==2||m==8||m==16)//其他進(jìn)制轉(zhuǎn)換成十進(jìn)制,且其他任意進(jìn)制的相互轉(zhuǎn)換 { M2D(); printf("給定要轉(zhuǎn)換成的進(jìn)制M:"); scanf("%d",&s); D2M(y,s); } printf("\n"); DestroyStack(S);//銷(xiāo)毀棧S,棧S不再存在 }四.調(diào)試測(cè)試1.十進(jìn)制數(shù)365轉(zhuǎn)換二進(jìn)制數(shù)測(cè)試結(jié)果如下:(圖1)圖12.十六進(jìn)制數(shù)1A2B3C轉(zhuǎn)換十進(jìn)制數(shù)測(cè)試結(jié)果如下:(圖2)圖23.二進(jìn)制數(shù)11001100轉(zhuǎn)換八進(jìn)制數(shù)測(cè)試結(jié)果如下:(圖3)圖34.八進(jìn)制數(shù)1234轉(zhuǎn)換為十六進(jìn)制數(shù)測(cè)試結(jié)果如下:(圖4)圖4五.總結(jié)此次課程設(shè)計(jì)與以往不同:第一,時(shí)間是比較緊的,從題目分配到完成設(shè)計(jì)不足十天的時(shí)間,而且又是即將期末考試的這段時(shí)間;第二,人數(shù)和以往也不同,以前都是幾個(gè)同學(xué)一起完成設(shè)計(jì),而這次卻是每個(gè)人單獨(dú)完成自己的題目,所以人手也是比較緊的;第三,以前的課程設(shè)計(jì)是最后完成提交就行了,而這次我們必須時(shí)刻都提交自己課程設(shè)計(jì)的進(jìn)程,中途隨時(shí)交給指導(dǎo)老師批閱,避免同學(xué)最后時(shí)間才去完成作業(yè)的思想。這次課程設(shè)計(jì)過(guò)程中遇見(jiàn)的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二四年度園林景觀設(shè)計(jì)及施工一體化合同3篇
- 2025年度出租車(chē)租賃與市場(chǎng)拓展合同范本(全新升級(jí))4篇
- 二零二四年養(yǎng)殖場(chǎng)承包合同范本:養(yǎng)殖場(chǎng)農(nóng)業(yè)旅游與合作3篇
- 二零二五年度徹磚勞務(wù)分包合同施工人員健康安全保障4篇
- 影視公司股權(quán)轉(zhuǎn)讓居間合同
- 二零二五版石材鋼架施工項(xiàng)目施工圖紙與技術(shù)交底合同3篇
- 2025年專(zhuān)業(yè)的購(gòu)車(chē)定金合同范文(2篇)
- 二零二五版智能家居產(chǎn)品采購(gòu)合同范本4篇
- 房屋出租合同解約書(shū)
- 2025年上海市銷(xiāo)售代理合同客車(chē)銷(xiāo)售樣本(2篇)
- 血透室護(hù)士長(zhǎng)述職
- 2024年漢中市行政事業(yè)單位國(guó)有資產(chǎn)管理委員會(huì)辦公室四級(jí)主任科員公務(wù)員招錄1人《行政職業(yè)能力測(cè)驗(yàn)》模擬試卷(答案詳解版)
- 藝術(shù)培訓(xùn)校長(zhǎng)述職報(bào)告
- 選擇性必修一 期末綜合測(cè)試(二)(解析版)2021-2022學(xué)年人教版(2019)高二數(shù)學(xué)選修一
- 《論語(yǔ)》學(xué)而篇-第一課件
- 《寫(xiě)美食有方法》課件
- 學(xué)校制度改進(jìn)
- 各行業(yè)智能客服占比分析報(bào)告
- 年產(chǎn)30萬(wàn)噸高鈦渣生產(chǎn)線技改擴(kuò)建項(xiàng)目環(huán)評(píng)報(bào)告公示
- 心電監(jiān)護(hù)考核標(biāo)準(zhǔn)
- (完整word版)申論寫(xiě)作格子紙模板
評(píng)論
0/150
提交評(píng)論