《中南大学离散数学实验报告(实验1ABC)》由会员分享,可在线阅读,更多相关《中南大学离散数学实验报告(实验1ABC)(22页珍藏版)》请在金锄头文库上搜索。
1、“离散数学”实验报告(实验 1ABC)专 业 班 级 学 号 姓 名 日期:2011.12.05离散数学实验报告 1ABC2目录一、实验目的 .3二、实验内容 .3三、实验环境 .3四、实验原理和实现过程(算法描述) .31、实验原理 .32、实验过程 .4五、实验数据及结果分析 .7A 题型 .7B、C 题型 .9六、源程序清单 .13A 题部分源代码 .13B、C 题部分源代码 .14七、其他收获及体会 .22离散数学实验报告 1ABC3一、实验目的熟悉掌握命题逻辑中的联接词、真值表、主范式等,进一步能用它们来解决实际问题。二、实验内容1. 从键盘输入两个命题变元 P 和 Q 的真值,求它
2、们的合取、析取、条件和双条件的真值。 (A)2. 求任意一个命题公式的真值表(B,并根据真值表求主范式(C) )三、实验环境C 或 C语言编程环境实现。四、实验原理和实现过程(算法描述)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)析取:二元命题联结词。将两个命
3、题 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)双条件:二元
4、命题联结词。将两个命题 P、Q 联结起来,构成一个新的命题 PQ, 读作 P 双条件于 Q。这个新命题的真值与构成它的命题 P、Q 的真值间的关系为当两个命题变项 P = T, Q =T 时方可 PQ =T, 其余均为 F。(5)真值表:表征逻辑事件输入和输出之间全部可能状态的表格。列出命题公式真假值的表。通常以 1 表示真,0 表示假。命题公式的取值由组成命题公式的命题变元的取值和命题联结词决定,命题联结词的真值表给出了真假值的算法。 真值表是在逻辑中使用的一类数学表,用来确定一个表达式是否为真或有效。离散数学实验报告 1ABC4(6)主范式:主析取范式:在含有 n 个命题变元的简单合取式中
5、,若每个命题变元与其否定不同时存在,而两者之一出现一次且仅出现一次,称该简单合取式为小项。由若干个不同的小项组成的析取式称为主析取范式;与 A 等价的主析取范式称为 A的主析取范式。任意含 n 个命题变元的非永假命题公式 A 都存在与其等价的主析取范式,并且是惟一的。主合取范式:在含有 n 个命题变元的简单析取式中,若每个命题变元与其否定不同时存在,而两者之一出现一次且仅出现一次,称该简单析取式为大项。由若干个不同的大项组成的合取式称为主合取范式;与 A 等价的主合取范式称为 A的主合取范式。任意含 n 个命题变元的非永真命题公式 A 都存在与其等价的主合取范式,并且是惟一的。2.实验过程(1
6、)A 题部分,首先是对各个输入量的处理,要确定输入的为 0 或 1,否则则为出错,接下来就是运算处理,在 C 语言中本身支持的有与或非这三种,可以用!,&,|来表示,而在这个实验中,不是与或非的可以通过转化而变为与或非的形式,具体流程图如下:离散数学实验报告 1ABC5开始P 为 1 或0P 为 1 或0运算是否继续结束YYYNNN输入 P 值输入 Q 值输出结果求合取、析取、条件和双条件的真值流程图(2)B,C 题部分,首先是输入一个合理的式子,然后从式子中查找出变量的个数,开辟一个二进制函数,用来生成真值表,然后用函数运算,输出结果,并根据结果归类给范式,最后输出范式。函数部分,主要是 3
7、 个函数,一个为真值表递加函数,通过二进制的加法原理递进产生,一个为分级运算函数,这个函数是通过判断括号,选出最内级括号的内容执行运算函数,这样一级一级向外运算,最后得出最终结果,剩下一个为主运算函数,按照运算符号的优先级按顺序进行运算,如先将所有非运算运算完,再执行与运算。如此运算。离散数学实验报告 1ABC6开始输入式子计算变量个数生成真值表输出真值表变量赋值运算式子输出结果归类主范式输出主范式结束循环是否结束YN主函数离散数学实验报告 1ABC7开始检查括号是否是最内级括号运算内容是否是最后结果返回结果结束开始结束YYNN非运算与运算或运算蕴含运算等值运算返回结果主运算函数分级运算函数离
8、散数学实验报告 1ABC8五、实验数据及结果分析题 A:进入界面正确运算结果离散数学实验报告 1ABC9错误控制和输入正确后退出结果分析:这道题比较简单,主要是读取值并进行计算,同时要注意输入的值要是 0 或1,如果不是,则进行错误提示,并进行重新输入。离散数学实验报告 1ABC10B,C 题:欢迎界面非运算离散数学实验报告 1ABC11与运算或运算离散数学实验报告 1ABC12蕴含运算等值运算离散数学实验报告 1ABC13综合运算带括号的综合运算离散数学实验报告 1ABC14结果分析:B,C 题由于本身关系比较密切,故我直接将两个做在了一起,这个程序从功能上来说,达到了题目要求的各个功能,可
9、以运算与,或,非,蕴含,等值条件组成的表达式,并且支持括号运算,所以,总体上来说,虽然还有一些不完善的部分,但是整体是比较可以的。六、源程序清单A 题部分源代码:#include main()int a3;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,&i);/读取 P 的值if (i=0|i=1);/校验输入的 P 值是否在允许范围内,出错则重新输入e
10、lseprintf(n P 的值输入有误,请重新输入);goto mm;nn:printf(n 请输入 Q 的值(0 或 1),以回车结束:);scanf(%d,&j);/读取 Q 的值if (j=0|j=1);/校验输入的 Q 值是否在允许范围内,出错则重新输入elseprintf(n q 的值输入有误,请重新输入);goto nn;a0=i&j;/与运算a1=i|j;/或运算a2=(!i)|j;/蕴含运算,将其转化为与或非形式a3=(!i)|j)&(!j)|i);/等值运算,将其转化为与或非形式printf(nn 合取:n P/Q=%dn,a0);/输出结果printf( 析取:n P/Q
11、=%dn,a1);printf( 条件:n P-Q=%dn,a2);printf( 双条件:n PQ=%dn,a3);离散数学实验报告 1ABC15bb:printf(n 是否继续运算?(y/n));/询问是否继续操作scanf(%s,&s);if (s=y|s=n)if (s=y) system(cls); /清屏goto tt;/返回顶层else printf(欢迎下次再次使用!);/退出elseprintf(输入错误,请重新输入n);/错误校验goto bb;BC 题部分源代码:#include stdio.h#include stdlib.h#include string.h#include conio.h#include math.h#