- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
课程设计之魔王语言解释
魔王语言解释
一 目的
通过课程设计,巩固和加深理论知识掌握问题分析方法包括问题描述分析、设计、实现、结果分析θα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 : printf(地); break;
case s : printf(上); break;
case a : printf(一只); break;
case e : printf(鹅); break;
case z : printf(追); break;
case g : printf(赶); break;
case x : printf(下); break;
case n : printf(蛋); break;
c
文档评论(0)