數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告整理表達(dá)式_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告整理表達(dá)式_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告整理表達(dá)式_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告整理表達(dá)式_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告整理表達(dá)式_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告題目:編程整理表達(dá)式方法班 級(jí): 計(jì)算機(jī)092 姓 名: 余海剛 指導(dǎo)教師: 董躍華 ,井福榮 成 績(jī):_ 2011年 6月 16日目錄:摘 要21.引言 .22.需求分析.33.概要設(shè)計(jì).34.詳細(xì)設(shè)計(jì).65.測(cè)試結(jié)果.116.調(diào)試分析.137.設(shè)計(jì)體會(huì).148.結(jié)束語(yǔ).14附錄15參考文獻(xiàn)摘要(題目)::鍵盤(pán)輸入一個(gè)含有括號(hào)的四則運(yùn)算表達(dá)式,可能含有多余的括號(hào),編程整理該表達(dá)式,去掉所有多余的括號(hào),原表達(dá)式中所有變量和運(yùn)算符相對(duì)位置保持不變,并保持與原表達(dá)式等價(jià)1.引言棧,是硬件。主要作用表現(xiàn)為一種數(shù)據(jù)結(jié)構(gòu),是只能在某一端插入和刪除的特殊線性表。它按照后進(jìn)先出的原則存儲(chǔ)

2、數(shù)據(jù),先進(jìn)入的數(shù)據(jù)被壓入棧底,最后的數(shù)據(jù)在棧頂,需要讀數(shù)據(jù)的時(shí)候從棧頂開(kāi)始彈出數(shù)據(jù)(最后一個(gè)數(shù)據(jù)被第一個(gè)讀出來(lái))。 棧是允許在同一端進(jìn)行插入和刪除操作的特殊線性表。允許進(jìn)行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動(dòng);棧中元素個(gè)數(shù)為零時(shí)稱為空棧。插入一般稱為進(jìn)棧(PUSH),刪除則稱為退棧(POP)。 棧也稱為先進(jìn)后出表。 ??梢杂脕?lái)在函數(shù)調(diào)用的時(shí)候存儲(chǔ)斷點(diǎn),做遞歸時(shí)要用到棧!文件是程序設(shè)計(jì)中的一個(gè)重要概念。所謂“文件”一般是指存儲(chǔ)在外部介質(zhì)上數(shù)據(jù)的集合。一批數(shù)據(jù)時(shí)以文件的形式存放在外部介質(zhì)(如磁盤(pán))上的。操作系統(tǒng)是以文件為單位對(duì)數(shù)據(jù)進(jìn)行管理的,也

3、就是說(shuō),如果想找存在外部介質(zhì)上的數(shù)據(jù),必須先按文件名找到所指定的文件,然后從該文件中讀取數(shù)據(jù)。要向外部介質(zhì)上存儲(chǔ)數(shù)據(jù)也必須先建立一個(gè)文件(以文件名標(biāo)識(shí)),才能向它輸出數(shù)據(jù)。本報(bào)告中所設(shè)計(jì)的整理表達(dá)式,實(shí)現(xiàn)了以線性表結(jié)構(gòu)的單向表表示商場(chǎng)所需求的功能,將文件形式保存的數(shù)據(jù)恢復(fù)成線性表結(jié)構(gòu)的單向表的流程中所需的功能。 2.需求分析輸入字母和運(yùn)算符號(hào),輸入數(shù)值也可以,但不好看,輸出應(yīng)輸入對(duì)應(yīng)。去掉所有多余的括號(hào)時(shí),原表達(dá)式中所有變量和運(yùn)算符相對(duì)位置保持不變,不能前移或是退后,并保持與原表達(dá)式等價(jià)。輸入時(shí)也可以輸入正確表達(dá)式。3.概要設(shè)計(jì)<stdio.h>、< iostream.h&g

