printf(\ 用^表示蕴含 **\\n\ printf(\ 用~表示等值 **\\n\ printf(\ **\\n\ printf(\ printf(\请输入一个合法的命题公式:\\n\输入式子 gets(sz);//读取式子
strcpy(sz0,sz);//复制式子 for(i1=0;i1 if(sz[i1]==')' || sz[i1]=='(')//存储括号数量 kh++; if(sz[i1]>='a' && sz[i1]<='z' || sz[i1]>='A' && sz[i1]<='Z') { for(i2=0;i2 ccu[j]=sz[i1]; j++; } d=1; } } printf(\该式子中的变量个数为:%d\\n\输出变量个数 h0=j; printf(\输出真值表如下:\\n \\n\输出真值表表头 for(i1=0;i1 for(i1=0;i1 for(i2=0;i2 jg=tkh(sz,ccu,icu,h0); //用函数求结果 if(jg==0)//结果为0,合取加1 hq[h++]=bj; else //否则,析取加1 xq[x++]=bj; printf(\ %d\\n\输出运算结果 strcpy(sz,sz0); for(i1=0;i1<(int)pow(2,j)-1;i1++) - 14 - { ++bj; panduan(icu,j-1); //赋值变量 jg=tkh(sz,ccu,icu,h0); if(jg==0)//结果为0,合取加1 hq[h++]=bj; else //否则,析取加1 xq[x++]=bj; strcpy(sz,sz0); //恢复被修改的数组。 for(i2=0;i2 printf(\输出真值表前项 printf(\ %d\\n\输出运算结果 } if(hq[0]==-1)//不存在合取范式时 printf(\该命题公式不存在主合取范式。\\n\ else { printf(\该命题公式的主合取范式:\\n\\t\ for(i1=0;i1 printf(\输出主合取范式 } } if(xq[0]==-1)//不存在析取范式时 printf(\该命题公式不存在主析取范式。\\n\ else { printf(\该命题公式的主析取范式:\\n\\t\ for(i1=0;i1 printf(\输出主析取范式 } } printf(\ printf(\欢迎下次再次使用!\\n \结束 getch(); } void panduan(int b[N],int f) // 二进制赋值。 { - 15 - int i; i=f; if(b[f]==0)//加1 b[f]=1; else//进位 { b[f]=0; panduan(b,--i); } } int tkh (char sz[N],char ccu[N],int icu[N],int h0)//分级运算函数 { int i,j,h,s,kh=0,wz[N],a; char xs1[N],ckh[N]; //xs1用来保存括号内的字符 ckh用来保存括号。 s=strlen(sz); for(i=0;i if(sz[i]=='(' || sz[i]==')')//判断括号 { wz[kh]=i;//存储括号位置 ckh[kh]=sz[i];//存储括号类型 kh++; } if(kh==0) return fkh(sz,ccu,icu,h0);//如果无括号,直接运行 else { for(i=0;i if(ckh[i]==')')//找到第一个) break; for(j=wz[i-1]+1,h=0;j a=fkh(xs1,ccu,icu,h0);//运行最内级括号的式子,得到结果 if(a==1)//判断并存储结果 sz[wz[i-1]]=1; else sz[wz[i-1]]=-2; for(j=wz[i-1]+1;j return tkh(sz,ccu,icu,h0);//循环执行 } } - 16 - int fkh(char sz[N],char ccu[N],int icu[N],int h0)//主运算函数 { int i,h=0,j=0,j1=0,j2=0,j3=0,j4=0,j5=0,i1,i2,p1=-1,p2=-1,s; char dt[N]; s=strlen(sz); if(s==1) if(sz[0]==-2)//判断是否是最后一项 return 0; else return 1; //1 就是sz[0]的值、 else { for(i=0;i for(i1=0;i1 if(sz[i+1]==ccu[i1])//将变量赋值并给P1 p1=icu[i1]; if(sz[i+1]==-2)//如果是前运算结果的0,则P1等于0 p1=0; if(p1==-1)//如果是数字,直接给P1 p1=sz[i+1]; dt[j+2]=!p1;//非运算 sz[i]=j+2; j++; p1=0; for(i1=i+1;i1 sz[i1]=sz[i1+1];//将后续式子前移一项 } p1=-1; j1=j; for(i=0;i for(i1=0;i1 if(sz[i-1]==ccu[i1])//将变量赋值并给P1 p1=icu[i1]; if(sz[i+1]==ccu[i1])//将变量赋值并给P2 p2=icu[i1]; } for(i2=2;i2 - 17 - if(sz[i-1]==i2) //如果为前计算结果,将结果赋值并给P1 p1=dt[i2]; if(sz[i+1]==i2) //如果为前计算结果,将结果赋值并给P2 p2=dt[i2]; } if(sz[i-1]==-2)//如果是前运算结果的0,则P1等于0 p1=0; if(sz[i+1]==-2)//如果是前运算结果的0,则P2等于0 p2=0; if(p1==-1) //如果是数字,直接给P1 p1=(int)(sz[i-1]); if(p2==-1)//如果是数字,直接给P2 p2=(int)(sz[i+1]); dt[j+2]=p1 && p2;//与运算 sz[i-1]=j+2; j++; j2++; p1=-1; p2=-1; for(i1=i;i1 for(i=0;i for(i1=0;i1 if(sz[i-1]==ccu[i1])//将变量赋值并给P1 p1=icu[i1]; if(sz[i+1]==ccu[i1])//将变量赋值并给P2 p2=icu[i1]; } for(i2=2;i2 if(sz[i-1]==i2) //如果为前计算结果,将结果赋值并给P1 p1=dt[i2]; if(sz[i+1]==i2)//如果为前计算结果,将结果赋值并给P2 p2=dt[i2]; } if(sz[i-1]==-2)//如果是前运算结果的0,则P1等于0 p1=0; if(sz[i+1]==-2)//如果是前运算结果的0,则P2等于0 p2=0; - 18 - 百度搜索“70edu”或“70教育网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,70教育网,提供经典教育范文离散数学课程设计报告(4)在线全文阅读。
相关推荐: