离散数学上机实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
离
散
数
学
实
验
报
告
姓名:
学号:
班级:
离散数学实验报告
实验一真值计算
实验内容:
从键盘输入两个命题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; .\n选择2计算对称闭包...\n选择3用R+计算传递闭包...\n选择4用washall 计算传递闭包...\n计算结束后选择0退出\n"); scanf("%d",&t); 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("%4d",b[i][j]); printf("\n"); } };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("%4d",c[i][j]); printf("\n"); } };break; case 3: { for(i=0;i for(j=0;j { c[i][j]=a[i][j]; d[i][j]=a[i][j]; b[i][j]=0; } for(m=0;m { for(i=0;i { for(k=0;k { for(j=0;j { b[i][k]=b[i][k]||(c[i][j]*a[j][k]); } } } for(p=0;p { for(q=0;q c[p][q]=b[p][q]; } for(p=0;p { for(q=0;q { d[p][q]=d[p][q]||b[p][q]; b[p][q]=0; } } } printf("矩阵的传递闭包为\n"); for(i=0;i { for(j=0;j { printf("%4d",d[i][j]); } printf("\n"); } };break; case 4: { for(j=0;j { for(k=0;k { if(a[k][j]==1) { for(i=0;i a[k][i]=a[k][i]||a[j][i]; } } } printf("传递闭包为\n"); for(i=0;i { for(j=0;j printf("%4d",a[i][j]); printf("\n"); } };break; default:printf("Error\n"); } } int he(int a,int b) { int c; if(a==0&&b==0) c=0; else c=1; return c; } 实验三计算两结点间长度为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("%d",&n); printf("请输入路的长度\n"); scanf("%d",&m); printf("请输入此关系矩阵\n"); for(i=0;i { for(j=0;j { scanf("%d",&a[i][j]); c[i][j]=a[i][j]; d[i][j]=a[i][j]; b[i][j]=0; } } for(t=0;t {