08年上半年软考程序员考试下午试题

发布时间:2012-07-19 共12页

试题四(共 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 

2008年上半年  程序员 下午试卷 第 5 页 (共 12 页) 

百分百考试网 考试宝典

立即免费试用