教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 外语考试 >

离散数学真值表计算

来源:网络收集 时间:2026-08-23
导读: #include iostream #includecstdio #includecstring #include stack using namespace std; stackints;//建立栈s,用来储存数字 stackintr;//建立栈r ,用来粗存符号 int qie(int x,int y){ if(x == 1 y == 1) return 1; else return 0; } int huo(int x,int

#include <iostream>

#include<cstdio>

#include<cstring>

#include <stack>

using namespace std;

stack<int>s;//建立栈s,用来储存数字

stack<int>r;//建立栈r ,用来粗存符号

int qie(int x,int y){

if(x == 1 && y == 1)

return 1;

else return 0;

}

int huo(int x,int y){

if(x == 0 && y == 0)

return 0;

else return 1;

}

int fei(int x){

if(x == 1)

return 0;

else return 1;

}

int dengzhi(int x,int y){

if(x == y)

return 1;

else return 0;

}

int yunhan(int x, int y){

if(x == 1 && y == 0)

return 0;

else return 1;

}

int priority(char flag){//设置优先级

if(flag == ')')

return -1;

else if(flag == '<' || flag == '-')

return 0;

else if(flag=='&'||flag=='|')

return 1;

else if(flag=='!')

return 2;

else if(flag == '(')

return 3;

else return -2;

}

int main()

{

int len, i, t, x, y, j = 0, k, flag, c[100], temp, n;

char b[100], a[100];

gets(a);

len = strlen(a);

for(i = 0; i < len; i ++)//比较所有字符

//如果不是运算符号就记录下来

if(a[i]!='('&&a[i]!=')'&&a[i]!='<'&&a[i]!='>'&&a[i]!='&'&&a[i]!='|'&&a[i]!='!'&&a[i]!='-'){ flag = 0;

for(k = 0; k < j; k ++)

if(a[i] == b[k]){//如果该字母已经存在丢弃

flag = 1;

break;

}

if(flag == 0){//如果该字母不存在就记录下来

b[j] = a[i];

printf("%c ", b[j]);

j ++;//记录字母个数

}

}

printf("\n");

flag = 1;

for(i = 0; i < j; i ++)

flag *= 2;

for(n = 0; n < flag; n ++){//建立真值表

temp = n;

t = -3;

for(k = 0; k < j; k ++){

c[j-k-1] = temp % 2;

temp /= 2;

}

for(k = 0; k < j; k ++)

printf("%d ", c[k]);

a[len] = ')';

for(i = 0; i <= len; i ++)

if(a[i]=='('||a[i]==')'||a[i]=='<'||a[i]=='&'||a[i]=='|'||a[i]=='!'||a[i]=='-')//字符进入r栈 {

while(t >= priority(a[i]) && t != 3)

{

if(r.top() == '(')//r.top栈r的栈顶元素

{

}

else if(r.top() == '!')

{

if(a[i] != '!'){

r.pop();//销毁栈顶元素,即将符号!取出来

x = fei(s.top());//将s栈顶元素进行非运算

s.pop();//销毁s的栈顶元素(已经进行了非运算) s.push(x);//将进行非运算的结果x加入s的栈顶

}

else break;

}

else if(r.top() == '&')

{

r.pop();

y = s.top();

s.pop();

x = s.top();

s.pop();

x = qie(x,y);

s.push(x);

}

else if(r.top() == '|')

{

r.pop();

y = s.top();

s.pop();

x = s.top();

s.pop();

x = huo(x,y);

s.push(x);

}

else if(r.top() == '<')

{

r.pop();

y = s.top();

s.pop();

x = s.top();

s.pop();

x = dengzhi(x,y);

s.push(x);

}

else if(r.top() == '-')

{

y = s.top();

s.pop();

x = s.top();

s.pop();

x = yunhan(x,y);

s.push(x);

}

if(r.empty())

t = -3;

else t = priority(r.top());

}

r.push(a[i]);

if(t == 3 && a[i] == ')'){//如果()之间没有符号就直接丢弃两个括号 r.pop();

r.pop();

}

if(r.empty())//如果符号栈的元素没有了,让优先级t为最小优先级 t = -3;

else t = priority(r.top());

if(a[i]=='&' || a[i]=='|' || a[i]=='<' || a[i]=='-')//如果遇到由两个符号组成的运算符只要前面的符号

i++;

}

else

for(k = 0; k < j; k ++)//数字进入s栈

if(a[i] == b[k]){

s.push(c[k]);

break;

}

printf("%d\n", s.top());

s.pop();

r.pop();

}

system("pause");

}

…… 此处隐藏:554字,全部文档内容请下载后查看。喜欢就下载吧 ……
离散数学真值表计算.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/1694436.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)