课本是高等教育出版社出版的《离散数学及其应用》。
程序会自动分析输入的表达式,并且列出真值表,最后打印出主析取范式和主合取范式,最多支持256 个变元。
主要用到的算法:中缀表达式转后缀表达式、后缀表达式求值还有一个二进制加法模拟。
下面上2 个图,第一个是表达式开头没有非运算的(课本P85 例3.5.5):
第二个不但表达式开头有非运算,而且非运算之后并不是一个数值,而是一个操作符(课本P83 例3.5.4):
下面是代码,如果优快云 的编辑器弄乱了就将就着看吧,本来代码的缩进和排版都是整洁的。
file:///main.c
/* main.c
* use MinGW Developer Studio to compile
* by iSpeller (shell_way@foxmail.com)
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#define _BUF_LEN (1<<10)
#define _STACK_LEN (_BUF_LEN/2)
#define _PROP_LEN (1<<7)
#define VOID_NUM (0) /* 不存在的运算数 */
typedef char * string;
typedef int data_t;
typedef int bool_t;
#define TRUE (1)
#define FALSE (0)
/* 范式类型, 析取, 合取 */
enum paradigm { EXTRACT, CONJUNCT, };
/* 优先级大小 等于, 小于, 大于 */
enum priorities { EG=0, NGE=-1, NLE=1, };
/* 联结词(包括英文圆括号)优先级,全真 */
/*