ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:17.09KB ,
资源ID:6768204      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6768204.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(程序判定合式公式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

程序判定合式公式.docx

1、程序判定合式公式合式公式的判定1、基本概念1、合式公式: (1)单个命题常项或变项是合式公式;(2)如果A是合式公式,则A也是合式公式;(3)如果A,B是合式公式,则PQ、PQ、PQ、 PQ也是合式公式; (4)只有有限次地应用(1)(3)所包含的命题变元,联结词和括号的符号串是 合式公式。2、设命题集合Lp:C1,C2,Cn 长度:语言构成元素的数目 表达式u=v:指长度相等且从左向右比处处相等 初始段:从最左端开始向右扫描 结尾段:从最右端开始向左扫描2、编程思路假定 给定的程序变量为U ,U为Lp 表达式,代表输入的带判定的字符串又记“*”代表“”,“”,“”,“”四种之一。则:1、空表

2、达式不是合适公式的表达式。返回NO2、单独的一个符号是一个公式时,当且仅当此符号为命题符号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

3、)”停止,其中B是一个含有相同数目“(”和“)”的 表达式,如果没有,则U不是合式公式,返回NO。 验证(A*B)的“*”是否是“”,“”,“”,“”四种之一,如果不是,则U 不是合式公式,返回NO。 递归判断A,B是否为合式公式,转入1、重头开始判断3、程序代码#include#include#includevoid check(char *str1);int main(void) int index = 1 ; int keyNum = 1 ; static char string50 ; / 友好界面,循环使用判断 while( index != 0 ) printf(欢迎使用合式公式判

4、断系统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)

5、 char formal50; int len = 0; / 获取字符串的长度并且去除空格 while( *str1 != 0) if(*str1 != ) formallen = *str1; len+; str1+; formallen = 0; printf(字符串%st有效长度:%dn,formal,len); / 空字符串不是合式公式 if(len = 0) printf(字符串为空ntttNO!tt该字符串不是合式公式n); return; / 单独的一个符号是一个公式时,当且仅当次符号为命题符号 else if(len = 1) if(!isalpha(formal0) prin

6、tf(字符串%s不是合适字母ntttNO!tt该字符串不是合式公式n,formal); return; else printf(tttYES!tt字符串%s 是合式公式n,formal); return; / 如果U的长度大于,则U 必须以“(”开头,否则不是合式公式,返回NO。 else if( (formal0 != () | (formallen-1 != ) printf(字符串%s 没有以“(”开始或者以“)”结束ntttNO!tt该字符串不是合式公式n,formal); return; else / 如果U的第二个符号为一个表示否定的“”,则U必须是可以匹配(V)模式 if(for

7、mal1 = -) char newstring50 ; int i = 0; for(i = 0; i len - 3; i+) newstringi = formal2+i; newstringi = 0; check(newstring); / 递归判断V是否为合式公式 /如果U的第二个符号不是“”。则U一定要符合(A*B)模式。 else int j = 0; int max1 = 0; int max2 = 0; int aindex = 0; int bindex = 0; int prenum = 0; int rearnum = 0; char Astring50 ; char

8、 Bstring50 ; / 对U从左向右扫描,遇到“(A”停止,其中A是一个含有相同数目的“(”和“)”的表达式 for(j = 0; j len; j+) if(formalj = () prenum+; max1+; else if(formalj = ) prenum-; if(prenum = 1 ) aindex = j; break; if(prenum = 0 & max1 = 1) prenum+; / 如果没有,则U不是合式公式,返回NO。 if(prenum != 1) printf(字符串%s 中没有扫描到(A ntttNO!tt该字符串不是合式公式n,formal);

9、 return ; /截取新的短的字符串A if(max1 = 1) Astring0 = formal1; Astring1 = 0; else for(j = 0; j = 0; j-) if(formalj = ) rearnum+; max2+; else if(formalj = () rearnum-; if(rearnum = 1) bindex = j; break; if(rearnum = 0 & max2 = 1) rearnum+; / 如果没有,则U不是合式公式,返回NO。 if(rearnum != 1 ) printf(字符串%s 中没有扫描到 B)ntttNO!

10、tt该字符串不是合式公式n,formal); return; /截取新的短的字符串B if(max2 = 1) Bstring0 = formallen-2; Bstring1 = 0; else for(j = 0; (bindex + j) | formal2 = ) / 递归判断A,B是否为合式公式 check(Astring); check(Bstring); else printf(字符串% s中连接符不对ntttNO!tt该字符串不是合式公式n,formal); return; else if(aindex != bindex - 2) if(max1 != 1 & max2 !=1 ) printf(字符串% s中(A*B)不对ntttNO!tt该字符串不是合式公式n,formal); return; if( formalaindex + 1 = * | formalaindex + 1 = + | formalaindex + 1 = | formalaindex + 1 = ) / 递归判断A,B是否为合式公式 check(Astring); check(Bstring); / 如果不是,则U不是合式公式,返回NO。 else printf(字符串%s 中(A*B)模式不对ntttNO!tt该字符串不是合式公式n,formal); return;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1