首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读以下说明和C函数,填补C函数中的空缺(1)~(5),将解答写在对应栏内。 [说明] 假设一个算术表达式中可以包含以下三种括号:“(”和“)”、“[”和“]”及“{”和“}”,并且这三种括号可以按照任意的次序嵌套使用。 下面仪考虑表达式
阅读以下说明和C函数,填补C函数中的空缺(1)~(5),将解答写在对应栏内。 [说明] 假设一个算术表达式中可以包含以下三种括号:“(”和“)”、“[”和“]”及“{”和“}”,并且这三种括号可以按照任意的次序嵌套使用。 下面仪考虑表达式
admin
2012-01-13
66
问题
阅读以下说明和C函数,填补C函数中的空缺(1)~(5),将解答写在对应栏内。
[说明]
假设一个算术表达式中可以包含以下三种括号:“(”和“)”、“[”和“]”及“{”和“}”,并且这三种括号可以按照任意的次序嵌套使用。
下面仪考虑表达式中括号的匹配关系,其他问题暂时忽略。例如,表达式[a-(b-5)*c[{}]中的括号是完全匹配的,而表达式[a-(b-5]))*c中的括号不是完全匹配的,因为“(”与“]”不能匹配,而且多了一个“)”,即缺少一个与“)”相匹配的“(”。
函数if Matched(char expr[])的功能是用栈来判断表达式中的括号是否匹配,表达式以字符串的形式存储在字符数组expr中。若表达式中的括号完全匹配,则该函数的返回值为Matched,否则返回值为Mismatched。
该函数的处理思路如下:
(1)设置一个初始为空的栈,从左至右扫描表达式。
(2)若遇上左括号,则令其入栈;若遇上右括号,则需要与栈顶的左括号进行匹配。
(3)若所遇到的右括号能与栈顶的左括号配对,则令栈顶的左括号出栈,然后继续匹配过程;否则返回Mismatched,结束判断过程。
(4)若表达式扫描结束,同时栈变为空,则说明表达式中的括号能完全匹配,返回Matched。
函数if Matched中用到了两种用户白定义数据类型BOOL和STACK,其中,BOOL类型的定义如下:
typedef enum {Mismatched, Matched} BOOL;
STACK(即栈类型)的定义省略,栈的基本操作的函数原型说明如下:
void InitStack(STACK*S):初始化一个空栈。
void Push(STACK*S. char e):将一个字符压栈,栈中元素数目增1。
void Pop(STACK*S):栈顶元素出栈,栈中元素数目减1。
char Top(STACK S):返回非空栈S的栈顶元素值,栈中元素数目不变。
int IsEmpty(STACK S):若S是空栈,则返回1,否则返回0。
[C函数]
BOOL ifMatched(char expr[])
{
char *cptr; /*cptr指向表达式中的字符*/
STACK S;
char e;
InitStack(&S); /*构造一个空栈*/
for(cptr=expr; *cptr!=’\0’ (1) ){
if(*cptr==’(’ || *cptr==’[’ || *cptr==’(’)
(2) ;
else
if(*cptr==’)’ || *cptr==’]’ || *cptr==’)’){
if(IsEmpty(S))
return Mismatched;
e= (3) ;/*取栈顶的左括号*/
if (*cptr==’)’ && e!=’(’ ) return Mismatched;
if(*cptr==’]’ &&e!=’[’) return Mismatched;
if (*cptr==’)’ &&e!=’{’ ) return Mismatched;
(4) ;/*栈顶的左括号出栈*/
}
}
if( (5) )return Matched;
return Mismatched;
}
选项
答案
cptr++ 或 ++cptr 或 cptr+=1 或 cptr=cptr+1 Push(&S,*cptr) Top(S) Pop(&S) IsEmpty(S)
解析
本题考查C程序设计基本能力。
由于已经将表达式以字符串的形式存入字符数组expr,因此指针cptr就用于指示表达式中的每个字符。显然,以下for语句用于扫描expr中的每个字符:
for(cptr=expr; *cptr!=’\0’; (1) )
因此,空(1)处应填入cptr++或其等价形式。
空(2)处进行处理的前提是遇到了左括号,因此,根据题目中对函数if Matched的处理思路描述,这时应进行压栈操作,即应填入Push(&S,*cptr),这里要注意函数调用时实参的形式。
由于弹栈操作不能返回栈顶元素,因此根据注释,空(3)处需要读取栈项元素,即应填入Top(S),空(4)处填入Pop(&S)。
由于表达式扫描结束且同时栈变为空,才说明表达式中的括号能完全匹配,因此,for语句的条件表达式*cptr!=’\0’不成立时表达式结束,此时控制流可以到达空(5)所在语句,在此需要判断栈的状态来决定括号是否完全匹配,即空(5)处应填入IsEmpty(S)。
转载请注明原文地址:https://kaotiyun.com/show/86jZ777K
本试题收录于:
程序员下午应用技术考试题库软考初级分类
0
程序员下午应用技术考试
软考初级
相关试题推荐
鼠标指针的形状取决于它所在的位置以及与其他屏幕元素的相互关系。在文字处理的文本区域,指针就像(),指向当前待插入字符的位置。
企业信息化总体架构的核心部分包括业务架构、信息架构、应用架构和技术架构四个部分,其中面向最终用户的是()。
某计算机房夏季的环境温度要求控制在28℃至32℃,该范围可简写为______。
某村领导要求信息处理技术员估计该村一池塘中的鱼的大致数量。该技术员想出了一个办法:先从池塘中捕出30条鱼,在每条鱼身上做一记号后,又放回池塘。几天后,再从该池塘中捕出40条鱼,发现其中有2条是有记号的。因此,他估计该池塘鱼的数量大致为(68)条(假设这几天
在Windows系统的资源管理器中,文件和文件夹可以采用多种形式显示,但不能以(40)形式显示。
在Windows7中,若删除桌面上某个应用程序的快捷方式图标,则(31)。
为了调查某学校3000名学生的身高,抽取了100名学生进行身高测量,以下叙述中正确的是(23)。
在Excel中,设单元格A1中的值为80,B1中的值为35,若在C1单元格中输入函数“=IF(AND(A1>=60,B1>=60),“不及格”,“补考”)”,按回车键后,C1单元格中的值为()。
计算机在接通电源后,系统首先由(41)程序对内部每个设备进行测试。
阅读以下有关传统局域网络运行和维护的叙述,将应填入(n)处的字句写在答题纸的对应栏内。在对网络运行及维护前首先要了解网络,包括识别网络对象的硬件情况、判别局域网的拓扑结构和信道访问方式、确定网络互联以及用户负载等。常见的3种拓扑结构是星型、
随机试题
A.狮子头B.蚯蚓头C.云锦状花纹D.紧皮细纹珍珠须E.马头蛇尾瓦楞身党参根顶端具有的瘤状茎残基鉴定术语为
在Makefile中也能引用Shell变量和环境变量。()
阅读下面的诗歌,回答问题溪居即事崔道融篱外谁家不系船,春风吹入钓鱼湾。小童疑是有村客,急向柴门去却关。【注】却关:拉开门闩开门。“溪居”景象有什么特点?全诗
黄疸病中出现最早,消退最晚的是
下列市场中,属于货币市场的有()。
某公司原有设备一套,购置成本为15万元,预计使用1年,已使用5年,原有设备技术已经落后,该公司用直线法提取折旧,预计残值只有原值的10%。为提高生产率,降低成本,现该公司拟购买一套新设备,新设备购置成本为20万元,使用年限为5年,同样用直线法提取折旧,预
根据专利法律制度的规定,下列各项中,不能授予专利权的有()。(2010年试题)
Formorethantwodecades,U.S.courtshavebeenlimitingaffirmative-actionprogramsinuniversitiesandotherareas.Thelegal
Ifyouareworriedaboutthingsandareunderalotofstressatworkorschool,thenyouareprobablynotsleepingwell.Worry
Thefirstandmostimportantagentsofsocializationarethepeoplewhocareforinfants.Intheearliestmonths,messagesfrom
最新回复
(
0
)