关键词不能为空

当前您在: 主页 > 高中公式大全 >

仓位管理公式离散数学,逻辑学,命题公式求真值表

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2020-10-16 17:56
tags:求命题公式

君到姑苏见-伏尔泰

2020年10月16日发(作者:蒲保明)
离散逻辑学实验
班级:10电信实验班 学号:Q10600132 姓名:王彬彬
一、实验目的
熟悉掌握命题逻辑中的联接词、真值表、主范式等,进一步能用它们来解决
实际问题。
二、实验内容
1. 从键盘输入两个命题变元P和Q的真值,求它们的合取、析取、条件和
双条件的真值。(A)
2. 求任意一个命题公式的真值表(B,并根据真值表求主范式(C))
三、实验环境
C或C++语言编程环境实现。
四、实验原理和实现过程(算法描述)
1.实验原理
(1)合取:二元命题联结词。将两个命题P、Q联结起来,构成一个新的命
题P∧Q, 读作P、Q的合取, 也可读作P与Q。这个新命题的真值与构成它的命
题P、Q的真值间的关系为只有当两个命题变项P = T, Q = T时方可P∧Q =T, 而
P、Q只要有一为F则P∧Q = F。这样看来,P∧Q可用来表示日常用语P与Q, 或
P并且Q。
(2)析取:二元命题联结词。将两个命题P、Q联结起来,构成一个新的命
题P∨Q, 读作P、Q的析取, 也可读作P或Q。这个新命题的真值与构成它的命
题P、Q的真值间的关系为只有当两个命题变项P = F, Q = F时方可P∨Q =F, 而
P、Q只要有一为T则P∨Q = T。这样看来,P∨Q可用来表示日常用语P或者Q。
(3)条件:二元命题联结词。将两个命题P、Q联结起来,构成一个新的命
题P→Q, 读作P条件Q, 也可读作如果P,那么Q。这个新命题的真值与构成它
的命题P、Q的真值间的关系为 只有当两个命题变项P = T, Q = F时方可P→Q =F,
其余均为T。
(4)双条件:二元命题联结词。将两个命题P、Q联结起来,构成一个新的
命题P←→Q, 读作P双条件于Q。这个新命题的真值与构成它的命题P、Q的真
值间的关系为当两个命题变项P = T, Q =T时方可P←→Q =T, 其余均为F。
(5)真值表:表征逻辑事件输入和输出之间 全部可能状态的表格。列出命题
公式真假值的表。通常以1表示真,0 表示假。命题公式的取值由组成 命题公式
的命题变元的取值和命题联结词决定,命题联结词的真值表给出了真假值的算
法。 真值表是在逻辑中使用的一类数学表,用来确定一个表达式是否为真或有
效。
(6)主范式:
主析取范式:在含有n个命题变元的简单合取式中,若每个命题变元与其否
定不同时存在,而两 者之一出现一次且仅出现一次,称该简单合取式为小项。由若
干个不同的小项组成的析取式称为主析取范 式;与A等价的主析取范式称为A的
主析取范式。任意含n个命题变元的非永假命题公式A都存在与其等 价的主析取
范式,并且是惟一的。
主合取范式:在含有n个命题变元的简单析取式中,若每个 命题变元与其否定不
同时存在,而两者之一出现一次且仅出现一次,称该简单析取式为大项。由若干个< br>不同的大项组成的合取式称为主合取范式;与A等价的主合取范式称为A的主合
取范式。任意含n 个命题变元的非永真命题公式A都存在与其等价的主合取范式,
并且是惟一的。

五、代码设计结果:

六、代码:
#include
#include
#include
#include
#include
#define N 50
void panduan(int b[N],int f);赋值函数
int tkh (char sz[N], char ccu[N], int icu[N], int h0);分级运算函数
int fkh (char sz[N], char ccu[N], int icu[N], int h0);主运算函数

