问答题

【说明】
本流程图是将中缀表示的算术表达式转换成后缀表示。如中缀表达式
(A-(B*C+D)*E)/(F+G))
的后缀表示为
ABC*D+E*-FG+/
为了方便,假定变量名为单个英文字母,运算符只有+、-、*、/(均为双目运算符,左结合),并假定所提供的算术表达是非空且语法是正确的。另外,中缀表示形式中无空格符,但整个算术表达式以空格符结束。流程图中使用的符号的意义如下:
数组 IN[]存储中缀表达式;
数组 POLISH[]存储其后缀表达式;
数组 S[]是一个后进先出栈;
函数PRIOR(CHAR)返回符号CHAR的优先级,各符号的优先级见表2:
表2
CHAR PRIOR(XHAR)
*/
+ -
(
)
4
3
2
1

1. 【问题1】
填充流程图中①的判断条件。

【参考答案】

PRIOR(IN[i]):PRIOR(S[p])
热门 试题

问答题
【说明】 “背包问题”的基本描述是:有一个背包,能盛放的物品总重量为S,设有N件物品,其重量分别为w1;w2,……,wn,希望从N件物品中选择若干件物品,所选物品的重量之和恰能放入该背包,即所选物品的重量之和等于S。 如下程序均能求得“背包问题”的一组解,其中程序4.1是“背包问题”的递归解法,而程序4.2是“背包问题”的非递归解法。 【程序4.1】 #include<stdio.h> #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( NO! n ); 【程序4.2】 #include<stdio.h> #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=|;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; elsex.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;