离散数学实验一
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
(2013 / 2014 学年第一学期)
课程名称离散数学
实验名称利用真值表法求取主析取范式
以及主合取范式的实现
实验时间2013 年10 月23 日指导单位计算机学院、软件学院
指导教师
学生姓名班级学号
学院(系) 计算机、软件
专业软件工程
学院
实验报告
实验名称利用真值表法求取主析取范式
指导教师
以及主合取范式的实现
实验类型验证实验学时 4 实验时间2013.10.23
一、实验目的和要求
1、编程实现用真值表法求取含三个以内变量的合式公式的主析取范式和主合取范式。
2、要求:
1)从屏幕输入含三个以内变量的合式公式(其中联结词按照从高到底
的顺序出现)
2)规范列出所输合式公式的真值表
3)给出相应主析取和主合取范式
二、实验内容
1.可用字符数组a记录输入的合式公式(其中'&'代表与,'|'代表或,'~'
代表非,'>'代表单条件,'='代表双条件)
2.多重循环显示真值表(1表示T,0表示F,先1后0)并对公式进行相
应赋值得数组b
3.函数递归计算各种赋值情况下b的取值
4.联接词运算符定义
三、实验设计及代码
1、求取真值表
void truetable(){ /*求真值表函数*/
char s1[30],s2[30],s3[30],s4[30];
int n,i,j,k,m;
printf("您要计算真值表!\n");
printf("***************** 输入要计算的表达式(A~Z,a~z) ****"
"************ \n");
printf("(其中'&'代表与 '|'代表或 '~'代表非 '>'代表单条件 "
"'='代表双条件)\n");
gets(s4);
printf(" \n您输入要计算的表达式为:%s \n",s4);
n=got(s1, s4);
if(!n)
{printf("输入有误!\n");return;}
m = (int)pow(2,n);
printf("计算真值表如下:\n");
for(j=0;j<(int)strlen(s1);j++){
printf("%c ",s1[j]);
}
printf(" %s\n",s4);
for(j=0;j strcpy(s2,s4); int num[30]; digit(j,s1,s2); transform(s3,s2); k=calculate_exp(s3); if(k==5) {printf("输入有误!\n");return;} else {for(i=0;i<(int)strlen(s1);i++){ num[i] = (j/(int)pow(2,i)%2); printf("%d ",num[i]); } printf("%d\n",k); } } } 2、求取范式的函数 void paradigm(char d){ char s1[30],s2[30],s3[30],s4[30]; int n,j,i,k,m; printf("***************** 输入要计算的表达式(A~Z,a~z) ******" "********** \n"); printf("其中'&'代表与 '|'代表或 '~'代表非 '>'代表单条件 '='" "代表双条件\n "); gets(s4); printf("\n您输入要计算的表达式为:%s \n答案如下:\n",s4); n=got( s1, s4); if(!n) {printf("输入有误!\n");return;} m = (int)pow(2,n); for(j=0;j strcpy(s2,s4); digit(j,s1,s2); transform(s3,s2); k=calculate_exp(s3); int num[30]; for(i=0;i<(int)strlen(s1);i++){ num[i] = (j/(int)pow(2,i)%2); } switch(k){ case 5 : printf("输入有误!"); return; case 1 : if(d=='2'){ if (num[0]==1) printf("\n %c",s1[0]); else printf("\n ~%c",s1[0]); for(i=1;i<(int)strlen(s1);i++){ if (num[i]==1) printf("&%c",s1[i]); else printf("&~%c",s1[i]); } break; } else break; case 0 : if(d=='3'){ if (num[0]==1) printf("\n %c",s1[0]); else printf("\n ~%c",s1[0]); for(i=1;i<(int)strlen(s1)-1;i++){