-
. z.
题号:第一题
题目:电梯模拟
1,需求分析:
计算命题演算公式的真值
所谓命题演算公式是指由逻辑变量〔其值为TRUE或FALSE〕和逻辑运算符∧〔AND〕、∨〔2的优先级且*1为
-
. z.
“*〞,*2为“*〞,算法完毕。这个过程我把它放在InToPost()函数中。
然后用后缀表达式构造出二叉树:
在这个过程中,我用到了之前所定义的存放树的堆栈。具体实现为:扫描后缀表达式,如果遇到逻辑变元然后将这个变元变成一个树节点,它的实现就是将该逻辑变元赋给树的data域,然后将它的左右子树赋为NULL,然后将这个树节点压入相应的堆栈;接着继续扫描,如果遇到的是单目运算符〔非号“!〞〕也将它构造成一个树节点然后从堆栈里面弹出一个树形节点,将弹出的元素的作为它的左子树,右子树设置为NULL,然后将这个树节点压入相应的堆栈;如果扫描到的是双目运算符〔与号“&〞或者或号“|〞〕将它也构造成一棵树,然后将这个树节点压入相应的堆栈,然后从栈中弹出两个元素,一个作为它的左子树,一个作为它的右子树,如此重复n〔n为后缀表达式的长度〕次。这个过程我把它放在Maketree()函数中。
最后打印真值表:
打印真值表也用到了前面的简单的后缀表达式,其实现的根本思想为和构造二叉树差不多,它实现了每到一个根节点就计算一个运算的值。在打印之前需要统计字符的个数,有m个字符则要打印2^m行,因为他有这么多情况。具体实现为:用一个字符型的数组来存放每个元素的一次取值,然后扫描后缀表达式,如果遇到逻辑变元就通过这个标识将相应的取值赋给它,然后它压入堆栈;接着继续扫描,如果遇到的是单目运算符〔非号“!〞〕则从堆栈里面弹出一个元素,并对它进展非运算,然后又将这个运算后的值压入堆栈;如果扫描到的是双目运算符〔与号“&〞或者或号“|〞〕则从栈中弹出两个元素,并对这两个元素进展相应的运算,然后将这个运算后的值压入堆栈,如此重复n〔n为后缀表达式的长度〕次。这个过程我把它放在Print()函数中。
其中第一,二过程的流程图描述分别为:
-
. z.
开场
扫描后缀表达式
扫描后缀表达式
扫描到的是逻辑变元.
扫描到*2是逻辑变元.
输出
Yes Yes
栈顶元素的优先级高.
No No
构造成树节点并进栈
取栈顶元素*1
双目运算符
单目运算符
构造成树节点从栈中弹出两个元素作为其左右子树
构造成树节点从栈中弹出一个元素作为其左子树
No
进栈
小于
出栈
Yes
进栈
进栈
Yes
完毕
*1,*2都为'*'
*1为'(',*2we为')'
No
设计表示:
<1>, 函数调用关系及函数说明:
main()
Maketree()
Print()
InToPost()
change()
StackPush1()
StackPop1
StackTop()
StackPop()
StackPush()
Precede()
StackPop()
StackPush()
change()函数原型为:
void change(char prefi*Str1[],char prefi*Str[],int length[],char store[][10],int* row,int* k )
-
. z.
该函数含有有六个参数,其中 prefi*Str1[]为用户输入的中缀表达式,prefi*Str[]为即将转化成为的简单中缀表达式,length[]为二维数组中存放的各个字符串的的长度store[][10]用来存放中缀表达式中的逻辑变元,row就是逻辑变元的个数,k简化后的中缀表达式的长度。该函数的功能就是将复杂的中缀表达式变成简单的中缀表达式。
InToPost()函数原型为:
void InToPost(char prefi*Str[],char postfi*Str[],SeqStack* myStack,int* n,int k)
该函数函数有五个参数 prefi*Str[]为中缀表达式,postfi*Str[]为简化后的后缀表达式,myStack为在转化过程中用到的堆栈,n为后缀表达式的字符长度,k为中缀表达式的字符长度。该函数的功能就是将简单的中缀表达
逻辑命题公式计算 来自淘豆网m.daumloan.com转载请标明出处.