离散数学实验报告命题逻辑—构造命题公式的真值表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【实验目的】
使学生熟练掌握利用计算机语言实现逻辑运算的基本方法。
【实验内容】
对给出的任意一个命题公式(不超过四个命题变元),使学生会用C语言的程序编程表示出来,并且能够计算它在各组真值指派下所应有的真值,画出其真值表。
【实验原理】
给出任意一个命题公式,我们可以将它用C程序表示出来,并且能够计算它在各组真值指派下所应有的真值(或是逻辑运算的结果)。这有多种方法。上面我们已经给出了逻辑连结词的定义,根据这种定义方法,我们也可以把一个命题公式表示成为条件语句中的条件表达式,这样我们就可以得到该命题公式的逻辑运算结果了。
【程序代码】
#include
using namespace std;
int a[8][3]={{0,0,0},{0,0,1},{0,1,0},{0,1,1},{1,0,0},{1,0,1},{1,1,0},{1,1,1}};
int b[8]={0,0,0,0,0,0,0,0};
int xa[8]={0,0,0,0,0,0,0,0};
int s(char c,int as,int i){//1 true;0 false
if(c=='|'){
if(a[i][as]==1||a[i][as+1]==1){
return 1;
} else{
return 0;
}
}
if(c=='&'){
if(a[i][as]==1&&a[i][as+1]==1){
return 1;
} else{
return 0;
}
}
if(c=='='){
if(a[i][as]==a[i][as+1]){
return 1;
} else{
return 0;
}
}
if(c=='!'){
if(a[i][as]==a[i][as+1]){
return 0;
return 1;
}
}
if(c=='>'){
if(a[i][as]==1||a[i][as+1]==0){
return 0;
} else{
return 1;
}
}
}
int so(char c,int i,int as){
if(c=='|'){
if(xa[i]==1||a[i][as+1]==1){
return 1;
} else{
return 0;
}
}
if(c=='&'){
if(xa[i]==1&&a[i][as+1]==1){
return 1;
} else{
return 0;
}
}
if(c=='='){
if(xa[i]==a[i][as+1]){
return 1;
} else{
return 0;
}
}
if(c=='!'){
if(xa[i]==a[i][as+1]){
return 0;
} else{
return 1;
}
}
if(c=='>'){
if(xa[i]==1||a[i][as+1]==0){
return 0;
return 1;
}
}
}
int main(void) {
string f;
cin>>f;
char c1=f[1];
char c2=f[3];
for(int i=0;i<8;i++){
for(int j=0;j<3;j++){
printf("%d ",a[i][j]);
}
printf("\n");
}
for(int i=0;i<8;i++){
xa[i]=s(c1,0,i);
}
for(int i=0;i<8;i++){
b[i]=so(c2,i,1);
}
for(int i=0;i<8;i++){
printf("%d\n",b[i]);
}
return 0;
}
【实验结果】
【实验心得】