主观

●试题一

阅读以下说明和流程图(如图1所示),回答问题1至问题4,将答案写在答卷的对应栏内。

【说明】

本流程图是将中缀表示的算术表达式转换成后缀表示。如中缀表达式

(A-(B*C+D)*E)/(F+G))

的后缀表示为

ABC*D+E*-FG+/

为了方便,假定变量名为单个英文字母,运算符只有+、-、*、/(均为双目运算符,左结合),并假定所提供的算术表达是非空且语法是正确的。另外,中缀表示形式中无空格符,但整个算术表达式以空格符结束。流程图中使用的符号的意义如下:

数组IN[]存储中缀表达式;

数组POLISH[]存储其后缀表达式;

数组S[]是一个后进先出栈;

函数PRIOR(CHAR)返回符号CHAR的优先级,各符号的优先级见表2:

【问题1】

填充流程图中①的判断条件。

【问题2】

写出子程序A的功能,并顺序写出实现该功能的操作

【问题3】

写出子程序B的功能,并顺序写出实现该功能的操作。

【问题4】

中缀表达式

(A+B-C*D)*(E-F)/G

经该流程图处理后的输出是什么?

【流程图】

   图1

参考答案
您可能感兴趣的试题

●试题四

阅读下列程序说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

【程序4.1说明】

"背包问题"的基本描述是:有一个背包,能盛放的物品总重量为S,设有N件物品,其重量分别为w1,w2,...,wn,希望从N件物品中选择若干件物品,所选物品的重量之和恰能放入该背包,即所选物品的重量之和等于S。

如下程序均能求得"背包问题"的一组解,其中程序4.1是"背包问题"的递归解法,而程序4.2是"背包问题"的非递归解法。

【程序4.1】

#include

#define N 7

#define S 15

int w[N+1]={0,1,4,3,4,5,2,7};

int knap(int s,int n)

{ if(s==0)return 1;

if (s<0||(s>0& &n<1))return 0;

if( (1) )){

printf(″%4d″,w[n]);return 1;

}return (2) ;

}

main(){

if( knap(S,N))printf(″OK!\n″);

else printf(″N0!\n″);

}

【程序4.2】

#include

#define N 7

#define S 15

typedef struct {

int s;

int n:

int job;

} KNAPTP;

int w[N+1]={0,1,4,3,4,5,2,7};

int knap (int s,int n);

main( ) {

if (knap (S,N)) printf (″OK!\n″);

else printf (″NO!\n″);}

int knap (int s,int n)

{ KNAPTP stack[100],x;

int top,k,rep;

x.s=s;x.n=n;

x.job=0;

top=l;stack[top]=x;

k=0;

while( (3) ) {

x=stack [ top ];

rep=1;

while ( !k && rep ) {

if (x.s==0)k=1;/*已求得一组解*/

else if (x.s<0 || x.n<=0)rep=0;

else{x.s= (4) ;x.job=1;

 (5) =x;

}

}

if(!k){

rep=1;

while(top>=1&&rep){

x=stack[top--];

if(x.job==1){

x.s+=w[x.n+1];

x.job=2;

stack[++top]=x;

 (6) ;

}

}

}

}

if(k){/*输出一组解*/

while(top>=1){

x=stack[top--];

if(x.job==1)

printf(″%d\t″,w[x.n+1]);

}

}

return k;

}

¥

订单号:

遇到问题请联系在线客服

订单号:

遇到问题请联系在线客服