[试题]

试题四(共 15 分)

阅读以下说明和 C 函数,将应填入 (n) 处的字句写在答题纸的对应栏内。

[说明]

计算机在处理算术表达式时,首先将其转换为后缀表达式。例如,表达式

“46+5*(120-37)”的后缀表达式形式为“46 5 120 37 - * +” 。

计算后缀表达式时,从左至右扫描后缀表达式:若遇到运算对象,则压入栈中;遇到运算符,则从栈中弹出相关运算对象进行计算,并将运算结果压入栈中,重复以上过程,直到后缀表达式扫描结束。例如,后缀表达式“46 5 120 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(STACK s):若s 是空栈,则返回1 否则返回 0。

[C 函数]

int computing(char expr[], int *result)

{

STACK s; int tnum, a,b; char *ptr;

InitStack(&s);

ptr = expr; /*字符指针指向后缀表达式串的第一个字符*/

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;

}

}

参考答案与解析:

相关试题

试题二(共 15分) 阅读以下说明和C函数,将应填入 (n) 处的字句写在答题纸

[试题]试题二(共 15分)阅读以下说明和C函数,将应填入 (n) 处的字句写在答题纸的对应栏内。(说明 1)函数Counter(int n, int w[])的功能是计算整数n的二进制表示形式中1的个数,同时用数组w记录该二进制数中1所在位置的权。例如,十进制数22的二进制表示为10110。对于该二进制数,1的个数为3,在w[0]中存入2(即21)、w[1]中存入4(即22)、w[2]中存入16(即24)。(C函数 1)int Counter(int n, int w[]){ int i = 0, k

  • 查看答案
  • 试题二(共 15 分) 阅读以下说明和 C 程序,将应填入 (n) 处的字句写在

    [试题]试题二(共 15 分)阅读以下说明和 C 程序,将应填入 (n) 处的字句写在答题纸的对应栏内。[说明]下面的程序按照以下规则输出给定名词的复数形式:a. 若名词以“y”结尾,则删除 y 并添加“ies” ;b. 若名词以“s” 、 “ch”或“sh”结尾,则添加“es” ;c. 其他所有情况,直接添加“s” 。[C 程序]#include <stdio.h>#include <string.h>char *plural(char *word){int n;char *ps

  • 查看答案
  • 试题二(共15分)阅读以下说明和C 函数,将应填入(n) 处的字句写在答题纸的对

    [试题]试题二(共15分)阅读以下说明和C 函数,将应填入(n) 处的字句写在答题纸的对应栏内。[说明]某单位准备进行一次选举,对指定的n 名(n<80)候选人进行投票。为了简化选举工作,事先印制了写有这n 名候选人姓名的选票,投票者只需将选中者名下的圆圈涂黑即可。规定每张选票上被涂黑的圆圈数不得超过3 个,也不得少于1 个,否则视为无效选票。投票结束后,所有选票经计算机扫描处理,形成了描述选票状态的文本文件。例如,n=8 时所形成的文件如下:0101100010010100100110001111

  • 查看答案
  • 试题二(共 15 分) 阅读以下说明和 C 语言函数,将应填入 (n) 处的字句

    [试题]试题二(共 15 分)阅读以下说明和 C 语言函数,将应填入 (n) 处的字句写在答题纸的对应栏内。[说明]已知 1900 年 1 月 1 日是星期一,下面的函数 count_5_13(int year)用于计算给定的年份 year中有几个“黑色星期五” 。 “黑色星期五”指既是 13 日又是星期五的日期。函数 count_5_13(int year)首先算出年份 year 的1月 13 日是星期几,然后依次计算每个月的 13 日是星期几,若是星期五,则计数。程序中使用了函数 isLeapYear

  • 查看答案
  • 试题六(共 15分) 阅读以下说明和Java代码,将应填入 (n) 处的字句写在

    [试题]试题六(共 15分)阅读以下说明和Java代码,将应填入 (n) 处的字句写在答题纸的对应栏内。(说明)已知类 LinkedList 表示列表类,该类具有四个方法:addElement()、lastElement()、umberOfElement()以及removeLastElement()。四个方法的含义分别为:void addElement(Object): 在列表尾部添加一个对象;Object lastElement(): 返回列表尾部对象;int numberOfElement(): 返回

  • 查看答案
  • 试题四(共15分) 阅读下列说明和c代码,将应填入(n)处的字句写在答题纸的对应

    [主观题]试题四(共15分)阅读下列说明和c代码,将应填入(n)处的字句写在答题纸的对应栏内。(说明)设某一机器由n个部件组成,每一个部件都可以从m个不同的供应商处购得。供应商j供应的部件i具有重量Wij和价格Cij。设计一个算法,求解总价格不超过上限cc的最小重量的机器组成。采用回溯法来求解该问题:首先定义解空间。解空间由长度为n的向量组成,其中每个分量取值来自集合{l,2,…,m},将解空间用树形结构表示。接着从根结点开始,以深度优先的方式搜索整个解空间。从根结点开始,根结点成为活结点,同时也成为当前

  • 查看答案
  • 试题八(共15分)阅读以下说明和Java程序代码,将应填入(n) 处的字句写在答

    [试题]试题八(共15分)阅读以下说明和Java程序代码,将应填入(n) 处的字句写在答题纸的对应栏内。[说明]在下面的 Java 程序代码中,类SalesTicket 能够完成打印票据正文的功能,类HeadDecorator 与FootDecorator 分别完成打印票据的台头和脚注的功能。已知该程序运行后的输出结果如下所示,请填补该程序代码中的空缺。这是票据的台头!这是票据正文!这是票据的脚注!------------------------这是票据的台头!这是票据的脚注![Java程序代码]publ

  • 查看答案
  • 试题三(共 15 分) 阅读以下说明和 C 语言程序,将应填入 (n) 处的字句

    [试题]试题三(共 15 分)阅读以下说明和 C 语言程序,将应填入 (n) 处的字句写在答题纸的对应栏内。[说明]某电信公司记录了每个用户的详细通话情况(每次通话数据记录在一行) ,现将某用户某月的通话数据存入一个文本文件“dial.txt” ,其数据格式如下:拨入或拨出标记 通话开始时间 通话结束时间 对方号码注 1:数据字段以一个空格作为分隔符。注 2:拨入和拨出标记均为小写字母。拨入标记为“i”,表示其他用户呼叫本机,本机用户不需付费;拨出标记为“o” ,表示本机呼叫其他用户,此时本机用户需要付费

  • 查看答案
  • 试题五(共 15分) 阅读以下说明和C£«£«代码,将应填入 (n) 处的字句写

    [试题]试题五(共 15分)阅读以下说明和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。(说明)已知类 LinkedList 表示列表类,该类具有四个方法:addElement()、lastElement()、numberOfElement()以及removeLastElement()。四个方法的含义分别为:void addElement(Object): 在列表尾部添加一个对象;Object lastElement(): 返回列表尾部对象;int numberOfElement(): 返回

  • 查看答案
  • 试题五(共 15分) 阅读以下说明和C£«£«代码,将应填入 (n) 处的字句写

    [试题]试题五(共 15分)阅读以下说明和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。(说明)已知类 LinkedList 表示列表类,该类具有四个方法:addElement()、lastElement()、umberOfElement()以及removeLastElement()。四个方法的含义分别为:void addElement(Object): 在列表尾部添加一个对象;Object lastElement(): 返回列表尾部对象;int numberOfElement(): 返回列

  • 查看答案
  • 试题四(共 15 分) 阅读以下说明和 C 函数,将应填入 (n) 处的字句写在