重言式判别c语言中文网,重言式判别 重言式判别源码及课程设计 c语言版.doc
重言式判別 重言式判別源碼及課程設計 c語言版
重言式的判別 題目:
一個邏輯表達式如果對于其変元的任一種取值都為真,則稱為重言式;反之,如果對于其變元的任一種取值都為假,則稱為矛盾式;然而,更多的情況下,既非重言式,也非矛盾式。試寫一程序,通過真值表判別一個邏輯表達式屬于上述哪一類。
一、需求分析
1、邏輯表達式從終端輸入,長度不超過一行。 2、邏輯運算符包括“|”“&”“~”表示或 與 非。運算符優先程度遞增,但是可由括號改變。
3、邏輯變元為大寫字母表達式中任何地方都可以含有多個空格符。
4、運用自底向上的算符優先法 5、重言式顯示“true forever”;矛盾式顯示“false forever”; 否則顯示“satisfactible”。
二、概要設計
為實現上述需求需要用到自底向上的算符優先法,和自頂向下分割,先序遍歷建立二叉樹的方法。 自底向上的算符優先法:
{
char OPTRCHART[7][7]= ' ','|','&','~','(',')','#', '|','>','','>',
'&','>','>','','>',
'~','>','>','>','','>',
'(','',
')','>','>','>','>','>','>',
'#','
};
switch(cmp(GetTop(&OPTR)->data,*p)) {
case '': break; }/*switch*/ 建立二叉樹: typedef struct BiTNode { struct BiTNode * Lchild; struct BiTNode * Rchild; ElemType data; }BiTNode , *BiTree;
棧中的操作:
typedef struct Node
{
BiTree * base;
BiTree *top;
int stacksize;
}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(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 OK;
}
BiTree Pop(SqStack * stack)
{
if(stack->top==stack->base)
return ERROR;
return *(--stack->top);
}
int DestroyStack (SqStack * stack)
{
free(stack->base);
return OK;
}
三、詳細設計
詳細程序如下:
#include<
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的重言式判别c语言中文网,重言式判别 重言式判别源码及课程设计 c语言版.doc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 医学PPT该如何制作?
- 下一篇: android photopicker怎