(11)中南大学离散数学实验报告 联系客服

发布时间 : 星期日 文章(11)中南大学离散数学实验报告更新完毕开始阅读970c221c964bcf84b9d57b43

综合运算

带括号的综合运算

- 12 -

结果分析:

B,C题由于本身关系比较密切,故我直接将两个做在了一起,这个程序从功能上来说,达到了题目要求的各个功能,可以运算与,或,非,蕴含,等值条件组成的表达式,并且支持括号运算,所以,总体上来说,虽然还有一些不完善的部分,但是整体是比较可以的。

六. 源程序清单;

A题部分源代码:

#include main() {

int a[3]; int i=-1,j=-1; char s;

tt:printf(\标语 printf(\ **\\n\ printf(\ 欢迎进入逻辑运算软件 **\\n\ printf(\ **\\n\ printf(\ mm:printf(\ 请输入P的值(0或1),以回车结束:\ scanf(\读取P的值

if (i==0||i==1);//校验输入的P值是否在允许范围内,出错则重新输入 else { printf(\ P的值输入有误,请重新输入\ goto mm; }

nn:printf(\ 请输入Q的值(0或1),以回车结束:\ scanf(\读取Q的值

if (j==0||j==1);//校验输入的Q值是否在允许范围内,出错则重新输入 else { printf(\ q的值输入有误,请重新输入\ goto nn; }

a[0]=i&&j;//与运算 a[1]=i||j;//或运算

a[2]=(!i)||j;//蕴含运算,将其转化为与或非形式

a[3]=((!i)||j)&&((!j)||i);//等值运算,将其转化为与或非形式 printf(\ 合取:\\n P/\\\\Q=%d\\n\输出结果 printf(\ 析取:\\n P\\\\/Q=%d\\n\

- 13 -

printf(\ 条件:\\n P->Q=%d\\n\ printf(\ 双条件:\\n P<->Q=%d\\n\

bb:printf(\是否继续运算?(y/n)\询问是否继续操作 scanf(\ if (s=='y'||s=='n') {

if (s=='y') {

system(\清屏 goto tt;//返回顶层

}else printf(\欢迎下次再次使用!\退出 }else

{printf(\输入错误,请重新输入\\n\错误校验 goto bb; } }

BC题部分源代码:

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

- 14 -

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++)

- 15 -