欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    课程设计报告重言式的判别.docx

    • 资源ID:28533034       资源大小:148.83KB        全文页数:40页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    课程设计报告重言式的判别.docx

    1、课程设计报告重言式的判别 合肥学院计算机科学与技术系课程设计报告20122013学年第2学期课程 数据结构与算法课程设计名称重言式的判别学生姓名学号专业班级11 网络工程(1)指导教师 2013 年 6 月目录1、题目 32、问题分析和任务定义 43、数据结构的选择和概要设计 54、详细设计和编码 85、上机调试过程 176、测试结果及其分析 197、用户使用说明 208、参考文献 209、附录(完整程序代码) 21 第一章 题目“数据结构与算法课程设计”是计算机科学与技术专业学生的集中实践性环节之一,是学习“数据结构与算法”理论和实验课程后进行的一次全面的综合练习。其目的是要达到理论与实际应

    2、用相结合,提高学生组织数据及编写程序的能力,使学生能够根据问题要求和数据对象的特性,学会数据组织的方法,把现实世界中的实际问题在计算机内部表示出来并用软件解决问题,培养良好的程序设计技能。内容:【问题描述】一个逻辑表达式如果对于其变元的任一种取值都为真,则称为重言式;反之,如果对于其变元的任一种取值都为假,则称为矛盾式;然而,更多的情况下,既非重言式,也非矛盾式。试写一个程序,通过真值表判别一个逻辑表达式属于上述哪一类。【基本要求】(1) 逻辑表达式从终端输入,长度不超过一行。逻辑运算符包括 |,& 和 ,分别表示或、与和非,运算优先程度递增,但可由括号改变,即括号内的运算优先。逻辑变元 为大

    3、写字母。表达式中任何地方都可以含有多个空格符。(2) 若是重言式或矛盾式,可以只显示True forever,或False forever,否则显示 Satisfactible 以及变量名序列,与用户交互。若用户对表达式中变元取定一组值,程序就求出并显示逻辑表达式的值。【测试数据】(1) (A|A)&(B|B)(2) (A&A)&C(3) A|B|C|D|E|A(4) A&B&C&B(5) (A|B)&(A|B)(6) A&B|A&B第二章 问题分析和任务定义 、 一个逻辑表达式如果对于其变元的任一种取值均为真,则称为重言式;反之,如果对于其变元的任一种取值都为假,则称为矛盾式,然而,更多的情

    4、况下,既非重言式,也非矛盾式,写一个程序通过真值表判别一个逻辑表达式属于上述哪一类。基本要求如下:2、 逻辑表达式从终端输入,长度不超过一行。逻辑运算符包括“|”、“&”、“”,分别表示或、与、非,运算优先程度递增,但可有括号改变,即括号内的运算优先。逻辑变元为大写字母。表达式中任何地方都可以含有多个空格符。3、 若是重言式或矛盾式,可以只显示“True Forever”或“False Forever”,否则显示运算中每种赋值和与其相对应的表达式的值。4、 本程序先使用栈将逻辑表达式的变量进行存储,然后将栈中的元素作为二叉树的结点结构,然后根据优先级读取表达式建立二叉树,并通过逐个判断实现对重

    5、言式的判别。5、程序执行的命令: 输入逻辑表达式。判断表达式是重言式还是矛盾式。退出程序。6、细节设置为实现用户更好的操作,程序应允许在表达式中插入多个空格,对大小写没有特殊要求,并含有较多的提示信息,一方便用户操作。第三章 数据结构的选择和概要设计流程图本章主要介绍1、数据结构的设计 /根据表达式建立的二叉树的结点定义,由于表达式的求值类似二叉树的中序遍历,故我们可以将表达式构造为一个二叉树;typedef struct btdnode*bitree;/识别表达式使用的堆栈定义,它存放的都是树的结构,鉴于逻辑符号的优先不同,我们需要用到堆栈;typedef struct lnode_optr

    6、sqstack; 2、算法的设计本设计从总体上划分可分为四个模块,第一个模块为树与堆栈的创建。void create(bitree &zigen,bitree l,bitree r);void creatstack(sqstack &st);void creattree(char s,bitree &tree);第二个模块为对树与堆栈的操作,包括对树的取值以及堆栈的入栈,出栈操作。int value_tree(bitree tree);void push(sqstack &st,bitree e);void pop(sqstack &st,bitree &e)第三个模块为对表达式的逻辑运算符的

    7、判别。char youxianji(char lie,char hang);void gettop(sqstack &st,bitree &e);第四个模块为于用户的交互。void user();3、抽象数据类型的设计 根据所设计的数据结构和函数接口,设计抽象数据类型。ADT Binary Tree数据对象:D是具有相同特性的数据元素的集合。二叉树数据关系:若D为空集,称BinaryTree 为空二叉树;否则 关系 R=H;在D中存在唯一的成为根的数据元素root,它在关系H下无前驱;D中其余元素必可分为两个互不相交的子集L和R,每一个子集都是一棵符合本定义的二叉树,并分别为root的左子树和

    8、右子树。如果左子树L不空,则必存在一个根结点,它是root的“左后继”(H),如果右子树R不空,则必存在一个根结点为root的“右后继”(H)。基本操作P:结构初始化 initBiTree(&T); 操作结果:构造二叉树T。 CreateBiTree(&T,definition); 初始条件:definition给出二叉树T的定义。 操作结果:按definition构造二叉树T。 销毁结构 DestroyBiTree(&T); 初始条件:二叉树T存在。 操作结果:销毁二叉树T。 引用型操作 BiTreeEmpty(T); 初始条件:二叉树T存在。 操作结果:若二叉树为空二叉树,则返回TRUE,

    9、否则返回FALSE。和数相同,创建二叉树的算法取决于它的数据元素之间关系的输入方式。 Root(T) 初始条件:二叉树T存在。 操作结果:返回T的根。 Value(T,e)初始条件:二叉树T存在,e是T中某个结点。 操作结果:返回e的值。 Parent(T,e); 初始条件:二叉树T存在,e是T中某个结点。 操作结果:若e是T的非根结点,则返回它的双亲,否则返回“空”。 LeftChild(T,e); 初始条件:二叉树T存在,e是T中某个结点。 操作结果:返回T的左孩子,若e无左孩子,则返回“空”。 RightChild(T,e); 初始条件:二叉树T存在,e是T中某个结点。 操作结果:返回T

    10、的右孩子,若e无左孩子,则返回“空”。堆栈数据关系:ADT StackInitStack(&S) 操作结果:构造一个空栈。DestroyStack(&S) 初始条件:栈S存在。 操作结果:栈S被销毁。GetTop(S,&e) 初始条件:栈S已存在且非空。 操作结果:用e返回S的栈顶元素。Push(&S,e) 初始条件:栈S已存在。 操作结果:插入结点为e的新的栈顶元素。Pop(&S,&e) 初始条件:栈S已存在且非空。 操作结果:删除S的栈顶元素,并用e返回其值。第四章 详细设计和编码一、设计结构体typedef struct node /根据表达式建立的二叉树的结点定义 char data;

    11、 struct node *lchild; struct node *rchild;BiTNode,*bitree;typedef struct stack /识别表达式使用的堆栈定义,它存放的都是树的结构 /栈中的元素都是树的结点结构 bitree *base; /栈底指针 bitree *top; /栈顶指针 int stacksize; /栈容量seqstack;二、设计功能子函数/用于产生变量的各种取值组合void creatzuhe(int n) int i,num=0,j=0,e; int tempmaxsize; for(i=0;i=0) e=tempj; j-; zuhenum

    12、=e; num+; /自底向上地根据运算符地优先级来建立分子树函数void create(bitree &f,bitree l,bitree r) /当逻辑表达式读完后-子根f就是一棵完整的二叉树 f-lchild=l; /分树的链接 f-rchild=r; /分树的链接 if(l&r) if(int(l-data)=65&int(l-data)lchild=NULL; l-rchild=NULL; if(int(r-data)=65&int(r-data)lchild=NULL; r-rchild=NULL; /逻辑运算符的优先级判别char youxianji(char m,char n)

    13、 int i,j; char bijiao77= ,|,&,(,),#, /二维数组比较优先级先后 |, &, , (, , #, ,=;for(i=0;i7;i+) if(bijiao0i=m) /找到m运算符的列号 break;for(j=0;j、=/初始化栈void setstack(seqstack &st) st.base=(bitree *)malloc(maxsize*sizeof(node);/分配结构node的size大小的内存,强制转换为bitree类型 st.top=st.base; st.stacksize=maxsize; /栈容量/入栈void push(seqst

    14、ack &st,bitree e) if(st.top-st.basest.stacksize) /符合条件入栈 *st.top=e; st.top+; else coutERROR!endl; /不符合输出ERROR!/出栈void pop(seqstack &st,bitree &e) if(st.top=st.base) coutERROR!endl; /不符合条件输出ERROR! st.top-; /符合条件 e=*st.top;/取栈顶元素void gettop(seqstack &st,bitree &e) if(st.top=st.base) coutERROR!data=#;

    15、/将逻辑运算符栈的栈底元素设为# push(logic,logic1); /入逻辑运算符栈 while(*s!=NULL) if(int(*s)=65&int(*s)data=*s; push(variable,variables); /入变量栈 else if(int(*s)90|int(*s)data) case data=*s; push(logic,logics); break; case =: pop(logic,kuohao); /脱括号并接受下一个字符 break; case : /栈顶的运算符优先级高,变量出栈运算 pop(logic,g); /弹出逻辑运算符 pop(vari

    16、able,a); /弹出变量 b=NULL; /只有右子树 if(g-data!=) pop(variable,b); create(g,b,a); /建树的函数调用 push(variable,g);/将临时的根作为新的变量压入变量栈中 if(*s!=#&*s!=) logics=(bitree)malloc(sizeof(node);/分配结构node的size大小的内存,强制转换为bitree类型 logics-data=*s; push(logic,logics); /逻辑运算符入栈 else s=s-1; break; s+; tree=g; /根据变量的取值组合并利用逻辑表达式的性

    17、质对树进行求值int valuetree(bitree tree) if(!tree) return 0; /遇到空的结点 else if(tree-data!=|&tree-data!=&tree-data!=) /找到的是变量 return zuheint(tree-data)-65; /返回值 else if(int(tree-data)data)90) /找到的是运算符 switch(tree-data) case |: return(valuetree(tree-lchild)|valuetree(tree-rchild); /递归调用 break; case &: return(v

    18、aluetree(tree-lchild)&valuetree(tree-rchild); /递归调用 break; case : return(!valuetree(tree-rchild); /递归调用 break; default: return 0; else return 0;/用户输入变量的一组取值情况void user() int i; cout请依次输入你的变量取值(0或1)endl; for(i=65;i65+N;i+) coutchar(i)zuhei-65; /界面设计void print() coutendl;/标识信息 cout 合肥学院 计科系 11网络工程(1)班

    19、 endl; cout 数据结构课程设计 endl; cout -重言式的判别 endl; cout 2013.06.10 endl; coutendl; /菜单函数,void meun() system(cls); print(); char strmaxsize,strimaxsize,*pstr,q; int j,i=0,choose=1,sum,n=0; bitree Tree; int SUM=0,l; /用于累加变量的每种组合的逻辑表达式的结果;可以作为逻辑表达式类别判别的根据 cout请输入逻辑表达式的变量的个数: endl; /提示输入表达式的变量个数 coutN; sum=i

    20、nt(pow(2,N); /变量组合的总数; cout请输入逻辑表达式的表达式:例如(A|B&C) =97&strn=122) strn=strn-32; /将小写转换成大写 if(strn!= ) strii+=*pstr; strii=#; /最后一字符后加入#,与运算符栈的栈底元素#对应 strii+1=0; /结束标志0 /system(cls); /系统清屏函数 cout请选择你要的操作endl; cout 1 计算机自动穷举 endl; cout 2 用户自定义设置 endl; cout 3 重新开始 endl; cout 0 退出 endl; coutchoose; while(

    21、choose!=1&choose!=2&choose!=3&choose!=0) coutchoose; switch(choose) case 1: /对变量的不同组合依次调用重言式二叉树的求值函数;并判别重言式的类别 / system(cls); creattree(stri,Tree); /建立重言式的二叉树 for(j=0;jsum;j+) creatzuhe(j); /产生变量取值组合 SUM+=valuetree(Tree); /SUM累加 strii=0; /加入结束标志以便输出逻辑表达式 if(SUM=0) /矛盾式 cout逻辑表达式:striendl; coutFalse

    22、foreverendl; if(SUM=sum) /重言式 cout逻辑表达式:striendl; coutTrue forever0&SUMsum) /既不是矛盾式也不是重言式 cout逻辑表达式:striendl; coutSatisfactibleendl; cout 逻辑表达式的真值表 endl; /输出真值表 cout=nt; for(l=65;l65+N;l+) coutsetw(4)char(l); /setw是域宽 cout 逻辑表达式的值; coutt|endl; cout=endl; for(j=0;jsum;j+) creatzuhe(j); /产生变量取值组合 /SUM=valuetree(Tree); cout|t; for(int h=0;hN;h+)


    注意事项

    本文(课程设计报告重言式的判别.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开