1、离散数学实验报告题 目 专 业 学 号 姓 名 指导教师 提交日期 - 1 -实验一 五种连结词的逻辑运算一.实验目的用 C 语言实现两个命题变元的合取、析取、蕴涵和等价表达式的计算。熟悉连接词逻辑运算规则,利用程序语言实现逻辑这几种逻辑运算。二.实验内容从键盘输入两个命题变元 P 和 Q 的真值,求它们的合取、析取、蕴涵和等价四种运算的的真值。要求对输入内容进行分析,如果不符合 0、1 条件需要重新输入,程序有良好的输入输出界面。三. 实验过程1. 算法分析:编程语言为 c 语言合取/:p,q 都为 1 的时候为 1,其他为 0 析取/:p,q 都为 0 的时候为 0,其他为 1蕴含-:p
2、为 1,q 为 0 时为 0,其他为 1 等价:p,q 同真同假流程图- 2 -开始P 为 1 或 0P 为 1 或 0运算是否继续结束YYYNNN输入 P 值输入 Q 值输出结果2. 程序代码:#includeint main()int p,q,i,t;printf(“*n“);printf(“* *n“);printf(“ 欢迎进入逻辑运算软件n“);printf(“* *n“);printf(“*n“);doprintf(“请输入 p 的值(0 或 1)“);scanf(“%d“,if(p!=0while(p!=0- 3 -doprintf(“请输入 q 的值(0 或 1)“);scan
3、f(“%d“,if(q!=0while(q!=0doprintf(“请选择要进行的操作n“);printf(“1:合取n2:析取n3:蕴含n4:等价n“);scanf(“%d“,switch(i)case 1:if(pelse printf(“合取运算: p/q=0n“);break;case 2:if(p|q) printf(“析取运算: p/q=1n“);else printf(“析取运算: p/q=0n“);break;case 3:if(pelse printf(“蕴含: p-q=1n“);break;case 4:if(pelse printf(“等价运算: pq=0n“);brea
4、k; printf(“是否继续运算 10n“);scanf(“%d“,while(t);return 0;- 4 -3.实验数据及结果分析;图 1.初始界面图 2.输入及选择进行的操作- 5 -图 3.循环操作图 4.退出程序实验二 给任意命题公式输出其真值表一 、实验目的熟悉各命题公式,并会利用 C 语言编程求其真值。- 6 -二 、实验内容在菜单上输入任给一命题公式,输出其真值表三. 实验过程1. 算法分析:算法逻辑如下:(1)任意设计一个真值判断表达式,并使其赋值计算(2)计算模拟器中所对应的一组真值指派下合式公式的真值。(3)输出真值表中对应于模拟器所给出的一组真值指派及这组真值指派所
5、对应的一行真值。(4)如果所输出的为真值,则页面提示“真命题”主范式:主析取范式:在含有 n 个命题变元的简单合取式中,若每个命题变元与其否定不同时存在,而两者之一出现一次且仅出现一次,称该简单合取式为小项。由若干个不同的小项组成的析取式称为主析取范式;与 A 等价的主析取范式称为 A的主析取范式。任意含 n 个命题变元的非永假命题公式 A 都存在与其等价的主析取范式,并且是惟一的。主合取范式:在含有 n 个命题变元的简单析取式中,若每个命题变元与其否定不同时存在,而两者之一出现一次且仅出现一次,称该简单析取式为大项。由若干个不同的大项组成的合取式称为主合取范式;与 A 等价的主合取范式称为
6、A的主合取范式。任意含 n 个命题变元的非永真命题公式 A 都存在与其等价的主合取范式,并且是惟一的。流程图- 7 -开始输入式子计算变量数生成真值表输出真值表变量赋值运算式子输出结果归类主范式输出主范式结束循环是否结束YN2. 程序代码:#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
7、h0);/分级运算函数int fkh (char szN, char ccuN, int icuN, int h0);/主运算函数main()- 8 -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“);p
8、rintf(“ (运算真值表,主范式,支持括号) 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 该命题公式不
9、存在主析取范式。n“);elseprintf(“nn 该命题公式的主析取范式:nt“);- 10 -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)/加 1bf=1;else/进位bf=0;panduan(b,-i); int tkh (char szN,char ccuN,int icuN,int h0)/分级运算函
10、数int i,j,h,s,kh=0,wzN,a; char xs1N,ckhN; /xs1 用来保存括号内的字符 ckh 用来保存括号。s=strlen(sz);for(i=0;ivoid output(int s100);void zifan(int s2100);void duichen(int s2100);void chuandi2(int s2100);void chuandi1(int s2100);void aa();int s100100,z;int d,n ,i,j;int main()aa();return 0;void aa()printf(“请输入矩阵的行数 M1)s2
11、ij=1;output(s2);aa();void chuandi1(int s2100)int m100100,a100100,k,h;int t100100;for(i=0;i1)tij=1;output(t);aa();void chuandi2(int s2100)int k;for(i=0;i1)s2ij=1;output(s2);aa();- 21 -3.实验数据及结果分析图 1.初始界面图 2.根据需要选择各闭包- 22 -实验三 2、任意两个集合的交集、并集和差集一 .实验目的集合论是一切数学的基础,集合的运算规则是集合论中的重要内容。通过该组实验,目的是让我们更加深刻地理解集
12、合的概念和性质,并掌握集合的运算规则等。二 .实验内容通过对集合的掌握,利用 C 语言编程计算任意两个集合的交集、并集和差集运算。3. 实验过程1.算法分析1.在求交集时,利用 if 找出两个集合的相同元素,并输出。2.在求并集时,将两个集合的元素属于其一或另一个。3.在求差集时,将一个集合减去交集,然后将其输出。2.程序代码:#include “stdio.h“ #define M 5#define N 5void main() int i,j,k=-1,n=0; int jj=-1,bb=-1; int aM,bN,cM*N,dM+N,xM*N,yM+N; printf(“ 欢迎进入n“)
13、;printf(“ 请输入一个集合n“);for(i=0;ivoid main()int a20,b20,i,j,n,m,x,y;printf(“请输入两个集合的元素的个数:n“);scanf(“%d%d“,printf(“请输入第一个集合的元素:n“);for(i=1;i“,ax,ax);printf(“n“);printf(“A 到 B 的全域关系为:n“);- 27 -for(x=1;x“,ax,by);printf(“n“);printf(“B 集合的元素为:n“);for(y=1;y“,by,by);printf(“n“);printf(“B 到 A 的全域关系为: n“);for(
14、y=1;y“,by,ax);printf(“n“);四实验数据及结果分析图 1.菜单界面- 28 -图 2.全域关系和恒等关系结束语离散数学课程在各学科领域,特别在计算机科学与技术领域有着广泛的应用,同时离散数学也是计算机专业的许多专业课程,如程序设计语言编译技术、人工智能、算法设计与分析等必不可少的先行课程。不但作为计算机科学与技术及相关专业的理论基础及核心主干课,对后续课程提供必需的理论支持。更重要的是旨在“ 通过加强数学推理,组合分析,离散结构,算法构思与设计,构建流程图等方面专门与反复的研究、训练及应用,培养提高学生的数学思维能力和对实际问题的求解能力。 ”通过对离散数学的学习,不但可以掌握处理离散结构的描述工具和方法,为后续课程的学习创造条件,而且可以提高抽象思维和严格的逻辑推理能力,为将来参与创新性的研究和开发工作打下坚实的基础。