入栈出栈的问题

来源:百度知道 编辑:UC知道 时间:2024/06/05 14:59:42
如果进栈序列为el,e2,e3,e4,则可能的出栈序列是
A)e3,el,e4,e2
B)e2,e4,e3,el
C)e3,e4,e1,e2
D)任意顺序

答案是B

(27)有以下函数定义:
??void fun(int n, double x) { …… }
??若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是
??A)fun(int y,double m); B)k=fun(10,12.5);
??C)fun(x,n); D)void fun(n,x);
答案C

(28)有以下程序
??void fun(char *a, char *b)
??{ a=b; (*a)++; }
??main()
??{ char c1='A',c2='a',*p1,*p2;
??p1=&c1; p2=&c2; fun(p1,p2);
??printf("%c%c\n",c1,c2);
??}
??程序运行后的输出结果是
??A)Ab B)aa C)Aa D)Bb
答案A

(44)有以下程序
??#include
??main()
??{ char str[][20]={"Hello","Beijing"},*p=str;
??printf("%d\n",strlen(p+20));
??}
??程序运行后的输出结果是
??A)0 B)5 C)7 D)20
答案是C

(9)以下程序运行后的输出结果是_________ 。
??main()
??{ int i,m=0,n=0,k=0;
??for(

兄弟,这些题不难!
先说第一个。
我们知道栈的原则是先进后出,进栈序列为el,e2,e3,e4,不是说一次性进入的,而是先进了el,e2,这时候出栈的话一定出e2,然后e3,e4又进栈,这时候出栈顺序就是e4,e3,el 了,那么总的出栈顺序就是e2,e4,e3,el 了。

第二个也简单。A)fun(int y,double m); 是错的,调用函数时不能写上int和double;

B)k=fun(10,12.5); 是错的,既然定义了函数是void,也就是无返回,就不可能将返回值赋给k;D)void fun(n,x); 是错的,去掉void。

再回答第三个;
void fun(char *a, char *b)
??{ a=b; (*a)++; }
??main()
??{ char c1='A',c2='a',*p1,*p2;
??p1=&c1; p2=&c2; fun(p1,p2);
??printf("%c%c\n",c1,c2);
??}

主函数中,p1指向了变量c1,p2指向了变量c2,
fun函数的功能是将指针b的内容赋给指针a,也就是说a和b都指向了同一个变量,然后(*a)++将所指向的变量值加1;将p1,p2传入函数后,p1也指向了p2指向的变量c2,然后将变量c2的值加1,也就是‘a’加1,成为‘b’,而变量c1值不变,所以输出了Ab;

再看这个题:

{ char str[][20]={"Hello","Beijing"},*p=str;
??printf("%d\n",strlen(p+20));
??}
首先,你可能写错了一个地方,在vc上你贴的程序通不过编译,如果改成"},*p=str[0],就对了,答案是C。原因是:虽然hello和Beijing长度不到20,但是str的每一行仍然有20个字符空间,这两行在内存中实际上是