C语言 实现 真值表
1.实验目的
掌握简单命题公式真值情况,了解如何自动求解简单命题公式的真值。
2.实验内容
输入:类似1∧1或T∧F这样的命题运算式(必做)
输出:运算结果
要求:
(1)程序启动后,可以进行多次运算,直到退出程序
(2)要求实现否定、合取、析取、条件、双条件、排斥或,六中运算,具体运算符的表示可以自定义
(3)最好把每种运算定义为函数实现,或者使用的你所使用语言已有的运算实现
3.实验过程(主要思想、核心算法、核心代码)
主函数
#include <stdio.h>
#include <string.h>
void xiqu(char a[]);//析取
void stj(char a[]);//双条件
void tj(char a[]);//条件
void hequ(char a[]);//合取
void xiqu(char a[]);//析取
void fei(char a[]);//非
void bkjh(char a[]);//不可兼或
int main() {
int i=0,j=0;
char arr[100]="";
while(1){
printf("析取|,合取&,非!,条件-,双条件=,不可兼或/:");
gets(arr);
xiqu(arr);//析取
hequ(arr);//合取
fei(arr);//非
bkjh(arr);//不可兼或
stj(arr);//双条件
tj(arr);//条件
}
return 0;
}
析取
void xiqu(char s[]){
int a=0,b=0,k=0;
for(int i=0;i<strlen(s);i++)
{
if(s[i]=='|'){
k=1;
if(s[i-1]=='1') a=1; else a=0;
if(s[i+1]=='1') b=1; else b=0;
}
}
if(k)
printf("结果%d\n",a||b);
}
双条件
void stj(char s[]){
int a=0,b=0,k=0;
for(int i=0;i<=strlen(s);i++)
{
if(s[i]=='='){
k=1;
if(s[i-1]=='1') a=1; else a=0;
if(s[i+1]=='1') b=1; else b=0;
}
}
if(k)
printf("结果%d\n",(!a||b)&&(!b||a));
}
条件
void tj(char s[]){
int a=0,b=0,k=0;
for(int i=0;i<strlen(s);i++)
{
if(s[i]=='-'){
k=1;
if(s[i-1]=='1') a=1; else a=0;
if(s[i+1]=='1') b=1; else b=0;
}
}
if(k)
printf("结果%d\n",!a||b);
}
合取
void hequ(char s[]){
int a=0,b=0,k=0;
for(int i=0;i<strlen(s);i++)
{
if(s[i]=='&'){
k=1;
if(s[i-1]=='1') a=1; else a=0;
if(s[i+1]=='1') b=1; else b=0;
}
}
if(k)
printf("结果%d\n",a&&b);
}
非!
void fei(char s[]){
int a=0,k=0;
for(int i=0;i<strlen(s);i++)
{
if(s[i]=='!'){
k=1;
if(s[i+1]=='1') a=1; else a=0;
}
}
if(k)
printf("结果%d\n",!a);
}
不可兼或
void bkjh(char s[]){
int a=0,b=0,k=0;
for(int i=0;i<strlen(s);i++)
{
if(s[i]=='/'){
k=1;
if(s[i-1]=='1') a=1; else a=0;
if(s[i+1]=='1') b=1; else b=0;
}
}
if(k)
printf("结果%d\n",a!=b);
}
结尾,有需要修改的还请提出意见,学习进步!