程序判定合式公式.docVIP

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 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)

haocen + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档