1、国家二级 C 语言机试(编译预处理和指针)模拟试卷 7 及答案解析(总分:56.00,做题时间:90 分钟)一、选择题(总题数:28,分数:56.00)1.有以下程序: #includestdioh void main() void fun(char*c) char s81; while(*c) gets(s);fun(s);puts(s); if(*c=a&*c=z)*c=*c(aA); c+: 当执行程序时从键盘上输入 Hello Beijing回车,则程序的输出结果是(分数:2.00)A.HELLO BEIJINGB.Hello BeijingC.hello BeijingD.hELLO
2、 Beijing2.有以下程序 #includestdioh void f(int*p,int*q) void f(int*p,int*q); main() p=p+1;*q=*q+1; int m=1,n=2,*r=&m; f(r,&n);printf(“d,d“,m,n); 程序运行后的输出结果是(分数:2.00)A.2,3B.1,3C.1,4D.1,23.有以下程序 #includestdioh main() void fun(int*a,int*b) int x=3,y=5,*p=&x,*q=&y; int*c; fun(p,q);printf(“d,d,“,*p,*q); c=a;a
3、=b;b=c; fun(&x,&y);printf(“d,dn“,*p,*q);程序运行后的输出结果是(分数:2.00)A.3,5,5,3B.3,5,3,5C.5,3,3,5D.5,3,5,34.有下列程序: void f(int b) int I; for(i=2;i6;i+)bi*=2; main() int a10=1,2,3,4,5,6,7,8,9,10,i; f(a); for(i=0;i10,i+)printf(“d,“,ai);程序运行后的输出结果是(分数:2.00)A.1,2,3,4,5,6,7,8,9,10,B.1,2,3,4,10,12,14,16,9,10,C.1,2,6
4、,8,10,12,7,8,9,10,D.1,2,6,8,10,12,14,16,9,10,5.有以下程序 #includestdioh int fun(char s) main() int n=0; char s10=6,1,*,4,*,9,*,0,*; while(*s=9&*s=0) printf(“dn“,fun(s); n=10*n+*s0;s+; return(n);程序的运行结果是(分数:2.00)A.61490B.61C.9D.56.若有以下程序 #includestdioh void sp(int*a) int b=2; main()int k=3,*p=k; a=&b; sp
5、(p); *a=*a*2; printf(“d,dn“,k,*p); printf(“d,“,*a); 则程序的输出结果是(分数:2.00)A.4,3,4B.4,3,3C.6,3,6D.6,6,67.若有以下程序 #includestdioh int k=7: void f(int*s)int*t=&k; *s=t: printf(“d,d,d,“,k,*t,*s); main()int i=3, *p=&i,*r=&p; f(r);printf(“d,d,dn“,i,*p,*r);则程序的输出结果是(分数:2.00)A.3,7,7,7,7,7B.7,7,7,3,3,3C.3,3,3,7,7,
6、7D.7,7,7,3,7,78.若有以下程序 #includestdioh int*f(int*s,int*t)int*k;if(*s*t) k=s;s=t;t=k; return s; main() int i=3,j=5,*p=&i,*q=&j,*r; r=f(p,q); printf(“d,d,d,d,dn“,i,j,*P,*q,*r);则程序的输出结果是(分数:2.00)A.3,5,5,3,5B.5,3,5,3,5C.5,3,3,5,5D.3,5,3,5,59.若有以下程序 #includestdioh main()int k=3; void sp(int*a)int b=2; sp(
7、&k); *a=*a*2; printf(“dn“,k); printf(“d,“,*a); a=b; *a=*a*2; pfintf(“d,“,*a);则程序的输出结果是(分数:2.00)A.6,4,6B.6,4,3C.6,12,12D.9,4,910.若有以下程序 #includestdioh int k=7,m=5; void f(int*s)int*t=&k; s=&t;*s=&m; printf(“d,d,d,“,k,*t,*s); main()int i=3,*p=&i,*r=&p; f(r); printf(“d,d,dn“,i,*P,*r);则程序的输出结果是(分数:2.00)
8、A.7,5,7,3,3,3,B.7,5,7,3,5,7,C.7,5,5,3,3,3,D.7,7,5,3,3,3,11.若有以下程序 #includestdioh int*f(int*s,int*t)int k; if(*s*t) k=*s;*s=*t;*t=k; return s; main()int i=3,j=5,*p=&i,*q=j,*r; r=f(p,q); printf(“d,d,d,d,dn“,i,j,*p,*q,*r);则程序的输出结果是(分数:2.00)A.3,5,5,3,5B.3,5,3,5,5C.5,3,5,3,5D.5,3,3,5,512.有以下程序 #includest
9、dioh int funa(int a,int b)return a+b; int funb(int a,int b)return a-b; int sss(int(*t)(),int x,int y)return(*t)(x,y); main()int x; x=sss(funa,9,3); x+=sss(funb,8,3); printf(“dn“,x);程序运行后的输出结果是(分数:2.00)A.17B.23C.24D.2213.有以下程序 void fun(int x,int y,int*c,int*d) *c=x+y;*d=xy; main()int a=4,b=3,c=0,d=0;
10、 fun(a,b,&c,&d); printf(“ddn“,c,d);程序的输出结果是(分数:2.00)A.4 3B.3 4C.7 1D.0 014.有以下程序 void fun(int*p,int*q)int t;t=*p;*p=*q;*q=t;*q=*p; main()int a=0,b=9; fun(&a,&b); printf(“ddn“,a,b);程序的输出结果是(分数:2.00)A.0 0B.9 9C.9 0D.0 915.有以下程序 char fun(char*c)if(*c=Z&*c=A) *c=Aa; return*c; main()char s81,*p=s; gets(s
11、); while(*p) *p=fun(p); putchar(*p); p+; printf(“n“);若运行时从键盘上输入 OPEN THE DOOR,程序的输出结果是(分数:2.00)A.oPEN tHE dOORB.open the doorC.OPEN THE DOORD.Open The Door16.有以下程序 void swap(char*x,char*y) main() char t; char*s1=“abc“,*s2=“123“; t=*x;*x=*y;*y=t; swap(s1,s2);printf(“s,sn“,s1,s2); 程序执行后的输出结果是(分数:2.00)
12、A.abc,123B.123,abcC.321,cbaD.1bc,a2317.有以下函数 int fun(char*x,char*y)int n=0; while(*x=*y)&*x!=0) x+;y+;n+; return n;函数的功能是(分数:2.00)A.查找 x 和 y 所指字符串中是否有0B.统计 x 和 y 所指字符串中最前面连续相同的字符个数C.将 y 所指字符串赋给 x 所指存储空间D.统计 x 和 y 所指字符串中相同的字符个数18.有以下函数 int fun(char*s)char*t=s;while(*t+);return(t-s);)该函数的功能是(分数:2.00)A
13、.比较两个字符串的大小B.计算 s 所指字符串的长度C.计算 s 所指字符串占用内存字节的个数D.将 s 所指字符串复制到字符串 t 中19.有以下程序(说明:字母 A 的 ASCII 码值是 65) void fun(char*s)while(*s) if(*s2) printf(“c“,*s);s+; main()char a=“BYTE“; fun(a);printf(“n“);程序运行后的输出结果是(分数:2.00)A.BTB.YEC.YTD.BY20.有以下程序 #includestdioh void fun(char*p) +p;printf(“sn“,*p); main() ch
14、ar*a=(“Morning“,“Afternoon“,“Evening“,“Night“); fun(a);程序的运行结果是(分数:2.00)A.fternoonB.MorningC.orningD.Afternoon21.有以下程序 void fun1(char 宰 P) main() char*q; char a=“Program“),*p; q=p; p=&a3;fun1(p);printf(“sn“,a); while(*q!=0) (*q)+;q+;程序执行后的输出结果是(分数:2.00)A.PrphsbnB.ProhsbnC.ProgsbnD.Program22.有以下程序 #i
15、ncludestdioh main() void fun(char*a,char*b) char*s=“*a*b*“,t80; while(*a=*)a+; fun(s,t);puts(t); while(*b=*a)b+;a+; 程序的运行结果是(分数:2.00)A.a*bB.*a*bC.a*b*D.ab23.下列函数的功能是 void fun(char*a,char*b)while(*b=*a)!=0)a+;b+;(分数:2.00)A.使指针 b 指向 a 所指字符串B.将 a 所指字符串和 b 所指字符串进行比较C.将 a 所指字符串赋给 b 所指空间D.检查 a 和 b 所指字符串中是
16、否有024.有以下程序 #includestdioh #includestringh void fun(char s10,int n) char t;int i,j; for(i=0;in1;i+) for(j=i+l jn;j+) if(si0sj0)t=si0;si0=sj0;sj0=t; main() char ss510=“bcc“,“bbcc“,“xy“,“aaaacc“,“aabcc“; fun(ss,5);printf(“s,sn“,ss0,ss4);程序的运行结果是(分数:2.00)A.aaaacc,xyB.bcc,aabccC.xy,aaaaccD.aabcc,bcc25.有
17、以下程序 #includestdioh main() void fun(char*t,char*s) char ss10=“acc“,aa10=“bbxxyy“; while(*t!=0)t+; fun(ss,aa);printf(“s,sn“,ss,aa); while(*t+=*s+)!=0); 程序的运行结果是(分数:2.00)A.acc,bbxxyyB.accxxyy,bbxxyyC.accbbxxyy,bbxxyyD.accxyy,bbxxyy26.有以下程序 #includestdioh #includestringh void fun(char*w,int m) char s,*
18、p1,*p2; p1=w;p2=w+m1; while(p1p2)s=*p1;*p1=*p2;*p2=s;p1+;p2-; main() char a=“123456“; fun(a,strlen(a);puts(a);(分数:2.00)A.116611B.161616C.654321D.12345627.有以下程序: #includestdioh int b=2: int fun(int*k) b=*k+b;return(b); main() int a10=1,2,3,4,5,6,7,8,i; for(i=2;i4;i+)b=fun(&ai)+b;printf(“d“5b); printf
19、(“n“):程序运行后的输出结果是(分数:2.00)A.8 10B.10 28C.10 12D.10 1628.有以下程序 #includestdioh #includestringh void fun(int*p1,int*p2,int*s) s=(int*)calloc(1,sizeof(int); *s=*p1+*p2;free(s); main() int a2=1,2,b2=40,50,*q=a; fun(a,b,q); printf(“dn“,*q);程序运行后的输出结果是(分数:2.00)A.41B.42C.0D.1国家二级 C 语言机试(编译预处理和指针)模拟试卷 7 答案解析
20、(总分:56.00,做题时间:90 分钟)一、选择题(总题数:28,分数:56.00)1.有以下程序: #includestdioh void main() void fun(char*c) char s81; while(*c) gets(s);fun(s);puts(s); if(*c=a&*c=z)*c=*c(aA); c+: 当执行程序时从键盘上输入 Hello Beijing回车,则程序的输出结果是(分数:2.00)A.HELLO BEIJING B.Hello BeijingC.hello BeijingD.hELLO Beijing解析:解析:子函数 fun 的功能是把小写字母转
21、换成大写字母,所以程序的输出结果为选项 A)。2.有以下程序 #includestdioh void f(int*p,int*q) void f(int*p,int*q); main() p=p+1;*q=*q+1; int m=1,n=2,*r=&m; f(r,&n);printf(“d,d“,m,n); 程序运行后的输出结果是(分数:2.00)A.2,3B.1,3 C.1,4D.1,2解析:解析:本题考查函数的调用与指针。fun()函数的作用是:使指针 p 指向原来所指变量的下一个变量,使 q 指针指向的值加 1。主函数中,指针 r 指向 m,调用 fun()函数的结果是,使 r 指向地址
22、位于 m后面的变量,使位丁 n 的地址上的变量(就是 n)的值加 1,因此,结果为 1,3。3.有以下程序 #includestdioh main() void fun(int*a,int*b) int x=3,y=5,*p=&x,*q=&y; int*c; fun(p,q);printf(“d,d,“,*p,*q); c=a;a=b;b=c; fun(&x,&y);printf(“d,dn“,*p,*q);程序运行后的输出结果是(分数:2.00)A.3,5,5,3B.3,5,3,5 C.5,3,3,5D.5,3,5,3解析:解析:本题考查函数的调用与指针。p 和 q 分别为指向 x 和 y
23、的指针,函数 fun()的两个形参均为指针型,主要功能为交换两个指针的指向,当调用结束以后,该操作不能返回主函数。而主函数中,fun(p,q)、fun(&x,&y)的实参均为 x 与 y 的地址,因此,两者结果相同,并且两者指针指向的值不能变化。4.有下列程序: void f(int b) int I; for(i=2;i6;i+)bi*=2; main() int a10=1,2,3,4,5,6,7,8,9,10,i; f(a); for(i=0;i10,i+)printf(“d,“,ai);程序运行后的输出结果是(分数:2.00)A.1,2,3,4,5,6,7,8,9,10,B.1,2,3
24、,4,10,12,14,16,9,10,C.1,2,6,8,10,12,7,8,9,10, D.1,2,6,8,10,12,14,16,9,10,解析:解析:函数 void f(int b)的功能是对数组 b中第 2 个到第 5 个元素的值逐个扩大 2 倍。所以在 main()函数中,f(a)语句的作用是对数组 a10中从 a2到 a5的各个数字乘以 2,因而数组 a10的元素就变成了1,2,6,8,10,12,7,8,9,10。5.有以下程序 #includestdioh int fun(char s) main() int n=0; char s10=6,1,*,4,*,9,*,0,*;
25、while(*s=9&*s=0) printf(“dn“,fun(s); n=10*n+*s0;s+; return(n);程序的运行结果是(分数:2.00)A.61490B.61 C.9D.5解析:解析:在 fun 函数中,while 循环的功能是逐个取字符数组 s 的字符判断其是否是数字。若是则将这些数字组成一个数保存到变量 n 中,并返回变量 n 的值。所以在主函数中调用 fun(s)时,将把字符数组 s 中的数字组成一个数输出。因为当指针 s 指向数组的第 3 位时,即字符*,循环条件不成立,循环结束,返回 n 的值。所以输出 n 的值为 61。6.若有以下程序 #includestd
26、ioh void sp(int*a) int b=2; main()int k=3,*p=k; a=&b; sp(p); *a=*a*2; printf(“d,dn“,k,*p); printf(“d,“,*a); 则程序的输出结果是(分数:2.00)A.4,3,4B.4,3,3 C.6,3,6D.6,6,6解析:解析:主函数中定义指针变量 p 指向 k,调用函数 sp(p),将 k 的地址传递给形参指针 a,函数转到 sp 运行,a 指向 b 的地址,表达式*a=*a*2,相当于 b=b*2,得到*a 的数据 4 输出。函数调用结束,此时 a 和 b 的空间撤销,而对实参 k 和 p 的值并
27、没有改变,仍旧是 3。7.若有以下程序 #includestdioh int k=7: void f(int*s)int*t=&k; *s=t: printf(“d,d,d,“,k,*t,*s); main()int i=3, *p=&i,*r=&p; f(r);printf(“d,d,dn“,i,*p,*r);则程序的输出结果是(分数:2.00)A.3,7,7,7,7,7B.7,7,7,3,3,3C.3,3,3,7,7,7D.7,7,7,3,7,7 解析:解析:本题考查了二级指针,二级指针可以保存一级指针的地址。主函数中 p 指向 i,r 指向 p,函数调用后 s 指向 p,在 f 函数中
28、t 指向全局变量 k=7,s 指向 t,同时 s 保存了实参 p 的地址,此时 p 也指向 t,输出三个 7,流程转到主函数,i 的值为 3,p 以及 r 的值为 7。8.若有以下程序 #includestdioh int*f(int*s,int*t)int*k;if(*s*t) k=s;s=t;t=k; return s; main() int i=3,j=5,*p=&i,*q=&j,*r; r=f(p,q); printf(“d,d,d,d,dn“,i,j,*P,*q,*r);则程序的输出结果是(分数:2.00)A.3,5,5,3,5B.5,3,5,3,5C.5,3,3,5,5D.3,5,
29、3,5,5 解析:解析:本题考查了返回值为指针的函数,函数 f 的主要功能为第一个参数小于第二个参数,那么交换指针的指向,这对于实参指向的数据时没有影响的。最后返回比较大的元素的地址。主函数中 p 指向i,q 指向 j,调用 r=f(p,q),返回 q 的地址,因此*p=3,*q=5,*r=5。9.若有以下程序 #includestdioh main()int k=3; void sp(int*a)int b=2; sp(&k); *a=*a*2; printf(“dn“,k); printf(“d,“,*a); a=b; *a=*a*2; pfintf(“d,“,*a);则程序的输出结果是(
30、分数:2.00)A.6,4,6 B.6,4,3C.6,12,12D.9,4,9解析:解析:本题考查了指针作为函数的参数,可以接收实参变量的地址,改变实参的值。主函数调用sp(&k),执行 sp 函数 a 指向向 k,执行语句*a=*a*2 后 a 指向空间的值 k 的值为 6,改变 a 的指向以后,此时 a 指向 b,则执行*a=*a*2 以后,a 指向空间 b 的值为 4。调用结束返回主函数,输出 k 的值为 6。10.若有以下程序 #includestdioh int k=7,m=5; void f(int*s)int*t=&k; s=&t;*s=&m; printf(“d,d,d,“,k
31、,*t,*s); main()int i=3,*p=&i,*r=&p; f(r); printf(“d,d,dn“,i,*P,*r);则程序的输出结果是(分数:2.00)A.7,5,7,3,3,3,B.7,5,7,3,5,7,C.7,5,5,3,3,3, D.7,7,5,3,3,3,解析:解析:本题考查二级指针作为函数的参数,可以通过函数调用来改变主函数中一级指针的指向。主函数中指针变量 p 指向 i,r 指向 p,调用 f 函数,形参指针 s 指向 p,流程转到 f 函数执行,指针变量 t指向 k,s 指向 t,此时更改了 s 的指向,s 指向了 t,更改了 s 指向的地址空间内容为 m 的
32、地址,同时 t也指向变量 m,因此*s 的值为 m 的值,*t 为 m 的值,k 为 7。流程返回到主函数,没有对主函数空间的数据和指向作出更改,因此全部为 3。11.若有以下程序 #includestdioh int*f(int*s,int*t)int k; if(*s*t) k=*s;*s=*t;*t=k; return s; main()int i=3,j=5,*p=&i,*q=j,*r; r=f(p,q); printf(“d,d,d,d,dn“,i,j,*p,*q,*r);则程序的输出结果是(分数:2.00)A.3,5,5,3,5B.3,5,3,5,5C.5,3,5,3,5 D.5,
33、3,3,5,5解析:解析:函数 f 为返回值为指针的函数,主要功能是返回 s 和 t 指向空间值大的数据的地址,同时如何 s 指向空间数据大于 t 指向空间的数据,那么交换。主函数 p 和 q 指向 i 和 j,值为 3 和 5,j 的值大于 i 的值,因此调用函数 f 以后,返回 i 的地址,r 指向 j,同时 i 和 j 的值交换,i=5,j=3,p 和 q 的指向不变,p 指向 i,q 指向 j。12.有以下程序 #includestdioh int funa(int a,int b)return a+b; int funb(int a,int b)return a-b; int sss
34、(int(*t)(),int x,int y)return(*t)(x,y); main()int x; x=sss(funa,9,3); x+=sss(funb,8,3); printf(“dn“,x);程序运行后的输出结果是(分数:2.00)A.17 B.23C.24D.22解析:解析:函数 funa 的功能计算两个数据的和,funb 的功能计算两个数据的差,函数 sss 中利用指向函数的指针作为函数的参数,可以在调用的时候,根据接收的函数地址来决定调用那一个函数。主函数中调用 x=sss(funa,9,3),将 funa 函数的地址传递给 t,因此 sss 函数成为求两个数据的和 12,
35、继续将funb 函数地址传给 t,求两个数据差为 5,和 s 累加后结果为 17。13.有以下程序 void fun(int x,int y,int*c,int*d) *c=x+y;*d=xy; main()int a=4,b=3,c=0,d=0; fun(a,b,&c,&d); printf(“ddn“,c,d);程序的输出结果是(分数:2.00)A.4 3B.3 4C.7 1 D.0 0解析:解析:函数 fun 有四个形参,功能是利用参数的地址传递来计算前两个参数的和与差。主函数中调用 fun 函数 c 计算 4+3,d 计算 43 值为 1。14.有以下程序 void fun(int*p
36、,int*q)int t;t=*p;*p=*q;*q=t;*q=*p; main()int a=0,b=9; fun(&a,&b); printf(“ddn“,a,b);程序的输出结果是(分数:2.00)A.0 0B.9 9 C.9 0D.0 9解析:解析:函数 fun 的主要功能是交换 p 和 q 指向的地址空间的数据,然后更改 p 的指向的地址空间数据,使之和 q 指向的数据相同。主函数调用 fun 后,p 指向 a,q 指向 b,因此 a 和 b 的数据全部为 9。15.有以下程序 char fun(char*c)if(*c=Z&*c=A) *c=Aa; return*c; main()
37、char s81,*p=s; gets(s); while(*p) *p=fun(p); putchar(*p); p+; printf(“n“);若运行时从键盘上输入 OPEN THE DOOR,程序的输出结果是(分数:2.00)A.oPEN tHE dOORB.open the door C.OPEN THE DOORD.Open The Door解析:解析:函数 fun 的主要功能是判断字符是否为大写字符,如果是则转换为小写字符,主函数读入大写字符串,转换成小写。16.有以下程序 void swap(char*x,char*y) main() char t; char*s1=“abc“,
38、*s2=“123“; t=*x;*x=*y;*y=t; swap(s1,s2);printf(“s,sn“,s1,s2); 程序执行后的输出结果是(分数:2.00)A.abc,123B.123,abcC.321,cbaD.1bc,a23 解析:解析:函数 void swap(char*x,char*y)的功能是交换两个字符*x 和*y 中的内容。在主函数中字符指针 s1 指向字符串abc,s2 指向字符串123。所以函数 swap(s1,s2)的执行结果就是字符a和1相互交换。17.有以下函数 int fun(char*x,char*y)int n=0; while(*x=*y)&*x!=0)
39、 x+;y+;n+; return n;函数的功能是(分数:2.00)A.查找 x 和 y 所指字符串中是否有0B.统计 x 和 y 所指字符串中最前面连续相同的字符个数 C.将 y 所指字符串赋给 x 所指存储空间D.统计 x 和 y 所指字符串中相同的字符个数解析:解析:在 while 循环中的判断表达式为(*x=*y)&*x!=0,所以只要字符串 x 与 y 的当前字符不相等时,循环就结束。18.有以下函数 int fun(char*s)char*t=s;while(*t+);return(t-s);)该函数的功能是(分数:2.00)A.比较两个字符串的大小B.计算 s 所指字符串的长度
40、C.计算 s 所指字符串占用内存字节的个数 D.将 s 所指字符串复制到字符串 t 中解析:解析:在函数 fun(char*s)中,首先用字符指针变量 t 指向 s,而循环语句 while(*t+);的功能是使指针变量 t 指向字符串变量 s 的末尾,这时退出循环,因而语句 return(t-s);返回的就是字符串 s所指字符串的长度。19.有以下程序(说明:字母 A 的 ASCII 码值是 65) void fun(char*s)while(*s) if(*s2) printf(“c“,*s);s+; main()char a=“BYTE“; fun(a);printf(“n“);程序运行后
41、的输出结果是(分数:2.00)A.BTB.YE C.YTD.BY解析:解析:程序只输出字母 ASCII 值为奇数的字母,根据字母 B,Y,T,E 的 ASCII 值的奇偶性相应输出。20.有以下程序 #includestdioh void fun(char*p) +p;printf(“sn“,*p); main() char*a=(“Morning“,“Afternoon“,“Evening“,“Night“); fun(a);程序的运行结果是(分数:2.00)A.fternoonB.MorningC.orningD.Afternoon 解析:解析:在程序中,指针的指针变量 a 和 p 都是指
42、向字符串的指针。执行 fun(a)语句时,p 指向的是字符串数组 a 的第一个字符串“Morning”,p 自加 1 之后,*p 指向了字符串数组 a 的第 2 个字符串“Afternoon”。21.有以下程序 void fun1(char 宰 P) main() char*q; char a=“Program“),*p; q=p; p=&a3;fun1(p);printf(“sn“,a); while(*q!=0) (*q)+;q+;程序执行后的输出结果是(分数:2.00)A.PrphsbnB.Prohsbn C.ProgsbnD.Program解析:解析:在函数 void fun1(cha
43、r*p)中,语句(*q)+的功能是 q 所指的字符加 1,变成其后面的字符;q+就是指针 q 指向下一个字符的位置。所以在主函数中,语句 p=&a3的作用是使指针 p 指向字符数组a中的第四个字符的位置,即 p 指向字符g;然后调用函数 fun1(p)后,字符g变成g,字符h,变成s,字符a变成b,字符m变成n,因而字符数组 a中的内容就成“Prohsbn”。22.有以下程序 #includestdioh main() void fun(char*a,char*b) char*s=“*a*b*“,t80; while(*a=*)a+; fun(s,t);puts(t); while(*b=*a
44、)b+;a+; 程序的运行结果是(分数:2.00)A.a*bB.*a*bC.a*b* D.ab解析:解析:主函数 main()定义了指向字符串的指针和一个字符数组,接着调用 fun(s,t)函数,进行实参向形参传递,函数 fun()第一个 while 语句判断*a 中的值为“*”时继续扫描,当遇到不是“*”时结束,接着第二个 while 循环语句,将*a 中从“a”开始的后续所有字符都赋予*b,也就是 t80中的内容为“a*b*”。23.下列函数的功能是 void fun(char*a,char*b)while(*b=*a)!=0)a+;b+;(分数:2.00)A.使指针 b 指向 a 所指字
45、符串B.将 a 所指字符串和 b 所指字符串进行比较C.将 a 所指字符串赋给 b 所指空间 D.检查 a 和 b 所指字符串中是否有0解析:解析:在 while 语句的条件中是把字符*a 的值赋给字符*b,然后再判断字符*b 的值是否等于字符串的结束字符(0),当不等于结束字符(0)时,把字符指针变量 a,b 分别加 1,指它们的下一个字符,直到字符串 a 的结束。这样程序执行的结果就是把字符串 a 赋给了 b 所指的存储空间。24.有以下程序 #includestdioh #includestringh void fun(char s10,int n) char t;int i,j; fo
46、r(i=0;in1;i+) for(j=i+l jn;j+) if(si0sj0)t=si0;si0=sj0;sj0=t; main() char ss510=“bcc“,“bbcc“,“xy“,“aaaacc“,“aabcc“; fun(ss,5);printf(“s,sn“,ss0,ss4);程序的运行结果是(分数:2.00)A.aaaacc,xyB.bcc,aabccC.xy,aaaacc D.aabcc,bcc解析:解析:函数 fun(char s10,int n)通过两重 for 循环语句,比较二维字符数组 s10的每个字符串的首字符大小,如果前一个字符串首字符大于后一个字符串的首字符,则交换这两个字符串的首字符。在主函数中,语句 fun(ss,5)的作用是对二维字符数组 ss510的 5 个字符串的首字符进行从小到大的排序,不影响各个字符串另外的字符。所以排序结束后,5 个字符串的第一个字符依次变为a、a、b、b 和 x;最