




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 實習報告 題目:編制一個魔王語言解釋的程序 班級:06052711 姓名:曹旭 學號:06057104 完成日期:2007.11.27一、 需求分析問題描述 有一個魔王總是使用自己的一種非常精練而抽象的語言講話,沒人能聽的懂。但他的語言是可以逐步解釋成人能懂得語言的,因為他的語言是由以下兩種形式的規(guī)則由人的語言逐 步抽象上去的: (1)->12.n(2)(12.n)->nn-1.1 在這兩種形式中,從左到右均表示解釋;從右到左表示抽象。試寫一個魔王解釋系統,把 他的話解釋成人能聽懂得話。
2、 基本要求 用下述兩條具體規(guī)則和上述規(guī)則形式(2)實現。設大寫字母表示魔王語言的詞匯;小寫字 母表示人的語言詞匯;希臘字母(a,b1,s,y1等)表示可以用大寫或小寫字母代換的變量。 魔王語言可含人的詞匯。 (1)B->tAdA (2) A->sae 測試數據 B(einxgz)B 解釋成 tsaedsae
3、ezegexeneietsaedsae 若將小寫字母與漢字建立下表所示的對應關系,則魔王說的話是“天上一個鵝地上一個鵝 鵝追鵝趕鵝下鵝蛋鵝恨鵝天上一個鵝地上一個鵝?!? t d s a e z G x n i 天 地 上 一
4、個 鵝 追 趕 下 蛋 恨 實現提示 將魔王的語言自右至左進棧,總是處理棧頂。若是開括號,則逐一出棧,將字母順序入隊 列,直至閉括號出棧,并按規(guī)則要求逐一出隊列再處理后入棧。其他情形較簡單,請讀者 思考如何處理,應首先實現棧和隊列的基本運算二、 概要設計 為實現上述程序功能,應以棧和隊列來表示。1. 設定棧的抽象數據類型定義為: ADT Stack 數據對象:D=ai | aiCharSet,I=1,2,.,n,n0 數據關系:R1=< ai-1,ai > |ai-1,a
5、iD,I=1,2,.,n 基本操作: ListInitiate (&S) 操作結果:構造一個空棧S。StackEmpty(S)初始條件:棧S已經存在。操作結果:若棧S為空棧,則返回TRUE,否則返回FALSE。Push(&S,e)初始條件:棧S已經存在。操作結果:在棧S的棧頂插入新的棧頂元素e。Pop(&S,&e)初始條件:棧S已經存在。操作結果:刪除S的棧頂元素,并以e返回其值。 ADT Stack2. 設定隊列的抽象數據類型定義為:ADTQueue 數據對象:D=ai | aiElemSet,I=1,2,.,n,n0 數據關系:R1=< ai-1,ai
6、 > |ai-1,aiD,I=1,2,.,n 基本操作: ListInitiate (&Q) 操作結果:構造一個空隊列Q。StackEmpty(Q)初始條件:隊列Q已經存在。操作結果:若隊列Q為空棧,則返回TRUE,否則返回FALSE。EnQueue(&Q,e)初始條件:隊列Q已經存在。操作結果:插入元素e為Q的新的隊尾元素。DeQueue(&Q,&e)初始條件:隊列Q已經存在。操作結果:刪除Q的對頭元素,并以e返回其值。 ADT Queue2. 程序包含四個模塊:1) 主程序模塊:Void main()初始化;For()接受處理命令;接受處理;2) 棧模
7、塊實現棧的抽象數據類型;3) 隊列模塊實現隊列的抽象數據類型。4) 魔王語言解釋模塊定義線性表的結點結構。各模塊的之間的調用關系如下: 主程序模塊 魔王語言解釋模塊 棧模塊隊列模塊三、 詳細設計1. 站類型typedef structchar *base;char *top;int stacksize;stack;2. 隊列類型typedef struct QNodechar data;struct QNode *next;QNode,*LinkQueueNode;typedef structLinkQueueNode front;LinkQueueNode rea
8、r;LinkQueue;3.棧的基本操作int Initstack(stack &s) s.base=(char*)malloc(100*sizeof(char); if(!s.base)exit(0); s.top=s.base; s.stacksize=100; return 1;int IsEmpty(stack s) if(s.top=s.base)return 1;return 0;void push(stack &s,char e)if(s.top-s.base>=s.stacksize)s.base=(char*)realloc(s.base,(s.stac
9、ksize+10)*sizeof(char);if(!s.base)exit(0);s.top=s.base+s.stacksize;s.stacksize+=10;*s.top+=e;int pop(stack &s,char &e)if(s.top=s.base)exit(0);e=*-s.top;return 1;4隊列的基本操作int initQueue(LinkQueue &Q)Q.front=Q.rear=(LinkQueueNode)malloc(sizeof(LinkQueueNode);if(!Q.front)exit(-1);Q.front->
10、next=NULL;return 1;int Isempty(LinkQueue Q)if(Q.front=Q.rear)return 1;return 0;int EnQueue(LinkQueue &Q,char e)LinkQueueNode p;p=(LinkQueueNode)malloc(sizeof(QNode);if(!p)exit(-1);p->data=e;p->next=NULL;Q.rear->next=p;Q.rear=p;return 1;char DeQueue(LinkQueue &Q,char &e) LinkQueu
11、eNode p;if(Q.front=Q.rear)return 0;p=Q.front->next;e=p->data;Q.front->next=p->next;if(Q.rear=p)Q.rear=Q.front;free(p);return e;5.求魔王語言解釋的偽碼算法:void transmite(stack S) LinkQueue Q; initQueue(Q); char c,e,ch; char A3='s','a','e' char B8='t','s','a
12、','e','d','s','a','e' printf("魔王要說的話是:"); while(!IsEmpty(S) pop(S,e); if(e='B') printf("tsaedsae"); else if(e='A') printf("sae"); else if(e='(') while(pop(S,e)&&e!=')') EnQueue(Q,e); pus
13、h(S,e); DeQueue(Q,c); while(!Isempty(Q) DeQueue(Q,e); push(S,c); push(S,e); push(S,c); while(!IsEmpty(S) pop(S,e); if(e=')')break; else if(e='B')printf("tsaedsae");else if(e='A') printf("sae");else printf("%c",e); else printf("%c",e); p
14、rintf("n");6.主函數和其他函數的算法:void main() bool flag=1; char str,c; while(flag=1) stack S; Initstack(S); char a100; printf("魔王說話了:"); int i=0; cin>>a; while(ai)i+; for(int k=i;k>=0;k-) push(S,ak); transmite(S);printf("n是否需要繼續(xù)?是的話請按y: ");scanf("%c",&str)
15、;if(str='y')flag=1;else flag=0;c=getchar(); 7調用函數關系圖反映了演示程序的層次結構: main Initiate transmiteInitiate pop push EnQueue DeQueue Isempty四調試分析1.對&的用法明白了許多。原來有點看不懂標識符&,使調試程序時費了我不少的時間。通過本次實驗調試,讓我明白了&用法。2.函數調用。函數調用是語言中一塊十分重要部分,它可以把一個程序分成若干部分,然后進行配置,所以這塊內容一定要學好。3,棧和隊列問題比較簡單。4,由于考慮不周,如果同樣的字母出現時,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 軟件設計師核心概念梳理試題及答案
- 2024年蘭州市榆中縣中醫(yī)醫(yī)院招聘筆試真題
- 2024年安徽省市場監(jiān)管局下屬事業(yè)單位真題
- 游戲行業(yè)會計個人工作計劃
- 江蘇省常州市鐘樓區(qū)二十四中學2025年七年級數學第二學期期末質量跟蹤監(jiān)視試題含解析
- 保安工作總結計劃廣告宣傳行業(yè)保安工作的廣告位保護
- 2024年濱州市環(huán)境衛(wèi)生清運大隊招聘筆試真題
- 教育在幼兒園的實踐計劃
- 風險管理體系中的評估方法試題及答案
- 四川省成都市龍泉驛區(qū)2025年七下數學期末教學質量檢測試題含解析
- 2024年山東濟南先行投資集團有限責任公司招聘考試真題
- 江蘇省揚州市邗江區(qū)2025年初三中考一??荚囉⒄Z試題含答案
- 產褥期保健及護理課件
- 陜西省西安市2025屆中考模擬英語檢測試題(附答案)
- 2025-2030消防車產業(yè)規(guī)劃專項研究報告
- 初中英語教輔電子版單選題100道及答案
- 2025年上海市崇明區(qū)中考二模英語試題(含答案)
- 大型心血管造影系統及其DSA質量控制
- 國家中小學智慧教育平臺應用指南
- 2024北京豐臺區(qū)三年級(下)期末數學試題及答案
- 2024-2025學年人教版七年級(下)期中數學試卷(考試范圍:第7~9章) (含解析)
評論
0/150
提交評論