- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
程序判定合式公式
合式公式的判定
基本概念
1、合式公式:
(1)单个命题常项或变项是合式公式;
(2)如果A是合式公式,则﹁A也是合式公式;
(3)如果A,B是合式公式,则PQ、PQ、PQ、 P?Q也是合式公式;
(4)只有有限次地应用(1)~(3)所包含的命题变元,联结词和括号的符号串是合式公式。=v:指长度相等且从左向右比处处相等
初始段:从最左端开始向右扫描
结尾段:从最右端开始向左扫描
编程思路
假定 给定的程序变量为U ,U为Lp 表达式,代表输入的带判定的字符串
又记“*”代表“∧”,“∨”,“→”,“?”四种之一。
则:
1、空表达式不是合适公式的表达式。返回NO
2、单独的一个符号是一个公式时,当且仅当此符号为命题符号
3、如果U的长度大于1,则U 必须以“(”开头,否则不是合式公式,返回NO。
(1)如果U的第二个符号为一个表示否定的“﹁” ,则U必须是可以匹配(﹁V) 模式, 其中V是一个表达式。否则U不是合式公式,即U是合式公式当且仅当V是合式公式。
于是,递归判断V是否为合式公式,转入1、重头开始判断。
(2)如果U的第二个符号不是“﹁”。则U一定要符合(A*B)模式。
①对U从左向右扫描,遇到“(A”停止,其中A是一个含有相同数目的“(”和“)” 的表达式,如果没有,则U不是合式公式,返回NO。
②对U从右向左扫描,遇到“B)”停止,其中B是一个含有相同数目“(”和“)”的 表达式,如果没有,则U不是合式公式,返回NO。
③验证(A*B)的“*”是否是“∧”,“∨”,“←”,“?”四种之一,如果不是,则U 不是合式公式,返回NO。
④递归判断A,B是否为合式公式,转入1、重头开始判断
程序代码
#includestdio.h
#includestring.h
#includestdlib.h
void check(char *str1);
int main(void)
{
int index = 1 ;
int keyNum = 1 ;
static char string[50] ;
// 友好界面,循环使用判断
while( index != 0 )
{
printf(欢迎使用合式公式判断系统\n);
printf(合式公式()不可以省略\n);
printf(用- 表示非﹁\n);
printf(用* 表示与∧\n);
printf(用+ 表示或∨\n);
printf(用 表示蕴涵→\n);
printf(用~ 表示等值←→\n);
printf(请输入您要判断识别的字符串:\n);
scanf(%s,string);
check(string);
printf(请选择:0--退出系统;1--继续判断其它字符串\n);
scanf( %d, keyNum ) ;
if(keyNum == 0){
break;
}
else{
continue;
}
}
}
// 合式公式字符串的判读
void check(char *str1)
{
char formal[50];
int len = 0;
// 获取字符串的长度并且去除空格
while( *str1 != \0)
{
if(*str1 != )
{
formal[len] = *str1;
len++;
}
str1++;
}
formal[len] = \0;
printf(字符串%s\t有效长度:%d\n,formal,len);
// 空字符串不是合式公式
if(len == 0)
{
printf(字符串为空\n\t\t\tNO!\t\t该字符串不是合式公式\n);
return;
}
// 单独的一个符号是一个公式时,当且仅当次符号为命题符号
else if(len == 1)
{
if(!isalpha(formal[0]))
{
printf(字符串%s不是合适字母\n\t\t\tNO!\t\t该字符串不是合式公式\n,formal);
return;
}
else
{
printf(\t\t\tYES!\t\t字符串%s 是合式公式\n,formal);
return;
}
}
// 如果U的长度大于,则U 必须以“(”开头,否则不是合式公式,返回NO。
else
{
if( (formal[0] != () || (formal
文档评论(0)