void zhumain()
{
int i1,i2,d=1,icu[N],kh=0,jg,j=0,h0;ic u[N]用于存放变量值,kh括号计数,jg存放结果
int bj=0,hq[N],h=0,x=0,xq[N];hq[N]存放合取结果xq[N]存放析取结果
char sz[N],ccu[N],sz0[N],s;sz[N]存放式子,ccu[N]存 放变量,sz0[N]也是用于存放式子
hq[0]=-1;
xq[0]=-1;
printf(标语
printf( **n
printf( 欢迎进入逻辑运算软件 **n
printf( (可运算真值表,主范式,支持括号) **n
printf( **n
printf( 用!表示非 **n
printf( 用&表示与 **n
printf( 用|表示或 **n
printf( 用^表示蕴含 **n
printf( 用~表示等值 **n
printf( **n
printf(
printf(请输入一个合法的命题公式:n输入式子
gets(sz);读取式子
strcpy(sz0,sz);复制式子
for(i1=0;i1 {
if(sz[i1]==')' || sz[i1]=='(')存储括号数量
kh++;
if(sz[i1]>='a' && sz[i1]<='z' || sz[i1]>='A' && sz[i1]<='Z')
{
for(i2=0;i2 if(ccu[i2]==sz[i1])去除重复变量
d=0;
if(d==1)
{
ccu[j]=sz[i1];
j++;
}
d=1;
}
}
printf(该式子中的变量个数为:%dn输出变量个数
h0=j;
printf(输出真值表如下:n n输出真值表表头
for(i1=0;i1 printf(
printf(
puts(sz);
printf(
for(i1=0;i1 icu[i1]=0;
for(i2=0;i2 printf(
jg=tkh(sz,ccu,icu,h0); 用函数求结果
if(jg==0)结果为0,合取加1
hq[h++]=bj;
else 否则,析取加1
xq[x++]=bj;
printf( %dn输出运算结果
strcpy(sz,sz0);
for(i1=0;i1<(int)pow(2,j)-1;i1++)
{
++bj;
panduan(icu,j-1); 赋值变量
jg=tkh(sz,ccu,icu,h0);
if(jg==0)结果为0,合取加1
hq[h++]=bj;
else 否则,析取加1
xq[x++]=bj;
strcpy(sz,sz0); 恢复被修改的数组。
for(i2=0;i2 printf(输出真值表前项
printf( %dn输出运算结果
}
if(hq[0]==-1)不存在合取范式时
printf(该命题公式不存在主合取范式。n
else
{
printf(该命题公式的主合取范式:nt
for(i1=0;i1 {
if (i1>0)判断并添加符号
printf(
printf(输出主合取范式
}
}
if(xq[0]==-1)不存在析取范式时
printf(该命题公式不存在主析取范式。n
else
{
printf(该命题公式的主析取范式:nt
for(i1=0;i1 {
if (i1>0)判断并添加符号
printf(
printf(输出主析取范式
}
}
printf(
}

void panduan(int b[N],int f) 二进制赋值。
{
int i;
i=f;
if(b[f]==0)加1
b[f]=1;
else进位
{
b[f]=0;
panduan(b,--i);
}
}

int tkh (char sz[N],char ccu[N],int icu[N],int h0)分级运算函数
{
int i,j,h,s,kh=0,wz[N],a;
char xs1[N],ckh[N]; xs1用来保存括号内的字符 ckh用来保存括号。
s=strlen(sz);
for(i=0;i if(sz[i]=='(' || sz[i]==')')判断括号
{
wz[kh]=i;存储括号位置
ckh[kh]=sz[i];存储括号类型
kh++;
}
if(kh==0)
return fkh(sz,ccu,icu,h0);如果无括号,直接运行
else
{
for(i=0;i if(ckh[i]==')')找到第一个)
break;
for(j=wz[i-1]+1,h=0;j xs1[h]=sz[j];
xs1[h]='0';
a=fkh(xs1,ccu,icu,h0);运行最内级括号的式子,得到结果
if(a==1)判断并存储结果
sz[wz[i-1]]=1;
else
sz[wz[i-1]]=-2;
for(j=wz[i-1]+1;j sz[j]=sz[j+wz[i]-wz[i-1]];
sz[j]='0';
return tkh(sz,ccu,icu,h0);循环执行
}
}

int fkh(char sz[N],char ccu[N],int icu[N],int h0)主运算函数
{
int i,h =0,j=0,j1=0,j2=0,j3=0,j4=0,j5=0,i1,i2,p1=-1,p2=-1, s;
char dt[N];
s=strlen(sz);
if(s==1)
if(sz[0]==-2)判断是否是最后一项
return 0;
else
return 1; 1 就是sz[0]的值、
else
{
for(i=0;i if(sz[i]=='!')
{
for(i1=0;i1 if(sz[i+1]==ccu[i1])将变量赋值并给P1
p1=icu[i1];
if(sz[i+1]==-2)如果是前运算结果的0,则P1等于0
p1=0;
if(p1==-1)如果是数字,直接给P1
p1=sz[i+1];
dt[j+2]=!p1;非运算
sz[i]=j+2;
j++;
p1=0;
for(i1=i+1;i1 sz[i1]=sz[i1+1];将后续式子前移一项
}
p1=-1;
j1=j;
for(i=0;i if(sz[i]=='&')
{
for(i1=0;i1 {
if(sz[i-1]==ccu[i1])将变量赋值并给P1
p1=icu[i1];
if(sz[i+1]==ccu[i1])将变量赋值并给P2
p2=icu[i1];
}
for(i2=2;i2 {
if(sz[i-1]==i2) 如果为前计算结果,将结果赋值并给P1
p1=dt[i2];
if(sz[i+1]==i2) 如果为前计算结果,将结果赋值并给P2
p2=dt[i2];
}
if(sz[i-1]==-2)如果是前运算结果的0,则P1等于0
p1=0;
if(sz[i+1]==-2)如果是前运算结果的0,则P2等于0
p2=0;
if(p1==-1) 如果是数字,直接给P1
p1=(int)(sz[i-1]);
if(p2==-1)如果是数字,直接给P2
p2=(int)(sz[i+1]);
dt[j+2]=p1 && p2;与运算
sz[i-1]=j+2;
j++;
j2++;
p1=-1;
p2=-1;
for(i1=i;i1 sz[i1]=sz[i1+2];
i=i-1;
}
for(i=0;i if(sz[i]=='|')
{
for(i1=0;i1 {
if(sz[i-1]==ccu[i1])将变量赋值并给P1
p1=icu[i1];
if(sz[i+1]==ccu[i1])将变量赋值并给P2
p2=icu[i1];
}
for(i2=2;i2 {
if(sz[i-1]==i2) 如果为前计算结果,将结果赋值并给P1
p1=dt[i2];
if(sz[i+1]==i2)如果为前计算结果,将结果赋值并给P2
p2=dt[i2];
}
if(sz[i-1]==-2)如果是前运算结果的0,则P1等于0
p1=0;
if(sz[i+1]==-2)如果是前运算结果的0,则P2等于0
p2=0;
if(p1==-1)如果是数字,直接给P1
p1=sz[i-1];
if(p2==-1)如果是数字,直接给P2
p2=sz[i+1];
dt[j+2]=p1 || p2;或运算
sz[i-1]=j+2;
j++;
j3++;
p1=-1;
p2=-1;
for(i1=i;i1 sz[i1]=sz[i1+2];
i--;
}
for(i=0;i if(sz[i]=='^')
{
for(i1=0;i1 {
if(sz[i-1]==ccu[i1])将变量赋值并给P1
p1=icu[i1];
if(sz[i+1]==ccu[i1])将变量赋值并给P2
p2=icu[i1];
}
for(i2=2;i2 {
if(sz[i-1]==i2) 如果为前计算结果,将结果赋值并给P1
p1=dt[i2];
if(sz[i+1]==i2) 如果为前计算结果,将结果赋值并给P2
p2=dt[i2];
}
if(sz[i-1]==-2)如果是前运算结果的0,则P1等于0
p1=0;
if(sz[i+1]==-2)如果是前运算结果的0,则P2等于0
p2=0;
if(p1==-1)如果是数字,直接给P1
p1=sz[i-1];
if(p2==-1)如果是数字,直接给P2
p2=sz[i+1];
dt[j+2]=!p1 || p2;蕴含运算
sz[i-1]=j+2;
j++;
j4++;
p1=-1;
p2=-1;
for(i1=i;i1 sz[i1]=sz[i1+2];
i--;
}
for(i=0;i if(sz[i]=='~')
{
for(i1=0;i1 {
if(sz[i-1]==ccu[i1])将变量赋值并给P1
p1=icu[i1];
if(sz[i+1]==ccu[i1])将变量赋值并给P2
p2=icu[i1];
}
for(i2=2;i2 {
if(sz[i-1]==i2) 如果为前计算结果,将结果赋值并给P1
p1=dt[i2];
if(sz[i+1]==i2) 如果为前计算结果,将结果赋值并给P2
p2=dt[i2];
}
if(sz[i-1]==-2)如果是前运算结果的0,则P1等于0
p1=0;
if(sz[i+1]==-2)如果是前运算结果的0,则P2等于0
p2=0;
if(p1==-1)如果是数字,直接给P1
p1=sz[i-1];
if(p2==-1)如果是数字,直接给P2
p2=sz[i+1];
dt[j+2]=(!p1 || p2)&&(!p2 || p1);等值运算
sz[i-1]=j+2;
j++;
j5++;
p1=-1;
p2=-1;
for(i1=i;i1 sz[i1]=sz[i1+2];
i--;
}
return dt[j+1];返回结果
}
}
void sel() { 合取、析取、条件、双条件的输出
int p,q;
printf(输入两个字符的真值:
scanf(
printf(输出合取结果:
printf(
printf(输出析取结果:
printf(
printf(输出条件结果:
printf(
printf(输出双条件结果:
printf(
}

int main() {
printf(班级:10电信实验班*****学号:Q10600132****姓名:王彬彬n
printf( 1.求取命题公式的真值表,主合取和主析取nn
zhumain();
printf( 2.求取合取析取等真值nn
sel();
return 0;
}

七、实验心得:
从这次实验中了解到如何通过程 序,把字符串的逻辑公式,实现运算
的功能。这是关键,同时对括号等的处理,这也很重要。



女兵工资多少-朋友圈关于自律的句子


男生喜欢女生的暗示-简历特长爱好怎么写


山重水复疑无路全诗-问男朋友的真心话


爱眼手抄报-浙江农业商贸职业学院官网


拿不到学位证白读了么-世界名人名言大全摘抄


薛奎识范镇-大学英语六级成绩


标题的含义的答题模式-心得体会作文


学化妆学费是多少-安徽广播学院



本文更新与2020-10-16 17:56,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/413773.html

离散数学,逻辑学,命题公式求真值表的相关文章

  • 爱心与尊严的高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊严高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊重的作文题库

    1.作文关爱与尊重议论文 如果说没有爱就没有教育的话,那么离开了尊重同样也谈不上教育。 因为每一位孩子都渴望得到他人的尊重,尤其是教师的尊重。可是在现实生活中,不时会有

    小学作文
  • 爱心责任100字作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任心的作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文