离散数学上机实验报告

更新时间:2023-10-09 13:48:01 阅读量: 综合文库 文档下载

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

离 散 数 学 实 验 报 告

姓名: 学号: 班级:

离散数学实验报告

实验一 真值计算

实验内容:

从键盘输入两个命题P和Q的真值,求它们的合取、析取、条件和双条件的真值。用C语言实现。

实验源程序和运行结果如下: #include \void main() {

char p,q,t; int p1,q1;

cout<<\输入p,q的真值(F或T)\cin>>p>>q; if(p=='F') p1=0; else p1=1; if(q=='F') q1=0; else q1=1;

//下面进行为运算 if(p1|q1) t='T'; else t='F';

cout<<\析取q为\if(p1&q1) t='T'; else t='F';

cout<<\和取q为\if((!p1)|q1) t='T'; else t='F';

cout<<\条件q为\if(p1==q1) t='T'; else t='F';

cout<<\双条件q为\}

实验二 关系闭包计算

实验内容:

从键盘输入一个关系的关系矩阵,计算其自反闭包、对称闭包和传递闭包,传递闭包要求使用两种算法,即R+和Warshall算法。用C语言实现。

实验源程序运行结果如下: #include int he(int,int); void main() {

int

a[100][100],b[100][100],c[100][100],d[100][100],I[100][100],i,j,k,n,m,p,q,t;

printf(\请输入关系矩阵的阶数\\n\scanf(\

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

for(j=0;j

scanf(\

printf(\选择1计算自反闭包...\\n选择2计算对称闭包...\\n选择3用R+计

算传递闭包...\\n选择4用washall计算传递闭包...\\n计算结束后选择0退出\\n\

scanf(\switch(t) { case 1:

{

for(i=0;i

{

for(j=0;j

if(i==j)

I[i][j]=1;

else I[i][j]=0; }

} for(i=0;i

{

for(j=0;j

b[i][j]=he(a[i][j],I[i][j]),printf(\

printf(\

};break;

case 2:

{

for(i=0;i

{ }

for(j=0;j

b[j][i]=a[i][j];

printf(\对称闭包矩阵为\\n\for(i=0;i

{

for(j=0;j

c[i][j]=he(a[i][j],b[i][j]),printf(\

printf(\

}

};break;

case 3:

{

for(i=0;i

实验三 计算两结点间长度为m的路的数目

实验内容:

从键盘输入图的邻接矩阵和一正整数m,计算结点两两之间长度为m的路的数目。考虑有向图和无向图。用C语言实现。

实现可达性矩阵。

实验源程序和运行结果如下: #include void main() {

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

printf(\请输入路的长度\\n\scanf(\

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

for(t=0;t

for(j=0;j

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

for(i=0;i

for(j=0;j

}

{ }

for(k=0;k

b[i][j]+=c[i][k]*a[k][j];

for(p=0;p

}

for(k=0,i=0;i

for(j=0;j

k+=c[i][j];

for(q=0;q

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

printf(\结点两两之间长度为%d的路的数目为%d\\n\for(t=0;t

for(i=0;i

for(j=0;j

for(k=0;k

b[i][j]+=c[i][k]*a[k][j];

}

for(p=0;p

for(q=0;q

}

}

printf(\该关系矩阵的可达型矩阵为\\n\for(i=0;i=1) d[i][j]=1; else d[i][j]=0; printf(\

}

printf(\

}

}

实验四 最优树的构造

实验内容:

从键盘输入一组权值,构造出对应的最优树,列出构造过程。用C语言实现。

实验源程序和运行结果如下: #include void main() {

int a[100][100],d[100][100]={0};

int i,j,k,min,m,n,p; int b[100][100]={0}; int c[100][100];

printf(\请输入邻接矩阵的阶数:\

scanf(\

for(i=0;i

{printf(\请输入带权值矩阵的第%d行,用空格隔开:\

for(j=0;j

}

for(i=0;i

for(j=0;j

c[i][j]=a[i][j];

scanf(\

for(k=0;k

{ min=100;

for(i=0;i

continue;

else if(a[i][j]

}

m=i,n=j; }

a[m][n]=a[n][m]=0; if(b[m][n]==1||b[n][m]==1)

continue;

d[m][n]=d[n][m]=1; for(i=0;i

for(j=0;j

b[i][j]=d[i][j];

for(i=0;i

for(j=0;j

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

for(k=0;k

for(i=0;i

for(j=0;j

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

d[i][j]=c[i][j];

printf(\最小生成树的邻接矩阵为(带权值):\\n\

for(i=0;i

{for(j=0;j

}

printf(\}

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

Top