程序判定合式公式Word下载.docx
- 文档编号:14129376
- 上传时间:2022-10-19
- 格式:DOCX
- 页数:10
- 大小:17.07KB
程序判定合式公式Word下载.docx
《程序判定合式公式Word下载.docx》由会员分享,可在线阅读,更多相关《程序判定合式公式Word下载.docx(10页珍藏版)》请在冰豆网上搜索。
则:
1、空表达式不是合适公式的表达式。
返回NO
2、单独的一个符号是一个公式时,当且仅当此符号为命题符号
3、如果U的长度大于1,贝UU必须以“(”开头,否则不是合式公式,返回NO。
(1)如果U的第二个符号为一个表示否定的“「”,则U必须是可以匹配(「V)模式,其中V是一个表达式。
否则U不是合式公式,即U是合式公式当且仅当V是合式公式。
于是,递归判断V是否为合式公式,转入1、重头开始判断。
(2)如果U的第二个符号不是“「”。
则U—定要符合(A*B)模式。
1对U从左向右扫描,遇到“(A”停止,其中A是一个含有相同数目的“(”和“)”
的表达式,如果没有,则U不是合式公式,返回NO。
2对U从右向左扫描,遇到“B)”停止,其中B是一个含有相同数目“(”和“)”的
表达式,如果没有,则U不是合式公式,返回NO。
3验证(A*B)的“*”是否是“A”,“V”,,“?
”四种之一,如果不是,则U
不是合式公式,返回NO。
4递归判断A,B是否为合式公式,转入1、重头开始判断
三、程序代码
#include<
stdio.h>
string.h>
stdlib.h>
voidcheck(char*str1);
intmain(void)
{
intindex=1;
intkeyNum=1;
staticcharstring[50];
//友好界面,循环使用判断
while(index!
=0)
printf("
欢迎使用合式公式判断系统\n"
);
printf("
合式公式()不可以省略\n"
用-表示非「\n"
用*表示与A\n"
用+表示或V\n"
用>
表示蕴涵T\n”);
用〜表示等值\n"
请输入您要判断识别的字符串:
\n"
scanf("
%s"
&
string);
check(string);
请选择:
0--退出系统;
1--继续判断其它字符串\n"
scanf("
%d"
&
keyNum);
if(keyNum==0){
break;
}
else{
continue;
//合式公式字符串的判读
voidcheck(char*str1)
charformal[50];
intlen二0;
//获取字符串的长度并且去除空格
while(*str1!
='
\0'
)
if(*str1!
'
formal[len]二*str1;
len++;
str1++;
formal[len]='
;
字符串%s\t有效长度:
%d\n"
formal,len);
//空字符串不是合式公式
if(len==0)
字符串为空\n\t\t\tNO!
\t\t该字符串不是合式公式
return;
//单独的一个符号是一个公式时,当且仅当次符号为命题符号
elseif(len==1)
if(!
isalpha(formal[0]))
字符串%环是合适字母\n\t\t\tNO!
\t\t该字符串不
是合式公式\n"
formal);
else
\t\t\tYES!
\t\t字符串%s是合式公式\n"
return
//如果U的长度大于,则U必须以(”幵头,否则不是合式公式,返
回NO
if((formal[0]!
('
)||(formal[len-1]!
)'
))
字符串%s没有以“”幵始或者以“”结束
\n\t\t\tNO!
\t\t该字符串不是合式公式\n"
//如果U的第二个符号为一个表示否定的‘二”,则U必须是可
以匹配(「V)模式
if(formal[1]=='
-'
charnewstring[50];
inti=0;
for(i=0;
i<
len-3;
i++)
newstring[i]=formal[2+i];
newstring[i]='
check(newstring);
//递归判断V是否为合式公式
//如果U的第二个符号不是’二”。
则U一定要符合(A*B)模式。
intj=0;
intmax1=0;
intmax2=0;
intaindex=0;
intbindex=0;
intprenum=0;
intrearnum=0;
charAstring[50];
charBstring[50];
//对U从左向右扫描,遇到’(A”停止,其中A是一个含有相
同数目的“(”和)”的表达式
for(j=0;
j<
len;
j++)
if(formal[j]=='
prenum++;
max1++;
elseif(formal[j]=='
prenum--;
if(prenum==1)
aindex=j;
break;
if(prenum==0&
&
max1==1)
prenum++;
//如果没有,则U不是合式公式,返回NO
if(prenum!
=1)
字符串%s中没有扫描到(A\n\t\t\tNO!
\t\t
该字符串不是合式公式\n"
//截取新的短的字符串A
if(maxi==1)
Astring[0]=formal[1];
Astring[1]='
aindex;
Astring[j]=formal[1+j];
Astring[j]='
//对U从右向左扫描,遇到B)”停止,其中B是一个含有相
同数目“(”和“”的表达式
max2=0;
for
(j=len-1;
j>
=0;
j--)
rearnum++;
max2++;
rearnum--;
if(rearnum==1)
bindex=j;
if(rearnum==0&
max2==1)
字符串%s中没有扫描到B)\n\t\t\tNO!
//截取新的短的字符串B
if(max2==1)
Bstring[0]=formal[len-2];
Bstring[1]='
(bindex+j)<
len-1;
Bstring[j]=formal[bindex+j];
Bstring[j]='
//验证(A*B)的“”是否是’入”,V”,T“―四种
之一
if(formal[2]==
*'
II
formal[2]==
+'
||
>
||
〜'
//递归判断A,B是否为合式公式
check(Astring);
check(Bstring);
字符串%s中连接符不对\n\t\t\tNO!
if(aindex!
=bindex-2)
if(maxi!
=1&
max2!
=1)
字符串%$中(A*B)不对
if(formal[aindex+1]=='
formal[aindex+1]=='
formal[aindex+1]=='
〜’)
//如果不是,则U不是合式公式,返回NO
字符串%s中(A*B)模式不对该字符串不是合式公式\n"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序 判定 合式 公式
![提示](https://static.bdocx.com/images/bang_tan.gif)