4、t;、<string.h>、<stdlib.h> 為包含的庫(kù)函數(shù) 除此之外還有結(jié)構(gòu)體和宏定義的應(yīng)用系統(tǒng)流程圖見(jiàn)圖 調(diào)用函數(shù)h;主函數(shù)main()主界面menu()函數(shù)kuanjia1()函數(shù)delayMS函數(shù)Zlbds函數(shù)gotoTextPos函數(shù)strans4、詳細(xì)設(shè)計(jì)4.1引用庫(kù)函數(shù)及變量的定義 #include<stdio.h> /*標(biāo)準(zhǔn)輸入/輸出頭文件*/#include<conio.h> /*包含繪制圖形函數(shù)等頭文件*/#include<string.h> /*包含字符串處理函數(shù)頭文件*/#include<stdlib

5、.h> /*包含動(dòng)態(tài)存儲(chǔ)與釋放函數(shù)頭文件*/#include <iostream> #include <strong.cpp> #define Max 100 /*宏觀定義棧的最大容量*/typedef struct stack /*棧結(jié)構(gòu)定義*/ char dataMax; /*字符串定義,存儲(chǔ)元素*/int top; /*棧中指針,代表?xiàng)5拈L(zhǎng)度*/liststack; 4.2 輸入算法的實(shí)現(xiàn)void kuanjia1() /大框架 system("cls"); printf(""); printf(" &quo

6、t;); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "

7、;); printf(" "); printf(" "); printf(" "); printf(""); gotoTextPos(4,2); printf(" "); gotoTextPos(4,3); printf(" 整 理 表 達(dá) 式"); gotoTextPos(4,4);printf(" ");void menu() /主界面 kuanjia1(); gotoTextPos(16,8); printf("1.Start")

8、; gotoTextPos(16,10); printf("2.Exit"); gotoTextPos(2,14); printf("Please input your choice: ");4.3輸出算法的實(shí)現(xiàn)void zlbds() kuanjia1(); gotoTextPos(2,7); printf("Input the primer expression:"); gotoTextPos(2,8); char strMax,expMax,tranMax; scanf("%s",str); strans(s

9、tr,exp,tran); gotoTextPos(2,10); printf("初步整理表達(dá)式:%s",exp); gotoTextPos(2,12); printf("最終整理表達(dá)式:%sn",tran); gotoTextPos(2,14); printf(" Press any key to return!"); getch();menu();int n; scanf("%d",&n); switch(n) case 1:zlbds();break; case 2:return ; default:

10、gotoTextPos(28,14);printf("Error!"); gotoTextPos(2,16);printf(" Press any key to try again!"); getch(); menu(); 4.4 算法void strans(char str,char exp,char tran) /*子函數(shù),刪除字符串中多余項(xiàng)*/ liststack op; /*定義一個(gè)棧*/ int i=0,t=0,j=0,k=-1; op.top=-1; /*棧的初始位置*/ for(i=0;i<Max;i+) /*把輸入的字符串存儲(chǔ)在棧中

11、*/ op.top+; /*指針移動(dòng)*/ op.dataop.top=stri; /*第i個(gè)字符入棧*/ for(i=0;i<=op.top;i+) /*從棧中查找元素*/ if(op.datai='(') /*第i個(gè)元素若為“(”*/ if(op.datai-1='*'|op.datai-1='/') /*如若第i個(gè)元素之前有“*”或“/”.即“(”前面有*或/*/ expi=op.datai; /*那么把第i個(gè)元素存在此數(shù)組里,即初始整理結(jié)果的存儲(chǔ)位置*/ else if(i=0) /*如若第i個(gè)元素之前沒(méi)有“*”或“/”,并且i=0*

12、/ expi=op.datai; /*那么把第i個(gè)元素存在此數(shù)組里,也即初始整理結(jié)果的存儲(chǔ)位置*/ k=i; /*i的直賦給k,k用于記錄當(dāng)前記錄位置*/ else /*i!=0*/ expi=op.datai;/*那么把第i個(gè)元素存在此數(shù)組里,也即初始整理結(jié)果的存儲(chǔ)位置*/ k=i; /*i的值賦給k,k用于記錄當(dāng)前記錄位置*/ else if(op.datai=')') /*第i個(gè)元素如不為“(”,而為“)”*/ if(op.datai+1='*'|op.datai+1='/'|k=-1) /*如果“)”后有*或/*/ expi=op.dat

