国家二级C语言机试(编译预处理和指针)模拟试卷7
选择题
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<回车>,则程序的输出结果是(A)
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(\\(B)
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(\\(B)
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(\\(C)
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(\\(B)
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(\\(B)
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)
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。
8.若有以下程序
#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)
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.若有以下程序
本文档预览:3600字符,共11615字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载