课程设计--魔王语言解释.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
课程设计--魔王语言解释

魔王语言解释 一 目的 通过课程设计,巩固和加深对线性表、栈、队列、字符串、树、图、查找、排序等理论知识的理解;掌握现实复杂问题的分析建模和解决方法(包括问题描述、系统分析、设计建模、代码实现、结果分析等);提高利用计算机分析解决综合性实际问题的基本能力。 二 需求分析 1、输入输出形式 输入一个用于表示魔王语言的字符串,用数组存储,输入应该是含有大小写字母及括号的字符串;输出包括解释成表示认得语言词汇的小写字母和相对应的汉字。 2、程序功能 写一个魔王语言的解释系统,把他的话解释成人能听懂的话容。设大写字母表示魔王语言的词汇;小写字母表示人的语言词汇;希腊字母表示可以用大写字母或小写字母代换的变量。魔王语言可含人的词汇。规则如下: 规则1 (θα1α2…. αn)→θαnθαn-1….. θα1θ 规则2 B→tAdA 规则3 A→sae 例如,将 B(ehnxgz)B 解释成tsaedsaeezegexenehetsaedsae 若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是“B(鹅恨蛋下赶追)B”。翻译输出为“天上一只鹅地上一只鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一只鹅地上一只鹅”。 t d s a e z g x n h 天 地 上 一只 鹅 追 赶 下 蛋 恨 三 概要设计 1、数据类型定义及含义 本程序中使用了栈和队列两种数据类型,其中使用s栈用于将魔王语言的所有元素压入,temp栈用于压入魔王语言中括号外面的元素,队列q用于放括号里面的元素。 2、主程序流程 主程序先调用InitStack构造两个空栈S和Temp,接着调用InitQueue构造队列q,然后通过调用函数lhh完成魔王语言的翻译。再通过询问方式询问用户是否继续进行操作。 3、各模块功能 各模块功能如下: ⑴main主函数;⑵InitStack构造空栈;⑶Push入栈;⑷Pop出栈;⑸StackEmpty判断栈是否为空;⑹ClearStack清空栈;⑺InitQueue构造一个队列;⑻EnQueue入队;⑼DeQueue出队;⑽QueueEmpty判断队列是否为空;⑾InStack将字符数组所有元素入栈;⑿check_MoWang检验魔王语言是否正确;⒀Translate翻译魔王语言;⒁lhh核心代码部分,处理括号里的元素以及调用其它函数翻译魔王语言。 四 详细设计 1、数据类型的实现 程序中使用的栈和队列两种数据结构的类型定义如下: struct Stack {//栈结构定义 char* base;//在构造之前和销毁之后,base值为NULL char* top;//栈顶指针 int stacksize;//当前已分配的存储空间 }; //队结构定义 struct Queue { char data; struct Queue* next; }; struct LinkQueue { struct Queue* front;//队头指针 struct Queue* rear;//队尾指针 }; 2、函数调用关系图 函数调用关系图如下,由于为了简化,下图中除了main函数以外都采用了概要设计第3部分中的函数标号代替函数名: 3、主要函数模块的算法实现 void InStack(char* ch,struct Stack s) {//把字符数组里的元素全部压入栈中 int i,L=0; while(ch[L]!=\0) {L++;} for(i=L-1;i=0;i--) Push(s,ch[i]); } void Translate(struct Stack s,struct LinkQueue q) {//翻译魔王语言 char A[]=sae; char B[]=tsaedsae; char e; printf(\n解释后的语言为:\n ); while(!StackEmpty(s)) {//依次出栈输出处理后的元素 Pop(s,e); EnQueue(q,e);//元素进队 if(e==B) printf(%s,B);//规则2 else if(e==A) printf(%s,A);//规则3 else printf(%c,e); }//while printf(\n翻译后的语言为:\n ); while(!QueueEmpty(q)) {//输出对应汉字 DeQueue(q,e); switch(e) { case t: printf(天);break; case d : pri

文档评论(0)

2017meng + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档