13、ai; /*那么把第i個(gè)元素存在此數(shù)組里,即初始整理結(jié)果的存儲(chǔ)位置*/ else if(i=op.top&&k=-1) /*“(”后面沒(méi)有*或/ ,并且當(dāng)前位置合法*/ expi=op.datai; /*那么把第i個(gè)元素存在此數(shù)組里,也即初始整理結(jié)果的存儲(chǔ)位置*/ else /*當(dāng)前位置不合法*/ expi=' ' /*此數(shù)組存空*/ expk=' ' /*此數(shù)組存空*/ k=-1; else /*第i各元素如若不為(,而不為“)”*/ expi=op.datai; /*那么把第i個(gè)元素存在此數(shù)組里,也即初始整理結(jié)果的存儲(chǔ)位置*/ expop.t

14、op+1='0' /*最后一個(gè)存/0*/ while(expt!='0') if(expt!=' ') /*第t個(gè)元素不為空*/ tranj=expt; /*把它放在最終整理數(shù)組中*/ t+; j+; else if(expt=' '&&t!=op.top) /*第t個(gè)元素為空 ,并且當(dāng)前位置合法*/ tranj=expt+1; /*把下一個(gè)放在最終整理數(shù)組中*/ t=t+2; j+; else break; /*跳出循環(huán)*/ 4.5主函數(shù)int main() system("mode con:cols=

15、40 lines=20"); setConsoleTitle("整理表達(dá)式 by余海剛"); system("color 0A"); menu(); kuanjia1(); gotoTextPos(10,7); printf("拜"); delayMS(600); gotoTextPos(19,7); printf("拜"); delayMS(600); gotoTextPos(20,9); printf("b"); delayMS(600); gotoTextPos(21,9); p

16、rintf("y"); delayMS(600); gotoTextPos(24,9); printf("余"); delayMS(600); gotoTextPos(26,9); printf("海"); delayMS(600); gotoTextPos(28,9); printf("剛"); delayMS(600); return 0; 5、 測(cè)試結(jié)果 5.1輸入界面 5.2.1輸出界面 輸入選擇1的運(yùn)行界面。見(jiàn)1.10 圖 1.10 輸入程序的運(yùn)行界面 5.2.2輸入選擇2的運(yùn)行界面。見(jiàn) 5.2.3輸入其

17、它選擇的運(yùn)行界面。見(jiàn) 6、 調(diào)試分析 編譯時(shí),發(fā)現(xiàn)有的括號(hào)可刪可不刪時(shí),會(huì)自動(dòng)刪除,這樣導(dǎo)致程序不夠緊密。剛剛接到這個(gè)題目的時(shí)候,我發(fā)現(xiàn)用棧做會(huì)更加的減少時(shí)間復(fù)雜度和空間復(fù)雜度,從而更好的方便使用,于是我的一切出發(fā)點(diǎn)都是圍繞方便使用者進(jìn)行。程序的開(kāi)始我使用的是宏定義,使程序更加的簡(jiǎn)潔明了,其中貫穿程序大部分的是字符串和數(shù)組。登陸界面其實(shí)是利用判斷語(yǔ)句做的,后面的輸入輸出沒(méi)有什么特別的,是按照一般線性表的輸入輸出做的,。除此之外,我還花了一部分時(shí)間到美化界面上,現(xiàn)在的界面是在我的能力范圍之內(nèi)最好的。7、 設(shè)計(jì)體會(huì)通過(guò)這個(gè)星期的課程設(shè)計(jì),我的收獲還是不少的。剛開(kāi)始看到這個(gè)課程設(shè)計(jì)題目的時(shí)候,我覺(jué)得

18、很有信心,因?yàn)槲艺J(rèn)為我的數(shù)據(jù)結(jié)構(gòu)和C語(yǔ)言中我最喜歡也是學(xué)的最好的地方就是線性,但是隨著對(duì)這個(gè)題目的細(xì)細(xì)探索,我發(fā)現(xiàn)這題目還是有一定的難度的,越看我覺(jué)得越急躁,但是這樣反而更加的阻礙我的思路,直到我碰到一個(gè)在C語(yǔ)言方面頗有心得的同學(xué),他幫我解決了很多問(wèn)題,更主要的是他讓我明白了耐性在一個(gè)程序中的重要作用,現(xiàn)在,借著這里我想真誠(chéng)的對(duì)他說(shuō)一聲“謝謝!”我一定會(huì)更加的努力培養(yǎng)我的耐性,讓我的人生更加的美好而成功!數(shù)據(jù)結(jié)構(gòu)的很多算法沒(méi)能熟練的掌握,以致在調(diào)試的時(shí)候花了很長(zhǎng)時(shí)間,而且程序不夠工程化,功能不夠完善。程序設(shè)計(jì)的過(guò)程中,代碼的編寫(xiě)很不熟練,而且很容易犯一些低級(jí)的錯(cuò)誤,如:語(yǔ)句后面的分號(hào)忽略了,括

