逻辑函数真值表生成程序报告

2020-02-22 11:01

逻辑函数真值表生成程序设计报告

一.问题:

设计一个能生成具有13个输入逻辑变量的逻辑函数真值表生成程序。

二.原理:

逻辑函数(logical function)是数字电路(一种开关电路)的特点及描述工具,输入、输出量是高、低电平,可以用二元常量(0,1)来表示,输入量和输出量之间的关系是一种逻辑上的因果关系。仿效普通函数的概念,数字电路可以用逻辑函数的的数学工具来描述。

真值表是表征逻辑事件输入和输出之间全部可能状态的表格。

列出命题公式真假值的表。通常以1表示真,0 表示假。命题公式的取值由组成命题公式的命题变元的取值和命题联结词决定,命题联结词的真值表给出了真假值的算法。

真值表是在逻辑中使用的一类数学表,用来确定一个表达式是否为真或有效。 (表达式可以是论证;就是说,表达式的合取,它的每个结合项(conjunct)都是最后要做的结论的一个前提。)

三.测试结果:

四.附录(代码): #include #include

#define MAXNUM 100 //栈最大元素个数

#define MAXEXP 30 //允许用户输入的表达式最大字符数 #include \#include \

const char and = '&', or = '|', then = '-';

bool InOpt(char c) {

return (c == '&' || c == '|' || c == '-' || c == '#'); }

bool IsNum(char c) {

return (c >= '0' && c <= '9'); }

bool IsAlp(char c) {

return ((c <= 'z' && c >= 'a') || (c >= 'A' && c <= 'Z')); }

bool CheckSyntax(char* exp) {

char* cp = exp; while (*cp != '\\0') {

if (!(IsNum(*cp) || IsAlp(*cp) || InOpt(*cp) || *cp == '(' || *cp == ')')) return FALSE; cp++; }

if (*(--cp) != '#') return FALSE; return TRUE; }

PBinTree TransferTree(char *exp) {

PBinTreeNode pbt = CrtBinTree(); Stack st; Stack sc; char* ch = exp,c; sc.Push('#');

while (!(sc.GetTop()== '#' && *ch == '#')) {

if (IsAlp(*ch)) {

PBinTreeNode t = CrtBinTree(); t->data = *ch; st.Push(t);

}

else if (IsNum(*ch)) {

while (IsNum(*ch)) {

ch++; } ch--;

PBinTreeNode t = CrtBinTree(); t->data = *ch; st.Push(t); } else {

switch (*ch) {

case '(':

sc.Push(*ch); break; case ')': {

c = sc.Pop(); while (c != '(') {

PBinTreeNode t = CrtBinTree(); t->data = c;

t->rChild = st.Pop(); t->lChild = st.Pop(); st.Push(t); c = sc.Pop(); }

break; }

default: {

while (sc.GetTop() != '#' && sc.GetTop() != '(') {

PBinTreeNode t = CrtBinTree(); c = sc.Pop(); t->data = c;

t->rChild = st.Pop(); t->lChild = st.Pop(); st.Push(t); }

if (*ch != '#') sc.Push(*ch); break; } } }

if (!sc.IsEmpty() && *ch != '#') ch++; }

pbt = st.Pop(); return pbt; }

void GetVariable(PBinTree pbt) {

PBinTree vpt = pbt;

if ((pbt->data >= 'a' && pbt->data <= 'z') || (pbt->data >= 'A' && pbt->data <= 'Z')) {

printf (\请输入%c的值(1或0):\\n\ scanf (\ getchar(); }

if (vpt->lChild != NULL) GetVariable(vpt->lChild); if (vpt->rChild != NULL) GetVariable(vpt->rChild); }

char Caculate(PBinTree pbt) {

PBinTree vpt = pbt;

if (vpt == NULL) {

printf(\没有任何表达式可计算!\ return FALSE; }

if (vpt->lChild == NULL) //找到叶子结点 return vpt->data;

if (InOpt(vpt->data) && Caculate(vpt->lChild) && Caculate(vpt->rChild)) {

switch(vpt->data) {


逻辑函数真值表生成程序报告.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:江西省米面加工企业名录2018版1367家 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: