第一范文网 - 专业文章范例文档资料分享平台

离散数学,逻辑学,命题公式求真值表

来源:用户分享 时间:2025/6/27 1:33:22 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

离散逻辑学实验

班级: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个命题变元的简单析取式中,若每个命题变元与其否定不同时存在,而两者之一出现一次且仅出现一次,称该简单析取式为大项。由若干个不同的大项组成的合取式称为主合取式;与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;//icu[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

ccu[j]=sz[i1]; j++; } d=1;

} }

printf(\该式子中的变量个数为:%d\\n\输出变量个数 h0=j;

printf(\输出真值表如下:\\n \\n\输出真值表表头 for(i1=0;i1

for(i1=0;i1

for(i2=0;i2

jg=tkh(sz,ccu,icu,h0); //用函数求结果 if(jg==0)//结果为0,合取加1 hq[h++]=bj;

else //否则,析取加1 xq[x++]=bj;

printf(\ %d\\n\输出运算结果 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(\ %d\\n\输出运算结果 }

if(hq[0]==-1)//不存在合取式时

printf(\该命题公式不存在主合取式。\\n\ else {

printf(\该命题公式的主合取式:\\n\\t\ for(i1=0;i10)//判断并添加符号 printf(\

printf(\输出主合取式 } }

if(xq[0]==-1)//不存在析取式时

printf(\该命题公式不存在主析取式。\\n\ else {

printf(\该命题公式的主析取式:\\n\\t\ for(i1=0;i10)//判断并添加符号 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)

搜索更多关于: 离散数学,逻辑学,命题公式求真值表 的文档
离散数学,逻辑学,命题公式求真值表.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c2b36u0ik9879ew80o94h77xpo584e200qxt_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top