版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
合肥学院计算机科学与技术系课程设计报告~第1学期课程数据构造与算法课程设计题目名称重言式鉴别学生姓名王芳学号专业班级计算机科学与技术14级1班指引教师李红何立新9月一、题目【问题描述】一种逻辑表达式如果对于其变元任一种取值都为真,则称为重言式;反之,如果对于其变元任一种取值都为假,则称为矛盾式;然而,更多状况下,既非重言式,也非矛盾式。试写一种程序,通过真值表鉴别一种逻辑表达式属于上述哪一类。【基本规定】(1)逻辑表达式从终端输入,长度不超过一行。逻辑运算符涉及"|","&"和"~",分别表达或、与和非,运算优先限度递增,但可由括号变化,即括号内运算优先。逻辑变元为大写字母。表达式中任何地方都可以具有各种空格符。(2)若是重言式或矛盾式,可以只显示"Trueforever",或"Falseforever",否则显示"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;O,0;0,1;1,0;1,1。二、问题分析1、一种逻辑表达式如果对于其变元任一种取值均为真,则称为重言式;反之,如果对于其变元任一种取值都为假,则称为矛盾式,若对于其变元任一种取值既有真,又有假,则称其为可满足式。写一种程序通过真值表鉴别一种逻辑表达式属于上述哪一类。基本规定如下:逻辑表达式从终端输入,长度不超过一行。逻辑运算符涉及“|”、“&”、“~”,分别表达或、与、非,运算优先限度递增,但可有括号变化,即括号内运算优先。逻辑变元为大写字母。表达式中任何地方都可以具有各种空格符。若是重言式或矛盾式,可以只显示“TrueForever”或“FalseForever”,否则显示运算中每种赋值和与其相相应表达式值。2、通过真值表鉴别逻辑表达式与否为重言式,需解决如下问题:对逻辑表达式中空格符解决。为了以便对逻辑表达式进行扫描判断,应先去掉表达式中空格符。算符优先级问题在带括号表达式中,界限符涉及左右括号以及表达式起始、结束符“#”。对于一种简朴表达式求值运算规则如下:(1)从左至右依次计算。(2)先取反,然后相与,后相或。(3)先括号内,后括号外。为统一算法描述,将运算符和界限符统称为算符。这样,算符集为{~,&,|,(,),#}。依照上述3条规则,两个先后相继浮现算符a1,a2间优先关系可以归纳如下:若a1,a2同为“&”或同为“|”,则算符a1优先级不不大于a2。“~”、“&”、“|”优先级依次减小。由于先括号内,后括号外,若a1为“|”、“&”、“~”,a2为“(”;或者,a1为“(”,而a2为“|”、“&”、“~”,则a1优先级不大于a2。同理,若a1为“|”、“&”、“~”,a2为“)”;或者,a1为“)”,而a2为“|”、“&”、“~”,则a1优先级不不大于a2。若a1、a2同为“(”,则a1优先级不大于a2;若a1、a2同为“)”,则a1优先级不不大于a2。表达式起始、结束符“#”优先级不大于其她所有合法浮现算符。若a1为“(”,a2为“)”;或者,a1、a2同为“#”,则a1、a2优先级相似。综上所述,将两个相继浮现算符a1、a2优先关系进行归纳如表1所示。表1算符a1和a2间优先关系a1a2|&~()#|><<<>>&>><<>>~>>><>>(<<<<=___)>>>___>>#<<<<___=咱们可以将逻辑表达式计算类比算术表达式计算,普通借助堆栈来实现按运算符优先级完毕表达式求值计算。一种是存储运算符栈,另一种是存储变量或中间成果栈。一方面初始化算符栈logic和变量栈,并将表达式起始符“#”压入算符栈logic。依次读入表达式中每个字符。若是变量,则为其分派构造nodesize大小内存,强制转换为bitree类型,并将其压入变量栈variable;若是运算符,则为其分派构造nodesize大小内存,强制转换为bitree类型,并与运算符栈logic栈顶算符进行优先级比较,并作如下解决:若栈顶算符a1优先级低于刚读入算符a2,则将a2压入运算符栈logic。若栈顶算符a1优先级高于刚读入算符a2,则将a1出栈,同步将变量栈variable出栈一次,得到变量A,再判断栈顶算符a1与否为“~”,如果a1不是“~”,则继续出栈变量栈variable一次,得到变量B,将a1作为根结点,B作为a1左孩子,A作为a1右孩子,并将根结点a1压入变量栈variable;如果栈顶算符a1是“~”,则将a1作为根结点,A作为a1右孩子,a1左孩子则为空,并将根结点a1压入变量栈。若栈顶算符a1优先级与刚读入算符a2优先级相似,阐明左右括号相遇,或者是表达式起始、结束符相遇,只需将栈顶算符(左括号或起始符)出栈即可;当运算符栈logic空时,算法结束这样就可以将逻辑表达式构导致一棵完整二叉树,根结点是优先级最小算符(除了括号和起始结束符,在构造二叉树过程中已被脱去)。如(A|~A)&(B|~B)构导致二叉树如图1所示图1表达式构造二叉树变量赋值问题若只有1个变量,则有21种状况赋值;若有2个变量,易知有22种状况赋值;若有3各变量,则有23种状况赋值,那么如果有n个变量,就有2n种状况赋值。既然要对变量进行赋值,一方面要找到逻辑表达式中变量,并拟定变量个数。逻辑表达式取值判断由上述对运算符优先级分析可知,对逻辑表达式计算,就是中序遍历由优先级拟定逻辑表达式构成二叉树。5)重言式鉴别可以将给变量所有赋值逻辑表达式逻辑值相加,如果相加成果与2n相等,则为重言式;若相加成果为0,则为矛盾式;否则为可满足式。本问题核心和难点在于算符优先级判断和二叉树构造。三、数据构造选取和概要设计1、数据构造选取通过问题分析可知,需要用到数据构造有堆栈和二叉树。对于堆栈选用顺序栈构造来进行存储算符或变量,存储都是二叉树结点。设有两个堆栈,一种是存储运算符栈,另一种是存储变量或中间成果栈。对于二叉树,选用二叉树链接存储构造,其结点存储得都是表达式中元素。将表达式构导致一棵二叉树。2、概要设计从整体上可以分为三个模块:第一种模块:属于堆栈和二叉树结点类型定义typedefstructstack//辨认表达式使用堆栈定义,它存储都是树构造{//栈中元素都是树结点构造 bitree*base;//栈底指针 bitree*top;//栈顶指针 intstacksize;//栈容量}seqstack;typedefstructnode//依照表达式建立二叉树结点定义{ chardata; structnode*lchild; structnode*rchild;}BiTNode,*bitree;第二个模块:重要函数及其功能。堆栈创立voidcreatstack(sqstack&st){};初始化栈voidsetstack(seqstack&st){};进栈voidpush(sqstack&st,bitreee){};出栈voidpop(sqstack&st,bitree&e){};将逻辑表达式中元素转换为二叉树结点形式,使栈中存储都是二叉树结点。voidcreattree(chars[],bitree&tree){};通过优先级将逻辑表达式构导致一颗完整二叉树voidcreate(bitree&zigen,bitreel,bitreer){};对逻辑表达式求值intvaluetree(bitreetree){};生成变量各种取值组合voidcreatzuhe(intn,intm,chara[]){};逻辑运算符优先级鉴别,返回值为“<”、“>”、“=”charyouxianji(charm,charn){};第四个模块为于顾客交互voiduser(){};流程图:图2程序流程图开始开始mainmeun输入表达式计算机顾客3.返回建树建树计算机穷举顾客输入变量值输出成果继续结束213NY四、算法思想1、穷举法思想通过真值表来判断重言式,需要一一给变量赋值,共有2^n中状况(n表达变量个数),这里用到穷举思想。2、递归与分治思想每给变量赋一组值,通过递归中序遍历二叉树求值,这里用到了递归与分治思想。3、运算符优先级判断思想(见问题分析算符优先级问题分析第5页)五、详细设计和重要编码段一方面将顾客输入逻辑表达式存到char*str当中,然后去除逻辑表达式中空格符。for(;*pstr!=NULL;pstr++,n++){ if(str[n]!='')stri[i++]=*pstr;//去除表达式中空格 }此时stri当中存储就是没有空格符逻辑表达式。通过问题分析,需找到表达式中变量,并拟定变量个数。下面代码就是实现此功能。 for(intk=0;k<strlen(stri);k++) if(stri[k]>=65&&stri[k]<=90)//找到变量 { intmark=0;//标记变量 for(intj=0;j<m;j++) { if(bl[j]==stri[k])//将找到变量与bl[]中已找到过变量比较,若相等则将变量标记置为1,表达找到变量在前面已浮现过 { mark=1;break; } } if(mark==0)//若标记为0,表达找到变量没有重复,并将其记录到bl[]中,变量个数m加1。 { bl[m]=str[k]; m++;//m是变量个数 } }此时bl[]当中存储就是变量,m就是变量个数,那么变量赋值状况就有2m种。下面对生成变量各种取值组合算法进行分析和阐明。intzuhe[30]用来存储变量取值组合,为了以便阐明,采用两个变量进行算法论述。AB第n次数000011102113表2变量赋值实例从表2可以发现给变量赋值次数n与变量取值组合成二进制数相等,能得到一种规律:变量取值组合zuhe[]二进制数(从低位到高位)第i位数取值等于(n>>i)%2。用一下代码可以实现第n次对变量赋值组合intlzp=m;for(inti=0;i<m;i++){ zuhe[bl[lzp]-65]=(n>>i)%2; lzp--;}下面阐明优先级判断。charbijiao[7][7]用来存储算符间优先关系表中数据。inti,j; bijiao[7][7]={ '','|','&','~','(',')','#',//二维数组比较优先级先后 '|','>','<','<','<','>','>', '&','>','>','<','<','>','>', '~','>','>','>','<','>','>', '(','<','<','<','<','=','', ')','>','>','>','','>','>', '#','<','<','<','<','','='}; for(i=0;i<7;i++) if(bijiao[0][i]==a2)//找到a2运算符列号 break; for(j=0;j<7;j++)//找到a1运算符行号 if(bijiao[j][0]==a1) break; returnbijiao[j][i];//返回优先级符号:>、<、=下面阐明将表达式构成二叉树过程。s=stri是逻辑表达式首地址。while(*s!=NULL)//循环条件,为空则扫描结束{ if(int(*s)>=65&&int(*s)<=90)//读取是变量 { variables=(bitree)malloc(sizeof(node)); //分派构造nodesize大小内存,强制转换为bitree类型variables->data=*s;push(variable,variables);//入变量栈 } elseif(int(*s)>90||int(*s)<65)//读取逻辑运算符 {gettop(logic,e);//取运算符栈栈顶元素进行优先级比较switch(youxianji(*s,e->data)) {case'<'://栈顶运算符优先级低,逻辑运算符进栈 logics=(bitree)malloc(sizeof(node)); //分派构造nodesize大小内存,强制转换为bitree类型 logics->data=*s; push(logic,logics); break;case'=': pop(logic,kuohao);//括号并接受下一种字符 break;case'>'://栈顶运算符优先级高,变量出栈运算 pop(logic,g);//弹出逻辑运算符g pop(variable,a);//弹出变量a b=NULL;//'~'只有右子树 if(g->data!='~') pop(variable,b);//出栈变量b create(g,b,a);//将变量b作为g左子树,a作为g右子树,若a是变量,将其左、右孩子置空,若b是变量,将其左、右孩子置空 push(variable,g);//将暂时根g作为新变量压入变量栈中 gettop(logic,e);//取变量栈栈顶算符e if(*s!='#'&&*s!=')'&&youxianji(*s,e->data)!='>')//如果读入算符*s不是结束符也不是右括号,并且栈顶算符优先级不大于读入算符优先级将读入算符入栈 { logics=(bitree)malloc(sizeof(node));//分派构造nodesize大小内存,强制转换为bitree类型 logics->data=*s; push(logic,logics);//逻辑运算符入栈 } elses=s-1;//若栈顶算符优先级不不大于读入算符优先级或读入算符为“#”或“)” break; } } s++; } tree=g;}下面阐明对逻辑表达式求值过程。中序遍历二叉树intvaluetree(bitreetree)//依照变量取值组合并运用逻辑表达式性质对树进行求值{if(!tree)return0;//遇到空结点elseif(tree->data!='|'&&tree->data!='&'&&tree->data!='~')//找到是变量 returnzuhe[int(tree->data)-65];//返回相应变量赋予值(0或1)elseif(int(tree->data)<65||int(tree->data)>90)//找到是运算符 switch(tree->data) {case'|': return(valuetree(tree->lchild)||valuetree(tree->rchild));//递归调用 break;case'&': return(valuetree(tree->lchild)&&valuetree(tree->rchild));//递归调用 break;case'~': return(!valuetree(tree->rchild));//递归调用 break; default:return0; } elsereturn0;}最后阐明判断逻辑表达式或为重言式,或为矛盾式或为可满足式。每给变量一组值,调用一次intvaluetree(bitreetree)函数求其逻辑值,需要给变量2n组值,则需求其逻辑值2n次,把每次求得逻辑值相加,得到数字SUM,若SUM=2n,则逻辑表达式为重言式;若SUM=0,则逻辑表达式为矛盾式;若0<SUM<2n,则逻辑表达式为可满足式。若表达式为可满足式,则输出运算中每种赋值和与其相相应表达式值。六、上机调试状况记录浮现问题及解决办法问题:测试题目给定数据A&~B|~A&B,发现其成果不对的,因素是没有对的解决优先级,建树过程中,运算符入栈时,如果检测到表达式中算符优先级低于栈顶优先级,则应出栈运算符,在出栈运算符后,如果检测到表达式中算符(并且算符不是结束符’#’也不是’)’)优先级仍旧低于栈顶算符,应当继续算符出栈,而不是算符入栈。解决办法:将算符入栈条件if(*s!='#'&&*s!=')')改为if(*s!='#'&&*s!=')'&&youxianji(*s,e->data)!='>')测试数据时如果逻辑表达式变量不是递增按顺序输入(如:A&B&F&G),成果会出错。因素是在给变量组合赋值时,赋值组合数组小标是递增顺序,而在递归调用求值函数时用到变量组合值数组下标却是与变量ACS编码关于,两者对不上。解决办法:在生成变量组合数时,将zuhe[i]=(n>>i)%2改为zuhe[a[lzp]-65]=(n>>i)%2;七、测试用例、成果及其算法性能分析(一)、初始界面(二)、测试用例及成果(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;O,0;0,1;1,0;1,1。(可满足式)通过测实验证成果都对的,实现了题目规定。(三)、算法性能分析1、算法时间性能分析用穷举法列真值表有2^n(n为变量个数)种状况,为每一种状况所有变量赋值次数为n,则为所有状况变量赋值次数为n*2^n次,即在函数voidcreatzuhe(intn,intm,chara[])中语句需执行n*2^n次,是整个算法当中频度最大语句,由于算法时间复杂度考虑只是对于问题规模n增长率,因此该算法时间复杂度为T(n)=O(n*2^n)。2、算法空间性能分析本算法空间复杂度较低,需要一种zuhe[30]数组来存储变量取值,一种大小为M数组存储逻辑表达式,一种M二叉树链接存储逻辑表达式构成树结点。两个堆栈长度不超过M,因此空间复杂度为O(M)。(四)、经验和体会初拿到本问题,就觉得与学过带括号算术表达式计算问题相似。其最核心是算符优先级判断,可以将它类比算术表达式列出同数据构造与算法课本上表4-1类似算符优先关系表表1。通过查表来判断算符优先级就变得简易了。观测逻辑表达式可以发现,对逻辑表达式计算类似于对二叉树中序遍历,可以将逻辑表达式通过优先级将其构导致一棵二叉树。固然最后实现过程中有诸多细节问题需要注意,通过一步步测试、调试程序找到问题,并改进,懂得最后解决问题。八、顾客使用阐明1、运营程序进入显示文本方式顾客界面;2、依照提示输入要鉴别逻辑表达式(表达式中可以有空格)3、输入表达式后浮现菜单选项,顾客可以选取程序自动穷举赋值法和顾客赋值法进行鉴别;4、在显示相应成果后,依照提示信息在进行下一步。九、参照文献[1]王昆仑,李红.数据构造与算法.北京:中华人民共和国铁道出版社,5月。[2]严蔚敏,吴伟明.数据构造.北京:清华大学出版社,5月。[3]李春葆.数据构造教程.北京:清华大学出版社,5月。[4]蹇强,罗宇.数据构造.北京:邮电大学出版社,5月。[5]金远平.《数据构造》(C++描述.北京:清华大学出版社5月。十、附录(完整代码)#include"stdlib.h"// 调用stdlib.h里面函数 `#include"stdio.h"#include"iostream.h"#include"string.h"//包括字符串解决函数头文献#include"math.h"//调用数学函数库#include"iomanip.h"//是I/O流控制头文献#definemaxsize100intzuhe[maxsize];//变量取值组合数组定义intN;//变量个数typedefstructnode//依照表达式建立二叉树结点定义{ chardata; structnode*lchild; structnode*rchild;}BiTNode,*bitree;typedefstructstack//辨认表达式使用堆栈定义,它存储都是树构造{//栈中元素都是树结点构造 bitree*base;//栈底指针 bitree*top;//栈顶指针 intstacksize;//栈容量}seqstack;voidcreatzuhe(intn,intm,chara[])//生成变量组合数{intlzp=m-1; for(inti=0;i<m;i++) { zuhe[a[lzp]-65]=(n>>i)%2; lzp--; }}voidcreate(bitree&f,bitreel,bitreer)//自底向上地依照运算符地优先级来建立分子树函数{f->lchild=l;//分树链接f->rchild=r;//分树链接if(l&&r) { if(int(l->data)>=65&&int(l->data)<=90)//左子树 { l->lchild=NULL; l->rchild=NULL; } if(int(r->data)>=65&&int(r->data)<=90)//右子树 { r->lchild=NULL; r->rchild=NULL; } }}charyouxianji(charm,charn)//逻辑运算符优先级鉴别{ inti,j; charbijiao[7][7]={ '','|','&','~','(',')','#',//二维数组比较优先级先后 '|','>','<','<','<','>','>', '&','>','>','<','<','>','>', '~','>','>','>','<','>','>', '(','<','<','<','<','=','', ')','>','>','>','','>','>', '#','<','<','<','<','','='}; for(i=0;i<7;i++) if(bijiao[0][i]==m)//找到m运算符列号 break; for(j=0;j<7;j++)//找到n运算符行号 if(bijiao[j][0]==n) break; returnbijiao[j][i];//返回优先级符号:>、<、=}voidsetstack(seqstack&st)//初始化栈{ st.base=(bitree*)malloc(maxsize*sizeof(node)); st.top=st.base; st.stacksize=maxsize;//栈容量}voidpush(seqstack&st,bitreee)//入栈{ if(st.top-st.base<st.stacksize)//符合条件入栈 { *st.top=e; st.top++; } elsecout<<"ERROR!!!"<<endl;//不符合输出ERROR!!!}voidpop(seqstack&st,bitree&e)//出栈{ if(st.top==st.base)cout<<"ERROR!!!"<<endl;//不符合条件输出ERROR!!!st.top--;//符合条件e=*st.top;}voidgettop(seqstack&st,bitree&e)//取栈顶元素{ if(st.top==st.base)cout<<"ERROR!!!"<<endl//不符合条件输出ERROR!!!e=*(st.top-1);//符合取栈顶元素}voidcreattree(chars[],bitree&tree)//依照逻辑表达式将数据存入二叉树中,定义两个栈{seqstackvariable;//变量栈seqstacklogic;//逻辑运算符栈setstack(variable);//变量栈初始化setstack(logic);//逻辑运算符栈初始化bitreelogic1,variables,logics,e,a,b,g,kuohao;//定义栈中元素,g为最后二叉树根 logic1=(bitree)malloc(sizeof(node));//分派构造nodesize大小内存,强制转换为bitree类型logic1->data='#';//将逻辑运算符栈栈底元素设为'#'push(logic,logic1);//将逻辑运算符栈入栈.while(*s!=NULL) { if(int(*s)>=65&&int(*s)<=90)//读取是变量 { variables=(bitree)malloc(sizeof(node)); //分派构造nodesize大小内存,强制转换为bitree类型variables->data=*s;push(variable,variables);//入变量栈 } elseif(int(*s)>90||int(*s)<65)//读取逻辑运算符 {gettop(logic,e);//取运算符栈栈顶元素进行优先级比较switch(youxianji(*s,e->data)) {case'<'://栈顶运算符优先级低,逻辑运算符进栈 logics=(bitree)malloc(sizeof(node));//强制转换为bitree类型 logics->data=*s; push(logic,logics); break;case'=': pop(logic,kuohao);//括号并接受下一种字符 break;case'>'://栈顶运算符优先级高,变量出栈运算 pop(logic,g);//弹出逻辑运算符 pop(variable,a);//弹出变量 b=NULL;//'~'只有右子树 if(g->data!='~') pop(variable,b); create(g,b,a);//建树函数调用 push(variable,g);//将暂时根作为新变量压入变量栈中 gettop(logic,e); if(*s!='#'&&*s!=')'&&youxianji(*s,e->data)!='>') { logics=(bitree)malloc(sizeof(node));//强制转换为bitree类型 logics->data=*s; push(logic,logics);//逻辑运算符入栈 } elses=s-1; break; } } s++; } tree=g;}intvaluetree(bitreetree)//依照变量取值组合并运用逻辑表达式性质对树进行求值{if(!tree)return0;//遇到空结点elseif(tree->data!='|'&&tree->data!='&'&&tree->data!='~')//找到是变量 returnzuhe[int(tree->data)-65];//返回值elseif(int(tree->data)<65||int(tree->data)>90)//找到是运算符 switch(tree->data) {case'|': return(valuetree(tree->lchild)||valuetree(tree->rchild)); break;case'&': return(valuetree(tree->lchild)&&valuetree(tree->rchild)); break;case'~': return(!valuetree(tree->rchild)); break; default:return0; } elsereturn0;}voiduser(intm,charb[])//顾客输入变量一组取值状况{inti;cout<<"请依次输入你变量取值(0或1)"<<endl;for(i=0;i<m;i++) {cout<<b[i]<<"";//转化为char类型输出 } cout<<endl; for(i=0;i<m;i++) { cin>>zuhe[b[i]-65]; }}voidprint(){ cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl; cout<<""<<endl;cout<<"你好!"<<endl;cout<<"欢迎使用重言式鉴别软件!"<<endl;cout<<""<<endl;cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;}voidmeun()//菜单函数{ system("cls");//清屏函数 print(); charstr[maxsize],stri[maxsize],*pstr,q,bl[20]; intj,i=0,choose=1,sum,n=0,m=0; bitreeTree; intSUM=0;//用于累加变量每种组合逻辑表达式成果; cout<<"☆☆☆请输入逻辑表达式表达式:例如(~A|B&C)☆☆"<<endl; scanf("%[^\n]",str);//读取包括各种空格逻辑表达式 pstr=str; for(;*pstr!=NULL;pstr++,n++){//逻辑表达式对的读取, if(str[n]>=97&&str[n]<=122)str[n]=str[n]-32;//将小写转换成大写 if(str[n]!='')stri[i++]=*pstr;//去除表达式中空格 } intnu=strlen(stri); for(intk=0;k<nu;k++) if(stri[k]>=65&&stri[k]<=90) { intmark=0;//标记变量 for(intj=0;j<m;j++) { if(bl[j]==stri[k]) { mark=1;break; } } if(mark==0) { bl[m]=str[k]; m++;//m是变量个数 } } sum=int(pow(2,m)); stri[i]='#';//最后一字符后加入'#',与运算符栈栈底元素'#'相应 stri[i+1]='\0';//结束标志'\0' cout<<"
请选取你要操作
"<<endl;cout<<"
"<<endl;cout<<"
"<<endl;cout<<"
"<<endl;cout<<"
"<<endl; cout<<"
1计算机穷举法
"<<endl; cout<<"
2顾客自定义给变量赋值
"<<endl; cout<<"
3重新开始
"<<endl; cout<<"
0退出
"<<endl; cout<<"请选取你要操作:";//提示信息 cin>>choose; while(choose!=1&&choose!=2&&choose!=3&&choose!=0) { cout<<"您输入有误,请您重新输入:";//提示信息 cin>>choose; } switch(choose) { case1://鉴别重言式类别 creattree(stri,Tree);//建立重言式二叉树for(j=0;j<sum;j++) { creatzuhe(j,m,bl);//产生变量取值组合 SUM+=valuetree(Tree);//SUM累加 }stri[i]='\0';//加入结束标志以便输出逻辑表达式if(SUM==0)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 材料代理合同范例
- 市场营销学习题+答案
- 数据结构与算法试题库与参考答案
- 果园包工合同范例
- 温室大棚保洁合同范例
- 河北银行抵押贷款合同范例
- 农村承包种植合同范例
- 商业住宅转让合同范例
- 2025年甘肃交通运输从业资格证怎样考试
- 产品研发协议合同范例
- 肿瘤科介入治疗及护理
- 心理统计与SPSS应用学习通超星期末考试答案章节答案2024年
- SVG图形渲染性能提升
- 华南理工大学《固体理论II》2023-2024学年第一学期期末试卷
- 女性学:女性精神在现代社会中的挑战学习通超星期末考试答案章节答案2024年
- 《孟子》精读学习通超星期末考试答案章节答案2024年
- 广中医药理学期末重点
- 自贡市重点中学2025届高二数学第一学期期末统考试题含解析
- 2024年资格考试-机动车检测维修工程师考试近5年真题附答案
- 中班晚安大猩猩文档
- 大学美育:认识美欣赏美创造美学习通超星期末考试答案章节答案2024年
评论
0/150
提交评论