魔王语言实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

魔王语言实验报告本页仅作为文档页封面,使用时可以删除

This document is for reference only-rar21year.March

数据结构实验报告

(魔王语言)

一、【实验构思(Conceive)】(10%)

(本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计、算法等相关知识)

魔王语言的解释规则:

大写字母表示魔王语言的词汇,小写字母表示人的词汇语言,魔王语言中可以包含括号,魔王语言的产生式规则在程序中给定,当接收用户输入的合法的魔王语言时,通过调用魔王语言翻译函数来实现翻译。

二、【实验设计(Design)】(20%)

(本部分应包括:抽象数据类型的功能规格说明、主程序模块、各子程序模块的伪码说明,主程序模块与各子程序模块间的调用关系)

抽象数据类型:typedef struct

{StackElementType elem[Stack_Size]; int top;

}SeqStack;

主程序模块:int main()

{

GhostLanage();

printf("\n\t按任意键退出\n\n");

}

各子程序模块:/*初始化栈*/

void InitStack(SeqStack *s)

{s->top=-1;

}

/*进栈操作*/

void Push(SeqStack *s,StackElementType x)

{if(s->top==Stack_Size-1)

printf("\n\t栈已满! ");

else {s->top++;s->elem[s->top]=x;}

}

/*出栈操作*/

void Pop(SeqStack *s,StackElementType *x)

{if(s->top==-1)

printf("\n\t栈为空! ");

else {*x=s->elem[s->top];s->top--;}

}

/*取栈顶元素*/

void GetTop(SeqStack *s,StackElementType *x) {if(s->top==-1)

printf("\n\t栈为空! ");

else *x=s->elem[s->top];

}

/*判断栈是否为空*/

int IsEmpty(SeqStack *s)

{if(s->top==-1) return(0);

else return(1);

}

/*魔王语言翻译函数*/

void GhostLanage()

{SeqStack B,A,s,B1,A1,r,M;

StackElementType ch,ch1,ch2,x;

char aa[100];

int choice,i=0,n;

InitStack(&B);InitStack(&A);InitStack(&s);InitStack(&r);

InitStack(&M);

printf("魔王语言的转换形式: B->tAdA A->sae");

Push(&B,'t');

Push(&B,'A');

Push(&B,'d');

Push(&B,'A');

Push(&A,'s');

Push(&A,'a');

Push(&A,'e');

printf("\n请输入要翻译的魔王语言:\n");

scanf("%s",aa);

for(i=0;aa[i]!='\0';i++)

Push(&s,aa[i]);

while(IsEmpty(&s))

{Pop(&s,&ch);

if(ch=='B')

{B1=B;

while(IsEmpty(&B1))

{Pop(&B1,&ch1);

if(ch1=='A')

{A1=A;

while(IsEmpty(&A1))

{Pop(&A1,&ch2);

Push(&r,ch2);

}

}

else Push(&r,ch1);

}

}

else if(ch=='A')

{A1=A;

while(IsEmpty(&A1)) {Pop(&A1,&ch2); Push(&r,ch2);

}

}

else if(ch==')')

{Pop(&s,&ch2);

while(ch2!='(')

{Push(&M,ch2);

Pop(&s,&ch2);

}

GetTop(&M,&ch2);

x=ch2;

Pop(&M,&ch2);

while(IsEmpty(&M))

{Push(&r,x);

Pop(&M,&ch2);

Push(&r,ch2);

}

Push(&r,x);

}

else Push(&r,ch);

}

M=r;

printf("\n\n\t翻译的结果为: ");

while(IsEmpty(&M))

{Pop(&M,&ch);

printf("%c",ch);

}

printf("\n\n\t是否继续翻译为汉语:( 1-继续,0-不继续)"); scanf("%d",&n);

if(n==1)

{ printf("\n\n\t翻译为汉语的结果为: \n\n\t");

M=r;

while(IsEmpty(&M))

{Pop(&M,&ch);

if(ch=='t') printf("天");

else if(ch=='d') printf("地");

else if(ch=='s') printf("上");

else if(ch=='a') printf("一只");

else if(ch=='e') printf("鹅");

相关文档
最新文档