魔王语言实验报告
数据结构魔王语言实验报告
数据结构与算法实验报告姓名院系学号任课教师指导教师实验地点软件学院实验时间2011年10月29 日实验名称数据结构实验一栈和队列同组人无预习报告(对实验主要内容的认识) 得分实验内容(问题,思路,程序,结果)得分1.题目:魔王语言2.问题描述:有一个魔王总是使用自己的一种非常精练而抽象的语言讲话,没有人能听得懂,但他的语言是可以逐步解释成人能听懂的语言,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的;α→β1β2…βm(θδ1δ2…δn)→δnθδn-1θ…δ2θδ1在这两种形式中,从左到右均表示解释。
试写一个魔王语言的解释系统,把他的话解释成人能听得懂得话。
3.算法思想描述(1)算法的思想①我将设置三个堆栈和两个队列处理这个问题,首先将魔王语言自右向左压入堆栈*2(一个用来测试S_3另一个用来操作S_1),然后判断此句话中是否有括号,若无则直接将操作堆栈弹出到队列中然后输出;②若有括号则先弹出操作堆栈S_1到队列Q_1中,遇到"("时跳过这个括号然后将括号后面的第一个字母标记(记作A ),将除第一个字母外的其他字母弹出到队列Q_2中,直到遇到")"为止,将“)”弹出;③将Q_2的元素每后面一个加原来的第一个元素A 压入堆栈S_2;④将堆栈S_2的元素弹出到Q_1中,然后将S_1中剩余的元素弹出到Q_!; ⑤按照对应的字母翻译即可。
(2)算法流程图开始 是否有括号 直接将堆栈中的弹出入队列翻译输出 将魔王语言自右向左压入堆栈S_1 NO YES 将堆栈S_1中的元素弹出到Q_1 弹出元素为"(" YES NO 弹出(后第一个元素记为A 将剩余元素弹入队列Q_2中 NO弹出元素为)YES将Q_2元素每个加A压入栈S_2将S_2中的元素弹出到Q_1中将S_1中剩余元素弹出到Q_1中翻译后输出结果结束4.数据结构描述(描述解决问题用到的数据结构)(1)所用数据结构的描述S_1堆栈负责自右向左存放魔王语言S_2堆栈存放处理过的括号里的语言S_3堆栈负责判断是否有括号Q_1队列存放处理后的语言Q_2队列负责存放括号中的语言(2)函数功能说明及函数的实现源代码①堆栈实现#ifndef STACK_H_INCLUDED#define STACK_H_INCLUDED#include<stdio.h>#include<math.h>#include<stdlib.h>#include<string.h>#define MAXSIZE 100#define STACK_INIT_MAX 100#define STACKINCREMENT 10#define ERROR 0#define OK 1#define FALSE 0#define TRUE 1typedef int Status;typedef struct{ //顺序栈类型定义char *top;char *base;int stacksize;}SqStack;Status InitStack(SqStack &s){ //构造一个空栈ss.base=(char *)malloc(STACK_INIT_MAX*sizeof(char)); if(!s.base) exit(OVERFLOW); //存储分配失败s.top = s.base;s.stacksize = STACK_INIT_MAX;return OK;}Status Pop(SqStack &s,char &e){ //删除s的栈顶元素,并以e返回其值if(s.top == s.base) return FALSE;s.top--;e = *(s.top);return TRUE;}Status Push(SqStack &s,char e){ //在栈s的栈顶插入新的栈顶元素e if((s.top-s.base) >= s.stacksize){s.base=(char*)realloc(s.base,(s.stacksize+STACKINCREMENT) * sizeof(char));if(!s.base) exit(OVERFLOW); //存储分配失败s.top = s.base + s.stacksize;s.stacksize += STACKINCREMENT;}*s.top = e;s.top++;return OK;}Status DestroyStack(SqStack &s){ //销毁栈sfree(s.base);s.stacksize = 0;return OK;}void InStack(char* ch,SqStack &s){//把字符数组从右至左压入栈中int i,L=0;while(ch[L]!='\0'){L++;}for(i=L-1;i>=0;i--){Push(s,ch[i]);}}Status StackEmpty(SqStack s){//栈是否为空if(s.top==s.base){return 1;}else{return 0;}}#endif // STACK_H_INCLUDED②队列实现#ifndef QUEUE_H_INCLUDED #define QUEUE_H_INCLUDED #include<stdio.h>#include<math.h>#include<stdlib.h>#include<string.h>#define MAXSIZE 100#define ERROR 0#define OK 1#define FALSE 0#define TRUE 1typedef struct{ //循环队列类型定义char *base;int front;int rear;}SqQueue;Status InitQueue(SqQueue &q){ //构造一个空队列qq.base = (char *)malloc(MAXSIZE*sizeof(char));if(!q.base) exit(OVERFLOW); //存储分配失败q.front = q.rear = 0;return OK;}Status EnQueue(SqQueue &q,char e){ //插入元素e为q的新的队尾元素if((q.rear+1) % MAXSIZE == q.front) return ERROR;q.base[q.rear] = e;q.rear = (q.rear + 1) % MAXSIZE;return OK;}Status DeQueue(SqQueue &q,char &e){ //若队列不空,则删除q的对头元素,用e返回其值,//并返回OK;否则返回ERRORif(q.front == q.rear) return ERROR;e = q.base[q.front];q.front = (q.front + 1) % MAXSIZE;return OK;}Status DestroyQueue(SqQueue &q){ //销毁队列q,q不再存在free(q.base);return OK;}#endif // QUEUE_H_INCLUDED③main函数实现#include <iostream>#include"Stack.h"#include"Queue.h"int main(){int length,i,mark; //length表示魔王语言的长度,mark为"("数mark=0;char e,str,j; //e为插入值或删除值,str为重复打印的字符,j为检测符char MoWang[100];//用来储存魔王的语言SqStack S_1;SqStack S_2;SqStack S_3;//检测栈InitStack(S_1);//初始化堆栈InitStack(S_2);InitStack(S_3);SqQueue Q_1;SqQueue Q_2;InitQueue(Q_1);//初始化队列InitQueue(Q_2);printf("请输入魔王的语言:\n");scanf("%s",&MoWang);//将魔王语言存入数组中length=strlen(MoWang);//魔王语言的长度包括括号i=0;InStack(MoWang,S_1);//将魔王语言自右向左入栈InStack(MoWang,S_3);//检测魔王语言while(!StackEmpty(S_3)){Pop(S_3,j);if(j=='('){mark=1;}}if(mark==1){while(e!=')'){//处理")"之前的元素Pop(S_1,e);if(e=='('){Pop(S_1,str);//记录需要重复打印的字符while(e!=')'){Pop(S_1,e);EnQueue(Q_2,e);//将括号内的元素入队列i++;}break;}EnQueue(Q_1,e);//将"("外的元素存入第一个队列中}for(;i>2;i--)//将括号内除了第一个和最后一个元素,其他元素连同第一个元素分次入栈{DeQueue(Q_2,e);//将队列中的第一个元素弹出存入ePush(S_2,e);//将e压入s_2中Push(S_2,str);//将str压入s_2中}DeQueue(Q_2,e);//将括号中的最后一个元素弹出存入ePush(S_2,e);//将e压入s_2中//将s_2堆栈中的元素弹出到队列Q_1中while(!StackEmpty(S_2)){Pop(S_2,e);EnQueue(Q_1,e);}while(!StackEmpty(S_1))//将魔王语言")"后的读入到Q_1中{Pop(S_1,e);EnQueue(Q_1,e);}}else{//若无括号直接输入while(!StackEmpty(S_1)){Pop(S_1,e);EnQueue(Q_1,e);}}while(Q_1.front!=Q_1.rear){DeQueue(Q_1,e); //删除队首元素switch(e) //判断并打印翻译后的语言{case 't': printf("天");break;case 'd': printf("地");break;case 's': printf("上");break;case 'a': printf("一只");break;case 'w': printf(",");break;case 'e': printf("鹅");break;case 'z': printf("追");break;case 'g': printf("赶");break;case 'x': printf("下");break;case 'n': printf("蛋");break;case 'i': printf("恨");break;case 'A': printf("上一只鹅");break;case 'B': printf("天上一只鹅地上一只鹅");break;default: printf("error!!!");}}printf("\n"); //换行DestroyQueue(Q_1);DestroyQueue(Q_2); //释放队列qDestroyStack(S_1); //释放栈s DestroyStack(S_2);return 0;}5.测试结果翻译成功结果如下图:实验结论得分成功利用堆栈和数组完成魔王语言的翻译教师评价总分实际得分。
魔王语言
软件设计部分1.题目分析该题目要实现的是将魔王的语言逐步解释成人能听懂的语言,依据任务书要求可总结魔王语言符合以下几条规则:(1)α→β1β2...βm(2)(θδ1δ2...δn)→θδnδn-1...θδ1θ(3)B→tAdA(4)A→sae上述规则中大写字母表示魔王词汇;小写字母表示人的语言;希腊字母表示可以用大写或小写字母代换的变量。
魔王语言可含人的词汇。
经分析知本程序主要通过栈和队列实现的,将魔王的语言自右至左近栈,总是处理栈顶字符,由第二条规则知遇开括号时,字母逐一出栈顺序入队列,闭括号出现时,按规则要求逐一出队列处理后再入栈。
2.设计过程软件程序主要通过一个主函数实现,执行主函数过程中再分别调用各部分子函数,各个子函数分别实现判断栈(队列)是否为空,进栈(队列),出栈(队列)。
①图1表示的是主函数的流程图图1主函数流程图②图2表示的是进栈之前判断栈是否为空,当栈顶指针和栈底指针指同一位置时,栈为空,图2判断栈是否空③图3表示的是进栈的流程图,输入魔王语言时将其从右至左进栈,并始终处理栈顶元素,其中难点在于对开括号和闭括号的不同处理,当遇开括号时,字母逐一出栈顺序入队列,闭括号出现时,按规则要求逐一出队列处理后再入栈。
图3进栈流程图④图4 表示的是出栈流程图,出栈时也需判断栈是否为空,若非空即从栈顶元素开始出。
图4出栈流程图⑤图5 表示的是判断队列是否为空的流程图,判断条件也是看其头指针与尾指针是否重合。
图5判断队列是否空⑥图6 表示的是入队列的流程图,入队列时从队尾入。
图6入队列流程图⑦图7表示的是出队列流程图,在队列不为空的前提下,从对头开始出。
图7出队列流程图3.调试过程及实验结果调试过程error C2440: '=' : cannot convert from 'char' to 'char *' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast执行 cl.exe 时出错.改正:在char后加*实验结果输入魔王语言即出现翻译过来的人类语言,如下图所示:图7实验结果4.结论通过一周的软件实习,使我对c语言及软件部分的知识都有了更深一步的了解,在实习过程中我的动手能力得到了锻炼和提高,也增强了解决问题的能力,同时也激发了我对软件知识学习的兴趣。
魔王语言解释
initstack (&s)
操作结果:构造一个空栈s.
push (&s,e)
初始条件:栈s已存在.
操作结果:在栈s的栈顶插入新的栈顶元素e.
pop(&s,&e)
初始条件:栈s已存在.
操作结果:删除s的栈顶元素,并以e返回其值.
}ADT stack
2:设定队列的抽象数据类型:
ADT queue{
(2)A -> sae
[测试数据]
B(ehnxgz)B解释成tsaedsaeezegexenehetsaedsae
若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是:“天上一只鹅地上一只鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一只鹅地上一只鹅”。
t d s a e z g x n h
天 地 上 一只 鹅 追 赶 下 蛋 恨
do
{
i++;
c=demon[i ];
push(temps,c)/*第一次循环将次字母入栈*/;
push(temps,t);/*再将首字母进栈*/
}
while(c!=')');/*直到括号中元素全部进栈*/
pop(temps,&t);/*将多余进栈的首字母t出栈*/
pop(temps,&t); /*将多余进栈的’)’出栈*/
default:strcpy(a,"???"); /*不能翻译的魔王语言以”???”输出*/
}
while(a[j]!='\0') /*如果数组还有字母*/
{
enqueue(q,a[j]);/*进队*/
j++;
}
}/*特殊入队*/
6.排序入队处理函数
数据结构课程设计报告-魔王语言实验报告模板
西安郵電學院数据结构课程设计报告题目:魔王语言院系名称:计算机学院专业名称:软件工程班级:学生姓名:学号(8位):指导教师:设计起止时间:一. 设计目的1、熟悉链表、队列、栈、排序、查找、文件等内容的的使用。
2、将数据结构的内容结合到一起使用。
3、熟悉掌握数据结构的内容。
4、了解递归与非递归的使用。
二. 设计内容以栈和队列为数据结构,使用文件读写、查找等操作,完成对魔王语言的解释。
三.概要设计1.功能模块图;开始主函数输入魔王说的话调用取括号函数读取文件rule.txt 读取文件mean.txt将栈中的元素存入数组中将魔王的话转化成小写字母将魔王语言翻译为汉语意思将结果保存到文件中结束2.各个模块详细的功能描述。
1.入栈操作函数int push(Stack *s,char x)讲传递过来的字符入栈;2.出栈操作char pop(Stack *s)将当前栈顶的字符出栈,并将其返回;3.入队操作函数int queue_in(Queue *p,char ch)将传递过来的ch中的字符入队;4.出队操作char queue_out(Queue *p)将当前队头的字符出队,并将其返回;5.去除魔王语言中括号模块void deletenode(Stack *s,Queue *r,char a[],int i)利用队栈的进栈出栈操作,入队出队操作,将魔王语言中的括号去除,使之成为一个字母的序列;6 .文件读取函数void read_file(),void word_file()通过文件函数,读取rule和mean文件,并将其输出到终端;7.将栈中的元素存入数组中void store(char a[],Stack *s)将栈中的元素按次序存入到数组中;8. 魔王语言转字母语言void change(char a[])将输入的魔王语言通过循环判断转换成字母语言;9 .将字母语言翻译为人类语言void translate(char a[],struct Word *h)将已经由魔王语言转换成的字母语言通过对照转换成人类语言10.文件保存函数void save_file(struct Word *h)将已经转换好的魔王语言保存到自定义路径。
魔王语言实验报告
数据结构课程设计报告题目:魔王语言系部名称:通信工程专业名称:班级:学号:学生姓名:指导教师:时间:一、课程设计目的(1)熟练掌握C语言和数据结构的相关操作。
(2)综合应用C语言的知识和数据结构的知识,编写程序,并且对以前所学的知识进行复习。
( 3 ) 培养学生独立完成课程设计的能力。
二、课程设计内容1.用带头结点的动态单链表来存储多项式;在此基础上完成多项式乘法运算要求以动态链表为存储结构、使用到查找和排序等操作;在创建多项式的过程中,可以按指数的任意顺序输入,并且可在同一多项式中输入指数相同的多项;在进行乘法操作之前,输出参与操作的两个多项式。
要求输出的多项式按指数降序排列,同指数的多项合并,项数的正负号显示合理。
2.魔王语言有一个魔王总是使用自己的一种非常精炼而抽象的语言讲话,没有人能听懂。
但他的语言是可以逐步解释成人能懂的语言的,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的:(1)α→β1β2 ……βm(2)(θδ1δ2 ……δn)→θδnθδn-1 ……θδ1 θ在这两种形式中,从左到右均表示解释;从右到左均表示抽象。
试写一个魔王语言的解释系统,把他的话解释成人能听得懂的话。
读取文件,并统计1. 读取文本文件(rule.txt), 将具体规则的对应关系读入数组或链中2. 读取文本文件(mean.txt), 将小写字母及其对应的含义读入数组或链表中处理规则形式(2)按照规则形式(2)处理魔王所说的话。
处理完毕后,对应的解释语句不再含有()。
处理规则形式(1)按照读入的具体规则,对上一步处理的结果进行规则形式(1)的处理,得到魔王所说的话的人类语言结果。
写结果文件按照所读入的小写字母对应的文字含义,将翻译成的人类语言转换成文字语句,写入文件result.txt中。
读取文件,并统计1. 读取文本文件(rule.txt),将具体规则的对应关系读入数组或链表中2. 读取文本文件(mean.txt), 将小写字母及其对应的含义读入数组或链表中处理规则形式(2)按照规则形式(2)处理魔王所说的话。
魔王的语言
魔王语言实习报告题目:编制一个解释魔王语言的程序完成日期2012.11.13一、需求分析(1)魔王语言有两条规则规则1可以由用户自己确定存储于expression[26[[6]中(每个魔王词汇最多只能转换成5个人类语言,规则2则为(@a(1)a(2)a(3)a(4)…..a(n))->(@a(n)@a(n-1)…@a(1)@)(2) 演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后由用户在键盘上输入演示程序中规定的运算命令;相应的输入数据(滤去输入中非法的字符)和运算结果显示在其后(3) 程序执行的命令为:a.创建魔王语言规则;b.输入魔王语言;c.解释魔王语言。
(4) 测试数据为:默认规则 1 魔王语言:B(ehnxgz)B 解释后:tsaedsaeezegexenchetsaedsae自定义规则1 A=aaa B=bbb C=ccc 其他为0 魔王语言:B(AC)B解释后为:bbbaaacccaaabbb二、概要设计1.栈的抽象类型数据定义ADT Stack{数据对象:D={ai|ai∈ElemSet, i=1,2, …,n, n≥0}数据关系:R1={<ai-1,ai>|ai-1,ai∈D, i=1,2, …,n }约定an端为栈顶,a1端为栈底。
InitStack( &S )操作结果:构造一个空栈S。
初始条件:栈S已存在。
GetTop( S, &e )初始条件:栈S已存在且非空。
操作结果:用e返回S的栈顶元素。
Push( &S, e )初始条件:栈S已存在。
操作结果:插入元素e为新的栈顶元素。
Pop( &S, &e )初始条件:栈S已存在且非空。
操作结果:删除S的栈顶元素,并用e返回其值。
}ADT Stack(2).本程序包含2个模块1)主程序模块:void main() {初始化;do{接受命令;处理命令;}while(“命令”=“退出”);}2)栈的构造模块三.详细程序#include<stdio.h>#include<stdlib.h>#define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define OK 1#define OVERFLOW -1;#define ERROR 0#define MAXSIZE 100typedef struct{int* st,*end;int size;}SqStack;int InitStack(SqStack &S) //建立一个栈{S.st=(int *)malloc(STACK_INIT_SIZE * sizeof(int));if(!S.st){//exit(OVERFLOW);}S.end=S.st;S.size=STACK_INIT_SIZE;return OK;int SGetTop(SqStack S,int &e) //用e返回S的栈顶元素if(S.st==S.end)return ERROR;e=*(S.st-1);return OK;}int SPush(SqStack &S,int e) //插入元素e为新的栈顶元素{if(S.st-S.end>=S.size){S.end=(int *)realloc(S.end,(S.size+STACKINCREMENT)*sizeof(int));if(!S.end){//exit(OVERFLOW);}S.st=S.end+S.size;S.size+=STACKINCREMENT;}*S.st++=e;return OK;}int SPop(SqStack &S,int &e) //删除S的栈顶元素,用e返回其值{if(S.st==S.end)return ERROR;e=*--S.st;return OK;}void print(char x) //将小写英文转化成汉字{if(x=='A')printf("上一只鹅");else if(x=='B')printf("天上一只鹅地上一只鹅");else if(x=='t') printf("天");else if(x=='d') printf("地");else if(x=='s') printf("上");else if(x=='a') printf("一只");else if(x=='e') printf("鹅");else if(x=='z') printf("追");else if(x=='g') printf("赶");else if(x=='x') printf("下");else if(x=='n') printf("蛋");else if(x=='h') printf("恨");}int main(){int temp,i,j;char ch[1000];printf("请输入魔王的语言:");scanf("%s",ch);{for(i=0;ch[i];i++){if(ch[i]=='('){if(ch[i+1]==')') //如果只出现(),则跳过{i=i+1;continue;}char LL=ch[i+1]; // 把LL指向括号后的位置SqStack s;InitStack(s);for(j=i+2;ch[j]!=')';j++){SPush(s,ch[j]); //将元素逐一入栈}i=j;while(SGetTop(s,temp)){print(LL); //输出LLprint(temp); //将元素逐一出栈并输出SPop(s,temp);}print(LL); //再次输出LL}else{print(ch[i]); //输出括号外的}}printf("\n");}return 0;}四、调试分析1.在编程过程中对设计做了如下修改:(1)在输出时,对括号中的内容先记录第一个字符,每次出栈的时候,先输出记录的字符,再输出出栈的字符。
魔王语言
西安郵電學院数据结构课程设计报告题目:魔王语言系部名称:软件工程专业名称:软件工程班级:0903学号:04095091学生姓名:张桥指导教师:孙家泽时间:2011年6月7日至2011年6月17日一、课程设计目的本次课程设计的目的旨在于让学生在学习数据结构课程过程中,将一些算法的思想应用到实际的C语言程序,通过对顺序表,链表,队栈的使用,让学生更加了解数据结构的应用和那让人叹为观止算法的精妙。
巩固C语言基础,让算法与程序得到统一,复习对于文件的读写操作。
二、课程设计内容以栈和队列为数据结构,使用文件读写、查找等操作,完成对魔王语言的解释三、需求分析【问题描述】有一个魔王总是使用自己的一种非常精炼而抽象的语言讲话,没有人能听懂。
但他的语言是可以逐步解释成人能懂的语言的,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的:(1)α→β1β2 ……βm(2)(θδ1δ2 ……δn)→θδnθδn-1 ……θδ1 θ在这两种形式中,从左到右均表示解释;从右到左均表示抽象。
试写一个魔王语言的解释系统,把他的话解释成人能听得懂的话。
【基本要求】用下述两条具体规则(具体规则数量不定)和上述规则形式(2)实现。
设大写字母表示魔王语言解释的词汇,小写字母表示人的语言的词汇;希腊字母表示可以用大写或小写字母代换的变量。
魔王语言可含人的词汇。
(1).Β→tΑdΑ(2).Α→sae示例:魔王说:B(ehnxgz)B解释成人类语言:tsaedsaeezegexenehetsaedsae若每个小写字母含义如下表所示:天上一只鹅地上一只鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一只鹅地上一只鹅四、概要设计1.系统结构图(功能模块图)2.功能模块说明1.文件读取函数int file_rule(),int file_mean()通过文件函数,提取存储在D:\中的rule和mean文件,并将其输出到终端;2.文件输出函数void output(Lang *L)将提取出的文件内容输出到终端;3.去除魔王语言中括号模块void translate1(LinkStackNode *S1, LinkStackNode*S2, LinkQueue *Q, char a[T])利用队栈的进栈出栈操作,入队出队操作,将魔王语言中的括号去除,使之成为一个字母的序列;4.字母语言转人类语言void translate2(char a[T], LinkQueue *Q)将已经由魔王语言转换成的字母语言通过对照转换成人类语言;5.魔王语言转字母语言void translate3(char a[T], LinkQueue *Q)将输入的魔王语言通过循环判断转换成字母语言;6.文件保存函数void file_result(char a[T])将已经转换好的魔王语言保存到自定义路径。
课程设计魔王语言说明
魔王语言说明一目的通过课程设计,巩固和加深对线性表、栈、队列、字符串、树、图、查找、排序等理论知识的明白得;把握现实复杂问题的分析建模和解决方式(包括问题描述、系统分析、设计建模、代码实现、结果分析等);提高利用运算机分析解决综合性实际问题的大体能力。
二需求分析一、输入输出形式输入一个用于表示魔王语言的字符串,用数组存储,输入应该是含有大小写字母及括号的字符串;输出包括说明成表示认得语言辞汇的小写字母和相对应的汉字。
二、程序功能写一个魔王语言的说明系统,把他的话说明成人能听懂的话容。
设大写字母表示魔王语言的辞汇;小写字母表示人的语言辞汇;希腊字母表示能够用大写字母或小写字母代换的变量。
魔王语言可含人的辞汇。
规那么如下:规那么1 (θα1α2….αn)→θαnθαn-1…..θα1θ规那么2 B→tAdA规那么3 A→sae例如,将 B(ehnxgz)B 说明成tsaedsaeezegexenehetsaedsae假设将小写字母与汉字成立下表所示的对应关系,那么魔王说的话是“B(鹅恨蛋下赶追)B”。
翻译输出为“天上一只鹅地上一只鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一只鹅地上一只鹅”。
三概要设计1、数据类型概念及含义本程序中利用了栈和队列两种数据类型,其中利用s栈用于将魔王语言的所有元素压入,temp栈用于压入魔王语言中括号外面的元素,队列q用于放括号里面的元素。
二、主程序流程主程序先挪用InitStack构造两个空栈S和Temp,接着挪用InitQueue构造队列q,然后通过挪用函数lhh完成魔王语言的翻译。
再通过询问方式询问用户是不是继续进行操作。
3、各模块功能各模块功能如下:⑴main主函数;⑵InitStack构造空栈;⑶Push入栈;⑷Pop出栈;⑸StackEmpty判定栈是不是为空;⑹ClearStack清空栈;⑺InitQueue构造一个队列;⑻EnQueue入队;⑼DeQueue出队;⑽QueueEmpty判定队列是不是为空;⑾InStack将字符数组所有元素入栈;⑿check_MoWang查验魔王语言是不是正确;⒀Translate翻译魔王语言;⒁lhh核心代码部份,处置括号里的元素和挪用其它函数翻译魔王语言。
魔王语言__数据结构试验报告
魔王语言系统解释一、需求分析[问题描述]有一个魔王总是使用自己的一种非常精练而抽象的语言讲话,没人能听的懂。
但他的语言是可以逐步解释成人能懂得语言的,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的:(1)α->β1β2...βn(2)(θδ1δ2...δn)->θδnθδn-1...θδ1θ在这两种形式中,从左到右均表示解释;从右到左表示抽象。
试写一个魔王解释系统,把他的话解释成人能听懂得话。
[基本要求]用下述两条具体规则和上述规则形式(2)实现。
设大写字母表示魔王语言的词汇;小写字母表示人的语言词汇;希腊字母(a,b1,s,y1等)表示可以用大写或小写字母代换的变量。
魔王语言可含人的词汇。
(1)B->tAdA(2) A->sae[测试数据]B(einxgz)B解释成 tsaedsaeezegexeneietsaedsae若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是“天上一个鹅地上一个鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一个鹅地上一个鹅。
”t d s a e z G x n i天地上一个鹅追赶下蛋恨[实现提示]将魔王的语言自右至左进栈,总是处理栈顶。
若是开括号,则逐一出栈,将字母顺序入队列,直至闭括号出栈,并按规则要求逐一出队列再处理后入栈。
其他情形较简单,请读者思考如何处理,应首先实现栈和队列的基本运算二、概要设计为实现上述程序功能,应以栈和队列来表示。
1.设定栈的抽象数据类型定义为:ADT Stack{数据对象:D={ai | ai∈CharSet,I=1,2,......,n,n≥0}数据关系:R1={< ai-1,ai > |ai-1,ai∈D,I=1,2,......,n}基本操作:ListInitiate (&S)操作结果:构造一个空栈S。
StackEmpty(S)初始条件:栈S已经存在。
操作结果:若栈S为空栈,则返回TRUE,否则返回FALSE。
魔王语言
实习报告班级:班级号:姓名:学号:【题目】:有一个魔王总是使用自己的一种非常精炼而抽象的语言讲话,没有人能听懂,但他的语言是可以逐步解释成人能听懂的语言,因为他的语言是由一下两种形式的规则诱人的语言逐步抽象上去的:(1)α→β₁β₂…βn(2)(θδ₁δ₂…δn)→θδnθδn﹣1…θδ₁θ在这两种形式中,从左到右均表示解释。
试写一个魔王语言的解释系统,把他的话解释成人能听得懂的话。
一、需求分析【基本要求】将抽象的魔王语言解释成人能听得懂的话。
设大写字母表示魔王语言的词汇;小写字母表示人的语言词汇;希腊字母表示可以用大写字母或小写字母代换的变量;魔王语言可含人的词汇。
魔王语言有三种法则:(3)A→ase(4)B→tAdA(5)(θδ₁δ₂…δn)→θδnθδn﹣1…θδ₁θ要求在按照以上三种法则输入的时候魔王语言被解释成小写字母,然后再把相应小写字母解释成中文。
【测试数据】:B(enhxgz)B解释成tsaedsaeezexegexenehetsaedsae若将小写字母与汉字建立一下关系,则魔王说的话就是:天上一只鹅地上一只鹅鹅追鹅赶鹅【程序命令】1)输入;2)翻译;3)输出。
二、概要设计【设计思路】1)遇到A→解释,并将解释后的字符以追加的形式存入字符串out_str。
2)遇到B→解释,并将解释后的字符以追加的形式存入字符串out_str。
3)遇到()→解释先将左括号后第一个字母存入字符E;然后从左括号后第一个字母开始进栈直到右括号结束,右括号不进栈;然后按照规则依次输出E和栈顶元素直到栈空;将解释完成的字符串一追加形式存入字符串out_str;至此括号语法解释完成。
4)普通字符直接以追加形式存入字符串out_str;5)输出out_str中字符串。
6)最后将out_str中字符解释成相应汉字,输出,魔王语言解释完成【程序模块】1)主程序模块:void main(){输入;switch(){case A:case B:case (:default :}输出;}2)栈单元模块——实现栈的抽象数据类型;3)节点结构单元模块——定义栈的节点结构。
魔王语言实验报告
数据结构课内实验报告书一、实验题目:魔王语言解释二、实验目的:通过本次实验,熟练掌握抽象数据类型栈和队列的实现,学会使用栈和队列解决具体应用问题,从而体会栈和队列的特点。
三、实验要求:有一个魔王总是使用自己的一种非常精练而抽象的语言讲话,没有人能听得懂,但他的语言是可以逐步解释承认能听懂的语言,因为他的语言是有以下两种形式的规则由人的语言逐步抽象上去的:(1)α→β1β2…βm(2)(θδ1δ2…δn)→θδnθδn-1…θδ1θ在这两种形式中,从左到右均表示解释。
试写一个魔王语言的解释系统,把他的话解释成人能听得懂的话。
要求:用下述两条具体规则和上述规则形式(2)实现。
设大写字母表示魔王语言的词汇;小写字母表示人的语言词汇;希腊字母表示可以用大写字母或小写字母代换的变量。
魔王语言可含人的词汇。
(1)B→tAdA(2)A→sae四、测试数据:B(ehnxgz)解释成Btsaedaseezegexenehetsaedsae若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是:“天上一只鹅地上一只鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一只鹅地上一只鹅”。
五、设计与实现过程(1)栈或队列的定义及其主要操作的实现typedef struct{char *top;char *bace;}Node;(2)主要算法的描述①、定义变量#define STACK_INIT_SIZE 100 #define STACK_INCREMENT 10②、主要代码:int print(Node *stack, char *bace){while(bace != stack->top) {printf("%c", *bace);bace++;}return 0;}int fun(Node *stack, char top[], char array[][20], char **bace, char *b) {Node stack1;char *point;char e, g;int k, i, a = 0, found = 0;initstack(&stack1,&point);g = getchar();while(g != '\n') {if(g == ')')break;if(g >= 'A' && g <= 'Z') {k = strlen(array[g - 'A']);if(found == 0){*(top++) = array[g - 'A'][0];found = 1;}for(i=0 ;i<k; i++)push(&stack1,&array[g - 'A'][i],&point);} else {if(g == '('){fun(&stack1, top, array, &point, &g);break;} else if(g != ')') {if(found == 0){*(top++) = g;found = 1;}push(&stack1, &g, &point);}}g = getchar();}top--;while(stack1.bace != stack1.top) {push(stack, top, bace);pop(&stack1, &e);push(stack, &e, bace);}pop(stack, &e);free(stack1.bace);return 0;}六、技巧与体会通过这次试验,我对有关栈和队列的知识更加熟悉、为后面所学的知识奠定了良好的基础、同时也使自己有了编程的技巧!以后要加强动手时间能力、多与同学交流算法精髓!在编写程序中尽量做到独立完成、对于自己想要完成的问题要主动编程完成、这样自己是一个很大的提升、也能学到很多的知识、熟练编程!。
魔王语言 实验报告
魔王语言实验报告1. 实验目的本实验旨在探索一种被称为魔王语言的语言现象,并对其进行分析和研究。
2. 实验背景在语言学领域,存在着一种被称为魔王语言的现象。
这种语言以其难以理解和识别的特点而闻名,有时甚至被称为“恶魔之语”。
许多人尝试了解和研究这种语言,希望能揭示其背后的奥秘。
3. 实验过程为了深入了解魔王语言,我们采用了以下步骤进行实验:步骤1:魔王语言文本收集我们首先搜集了大量的魔王语言文本样本。
这些文本来自不同的来源,包括魔王信函、魔法咒语书籍和神秘的古代文献。
我们收集的文本涵盖了不同的主题和语境,以便全面分析魔王语言。
步骤2:文本分析在这一步骤中,我们对收集到的文本进行了详细的分析。
我们注意到魔王语言的特点主要体现在以下几个方面:•字符替换:魔王语言中的字符常常被替换为其他字符,这使得文本变得难以辨认。
例如,字母“A”可能被替换为“@”,字母“E”可能被替换为“3”等等。
•语法变异:魔王语言的语法规则与传统语言不同,存在着一定的变异。
例如,动词可能在句子中出现的位置不同,或者名词和形容词的顺序可能被颠倒。
•隐藏信息:魔王语言中可能隐藏着某种特殊的信息。
这些信息可能需要特定的解密方法才能被识别出来。
步骤3:解码尝试为了解码魔王语言,我们进行了多次尝试。
我们试图根据魔王语言中的规律和特点,找到可能的解码方法。
我们使用了计算机程序进行自动化解码,同时也进行了手动解码实验。
然而,我们未能完全成功地解码魔王语言。
步骤4:结论尽管我们未能完全解码魔王语言,但我们对其进行了深入的分析和研究。
我们发现魔王语言是一种极具挑战性的语言现象,其独特的特点使其难以被理解和解码。
我们相信,进一步的研究和实验将有助于我们更好地理解魔王语言,并揭示其隐藏的奥秘。
4. 实验展望魔王语言作为一种神秘而难以理解的语言现象,仍然有许多待解决的问题。
未来的研究可以从以下几个方面展开:•更多文本样本的收集:收集更多的魔王语言文本样本,以便进行更全面和深入的分析。
魔王语言
西安郵電學院数据结构课程设计报告题目:魔王语言系部名称:通信与信息工程学院专业名称:通信工程班级:通工0905学号:03091183学生姓名:李辉指导教师:王小银时间:2010年11月15日至2010年11月24日一.实验目的(1)通过实验加深对线性表、栈、队列的掌握和应用。
(2)通过实验提高自己整合所学C语言及数据结构知识分析和解决实际问题的能力。
(3)进一步提高自己的编程水平。
二.实验内容及思想(1)问题描述:有一个魔王总是使用自己的一种非常精炼而抽象的语言讲话,没有人能听懂。
但他的语言是可以逐步解释成人能懂的语言的,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的:(1)α→β1β2 ……βm(2)(θδ1δ2 ……δn)→θδnθδn-1 ……θδ1 θ在这两种形式中,从左到右均表示解释;从右到左均表示抽象。
试写一个魔王语言的解释系统,把他的话解释成人能听得懂的话。
(2)算法思想:算法主思想:①判断魔王语言大写转换成小写、小写转换成人类语言的规则是否存在,若存在则直接读出并保存在相应的单链表中,若不存在则予以创建并保存在对应的文件中。
②将输入的魔王语言存入字符数组,并逆序入栈利用递归的方法进行去括号操作。
③采用递归法对去完括号后的字符序列进行大写化小写操作。
④将经过③处理后得的小写字母序列利用字符串比较、插入等方法转换成人类语言,并把小写字母序列和翻译后的人类语言保存在result.txt文件中。
去括号思想:定义字符变量temp, 定义flag=0,当flag=1时进行递归。
采用while循环把输入的魔王语言从右自左依次逆序入栈s,当栈s不为空且没遇到右括号时依次出栈s,进栈s1,当遇到右括号时flag=1。
采用while循环元素出栈s1入队q直到遇到左括号,入队结束(左括号不入队),此时temp为左括号后的元素。
然后,当队q不为空时依次出队,令temp和出队元素依次入队s1,将多入队的元素删除一个。
魔王语言解释数据结构课程设计报告
魔王语言解释程序一、问题引入1.问题描述有一个魔王总是使用自已的一种非常精练而抽象的语言讲话,没有人能听得懂。
但他的语言是可以逐步解释成人能懂的语言的,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的:(1)α→β1β2…βm(2)(θβ1β2…βm)→(θβm…β2θβ1θ)在这两种形式中,从左到右均表示解释。
写一个魔王解释程序,将魔王的话解释成人能听懂的话。
2.基本要求用下述两种规则和下述规则(2)实现。
设大写字母表示魔王语言的词汇,小写字母表示人的词汇,希腊字母表示可以用大写字母或小写字母代换的变量。
魔王语言可含人的词汇。
(1) B→tAdA(2) A→sae3. 测试数据B(einxgz)B解释成tsaedsaeezegexeneietsaedsae若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是:“天上一只鹅地上一将魔王的语言自右至左进栈,总是处理栈顶字符。
若是开括号,则逐一出栈,将字母顺序入队列,直至闭括号出栈,并按规则要求逐一出队列在处理后入栈。
5.本程序采用的是顺序栈。
基本操作列表:(1)据括号的个数设一个标记。
记下括号的位置。
(2)根据标记来执行依次的操作。
(3)没有括号,直接进队,据翻译函数2输出人的语言。
(4)有括号,分为括号内的和括号外的。
,根据括号的位置:括号外的从右到左入栈;括号内的从左到右入栈,并且依次插入括号内的第一个字符。
据翻译函数2 出栈并且翻译。
二、需求分析1. 本演示程序中,魔王语言限制在小写字母‘a’-‘z’之间,且必须限制在括号内以及大写字母A和B。
且允许出现重复字符或非法字符,程序运用时自动过滤去,输出的运算结果中将不含重复字符和非法字符。
2. 魔王语言遵守如下规则:(θδ1δ2δ3…δn)→θδnθδn-1…θδ1θB→tAdA A→sae3. 演示程序以用户和计算机对话的形式进行,即在计算机终端中显示提示信息之后,有用户自行选择下一步命令,相应输入数据和运算结果在其后显示。
魔王语言试验报告
试验报告:2.2 魔王语言解释一、需求分析(1)(2)字母替换中,可以存在魔王语言的字母,但最终要翻译成全部是小写字母。
(3)程序所能达到的功能:有一个魔王总是使用自己的一种非常精炼而抽象的语言讲话,没有人能听得懂,但他的语言是可以逐步解释成为人能听懂的语言,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的:①α->β1β2...βn②(θδ1δ2...δn)->θδnθδn-1...θδ1θ在这两种形式中,从左到右均表示解释。
试写一个魔王语言的解释系统,把他的话解释成人能听得懂得话。
(4)基本要求:用下述两条具体规则和上述规则形式(2)实现。
设大写字母表示魔王语言的词汇;小写字母表示人的语言词汇;希腊字母表示可以用大写字母或小写字母代换的变量。
魔王语言可含人的词汇。
① B->tAdA②A->sae二、概要设计:设计思想(1)存储结构根据问题描述,可采用堆栈结构。
结点描述:定义如下:typedef struct{char c[1000];int top;}SeqStack;(2)基本思想a.建立一个规则的结构体,其中一个char型存储某个字母的转换规则,一个int 型存储某个字母的转换规则的长度。
b.输入魔王语言后,再输入出现的要翻译的字母的规则,然后按转换格式进行转换,输出。
设计表示法(1)过程或函数调用的关系图mainStackInitiateStackPushStackPopprint1(2)基于数据结构的操作组本次实习题目比较简单,只用到一个堆栈,函数StackInitiate(),StackPush(),StackPop()都是堆栈的基本操作,函数print1()就是一个按照规则输出。
(3)过程与接口规格说明void StackInitiate(SeqStack *S)//建立栈void StackPush(SeqStack *S,char a)//入栈void StackPop(SeqStack *S,char *a)//出栈void print1(char a)//按规则输出实现注释(1)根据输入的魔王语言格式进行相应的数据处理。
语言类实习报告
语言类实习报告语言类实习报告3篇在经济飞速发展的今天,报告有着举足轻重的地位,我们在写报告的时候要注意逻辑的合理性。
其实写报告并没有想象中那么难,下面是小编帮大家整理的语言类实习报告4篇,希望对大家有所帮助。
语言类实习报告篇11、教学实习方面步:在十月十七日至十一月七日这二十天时间主要是听指导老师和其他老师的课,并且完成对学生的认识和了解。
其是“备好学生”“备好课堂”的基础。
通过听二十多节的课。
这让我受益良多。
其中最大的收获是让我了解了学生的基本情况。
比如:学生的性格;学生上课是的专注度;与及学生在课堂上参与课堂的态度;学生的基础情况等。
而这些东西将为我下一步教学环节“备好学生”作准备。
除此之外我还听了唐春萱、易程、唐彬等多位老师的课。
从中我明白了教学方式的多样化。
最主要的是如何实现语文教学的生活化。
是语文教学的生活化就必须要进入学生的现实生活。
即学生感兴趣并引起学生注意的话题。
这样才真正的有实现语文生活化的问题。
总之,在这个直接面对学生的准备阶段有很大的感触。
自己也由原先的无目的、无意识状态逐渐进入角色。
第二步:十一月七日至十二月二十日四十天时间是我全面接手教学工作。
着期间自己全面接手172班的无问教学工作。
期间完成了三个单元(一个小说单元、一个童话单元和一个古文单元)的教学活动。
在整个教学过程中我以“新三维”即知识与技能、过程与方法和情感态度与价值观来指导自己的教学实习。
这让我在教学实习中取得了很好的效果。
在各单元的测验中得到了较大的提高。
最让我自己感到欣慰的是学生转变了他们原先的学习态度。
他们由原来的不喜欢语文到喜欢再到主动的提出要成立学习兴趣小组。
课堂上也由原先的被动的接受知识到主动的去参加各种教学讨论和探究活动。
并且加强了和同学、老师的交流。
与此同时我把教学形式向课外延伸。
让他们自己感受生活化的语文。
这样是他们对语文不再陌生。
感觉到的是现实中的语文。
以上说的都是在学生方面的信息。
以下是我整个实习教学中的感受和体会。
魔王语言解释课程设计报告
课程设计(数据结构)班级姓名学号指导教师课程设计任务书及成绩评定课题名称魔王语言解释系统设计Ⅰ、题目的目的和要求:1、设计目的巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。
(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。
(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。
2、设计题目要求:【问题描述】有一个魔王总是使用自己的一种非常精炼而抽象的语言讲话,没有人能听懂,但他的语言是可以逐步解释成人能听得懂的语言,因为他的语言是由以下两种形式的规则逐步抽象上去的:(1)α->β1β2……βm(2)(θδ1δ2……δn)—>θδnθδn-1……θδ1θ【基本要求】用下述两条具体规则和上述规则形式(2)实现。
设大写字母表示魔王语言的词汇;小写字母表示人的语言词汇;希腊字母表示可以用大写字母或小写字母代换的变量。
我们有魔王语言的解释规则:(1)B->tAdA ;(2)A->sae;【测试数据】魔王语言 B(ehnxgz)B解释成tsaedsaeezegexenehetsaedsae。
魔王语言tdsaexghnAtx解释成txtttsaetnthtgtztetatstdtⅡ、设计进度及完成情况日期内容1.10-1.11 选取参考书,查阅有关文献资料,完成资料搜集和系统分析工作。
1.12~1.14 创建相关数据结构,录入源程序。
1.17~1.19 调试程序并记录调试中的问题,初步完成课程设计报告。
1.20~1.21 上交课程设计报告打印版并进行课程设计答辩,要求每个同学针对自己的设计回答指导教师3-4个问题。
考核结束后将课程设计报告和源程序的电子版交班长统一刻光盘上交。
Ⅲ、主要参考文献及资料[1] 严蔚敏数据结构(C语言版)清华大学出版社 1999[2] 严蔚敏数据结构题集(C语言版)清华大学出版社 1999[3] 谭浩强 C语言程序设计清华大学出版社[4] 与所用编程环境相配套的C语言或C++相关的资料Ⅳ、成绩评定:设计成绩:(教师填写)指导老师:(签字)二○一一年一月二十一日目录第一章概述 (1)第二章系统分析 (2)第三章概要设计………………………………………………………第四章详细设计………………………………………………………第五章运行与测试……………………………………………………第六章总结与心得……………………………………………………参考文献………………………………………………………………第一章概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。
魔王语言实验报告
魔王语言实验报告-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN数据结构实验报告(魔王语言)一、【实验构思(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("鹅");else if(ch=='z') printf("追");else if(ch=='g') printf("赶");else if(ch=='x') printf("下");else if(ch=='n') printf("蛋");else if(ch=='h') printf("恨");}printf("\n");}else ;}三、【实现描述(Implement)】(30%)(本部分应包括:抽象数据类型具体实现的函数原型说明、关键操作实现的伪码算法、函数设计、函数间的调用关系,关键的程序流程图等,给出关键算法的时间复杂度分析。
关于语言训练实验报告
一、实验背景随着社会的发展,语言能力的培养越来越受到重视。
为了提高学生的语言表达能力和语言运用能力,我校开展了语言训练实验。
本次实验旨在通过科学的方法和有效的策略,帮助学生掌握正确的发音、丰富的词汇和灵活的语法,从而提高学生的整体语言水平。
二、实验目的1. 掌握正确的发音,提高语音质量。
2. 丰富词汇量,提高语言表达能力。
3. 灵活运用语法,增强语言逻辑性。
4. 培养良好的语言学习习惯,提高自主学习能力。
三、实验方法1. 实验对象:我校高一、高二年级学生共100人。
2. 实验时间:为期一个学期,每周一次,每次1.5小时。
3. 实验内容:(1)语音训练:包括声母、韵母、声调的发音练习,以及朗读、跟读等技巧训练。
(2)词汇训练:包括单词记忆、短语运用、词汇积累等。
(3)语法训练:包括句型变换、句子成分分析、语篇结构分析等。
(4)口语训练:包括角色扮演、辩论、演讲等。
四、实验步骤1. 第一阶段(第1-4周):以语音训练为主,让学生掌握正确的发音方法。
2. 第二阶段(第5-8周):结合词汇训练,让学生在语境中运用所学词汇。
3. 第三阶段(第9-12周):开展语法训练,提高学生的语言逻辑性。
4. 第四阶段(第13-16周):加强口语训练,提升学生的语言表达能力。
五、实验结果与分析1. 语音质量:经过一个学期的语音训练,学生的发音准确率提高了30%,语音质量明显改善。
2. 词汇量:学生在词汇训练中,词汇量增加了约500个,语言表达能力得到提升。
3. 语法运用:在语法训练中,学生能够熟练运用所学语法知识,句子结构更加完整,逻辑性更强。
4. 口语能力:通过口语训练,学生的口语表达能力得到显著提高,自信心增强。
六、实验结论1. 语言训练实验对于提高学生的语言能力具有显著效果。
2. 语音、词汇、语法和口语训练是提高学生语言能力的四个重要方面。
3. 在语言训练过程中,教师应注重学生的个体差异,因材施教。
4. 家庭和学校应共同关注学生的语言能力培养,为学生创造良好的语言环境。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构实验报告(魔王语言)一、【实验构思(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("鹅");else if(ch=='z') printf("追");else if(ch=='g') printf("赶");else if(ch=='x') printf("下");else if(ch=='n') printf("蛋");else if(ch=='h') printf("恨");}printf("\n");}else ;}三、【实现描述(Implement)】(30%)(本部分应包括:抽象数据类型具体实现的函数原型说明、关键操作实现的伪码算法、函数设计、函数间的调用关系,关键的程序流程图等,给出关键算法的时间复杂度分析。
)void InitStack(SeqStack *s);/*初始化栈*/void Push(SeqStack *s,StackElementType x); /*进栈操作*/void Pop(SeqStack *s,StackElementType *x);/*出栈操作*/void GetTop(SeqStack *s,StackElementType *x);/*取栈顶元素*/int IsEmpty(SeqStack *s);/*判断栈是否为空*/void GhostLanage();/*魔王语言翻译函数*/函数间的调用关系:主程序调用魔王语言翻译函数,然后魔王语言翻译函数调用其它的函数(初始化栈,进栈,出栈,取栈顶元素,判断栈空),以此来实现整个程序的运行。
四、【测试结果(Testing)】(10%)(本部分应包括:对实验的测试结果,应具体列出每次测试所输入的数据以及输出的数据,并对测试结果进行分析总结)输入的魔王语言为:B(ehnxgz)B翻译的结果为: tsaedsaeezegexenehetsaedsae翻译为汉语的结果为:天上一只鹅地上一只鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一只鹅地上一只鹅结论:此程序能够按照给定的翻译规则解释魔王语言。
四、【实验总结】(10%)(本部分应包括:自己在实验中完成的任务,注意组内的任意一位同学都必须独立完成至少一项接口的实现;对所完成实验的经验总结、心得)通过这个实验。
特别是实验中对栈的应用,让我更深入的了解了栈的特性,更加了解了栈的构造及构造方法。
这次实验实现了简单的魔王语言解释,按照给定的规则能够翻译出一句有意义的话,但不足的是,程序中的规则是指导书中给定的规则,没有定义出自己的规则,在今后的时间里,还需要自己进行不断的改善,争取能够自己定义规则。
这次实验对魔王语言的解释,让我看到了如何对信息进行简单的加密,看到了加密的雏形,这对于今后更深入的学习起到了启蒙的作用。
总的来说,这次实验让我收获了很多,同时也让我发现了很多的不足,希望在今后的学习中,不断努力,使程序更加的完美。
五、【项目运作描述(Operate)】(10%)(本部分应包括:项目的成本效益分析,应用效果等的分析。
)六、【代码】(10%)(本部分应包括:完整的代码及充分的注释。
注意纸质的实验报告无需包括此部分。
格式统一为,字体: Georgia , 行距: 固定行距12,字号: 小五)#include <stdio.h>#define StackElementType char#define Stack_Size 100typedef struct{StackElementType elem[Stack_Size];int top;}SeqStack;void InitStack(SeqStack *s);/*初始化栈*/void Push(SeqStack *s,StackElementType x); /*进栈操作*/void Pop(SeqStack *s,StackElementType *x);/*出栈操作*/void GetTop(SeqStack *s,StackElementType *x);/*取栈顶元素*/int IsEmpty(SeqStack *s);/*判断栈是否为空*/void GhostLanage();/*魔王语言翻译函数*//*主函数*/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("鹅");else if(ch=='z') printf("追");else if(ch=='g') printf("赶");else if(ch=='x') printf("下");else if(ch=='n') printf("蛋");else if(ch=='h') printf("恨");}printf("\n");}else ;}。