19、號(hào)不匹配等等。8、 結(jié)束語(yǔ)該系統(tǒng)我主要做了三個(gè)功能選項(xiàng),,一個(gè)主界面。解決了編程整理表達(dá)式問(wèn)題,當(dāng)然此系統(tǒng)也可應(yīng)用到其它表達(dá)式系統(tǒng)。它是利用了C語(yǔ)言實(shí)現(xiàn)的。此系統(tǒng)的作界面,操作員可以對(duì)某個(gè)指定的庫(kù)存文件進(jìn)行選擇,文件名自定。非常感謝老師對(duì)我的教導(dǎo)。參考文獻(xiàn) 1 嚴(yán)蔚敏 吳偉名 編著,數(shù)據(jù)結(jié)構(gòu), 清華大學(xué)出版社, 2001年1月 2 譚浩強(qiáng) 編著, C程序設(shè)計(jì)(第三版) ,新世紀(jì)計(jì)算機(jī)基礎(chǔ)教育叢書(shū) 清華大學(xué)出版社 ,2005年7月第三版3張穎江,胡燕。c語(yǔ)言程序設(shè)計(jì)M。北京:科學(xué)出版社。1985年。4 裔紅艷 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告 , 計(jì)算機(jī)師范 5 知道 6 李春葆 編著,數(shù)據(jù)結(jié)構(gòu)習(xí)題與解析(

20、第三版),清華大學(xué)出版社,2006年10月20附錄:#include<stdio.h>#include<stdlib.h>#include<iostream>#include<string.h>#include<conio.h>#include "strong.cpp"#define Max 100void menu();typedef struct stack char dataMax; int top;liststack;void kuanjia1() /大框架 system("cls");

21、 printf(""); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); p

