2、经过以下运算后, x的值是 _______。 InitStack (s); Push(s, 'a'); Push(s, 'b'); Pop(s, x); GetTop(s,x)A.aB.bC.1D.0

题目

2、经过以下运算后, x的值是 _______。 InitStack (s); Push(s, 'a'); Push(s, 'b'); Pop(s, x); GetTop(s,x)

A.a

B.b

C.1

D.0


相似考题

3.试题四(共 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;}elseif (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;}}elsereturn -1;ptr++; /*字符指针指向下一字符*/} /* while */if (IsEmpty(s)) return -1;else {(5) = Top(s); Pop(&s); /*取运算结果*/if (!IsEmpty(s)) return -1;return 0;}}

更多“2、经过以下运算后, x的值是 _______。 InitStack (s); Push(s, 'a'); Push(s, 'b'); Pop(s, x); GetTop(s,x)”相关问题
  • 第1题:

    阅读下列程序,并给出运行结果

    SET,FALK OFF

    CLEAR

    STORE 0 T0 X,Y,S1,S2,S3

    D0 WHILE X<1O

    X=X +l

    DO CASE

    CASE INT(X/2)=X/2

    S1:SI+X/2

    CASE MOD(XJ 3)=0

    S2=S2+X/3

    CASE INT(X/2)<>X/2

    S3=S3+1

    ENDCASE

    ENDDO

    ?S1,S2,S3

    SET TALK 0N

    RETURN

    运行以上程序后,屏幕显示【 】。


    正确答案:15.0000 4.0000 3
    15.0000 4.0000 3

  • 第2题:

    经过下列栈的操作后,GetTop(ST)的值是()。InitStack(ST);push(ST,'a');push(ST,'b');pop(ST,x);

    A、A

    B、B

    C、1

    D、2


    参考答案:A

  • 第3题:

    在以下栈的基本运算中,不是加()

    AlnitStack(S)

    BPush(S,X)

    CPop(S)

    Dempty(S)


    参考答案:D

  • 第4题:

    一个栈(Stack)对象有三种状态:S1——栈空;S2——栈非空也非满;S3——栈满。则各个状态的条件如下:

    S1:(t0)创建栈对象时初始化,这是系统做的

    (t1)在S2状态下执行置空运算setEmpty()

    (t2)在S3状态下执行置空运算setEmpty()

    (t3)在S2状态下执行出栈运算Pop()

    S2:(t4)在S1状态下执行进栈运算Push()

    (t5)在S3状态下执行出栈运算Pop()

    S3:(t6)在S2状态下执行进栈运算Push()

    为简化问题,假设栈Stack的容量为2,栈元素的数据类型为整数。

    根据题意,画出栈对象的状态迁移图;


    正确答案:根据题意状态转换图如下:
    根据题意,状态转换图如下:

  • 第5题:

    【程序】

    SET TALK OFF

    CLEAR

    STORE 0 TO X,S1,S2,S3

    DO WHILE X<15

    X=X+1

    DO CASE

    CASEINT(X/2)=X/2

    S1=S1+X/2

    CASE MOD(X,3)=0

    S2=S2+X/3

    CASE INT(X/2)<>X/2

    S3=S3+1

    ENDCASE

    ENDDO

    ? X,S1,S2,S3

    SET TALK ON

    RETURN

    X的输出结果为 ______。

    A.0

    B.14

    C.15

    D.16


    正确答案:C
    解析:当X=15时,不再执行DO WHILE/ENDDO循环。

  • 第6题:

    有如下程序:include using namespace std;class Stack {public: Stack(unsigned n= 1

    有如下程序: #include <iostream> using namespace std; class Stack { public: Stack(unsigned n= 10):size(n) {rep_=ew int[size]; top=0;} Stack(Stack& s):size(s.size) { rep_=new int[size]; for(int i=0;i<size;i++) rep_[i]=s.rep_[i]; top=s.top; } ~Stack() {delete[]rep_;} void push(int a) {rep_[top]=a; top++;} int pop() {--top;return rep_[top];} bool isEmpty() const {return top==0;} private: int *rep_; unsigned size,top; }; int main() { Stack s1; for(int i= 1;i<5 ;i++) s1. push(i); Stack s2(s1); for(i= 1 ;i<3;i++) cout<<s2.pop()<<','; s2.push(6); si.push(7); while(!s2.isEmpty()) cout<<s2.pop()<<','; return 0; }执行上面程序的输出是______ 。

    A.4,3,2,1,

    B.4,3,6,7,2,1,

    C.4,3,6,2,1,

    D.1,2,3,4,


    正确答案:C
    解析:栈是“先进后出”的数据结构。

  • 第7题:

    有如下程序:include using namespace std;class Stack{public:Stack(unsigned n=10

    有如下程序: #include <iostream.h> using namespace std; class Stack { public: Stack(unsigned n=10):size(n){rep_=new int [size]; top=0;} Stack(Stack&s): size (s.size) { rep_=new int[size]; for (int i=0;i<size;i++) rep_[i]=s.rep_[i]; top=s.top; } ~Stack(){delete[]rep_;} void push(int a){rep_[top]=a; top++;} int pop(){--top; return rep_[top];} bool isEmpty() const {return top ==0;} private: int*rep_; unsigned size, top; }; int main() { Stack s1; for(int i=1;i<5;i++) sl.push(i); Stack s2(s1); for (int i=1;i<3;i++) cout<<s2.pop()<<','; s2.push(6); s1.push(7); while(!s2.isEmpty()) cout<<s2.pop()<<','; return 0; } 执行上面程序将输出( )。

    A.4,3,2,1,

    B.4,3,6,7,2,1,

    C.4,3,6,2,1,

    D.1,2,3,4,


    正确答案:C
    解析:此题综合考查了类与对象、循环语句、指针等知识点。在主函数main中,先定义了类Stack的对象s1,通过循环将1、2、3、4压入堆栈内;然后定义对象s2,并用对象s1来初始化,所以s2的大小也是10。第二个循环将4、3弹出并输出,然后将6压入s2的堆栈,然后将s2中剩下的值全部弹出,即6、2、1。

  • 第8题:

    设输入元素的顺序为1,2,3,4,5,要在栈S的输出端得到序列4.3.5.2.1,则进行的操作用栈的基本运算表示应为push(S,1),push(S,2),push(S,3),push(S,4),pop(S),(),pop(S),pop(S),pop(S)。


    正确答案:pop(s),push(s,5)

  • 第9题:

    设输入元素的顺序为1、2、3、4、5,要在栈S的输出端得到43521,则应进行栈的基本运算表示应为:push(S,1),push(S,2),push(S,3),push(S,4),pop(S),(),pop(S),pop(S),pop(S)。


    正确答案:pop(s),push(s,5)

  • 第10题:

    经过下列栈的运算后EmptyStack(s)的值是() InitStack(s);Push(s,a);Push(s,b);Pop(s,x);Pop(s,x) ;

    • A、a
    • B、b
    • C、1
    • D、0

    正确答案:C

  • 第11题:

    单选题
    设栈S的初始状态为空,现有五个元素组成的序列1,2,3,4,5,对该序列在栈S上依次进行PUSH,PUSH,POP,PUSH,POP,PUSH,PUSH操作,出栈的元素序列是()。
    A

    5,4,3,2,1

    B

    2,1

    C

    2,3

    D

    3,4


    正确答案: B
    解析: 暂无解析

  • 第12题:

    填空题
    设元素1,2,3,4,5依次进栈,若要在输出端得到序列34251。则应进行的操作序列为push(S,1); push(S,2);(); pop(S); push(S,4); pop(S);(); (); pop(S); pop(S)。

    正确答案: push(S,3),pop(S),push(S,5)
    解析: 暂无解析

  • 第13题:

    若x(t)的拉普拉斯变换为X(s),且各阶导数(含零阶)的初始值均为零,则x(t)的一阶导数的拉普拉斯变换为()。

    A、X(s)

    B、S2X(s)

    C、sX(s)

    D、S3X(s)


    参考答案:C

  • 第14题:

    POP(PUSH(S,A))的运算步骤是首先将元素A压入栈中,若栈S满,出现上溢现象,否则将元素A压入栈顶,且元素个数加1,然后做POP(S)运算,将栈顶元素弹出,且元素个数减一。( )

    此题为判断题(对,错)。


    正确答案: 正确

  • 第15题:

    设s="Visual Basic Programming",则以下使变量x的值为“Basic”的语句是

    A.x=Left(s,6)

    B.x=Mid(s,6)

    C.x=Right(s,6)

    D.x=Mid(s,8,6)


    正确答案:D
    解析:Left(s,6)表示从字符串变量s的左边读取6个字符;Mid(s,6)表示从s的第6个位置读取右边余下的字符:Right(s,6)表示从s的右边读取6个字符;Mid(s,8,6)表示从s的第8个位置读取6个字符。满足题意的是选项D。

  • 第16题:

    下列程序执行后,变量S的值为 Dim s As Long,x As Integer s=0 For x=1 To 10 Step 2 s=s+x Next x Text1.Text=s

    A.10

    B.25

    C.50

    D.100


    正确答案:B
    解析:因为步长为2,故循环一共执行了5次。x=1时,执行s=s+x得s为1;x=3时,执行s=s+x即s=1+3(注意:此时的s是上次执行的结果值),故此时s为4;同理在x=5时,执行s=s+x得s为9;x=7时,执行s=s+x得s为16;x=9时,执行s=s +x得s为25;故最终变量s的值为25。

  • 第17题:

    下列程序执行后,变量S的值为______ 。 Dim s As Long,X As Integer s=0 X=1 Do While x<10 s= s+ x x=x+2 Loop Print s

    A. 10

    B.25

    C.50

    D.100


    正确答案:B

  • 第18题:

    堆栈s进行下列操作:push(1);push(2);pop();pop();后,此时的栈顶元素为( )。

    A.1

    B.2

    C.0

    D.不确定


    正确答案:D
    解析:对栈s进行两次push操作后,又进行了两次pop操作,即刚才压入的数已经弹出,此时的栈顶元素为不确定。

  • 第19题:

    阅读以下说明和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”。 该题目还考查了参数传递知识,因此考生应通过上机实践加强基本概念的理解和程序设计能力的培养。

  • 第20题:

    设栈S的初始状态为空,现有五个元素组成的序列1,2,3,4,5,对该序列在栈S上依次进行PUSH,PUSH,POP,PUSH,POP,PUSH,PUSH操作,出栈的元素序列是()。

    • A、5,4,3,2,1
    • B、2,1
    • C、2,3
    • D、3,4

    正确答案:C

  • 第21题:

    设元素1,2,3,4,5依次进栈,若要在输出端得到序列34251。则应进行的操作序列为push(S,1); push(S,2);(); pop(S); push(S,4); pop(S);(); (); pop(S); pop(S)。


    正确答案:push(S,3);pop(S);push(S,5)

  • 第22题:

    填空题
    设输入元素的顺序为1,2,3,4,5,要在栈S的输出端得到序列4.3.5.2.1,则进行的操作用栈的基本运算表示应为push(S,1),push(S,2),push(S,3),push(S,4),pop(S),(),pop(S),pop(S),pop(S)。

    正确答案: pop(s),push(s,5)
    解析: 暂无解析

  • 第23题:

    填空题
    设输入元素的顺序为1、2、3、4、5,要在栈S的输出端得到43521,则应进行栈的基本运算表示应为:push(S,1),push(S,2),push(S,3),push(S,4),pop(S),(),pop(S),pop(S),pop(S)。

    正确答案: pop(s),push(s,5)
    解析: 暂无解析

  • 第24题:

    单选题
    经过下列栈的运算后EmptyStack(s)的值是() InitStack(s);Push(s,a);Push(s,b);Pop(s,x);Pop(s,x) ;
    A

    a

    B

    b

    C

    1

    D

    0


    正确答案: A
    解析: 暂无解析