程序判定合式公式Word下载.docx

上传人:b****4 文档编号:14129376 上传时间:2022-10-19 格式:DOCX 页数:10 大小:17.07KB
下载 相关 举报
程序判定合式公式Word下载.docx_第1页
第1页 / 共10页
程序判定合式公式Word下载.docx_第2页
第2页 / 共10页
程序判定合式公式Word下载.docx_第3页
第3页 / 共10页
程序判定合式公式Word下载.docx_第4页
第4页 / 共10页
程序判定合式公式Word下载.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

程序判定合式公式Word下载.docx

《程序判定合式公式Word下载.docx》由会员分享,可在线阅读,更多相关《程序判定合式公式Word下载.docx(10页珍藏版)》请在冰豆网上搜索。

程序判定合式公式Word下载.docx

则:

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"

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

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

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