22、rintf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(""); gotoTextPos(4,2); printf(" "); gotoTextPos(4,3); printf(" 整 理 表 達(dá) 式"); gotoTextPos(4,4); printf(" ");void strans(char str,char exp,cha

23、r tran) liststack s; int i=0,t=0,j=0,k=-1; s.top=-1; for(i=0;i<Max;i+) s.top+; s.datas.top=stri; for(i=0;i<=s.top;i+) if(s.datai='(') if(s.datai-1='*'|s.datai-1='/') expi=s.datai; else if(i=0) expi=s.datai; k=i; else expi=s.datai; k=i; else if(s.datai=')') if(s.

24、datai+1='*'|s.datai+1='/'|k=-1) expi=s.datai; else if(i=s.top&&k=-1) expi=s.datai; else expi=' ' expk=' ' k=-1; else expi=s.datai; exps.top+1='0' while(expt!='0') if(expt!=' ') tranj=expt; t+; j+; else if(expt=' '&&t!=s.

25、top) tranj=expt+1; t=t+2; j+; else break; void zlbds() kuanjia1(); gotoTextPos(2,7); printf("Input the primer expression:"); gotoTextPos(2,8); char strMax,expMax,tranMax; scanf("%s",str); strans(str,exp,tran); gotoTextPos(2,10); printf("初步整理表達(dá)式:%s",exp); gotoTextPos(2,1

26、2); printf("最終整理表達(dá)式:%sn",tran); gotoTextPos(2,14); printf(" Press any key to return!"); getch(); menu();void menu() /主界面 kuanjia1(); gotoTextPos(16,8); printf("1.Start"); gotoTextPos(16,10); printf("2.Exit"); gotoTextPos(2,14); printf("Please input your c

27、hoice: "); int n; scanf("%d",&n); switch(n) case 1:zlbds();break; case 2:return ; default:gotoTextPos(28,14);printf("Error!"); gotoTextPos(2,16);printf(" Press any key to try again!"); getch(); menu(); int main() system("mode con:cols=40 lines=20"); s

28、etConsoleTitle("整理表達(dá)式 by余海剛"); system("color 0A"); menu(); kuanjia1(); gotoTextPos(10,7); printf("拜"); delayMS(600); gotoTextPos(19,7); printf("拜"); delayMS(600); gotoTextPos(20,9); printf("b"); delayMS(600); gotoTextPos(21,9); printf("y");

29、 delayMS(600); gotoTextPos(24,9); printf("余"); delayMS(600); gotoTextPos(26,9); printf("海"); delayMS(600); gotoTextPos(28,9); printf("剛"); delayMS(600); return 0; #include "pcc32.h"void delayMS(uint32 d)Sleep(d);return ;void clearText(void)system("cls&quo

30、t;);return ;int setTextColor(uint8 fColor)HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_SCREEN_BUFFER_INFO csbInfo;GetConsoleScreenBufferInfo(hd, &csbInfo);return SetConsoleTextAttribute(hd, fColor | (csbInfo.wAttributes&0x0F);PCCOLOR getTextColor(void)CONSOLE_SCREEN_BUFFER_INFO csbInf

31、o;GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbInfo);return (PCCOLOR)(csbInfo.wAttributes&0x0F);int setBackColor(uint8 bColor)HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_SCREEN_BUFFER_INFO csbInfo;GetConsoleScreenBufferInfo(hd, &csbInfo);return SetConsoleTextAt

32、tribute(hd, (bColor << 4) | (csbInfo.wAttributes&0xF0);PCCOLOR getBackColor(void)CONSOLE_SCREEN_BUFFER_INFO csbInfo;GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbInfo);return (PCCOLOR)(csbInfo.wAttributes&0xF0) >> 4);int setColors(uint8 fColor, uint8 bColor)

33、HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_SCREEN_BUFFER_INFO csbInfo;GetConsoleScreenBufferInfo(hd, &csbInfo);return SetConsoleTextAttribute(hd, fColor | (bColor << 4) | (csbInfo.wAttributes&0xFF);int setS(bool b)HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_SCREEN_BUFF

34、ER_INFO csbInfo;GetConsoleScreenBufferInfo(hd, &csbInfo);if (!b)return SetConsoleTextAttribute(hd, csbInfo.wAttributes | 0x4000);elsereturn SetConsoleTextAttribute(hd, csbInfo.wAttributes & 0x4000);int setUnderLine(bool b)HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_SCREEN_BUFFER_INFO csbInfo;GetConsoleScreenBufferInfo(hd, &csbInfo);if (!b)return SetConsoleTextAttribute(hd, csbInfo.wAttributes | 0x8000);elsereturn SetConsoleTextAttribute(hd, csbInfo.wAttributes & 0x8000);uint8 getLineWid

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論