




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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é)束語.14附錄15參考文獻(xià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í)候從棧頂開始彈出數(shù)據(jù)(最后一個(gè)數(shù)據(jù)被第一個(gè)讀出來)。 棧是允許在同一端進(jìn)行插入和刪除操作的特殊線性表。允許進(jìn)行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動(dòng);棧中元素個(gè)數(shù)為零時(shí)稱為空棧。插入一般稱為進(jìn)棧(PUSH),刪除則稱為退棧(POP)。 棧也稱為先進(jìn)后出表。 ??梢杂脕碓诤瘮?shù)調(diào)用的時(shí)候存儲(chǔ)斷點(diǎn),做遞歸時(shí)要用到棧!文件是程序設(shè)計(jì)中的一個(gè)重要概念。所謂“文件”一般是指存儲(chǔ)在外部介質(zhì)上數(shù)據(jù)的集合。一批數(shù)據(jù)時(shí)以文件的形式存放在外部介質(zhì)(如磁盤)上的。操作系統(tǒng)是以文件為單位對(duì)數(shù)據(jù)進(jìn)行管理的,也
3、就是說,如果想找存在外部介質(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> 為包含的庫函數(shù) 除此之外還有結(jié)構(gòu)體和宏定義的應(yīng)用系統(tǒng)流程圖見圖 調(diào)用函數(shù)h;主函數(shù)main()主界面menu()函數(shù)kuanjia1()函數(shù)delayMS函數(shù)Zlbds函數(shù)gotoTextPos函數(shù)strans4、詳細(xì)設(shè)計(jì)4.1引用庫函數(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è)元素之前沒有“*”或“/”,并且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) /*“(”后面沒有*或/ ,并且當(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)行界面。見1.10 圖 1.10 輸入程序的運(yùn)行界面 5.2.2輸入選擇2的運(yùn)行界面。見 5.2.3輸入其
17、它選擇的運(yù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)行。程序的開始我使用的是宏定義,使程序更加的簡(jiǎn)潔明了,其中貫穿程序大部分的是字符串和數(shù)組。登陸界面其實(shí)是利用判斷語句做的,后面的輸入輸出沒有什么特別的,是按照一般線性表的輸入輸出做的,。除此之外,我還花了一部分時(shí)間到美化界面上,現(xiàn)在的界面是在我的能力范圍之內(nèi)最好的。7、 設(shè)計(jì)體會(huì)通過這個(gè)星期的課程設(shè)計(jì),我的收獲還是不少的。剛開始看到這個(gè)課程設(shè)計(jì)題目的時(shí)候,我覺得
18、很有信心,因?yàn)槲艺J(rèn)為我的數(shù)據(jù)結(jié)構(gòu)和C語言中我最喜歡也是學(xué)的最好的地方就是線性,但是隨著對(duì)這個(gè)題目的細(xì)細(xì)探索,我發(fā)現(xiàn)這題目還是有一定的難度的,越看我覺得越急躁,但是這樣反而更加的阻礙我的思路,直到我碰到一個(gè)在C語言方面頗有心得的同學(xué),他幫我解決了很多問題,更主要的是他讓我明白了耐性在一個(gè)程序中的重要作用,現(xiàn)在,借著這里我想真誠的對(duì)他說一聲“謝謝!”我一定會(huì)更加的努力培養(yǎng)我的耐性,讓我的人生更加的美好而成功!數(shù)據(jù)結(jié)構(gòu)的很多算法沒能熟練的掌握,以致在調(diào)試的時(shí)候花了很長(zhǎng)時(shí)間,而且程序不夠工程化,功能不夠完善。程序設(shè)計(jì)的過程中,代碼的編寫很不熟練,而且很容易犯一些低級(jí)的錯(cuò)誤,如:語句后面的分號(hào)忽略了,括
19、號(hào)不匹配等等。8、 結(jié)束語該系統(tǒng)我主要做了三個(gè)功能選項(xiàng),,一個(gè)主界面。解決了編程整理表達(dá)式問題,當(dāng)然此系統(tǒng)也可應(yīng)用到其它表達(dá)式系統(tǒng)。它是利用了C語言實(shí)現(xiàn)的。此系統(tǒng)的作界面,操作員可以對(duì)某個(gè)指定的庫存文件進(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ǔ)教育叢書 清華大學(xué)出版社 ,2005年7月第三版3張穎江,胡燕。c語言程序設(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中學(xué)加強(qiáng)品牌學(xué)科建設(shè)實(shí)施方案
- 辦公活動(dòng)策劃與執(zhí)行細(xì)節(jié)方案
- 企業(yè)信息安全與防護(hù)作業(yè)指導(dǎo)書
- 2025福建省電力電網(wǎng)有限公司高校畢業(yè)生(第一批)招聘748人筆試參考題庫附帶答案詳解
- 居間勞務(wù)報(bào)酬合同
- 2025內(nèi)蒙古交通集團(tuán)有限公司社會(huì)化招聘100人筆試參考題庫附帶答案詳解
- 2025年上半年安順平壩縣公安局招考工勤人員易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年上半年安徽黃山市屯溪區(qū)事業(yè)單位招聘工作人員29人筆試易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年上半年安徽鑫時(shí)代工程項(xiàng)目管理限公司公開招聘工作人員及專業(yè)技術(shù)儲(chǔ)備人員若干人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2024年地震電磁輻射觀測(cè)儀項(xiàng)目資金籌措計(jì)劃書代可行性研究報(bào)告
- 英語-山東省日照市2022級(jí)(2025屆)高三校際聯(lián)合考試(日照一模)試題和答案
- 《莫奈《睡蓮》主題課件》
- 課件:2025春季開學(xué)第一課:哪吒精神點(diǎn)燃斗志
- 2025年02月麗江師范學(xué)院(麗江師范高等??茖W(xué)校)第一批人員20人筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 中央2025年中國作家協(xié)會(huì)所屬單位招聘11人筆試歷年參考題庫附帶答案詳解
- 2025年1月浙江省高考生物試卷(含答案)
- 2025年安徽醫(yī)學(xué)高等??茖W(xué)校高職單招職業(yè)適應(yīng)性測(cè)試近5年??及鎱⒖碱}庫含答案解析
- 《Oracle EBS 基礎(chǔ)理解》教學(xué)課件
- 《餐飲業(yè)發(fā)展》課件 - 探索美食世界的奧秘
- ct球管維修合同
- 氣管切開口腔護(hù)理操作流程
評(píng)論
0/150
提交評(píng)論