已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
“离散数学离散数学”实验报实验报 告告 (实验实验 1) 专 业 班 级 学 号 姓 名 2011.3.20 - 1 - 目录目录 一一. .实验目的实验目的.2 二二. .实验内容实验内容.2 1. 逻辑联接词的运算.2 2. 求任意一个命题公式的真值表 .3 三三. .实验环境实验环境.3 四四. . 实验原理和实现过程(算法描述)实验原理和实现过程(算法描述)3 1.实验原理.3 2.实验过程.4 五五. .实验数据及结果分析实验数据及结果分析.8 1.题 A.8 2.B,C 题.10 六六. . 源程序清单源程序清单14 1.A 题部分源代码.14 2.B,C 题部分源代码.15 七七. . 其他收获和体会其他收获和体会23 一一. .实验目的;实验目的; 本实验课程是信息专业学生的一门专业基础课程,通过实验,帮助学生更 好地掌握计算机科学技术常用的离散数学中的概念、性质和运算;通过实验提 高学生编写实验报告、总结实验结果的能力;使学生具备程序设计的思想,能 够独立完成简单的算法设计和分析。 熟悉掌握命题逻辑中的联接词、真值表、主范式等,进一步能用它们来解 决实际问题。 二二. .实验内容;实验内容; 1. 从键盘输入两个命题变元 P 和 Q 的真值,求它们的合取、析取、条件和双 条件的真值。 (A) 2. 求任意一个命题公式的真值表(B,并根据真值表求主范式(C) ) 详细说明:详细说明: 1.1. 逻辑联接词的运算逻辑联接词的运算 本实验要求大家利用 C/C语言,实现二元合取、析取、条件和双条件表 达式的计算。充分利用联接词和逻辑运算符之间的相似性实现程序功能。 2.2. 求任意一个命题公式的真值表求任意一个命题公式的真值表 本实验要求大家利用 C/C语言,实现任意输入公式的真值表计算。一般 我们将公式中的命题变元放在真值表的左边,将公式的结果放在真值表的右边。 命题变元可用数值变量表示,合适公式的表示及求真值表转化为逻辑运算结果; 可用一维数表示合式公式中所出现的 n 个命题变元,同时它也是一个二进制加 法器的模拟器,每当在这个模拟器中产生一个二进制数时,就相当于给各个命 题变元产生了一组真值指派。算法逻辑如下: (1)将二进制加法模拟器赋初值 0 (2)计算模拟器中所对应的一组真值指派下合式公式的真值。 (3)输出真值表中对应于模拟器所给出的一组真值指派及这组真值指派所对应 - 3 - 的一行真值。 (4)产生下一个二进制数值,若该数值等于 2n-1,则结束,否则转(2) 。 三三. .实验环境;实验环境; 使用 visual C+6.0 为编程软件,采用 C 语言为编程语言实现。 四四. . 实验原理和实现过程(算法描述);实验原理和实现过程(算法描述); 1.1.实验原理实验原理 (1)合取合取:二元命题联结词。将两个命题 P、Q 联结起来,构成一个新的命 题 PQ, 读作 P、Q 的合取, 也可读作 P 与 Q。这个新命题的真值与构成它的命 题 P、Q 的真值间的关系为只有当两个命题变项 P = T, Q = T 时方可 PQ =T, 而 P、Q 只要有一为 F 则 PQ = F。这样看来,PQ 可用来表示日常用语 P 与 Q, 或 P 并且 Q。 (2)析取析取:二元命题联结词。将两个命题 P、Q 联结起来,构成一个新的命 题 PQ, 读作 P、Q 的析取, 也可读作 P 或 Q。这个新命题的真值与构成它的命 题 P、Q 的真值间的关系为只有当两个命题变项 P = F, Q = F 时方可 PQ =F, 而 P、Q 只要有一为 T 则 PQ = T。这样看来,PQ 可用来表示日常用语 P 或 者 Q。 (3)条件条件:二元命题联结词。将两个命题 P、Q 联结起来,构成一个新的命 题 PQ, 读作 P 条件 Q, 也可读作如果 P,那么 Q。这个新命题的真值与构成它 的命题 P、Q 的真值间的关系为只有当两个命题变项 P = T, Q = F 时方可 PQ =F, 其余均为 T。 (4)双条件双条件:二元命题联结词。将两个命题 P、Q 联结起来,构成一个新的 命题 PQ, 读作 P 双条件于 Q。这个新命题的真值与构成它的命题 P、Q 的真 值间的关系为当两个命题变项 P = T, Q =T 时方可 PQ =T, 其余均为 F。 (5)真值表真值表:表征逻辑事件输入和输出之间全部可能状态的表格。列出命题 公式真假值的表。通常以 1 表示真,0 表示假。命题公式的取值由组成命题公 式的命题变元的取值和命题联结词决定,命题联结词的真值表给出了真假值的 算法。 真值表是在逻辑中使用的一类数学表,用来确定一个表达式是否为真或 有效。 (6)主范式主范式: 主析取范式主析取范式:在含有 n 个命题变元的简单合取式中,若每个命题变元与其否 定不同时存在,而两者之一出现一次且仅出现一次,称该简单合取式为小项。由 若干个不同的小项组成的析取式称为主析取范式;与 A 等价的主析取范式称为 A 的主析取范式。任意含 n 个命题变元的非永假命题公式 A 都存在与其等价的主 析取范式,并且是惟一的。 主合取范式主合取范式:在含有 n 个命题变元的简单析取式中,若每个命题变元与其否 定不同时存在,而两者之一出现一次且仅出现一次,称该简单析取式为大项。由 若干个不同的大项组成的合取式称为主合取范式;与 A 等价的主合取范式称为 A 的主合取范式。任意含 n 个命题变元的非永真命题公式 A 都存在与其等价的主 合取范式,并且是惟一的。 2.2.实验过程实验过程 (1)A 题部分,首先是对各个输入量的处理,要确定输入的为 0 或 1,否 则则为出错,接下来就是运算处理,在 C 语言中本身支持的有与或非这三种, 可以用!, int i=-1,j=-1; char s; tt:printf(“*n“);/标语 printf(“* *n“); printf(“* 欢迎进入逻辑运算软件 *n“); printf(“* *n“); printf(“*nn“); mm:printf(“n 请输入 P 的值(0 或 1),以回车结束:“); scanf(“%d“,/读取 P 的值 if (i=0|i=1);/校验输入的 P 值是否在允许范围内,出错则重新输入 else printf(“n P 的值输入有误,请重新输入“); goto mm; nn:printf(“n 请输入 Q 的值(0 或 1),以回车结束:“); scanf(“%d“,/读取 Q 的值 if (j=0|j=1);/校验输入的 Q 值是否在允许范围内,出错则重新输入 else printf(“n q 的值输入有误,请重新输入“); goto nn; a0=i/与运算 a1=i|j;/或运算 a2=(!i)|j;/蕴含运算,将其转化为与或非形式 a3=(!i)|j)/等值运算,将其转化为与或非形式 printf(“nn 合取:n P/Q=%dn“,a0);/输出结果 printf(“ 析取:n P/Q=%dn“,a1); - 15 - printf(“ 条件:n P-Q=%dn“,a2); printf(“ 双条件:n PQ=%dn“,a3); bb:printf(“n 是否继续运算?(y/n)“);/询问是否继续操作 scanf(“%s“, if (s=y|s=n) if (s=y) system(“cls“); /清屏 goto tt;/返回顶层 else printf(“欢迎下次再次使用!“);/退出 else printf(“输入错误,请重新输入n“);/错误校验 goto bb; BCBC 题部分源代码:题部分源代码: #include “stdio.h“ #include “stdlib.h“ #include “string.h“ #include “conio.h“ #include “math.h“ #define N 50 void panduan(int bN,int f);/赋值函数 int tkh (char szN, char ccuN, int icuN, int h0);/分级运算函数 int fkh (char szN, char ccuN, int icuN, int h0);/主运算函数 main() int i1,i2,d=1,icuN,kh=0,jg,j=0,h0;/icuN用于存放变量值,kh 括号计数,jg 存放结果 int bj=0,hqN,h=0,x=0,xqN;/hqN存放合取结果 xqN存放析取结果 char szN,ccuN,sz0N,s;/szN存放式子,ccuN存放变量,sz0N也是用于存放式子 hq0=-1; xq0=-1; printf(“*n“);/标语 printf(“* *n“); printf(“* 欢迎进入逻辑运算软件 *n“); printf(“* (可运算真值表,主范式,支持括号) *n“); printf(“* *n“); printf(“* 用!表示非 *n“); printf(“* 用 printf(“* 用|表示或 *n“); printf(“* 用表示蕴含 *n“); printf(“* 用表示等值 *n“); printf(“* *n“); printf(“*nn“); printf(“请输入一个合法的命题公式:n“);/输入式子 gets(sz);/读取式子 strcpy(sz0,sz);/复制式子 for(i1=0;i1=a printf(“M(%d)“,hqi1); /输出主合取范式 if(xq0=-1)/不存在析取范式时 printf(“n 该命题公式不存在主析取范式。n“); else printf(“nn 该命题公式的主析取范式:nt“); for(i1=0;i10)/判断并添加符号 printf(“/“); printf(“m(%d)“,xqi1);/输出主析取范式 printf(“n“); printf(“n 欢迎下次再次使用!n “);/结束 getch(); void panduan(int bN,int f) / 二进制赋值。 int i; i=f; if(bf=0)/加 1 bf=1; else/进位 bf=0; panduan(b,-i); int tkh (char szN,char ccuN,int icuN,int h0)/分级运算函数 int i,j,h,s,kh=0,wzN,a; char xs1N,ckhN; /xs1 用来保存括号内的字符 ckh 用来保存括号。 s=strlen(sz); for(i=0;is;i+) if(szi=( | szi=)/判断括号 wzkh=i;/存储括号位置 ckhkh=szi;/存储括号类型 kh+; if(kh=0) return fkh(sz,ccu,icu,h0);/如果无括号,直接运行 else for(i=0;ikh;i+) if(ckhi=)/找到第一个) break; for(j=wzi-1+1,h=0;jwzi;j+,h+) /存储最内级括号中的内容 xs1h=szj; xs1h=0; a=fkh(xs1,ccu,icu,h0);/运行最内级括号的式子,得到结果 if(a=1)/判断并存储结果 szwzi-1=1; else szwzi-1=-2; for(j=wzi-1+1;js+wzi-1-wzi;j+)/将括号后内容前移 szj=szj+wzi-wzi-1; szj=0; return tkh(sz,ccu,icu,h0);/循环执行 - 19 - int fkh(char szN,char ccuN,int icuN,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 dtN; s=strlen(sz); if(s=1) if(sz0=-2)/判断是否是最后一项 return 0; else return 1; /1 就是 sz0的值、 else for(i=0;is-j;i+) /先处理非 if(szi=!) for(i1=0;i1h0;i1+) if(szi+1=ccui1)/将变量赋值并给 P1 p1=icui1; if(szi+1=-2)/如果是前运算结果的 0,则 P1 等于 0 p1=0; if(p1=-1)/如果是数字,直接给 P1 p1=szi+1; dtj+2=!p1;/非运算 szi=j+2; j+; p1=0; for(i1=i+1;i1s-j;i1+) szi1=szi1+1;/将后续式子前移一项 p1=-1; j1=j; for(i=0;is-j1-2*j2;i+) / 处理与 if(szi=i1h0;i1+) if(szi-1=ccui1)/将变量赋值并给 P1 p1=icui1; if(szi+1=ccui1)/将变量赋值并给 P2 p2=icui1; for(i2=2;i2j+2;i2+) if(szi-1=i2) /如果为前计算结果,将结果赋值并给 P1 p1=dti2; if(szi+1=i2) /如果为前计算结果,将结果赋值并给 P2 p2=dti2; if(szi-1=-2)/如果是前运算结果的 0,则 P1 等于 0 p1=0; if(szi+1=-2)/如果是前运算结果的 0,则 P2 等于 0 p2=0; if(p1=-1) /如果是数字,直接给 P1 p1=(int)(szi-1); if(p2=-1)/如果是数字,直接给 P2 p2=(int)(szi+1); dtj+2=p1 /与运算 szi-1=j+2; j+; j2+; p1=-1; p2=-1; for(i1=i;i1s-j1-2*j2;i1+)/将后续式子前移两项 szi1=szi1+2; i=i-1; for(i=0;is-j1-2*j2-2*j3;i+) / 处理或。 if(szi=|) for(i1=0;i1h0;i1+) if(szi-1=ccui1)/将变量赋值并给 P1 p1=icui1; if(szi+1=ccui1)/将变量赋值并给 P2 p2=icui1; for(i2=2;i2j+2;i2+) if(szi-1=i2) /如果为前计算结果,将结果赋值并给 P1 p1=dti2; if(szi+1=i2)/如果为前计算结果,将结果赋值并给 P2 p2=dti2; if(szi-1=-2)/如果是前运算结果的 0,则 P1 等于 0 p1=0; if(szi+1=-2)/如果是前运算结果的 0,则 P2 等于 0 p2=0; - 21 - if(p1=-1)/如果是数字,直接给 P1 p1=szi-1; if(p2=-1)/如果是数字,直接给 P2 p2=szi+1; dtj+2=p1 | p2;/或运算 szi-1=j+2; j+; j3+; p1=-1; p2=-1; for(i1=i;i1s-j1-2*j2-2*j3;i1+)/将后续式子前移两项 szi1=szi1+2; i-; for(i=0;is-j1-2*j2-2*j3-2*j4;i+) / 处理蕴含。 if(szi=) for(i1=0;i1h0;i1+) if(szi-1=ccui1)/将变量赋值并给 P1 p1=icui1; if(szi+1=ccui1)/将变量赋值并给 P2 p2=icui1; for(i2=2;i2j+2;i2+) if(szi-1=i2) /如果为前计算结果,将结果赋值并给 P1 p1=dti2; if(szi+1=i2) /如果为前计算结果,将结果赋值并给 P2 p2=dti2; if(szi-1=-2)/如果是前运算结果的 0,则 P1 等于 0 p1=0; if(szi+1=-2)/如果是前运算结果的 0,则 P2 等于 0 p2=0; if(p1=-1)/如果是数字,直接给 P1 p1=szi-1; if(p2=-1)/如果是数字,直接给 P2 p2=szi+1; dtj+2=!p1 | p2;/蕴含运算 szi-1=j+2; j+; j4+; p1=-1; p2=-1; for(i1=i;i1s-j1-2*j2-2*j3-2*j4;i1+)/将后续式子前移两项 szi1=szi1+2; i-; for(i=0;is-j1-2*j2-2*j3-2*j4-2*j5;i+) / 处理等值。 if(szi=) for(i1=0;i1h0;i1+) if(szi-1=ccui1)/将变量赋值并给 P1 p1=icui1; if(szi+1=ccui1)/将变量赋值并给 P2 p2=icui1; for(i2=2;i2j+2;i2+) if(szi-1=i2) /如果为前计算结果,将结果赋值并给 P1 p1=dti2; if(szi+1=i2) /如果为前计算结果,将结果赋值并给 P2 p2=dti2; if(szi-1=-2)/如果是前运算结果的 0,则 P1 等于 0 p1=0; if(szi+1=-2)/如果是前运算结果的 0,则 P2 等于 0 p2=0; if(p1=-1)/如果是数字,直接给 P1 p1=szi-1; if(p2=-1)/如果是数字,直接给 P2 p2=szi+1; dtj+2=(!p1 | p2)/等值运算 szi-1=j+2; j+; j5+; p1=-1; p2=-1; for(i1=i;i1s-j1-2*j2-2*j3-2*j4-2*j5;i1+)/将后续式子前移两项 s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北师大版小学数学二年级上册《有多少点子:乘法的直观模型》教学设计
- Kimi关键词排名优化服务商深度测评:长文本AI时代的品牌知识占位策略
- 2026公卫科工作内容培训
- 社区护理学(成教专科)第8章 社区特殊人群的保健与护理
- 八年级地理“中国区域差异”单元复习教学设计
- 八年级上册物理同步教案(人教版)
- 初中八年级地理(中图版)·气温与降水知识清单
- 初中八年级道德与法治《人民代表大会制度:我国的根本政治制度》教学设计
- 初中八年级历史上册第1课《鸦片战争》核心素养导向导学案
- 初三物理中考复习专题:简单机械(杠杆与滑轮)核心原理深度整合与高阶应用教案
- 2025~2026学年湖北省武汉市Joinin外研剑桥英语第一学期五年级期末英语试卷
- 2026山东济南南美城乡发展有限公司及其权属子公司招聘7人笔试参考题库及答案详解
- 【七下历史】期末集训01 选择题100题(原卷版)
- 2026年高考全国II卷地理真题试卷(含答案)
- 2025年江西省公安厅招聘警务辅助人员笔试真题(附答案)
- 2026年云南校长职级测试卷含答案详解【典型题】
- 2026年浙江省杭州市重点学校小升初数学考试试题题库(答案+解析)
- 2026年技术经纪人题库试题附答案详解(综合卷)
- 电力重大事故隐患判定标准及治理监督管理规定宣贯
- 2026年湖北省咸宁市八年级地理生物会考试卷题库及答案
- (2026版)低钠血症中国专家共识课件
评论
0/150
提交评论