重言式判别源码及课程设计-c语言版

上传人:大米 文档编号:521356944 上传时间:2023-01-26 格式:DOCX 页数:14 大小:90.86KB
返回 下载 相关 举报
重言式判别源码及课程设计-c语言版_第1页
第1页 / 共14页
重言式判别源码及课程设计-c语言版_第2页
第2页 / 共14页
重言式判别源码及课程设计-c语言版_第3页
第3页 / 共14页
重言式判别源码及课程设计-c语言版_第4页
第4页 / 共14页
重言式判别源码及课程设计-c语言版_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《重言式判别源码及课程设计-c语言版》由会员分享,可在线阅读,更多相关《重言式判别源码及课程设计-c语言版(14页珍藏版)》请在金锄头文库上搜索。

1、重言式的判别题目:一个逻辑表达式如果对于其変元的任一种取值都为真,则称为重言式;反之,如果对于其变元的任一种取值都为假,则称为矛盾式;然而,更多的情况下,既非重言式,也非矛盾式。试写一程序,通过真值表判别一个逻辑表达式属于上述哪一类。一、需求分析1、逻辑表达式从终端输入,长度不超过一行。2、逻辑运算符包括“|”“&”“”表示或 与 非。运算符优先程度递增,但是可由括号改变。3、逻辑变元为大写字母表达式中任何地方都可以含有多个空格符。4、运用自底向上的算符优先法5、重言式显示“true forever”;矛盾式显示“false forever”;否则显示“satisfactible”。二、概要设

2、计为实现上述需求需要用到自底向上的算符优先法,和自顶向下分割,先序遍历建立二叉树的方法。自底向上的算符优先法:char OPTRCHART77= ,|,&,(,),#, |, &, ,(,),#,data,*p)case :break;/*switch*/建立二叉树:typedef struct BiTNodestruct BiTNode * Lchild;struct BiTNode * Rchild;ElemType data;BiTNode , *BiTree;栈中的操作:typedef struct NodeBiTree * base;BiTree *top;int stacksize

3、;SqStack;入栈操作及出栈销毁栈的操作:int InitStack(SqStack * stack)stack-base=(BiTree*)malloc(STACK_INIT_SIZE*sizeof(BiTree);if(!stack-base)exit(OVERFLOW);stack-top=stack-base;stack-stacksize=STACK_INIT_SIZE;return OK;BiTree GetTop(SqStack * stack)if(stack-top=stack-base)return NULL;return *(stack-top-1);int Push

4、(SqStack * stack,BiTree Bitnode)if(stack-top-stack-base=stack-stacksize)stack-base=(BiTree*)realloc(stack-base,(stack-stacksize+STACKINCREAMENT)*sizeof(BiTree);if(!stack-base)exit(OVERFLOW);stack-top=stack-base+stack-stacksize;stack-stacksize+=STACKINCREAMENT;*(stack-top)=Bitnode;stack-top+;return O

5、K;BiTree Pop(SqStack * stack)if(stack-top=stack-base)return ERROR;return *(-stack-top);int DestroyStack (SqStack * stack)free(stack-base);return OK;三、详细设计详细程序如下:#include#include#include#include#define OK 1#define ERROR 0#define VARIMAXNUM 20 #define STARMAXLEN 100 #define STACK_INIT_SIZE 100 /栈的最大长度

6、#define STACKINCREAMENT 10 /每次增加的栈的长度#define ElemType char 将elemtype定义为char型typedef struct BiTNode /创建树节点 按照书上原样创建struct BiTNode * Lchild;struct BiTNode * Rchild;ElemType data; /字符型BiTNode , *BiTree;typedef struct Node /栈BiTree * base;BiTree *top;int stacksize;SqStack;char OPTRCHART77= /此举是为了后面的优先级考

7、虑 ,|,&,(,),#,|,&,(,),#,base=(BiTree*)malloc(STACK_INIT_SIZE*sizeof(BiTree);if(!stack-base)exit(OVERFLOW);stack-top=stack-base;stack-stacksize=STACK_INIT_SIZE;return OK;BiTree GetTop(SqStack * stack) /返回值为BiTree类型的 取栈头if(stack-top=stack-base)return NULL;return *(stack-top-1);int Push(SqStack * stack,

8、BiTree Bitnode) /将树的节点放进栈的操作,入栈if(stack-top-stack-base=stack-stacksize)stack-base=(BiTree*)realloc(stack-base,(stack-stacksize+STACKINCREAMENT)*sizeof(BiTree);if(!stack-base)exit(OVERFLOW);stack-top=stack-base+stack-stacksize;stack-stacksize+=STACKINCREAMENT;*(stack-top)=Bitnode;stack-top+;return OK

9、;BiTree Pop(SqStack * stack) /取值指针后移if(stack-top=stack-base)return ERROR;return *(-stack-top);int DestroyStack (SqStack * stack) /毁栈 free(stack-base);return OK;char strSTARMAXLEN;int varitabVARIMAXNUM+1;int sum;BiTree root;SqStack OPTR,OPND;char cmp(char a,char b) /取左右交叉的符号即“”“=”int i,j;for(i=0;i=6;

10、i+)if(OPTRCHARTi0=a)break;for(j=0;jdata=#;Push(&OPTR,temp);while(*p!=#)|(GetTop(&OPTR)-data!=#)if(*p=65)&(*p=97)&(*pdata=*p;temp-Lchild=NULL;temp-Rchild=NULL;Push(&OPND,temp);p+;elseswitch(cmp(GetTop(&OPTR)-data,*p) /开始判断优先级case data=*p;temp-Lchild=NULL;temp-Rchild=NULL;Push(&OPTR,temp); p+;break;case =:temp=Pop(&OPTR);free(temp);p+;break;case :temp=Pop(&OPTR);b=Pop(&OPND);temp-Rchild=b;if(temp-data!=)a=Pop(&OPND);temp-Lchild=a;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 机械/制造/汽车 > 机械软件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号