国家二级C语言机试(编译预处理和指针)模拟试卷7
(总分:56.00,做题时间:90分钟)
一、 选择题(总题数:28,分数:56.00)
1.有以下程序: #include<stdio.h> void main() void fun(char*c) {char s[81]; {while(*c) gets(s);fun(s);puts(s); {if(*c>='a'&&*c<='z')*c=*c-('a'-'A'); } c++: }} 当执行程序时从键盘上输入Hello Beijing<回车>,则程序的输出结果是
(分数:2.00)
A.HELLO BEIJING √
B.Hello Beijing
C.hello Beijing
D.hELLO Beijing
解析:解析:子函数fun的功能是把小写字母转换成大写字母,所以程序的输出结果为选项A)。
2.有以下程序 #include<stdio.h> 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,3
B.1,3 √
C.1,4
D.1,2
解析:解析:本题考查函数的调用与指针。fun()函数的作用是:使指针p指向原来所指变量的下一个变量,使q指针指向的值加1。主函数中,指针r指向m,调用fun()函数的结果是,使
r指向地址位于m后面的变量,使位丁n的地址上的变量(就是n)的值加1,因此,结果为1,3。
3.有以下程序 #include<stdio.h> 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,%d\n",*p,*q);}程序运行后的输出结果是
(分数:2.00)
A.3,5,5,3
B.3,5,3,5 √
C.5,3,3,5
D.5,3,5,3
解析:解析:本题考查函数的调用与指针。p和q分别为指向x和y的指针,函数fun()的两个形参均为指针型,主要功能为交换两个指针的指向,当调用结束以后,该操作不能返回主函数。
而主函数中,fun(p,q)、fun(&x,&y)的实参均为x与y的地址,因此,两者结果相同,并且两者指针指向的值不能变化。
4.有下列程序: void f(int b[]) {int I; for(i=2;i<6;i++)b[i]*=2;} main() {int a[10]={1,2,3,4,5,6,7,8,9,10},i; f(a); for(i=0;i<10,i++)printf("%d,",a[i]);}程序运行后的输出结果是
(分数: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,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)语句的作用是对数组a[10]中从a[2]到a[5]的各个数字乘以2,因而数
组a[10]的元素就变成了{1,2,6,8,10,12,7,8,9,10}。
5.有以下程序 #include<stdio.h> int fun(char s[]) main() {int n==0; {char s[10]={'6','1','*','4','*','9','*','0','*'}; while(*s<='9'&&*s>='0') printf("%d\n",fun(s)); {n=10*n+*s-'0';s++;} } return(n);}程序的运行结果是
(分数:2.00)
A.61490
B.61 √
C.9
D.5
解析:解析:在fun函数中,while循环的功能是逐个取字符数组s的字符判断其是否是数字。若是则将这些数字组成一个数保存到变量n中,并返回变量n的值。所以在主函数中调用fun(s)时,将把字符数组s中的数字组成一个数输出。因为当指针s指向数组的第3位时,即字
符'*',循环条件不成立,循环结束,返回n的值。所以输出n的值为61。
6.若有以下程序 #include<stdio.h> void sp(int*a){ int b=2; main(){int k=3,*p=&k; a=&b; sp(p); *a=*a*2; printf("%d,%d\n",k,*p); printf("%d,",*a);} }则程序的输出结果是
(分数:2.00)
A.4,3,4
B.4,3,3 √
C.6,3,6
D.6,6,6
解析:解析:主函数中定义指针变量p指向k,调用函数sp(p),将k的地址传递给形参指针a,函数转到sp运行,a指向b的地址,表达式*a=*a*2,相当于b=b*2,得到*a的数据4输出。函数调用结束,此时a和b的空间撤销,而对实参k和p的值并没有改变,仍旧是3。
7.若有以下程序 #include<stdio.h> 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,%d\n",i,*p,**r);}则程序的输出结果是
(分数:2.00)
A.3,7,7,7,7,7
B.7,7,7,3,3,3
C.3,3,3,7,7,7
D.7,7,7,3,7,7 √
解析:解析:本题考查了二级指针,二级指针可以保存一级指针的地址。主函数中p指向i,r指向p,函数调用后s指向p,在f函数中t指向全局变量k=7,s指向t,同时s保存了实参p的地址,此时p也指向t,输出三个7,流程转到主函数,i的值为3,p以及r的值为7。
c语言字符串转换数组8.若有以下程序 #include<stdio.h> int*f(int*s,int*t){int*k;if(*s<*t){ k=s;s=t;t=k;} re
turn s;} main(){ int i=3,j=5,*p=&i,*q=&j,*r; r=f(p,q); printf("%d,%d,%d,%d,%d\n",i,j,*P,*q,*r);}则程序的输出结果是
(分数:2.00)
A.3,5,5,3,5
B.5,3,5,3,5
C.5,3,3,5,5
D.3,5,3,5,5 √
解析:解析:本题考查了返回值为指针的函数,函数f的主要功能为第一个参数小于第二个参数,那么交换指针的指向,这对于实参指向的数据时没有影响的。最后返回比较大的元素的地址。主函数中p指向i,q指向j,调用r=f(p,q),返回q的地址,因此*p=3,*q=5,*r=5。
9.若有以下程序 #include<stdio.h> main(){int k=3; void sp(int*a){int b=2; sp(&k); *a=*a*2; printf("%d\n",k); printf("%d,",*a); } a=&b; *a=*a*2; pfintf("%d,",*
a);}则程序的输出结果是
(分数:2.00)
A.6,4,6 √
B.6,4,3
C.6,12,12
D.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.若有以下程序 #include<stdio.h> 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); p
rintf("%d,%d,%d\n",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的地址,同时t也指向变量m,因此**s的值为m的值,*t为m的值,k为7。流程返回到主函数,没有对主函数空间的数据和指向作出更改,因此全部为3。
11.若有以下程序 #include<stdio.h> 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,%d\n",i,j,*p,*q,*r);}则程序的输出结果是
(分数:2.00)
A.3,5,5,3,5
B.3,5,3,5,5
C.5,3,5,3,5 √
D.5,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.有以下程序 #include<stdio.h> 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("%d\n",x);}程序运行后的输出结果是
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论