离散实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
离散实验报告
专业:数学与应用数学
班级:091121
学号:2009112125
姓名:张鼎珩
日期:2011.06.23
实验内容:
实验一真值计算
实验二两个集合运算
实验三关系闭包计算
实验四关系与函数
进行试验:
实验一真值计算
一、实验目的
熟悉联结词合取、析取、条件和双条件的概念,编程求其真值。
二、实验内容
(1)求任意一个命题公式的真值表:从键盘输入两个命题P 和Q
的真值,求它们的合取、析取、蕴含和等价的真值
(2)利用真值表求任意一个命题公式的主范式
(3)利用真值表进行逻辑推理
三实验程序:
#include
#include
#include
#include
#include
#define N 50
void jisuan();
void zhenzhibiao();
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 a1;
start:
do
{
printf(" 1.求P、Q的合取、析取、条件和双条件的真值\n 2.求任意一个命题公式的真值表,并根据真值表求主范式\n 3.退出\n");
printf("\n选择功能选项:");
fflush(stdin);/*清空输入缓冲区,通常是为了确保不影响后面的数据读取*/
scanf("%d",&a1);
switch(a1)/*switch语句实现选择功能*/
{
case 1:system("cls");jisuan();break;/*功能A*/
case 2:system("cls");fflush(stdin);zhenzhibiao();break;/*功能BC*/
case 3:system("exit");exit(0);/*结束整个程序的运行*/
default:system("cls");goto start;/*控制流转移到start处*/
}
}while(1);
}
void jisuan()/*功能A*/
{
char p,q,t,ch;
int p1,q1;
do
{
start:
fflush(stdin);
printf("请输入P和Q的真值(T或F):");
scanf("%c,%c",&p,&q);
if((p=='F'||p=='f'||p=='T'||p=='t')&&(q=='F'||q=='f'||q=='T'||q==
't'))
{
if(p=='F'||p=='f')/*赋值*/
p1=0;
else
p1=1;
if(q=='F'||q=='f')
q1=0;
else
q1=1;
if(p1|q1)/*计算*/
t='T';
else
t='F';
printf("P析取Q为:%c\n",t);
if(p1&q1)
t='T';
else
t='F';
printf("P和取Q为:%c\n",t);
if((!p1)|q1)
t='T';
else
t='F';
printf("P条件Q为:%c\n",t);
if(p1==q1)
t='T';
else
t='F';
printf("P双条件Q为:%c\n",t);
}
else
{
printf("请按正确格式输入!\n");
goto start;
};
printf("是否继续输入?Y/N");
fflush(stdin);
ch=getch();
system("cls");
}while(ch!='n'&&ch!='N');
}
void zhenzhibiao()/*功能BC*/
{
int i1,i2,d=1,icu[N],kh=0,jg,j=0,h0;
int bj=0,hq[N],h=0,x=0,xq[N];
char sz[N],ccu[N],sz0[N];
hq[0]=-1;
xq[0]=-1;
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 if(ccu[i2]==sz[i1]) d=0; if(d==1) { ccu[j]=sz[i1]; j++; } d=1; } } printf("\n该式子中的变量个数为:%d\n",j); h0=j; printf("\n输出真值表如下:\n \n"); for(i1=0;i1 printf(" %c ",ccu[i1]); printf(" "); puts(sz); printf("\n"); for(i1=0;i1 icu[i1]=0; for(i2=0;i2 printf(" %d ",icu[i2]); jg=tkh(sz,ccu,icu,h0);