求给定命题公式的真值表并根据真值表求公式的主范式(2)

2020-02-21 11:22

开始 检查括号 N 是否是最内级括号 Y 运算内容 分级运算函数 是否是最后结果 Y 返回结果 结束 N 开始 非运算 与运算 或运算 蕴含运算 等值运算 返回结果 结束 主运算函数

- 5 -

五.实验代码

#include \#include \#include \#include \#include \#define N 50

void panduan(int b[N],int f);//赋值函数

int tkh (char sz[N], char ccu[N], int icu[N], int h0);//分级运算函数 int fkh (char sz[N], char ccu[N], int icu[N], int h0);//主运算函数

main() {

int i1,i2,d=1,icu[N],kh=0,jg,j=0,h0;//icu[N]用于存放变量值,kh括号计数,jg存放结果

int bj=0,hq[N],h=0,x=0,xq[N];//hq[N]存放合取结果xq[N]存放析取结果 char sz[N],ccu[N],sz0[N],s;//sz[N]存放式子,ccu[N]存放变量,sz0[N]也是用于存放式子 hq[0]=-1; xq[0]=-1;

printf(\标语 printf(\ printf(\欢迎进入逻辑运算软件 **\\n\ printf(\可运算真值表,主范式,支持括号) **\\n\ printf(\ printf(\用!表示非 **\\n\ printf(\用&表示与 **\\n\ printf(\用|表示或 **\\n\ printf(\用^表示蕴含 **\\n\ printf(\用~表示等值 **\\n\ printf(\ 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

- 6 -

d=0; if(d==1) {

ccu[j]=sz[i1]; j++; }

d=1; } }

printf(\该式子中的变量个数为:%d\\n\输出变量个数 h0=j;

printf(\输出真值表如下:\\n \\n\输出真值表表头 for(i1=0;i1

printf(\ printf(\ puts(sz);

printf(\

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(\输出运算结果 strcpy(sz,sz0);

for(i1=0;i1<(int)pow(2,j)-1;i1++) {

++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(\输出运算结果 }

if(hq[0]==-1)//不存在合取范式时

printf(\该命题公式不存在主合取范式。\\n\

- 7 -

else {

printf(\该命题公式的主合取范式:\\n\\t\ for(i1=0;i1

if (i1>0)//判断并添加符号 printf(\

printf(\输出主合取范式 } }

if(xq[0]==-1)//不存在析取范式时

printf(\该命题公式不存在主析取范式。\\n\ else {

printf(\该命题公式的主析取范式:\\n\\t\ for(i1=0;i1

if (i1>0)//判断并添加符号 printf(\

printf(\输出主析取范式 } }

printf(\

printf(\欢迎下次再次使用!\\n \结束 getch(); }

void panduan(int b[N],int f) // 二进制赋值。 {

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用来保存括号。

- 8 -

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);//循环执行 } }

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

- 9 -


求给定命题公式的真值表并根据真值表求公式的主范式(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:基础会计 会计职业能力训练 整本习题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: