打印真值表 java_c语言打印真值表.doc

该博客介绍了如何使用C语言编写程序来打印逻辑表达式的真值表。主要内容包括定义结构体、处理字符串移动和判断逻辑操作符等功能,旨在解析并生成有效的真值表。
摘要由CSDN通过智能技术生成

c语言打印真值表

c语言打印真值表

#include

#include

#include

#include

#include

/*

(1) '!'表示否定

(2) '&'表示合取

(3) '|'表示析取

(4) '>'表示条件

(5) '='表示双条件

*/

struct Stack

{

char *base;

char *top;

int stacksize;

};

struct Room//建立一个比较大的结构体,用于储存字母,和字母所对应的真值

{

char ch;

char value;

}value[10];

void Move(char (*str)[50],int pace,int left)//横向移动字符串

{

int i;

str[0][left]='A';

for(i=left+1 ; i

{

str[0][i]=str[0][i+pace];

str[1][i]=str[1][i+pace];

}

str[0][i]=0;

str[1][i]=0;

return ;

}

bool IsConnect(char ch)

{

if((ch == '!') || (ch == '&') || (ch == '|') || (ch == '>') || (ch == '='))

return true;

else

return false;

}

void IsFormula(char (*str)[50])//关键函数判断 len>=3 的情况

{

int i,j,k;//辅助变量

int left = 0,right =0;

for(i=0;i

{

if(str[1][i] == 1)

{

left=i;

}

if(str[1][i] == 2)

{

right=i;

break;

}

}

str[1][left]=0;//用完 right 和 left 之后将其标记为0

str[1][right]=0;

k=right-left;

for(j=1;j<=k;j++)

{

if( ( str[0][left+j] =='!' && (IsConnect(str[0][left+j-1]) || str[0][left+j-1] =='(' ) && isalpha(str[0][left+j+1]) ) //'!'的左边为连接符或者'(',右边一定为A

|| ( isalpha(str[0][left+j]) && ( IsConnect(str[0][left+j-1]) || isalpha(str[0][left+j-1]) || str[0][left+j-1] =='(') && ( IsConnect(str[0][left+j+1]) || str[0][left+j+1] ==')')) //'A'的右边为连接符,或者'!',或者'(',右边为连接符或者右括号

|| ( IsConnect(str[0][left+j]) && isalpha(str[0][left+j-1]) && ( str[0][left+j+1] =='!' || isalpha(str[0][left+j+1])))) //连接符的左边为A,右边为非或者A

continue;

else

break;

}

if(j==k)

{

Move(str,k,left);

}

if(right == strlen(str[0])-1)

return ;

else

IsFormula(str);

}

bool CheckFormula(char *str1)

{

char str[2][50];//定义2行数组,str[0]存放字符串,str[1]做标记

int l=0,r=0;//l记录左括号的个数,r记录右括号的个数

int i;//辅助变量

int len=strlen(str[0]);

str[0][0]='(';//去空格,且在str[0]的外层加上括号,此时len>=2

i=1;

while( *str1 != '\0' )

{

if(*str1 != ' ')

{

str[0][i] = *str1;

i++;

}

str1++;

}

str[0][i]=')';

str[0][i+1]='\0';

if(len == 2)//当字符串为空

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值