离散数学上机实验报告

更新时间:2024-03-22 16:40:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

离散数学实验报告

姓名: 学号: 专业:

实验一、真值运算

一、实验内容

从键盘输入两个命题P和Q的真值,求它们的合取、析取、条件和双条件的真值,并输出。 二、实验步骤

编写程序,将P,Q以不同真值带入,观察程序运行结果,调式程序。 三、实验代码

#include int main() {

int p,q; char t; while(t) {

printf(\是否运算程序(y/n):\\n\scanf(\if('y'==t) {

printf(\输入p,q的真值(0或1):\scanf(\if((p!=1)&&(p!=0)) {

printf(\请重新输入p值\

}

scanf(\

if((q!=1)&&(q!=0)) { }

if(q==0&&p==0) { }

else if(p==0&&q==1) {

printf(\﹁p=1\\n\printf(\﹁q=0\\n\printf(\∧q=0\\n\printf(\∨q=1\\n\printf(\→q=1\\n\printf(\﹁p=1\\n\printf(\﹁q=1\\n\printf(\∧q=0\\n\printf(\∨q=0\\n\printf(\→q=1\\n\printf(\printf(\请重新输入q值\scanf(\

}

}

printf(\

else if(p==1&&q==0) { }

else if(p==1&&q==1) { } continue;

printf(\﹁p=0\\n\printf(\﹁q=0\\n\printf(\∧q=1\\n\printf(\∨q=1\\n\printf(\→q=1\\n\printf(\printf(\﹁p=0\\n\printf(\﹁q=1\\n\printf(\∧q=0\\n\printf(\∨q=1\\n\printf(\→q=0\\n\printf(\

if('n'==t)

}

break;

return 0; }

四、实验体会

求真值运算中,应注意各种连接词的试用方法,以及其在不同情况下的真值。

实验二、关系的复合

一、实验内容

从键盘输入两个关系,求它们的复合关系,并输出。 二、实验步骤

编写程序,从键盘输入几种不同的二元关系,如果是关系矩阵,则关系矩阵应能够相乘,然后观察它们的复合结果,调试程序。 三、实验代码 #include int main() { int k,m,n,i,j,sum=0,a[10][10],b[10][10],c[10][10]; printf(\输入X集合中元素个数:\ scanf(\

printf(\输入X中二元关系R的关系矩阵:\\n\ for(i=0;i

}

printf(\输入X中二元关系S的关系矩阵:\\n\ for(m=0;m

}

printf(\输出X中二元关系R的关系矩阵:\\n\

for(i=0;i

{ }

printf(\输出X中二元关系S的关系矩阵:\\n\for(m=0;m

for(n=0;n

printf(\if(n==k-1) printf(\

for(j=0;j

printf(\if(j==k-1) printf(\

for(i=0;i

for(n=0;n

for(j=0,m=0;j

c[i][n]=sum; sum=0;

sum+=a[i][j]*b[m][n]; if(sum>1)

sum=1;

printf(\输出RοS的关系矩阵:\\n\

}

for(i=0;i

for(j=0;j

printf(\if(j==k-1) printf(\

四、实验体会

在求关系的复合中,先求出其关系矩阵,关系矩阵的运算和普通矩阵的运算一样,但是值得注意的是,关系矩阵中只有0和1,所以当大于1时,应该返回1,其余不变。

实验三、用沃尔算法求传递闭包

一、实验内容

从键盘输入二元关系用沃尔算法求出它的传递闭包,并输出。 二、实验步骤

熟悉沃尔算法,然后将其用程序编写出来,任意输入二元关系,观察程序运行结果, 用另一种算法算出结果,与其比较,调试程序。 三、实验代码 #include int main() { int n,i,j,k,a[10][10];

printf(\输入一个X集合中的元素:\ scanf(\

printf(\输入一个关系矩阵:\\n\ for(i=0;i

scanf(\

for(j=0;j1)

a[i][k]=1;

}

}

}

}

printf(\输出传递闭包:\\n\for(i=0;i

for(j=0;j

printf(\ if(j==n-1) } return 0;

printf(\

四、实验体会

熟悉并使用沃尔算法,关系矩阵中只有0和1,所以用沃尔算法求得的数若大于1,应该返回1,其余不变。

实验四、三种闭包运算

一、实验内容

从键盘输入一个二元关系,求它的自反闭包,对称闭包,传递闭包,并输出。 二、实验步骤

编写程序,从键盘输入一个二元关系,当求传递闭包时,试与沃尔算法的传递闭包做比较,观察程序运行结果,调试程序。 三、实验代码 #include void output(int s[][100]); void zifan(int s2[][100]); void duichen(int s2[][100]); void chuandi1(int s2[][100]); void aa(); int s[100][100],z; int d,n ,i,j; int main() { char ch; aa();

printf(\是否开始新的运算?(Y/N)\\n\ do

{

ch=getchar();

}while(ch!='N'&&ch!='Y');

if(ch=='Y') aa(); return 0;

} void aa() { char c;

printf(\请输入矩阵的行数(必须小于10)\\n \scanf(\

printf(\请输入矩阵的列数(必须小于10)\\n \scanf(\

printf(\请输入关系矩阵\\n\for(i=0;i

printf(\输入对应序号选择算法\\n1:自反闭包\\n2:传递闭包\\n3:对称闭包\\n\scanf(\switch(z) {

case 1:zifan(s); break; case 2:chuandi1(s);break; case 3:duichen(s); break; }

printf(\

printf(\请输入矩阵的第%d行元素\for(j=0;j

printf(\您选择继续吗(Y/N)?\\n\

do }

{

c=getchar();

}while(c!='N'&&c!='Y'); } while(c=='Y');

void output(int s[][100]) { }

void zifan(int s2[][100]) { }

void duichen(int s2[][100]) {

for(i=0;i

printf(\所求关系矩阵为:\\n\for(i=0;i

for(j=0;j

printf(\

printf(\

}

int s1[100][100]; for(i=0;i

output(s2);

s2[i][j]=s2[i][j]+s1[i][j]; if(s2[i][j]>1) s2[i][j]=1;

void chuandi1(int s2[][100]) {

int m[100][100],a[100][100],k,h; int t[100][100]; for(i=0;i

for(j=0;j

{ }

for(h=0;h

for(i=0;i

for(j=0;j

if(m[i][j]==1)

a[i][j]=0; t[i][j]=s2[i][j]; m[i][j]=s2[i][j];

}

}

{ }

for(i=0;i

for(j=0;j

m[i][j]=a[i][j]; t[i][j]+=a[i][j]; a[i][j]=0; if(t[i][j]>1) t[i][j]=1; }

for(k=0;k

if(s2[j][k]==1)

a[i][k]=1;

output(t);

四、实验体会

此程序要求的算法较多,所以应该用函数调用来实现每一个算法的功能,这样易于管理,自反闭包和传递闭包相对简单一些,在编写对称闭包时,并不运用沃尔算法,应注意返回的只有0和1。

实验五、邻接矩阵判断可达矩阵

一、实验内容

从键盘输入一个邻接矩阵,用其判断出它的可达矩阵,并输出。 二、实验步骤

编写程序,从键盘输入一个邻接矩阵,求出它的可达矩阵,并输出,观察程序运行结果,调试程序。 三、实验代码 #include void main() {

int a[100][100],b[100][100],c[100][100],d[100][100],i,j,k,t,p,q,n; printf(\请输入邻接矩阵的阶数\\n\scanf(\

printf(\请输入此邻接矩阵\\n\for(i=0;i

for(t=0;t

for(i=0;i

for(j=0;j

scanf(\c[i][j]=a[i][j]; d[i][j]=a[i][j]; b[i][j]=0;

}

}

}

for(j=0;j

for(k=0;k

for(p=0;p

for(q=0;q

c[p][q]=b[p][q]; b[p][q]=0; d[p][q]+=c[p][q];

printf(\该关系矩阵的可达型矩阵为\\n\for(i=0;i

for(j=0;j

printf(\

if(d[i][j]>=1) else

d[i][j]=0; d[i][j]=1;

printf(\

四、实验体会

用邻接矩阵应先判断出两个节点有没有路,然后返回给可达矩阵,有路返回1,没有返回0,然后根据其关系输出可达矩阵。

本文来源:https://www.bwwdw.com/article/i588.html

Top