首页
登录
从业资格
阅读以下说明和C函数,将应填入 (n) 处的字句写在答题纸的对应栏内。4、【
阅读以下说明和C函数,将应填入 (n) 处的字句写在答题纸的对应栏内。4、【
练习题库
2022-08-02
18
问题
阅读以下说明和C函数,将应填入 (n) 处的字句写在答题纸的对应栏内。4、【说明】 计算机在处理算术表达式时,首先将其转换为后缀表达式。例如,表达式“46+5*(120-37)”的后缀表达式形式为“46 512037-*+”。 计算后缀表达式时,从左至右扫描后缀表达式:若遇到运算对象,则压入栈中;遇,到运算符,则从栈中弹出相关运算对象进行计算,并将运算结果压入栈中。重复以上过程,直到后缀表达式扫描结束。例如,后缀表达式“46 5120 37-*+”的计算过程如下。 a.依次将46、5、120、37压入栈中; b.遇到“-”,取出37、120,计算120-37=83,将其压入栈中: c.遇到“*”,取出83、5,计算5×83=415,将其压入栈中; d.遇到“+”,取出415、46,计算46+415=461,将其压入栈中; e.表达式结束,则计算过程完成。 函数computing(char expr[],int *result)的功能是基于栈计算后缀形式的表达式(以串形式存入字符数组expr)的值,并通过参数result返回该值。函数的返回值为-1/0,分别表示表达式有/无错误。假设表达式中仅包含数字、空格和算术运算符号,其中所有项均以空格分隔,且运算符仅包含加(“+”)、减(“-”)、乘(“*”)、除(“\”)。 函数computing中所用栈的基本操作的函数原型说明如下。 · void InitStack(STACK *s):初始化栈。 · void Push(STACK,s,int e):将一个整数压栈,栈中元素数目增1。 · void Pop(STACK *s):栈顶元素出栈,栈中元素数目减1。 · int Top(STACK s):返回非空栈的栈顶元素值,栈中元素数目不变。 · int IsEmpty(STACKs):若s是空栈,则返回1;否则返回0。【C函数】 int computing (char expr[],int *result) { STACK s; int tnum,a,b; char *ptr; InitStack(&s); ptr=expr;pstr /*字符指针指向后缀表达式串的第一个字符*/ while(*ptr!='\0') { if(*ptr==' ') { /*当前字符是空格*/ (1) ; /*字符指针指向下一字符*/ continue; } else if(isdigit (*ptr)) { /*当前字符是数字,则将该数字开始的数字串转换为数值*/ tnum= (2) ; while (*ptr>='0' && *ptr <='9') { tnum=tnum * 10 + (3) ; ptr++; } Push( (4) ); } else /*当前字符是运算符或其他符号*/ if (*ptr=='+'||*ptr=='-'||*ptr=='*'||*ptr=='/'){ if(!IsEmpty(s)) { a=Top(s);Pop(&s); /*取运算符的第二个运算数*/ if(!IsEmpty(s)) { b=Top(s);Pop(&s);/*取运算符的第一个运算数*/ } else return -1; } else return -1; switch (*ptr) { case '+': Push(&s,b+a); break; case '-':Push(&s,b-a); break; case '*':Push(&s,b*a); break; case '/':Push(&s,b/a); break; } } else return -1; ptr++; /*字符指针指向下一字符*/ }/*while*/ if(IsEmpty(s)) return -1; else{ (5) =Top(s); Pop(&s); /*取运算结果*/ if(!IsEmpty(s)) return -1; return 0; } }
选项
答案
解析
(1)ptr++,或++ptr,或ptr=ptr+1,或其等价表示 (2)0,或tnum=0 (3)*ptr-'0',或*ptr-48,或其等价表示 (4)&s,tnum (5)*result
【解析】
本题考查栈结构在后缀表达式求值过程中的应用。 利用栈计算后缀表达式时,从左至右扫描后缀表达式:若遇到运算对象,则压入栈中;遇到运算符,则从栈中弹出对应数目的运算对象进行计算,并将运算结果压入栈中。重复以上过程,直到后缀表达式扫描结束,最后栈顶就是表达式的计算结果。 根据题目的说明,由于后缀表达式以字符串方式存储且以空格分隔符号(数值、算符),因此遇到空格字符时,指向表达式中字符的指针ptr应增加1指向后续字符,因此,空(1)处应填入“ptr++”或其等价形式。 下面以字符串“375”为例说明将一个数字串转换为数值的过程。 数值375=((0×10+3)×10+7)×10+5 (1)取得数字字符“3”(ASCII码值为51,字符0的ASCII码值为48)。 mum=0*10+51-48=3; (2)取得数字字符“7” (ASCII码值为55)。 tnum=3*10+55-48=37; (3)取得数字字符“5” (ASCII码值为53)。 tnum=37*10+53-48=375; 以下代码用于将一个数字字符串转换为对应的整数存入tnum,显然,tnum的初始值应为0。 tnum= (2) ; while (*ptr>='0' && *ptr <='9') { tnum=tnum*10+ (3) ; ptr++; } 因此,空(2)处应填入“0”,空(3)所在表达式将数字字符转换为数值,即空(3)处填入“*ptr-48”。 空(4)处用于将转换所得的数值tnum压入栈顶,根据题目中Push的原型“void Push(STACK *s,int e)”,调用时第一个实际参数是STACK类型变量的地址,第二个实际参数是一个整数,因此,空(4)处填入“&s,tnum”。 由于函数computing(ckar expr[],int *result)通过参数result返回该表达式的值,因此需要将存在栈顶的运算结果赋值给result指向的整型变量,即空(5)处填入“*result”。 该题目还考查了参数传递知识,因此考生应通过上机实践加强基本概念的理解和程序设计能力的培养。
转载请注明原文地址:https://tihaiku.com/congyezige/2424936.html
本试题收录于:
初级程序员题库软件水平考试初中高级分类
初级程序员
软件水平考试初中高级
相关试题推荐
函数f和g的定义如下图所示。执行函数f时需要调用函数g(a),若采用值调用方式(
函数f和g的定义如下图所示。执行函数f时需要调用函数g(a),若采用值调用方式(
调用递归过程或函数时,处理参数及返回地址需要用一种称为()的数据结构。A.队列
在Excel的A1单元格中输入函数“=ROUND(1/3,3)”,按回车键之后,
在Excel的A1单元格中输入函数“=RANDBETWEEN(1,16)”,按回
以下关于程序中函数的定义、调用和声明的叙述中,正确的是()。A.函数的定义必
已知函数f1()、f2()的定义如下图所示,如果调用函数f1时传送给形参x的值是
已知函数f1()、f2()的定义如下图所示,如果调用函数f1时传送给形参x的值是
所有在函数中定义的变量都称为()。A.全局变量 B.局部变量 C.简单变量
类的构造函数被自动调用执行的情况发生在定义该类的()时。A.成员函数 B.数据
随机试题
Mozartwasachildgenius—hewrotemusicalnotesbeforehecouldwritewords
Yourcousin,Xiaoming,isaskingyouabouttheadmissiontoyouruniversity,
Livingstandardshavesoaredduringthe21stcentury,andeconomistsexpect
IfI______toagreetoyourplan,howdoyouthinktheothercolleagueswouldf
()时装设计师()税务专员[br]()销售代表()商业银
"Blink"TechnologyA)Tiredofallthattime-consumingsw
对于假的东西,只是堵,不讲明必须堵的道理,也会有副作用,例如对于假钞,如果只是没
Thechangeinthatvillagewasmiraculou
关于B2B电子商务模式,下列说法中不正确的是()。A.交易对象集中在生活消费品
对于地层褶曲,构造应力的主作用方向与其关系表现为()。A.主作用方向与褶曲轴平行
最新回复
(
0
)