国家二级C语言机试(选择题)模拟试卷570
公共基础选择题
1.有以下程序:
#include
void f(int *p,int *q);
main( )
{
int m=1,n=2,*r=&m;
f(r,&n);
printf("%d,%d",m,n);
}
void f(int *p,int *q)
{
P=P+1;
*q=*q+1;
}
程序的运行结果是( )。(B)
A. 2,3
B. 1,3
C. 1,4
D. 1,2
解析:在f(int * p,int * q)函数中,执行“p=p+1;”是将p所对应的地址加1,而“*q=*q+1;”是将q所指向n的地址所对应的值加1,所以m的值没有变,而n的值则变为3。故本题答案为B选项。
2.若有定义语句“double a,*P=&a;”,下列叙述中错误的是( )。(A)
A. 定义语句中的“*”是一个间址运算符
B. 定义语句中的“*”是一个说明符
C. 定义语句中的“P”只能存放double类型变量的地址
D. 定义语句中,“*P=&a”把变量a的地址作为初值赋给指针变量P
解析:变量定义语句“double a,*p=&a;”中,“*”是一个指针运算符,而非间址运算符。故本题答案为A选项。
3.若有定义“double x,y,*px,*Py;”,执行了“px=&x;Py=&y;”之后,正确的输入语句是( )。(A)
A. scanf("%If%le",px,Py);
B. scanf("%f%f"&x,&y);
C. scanf("%f%f",x,y);
D. scanf("%If%If",x,y);
解析:因为x和y都是double型数据,输入时的格式控制字符应为%lf,所以B、C选项错误。D选项中的“scanf("%lf%lf",x,y);”应为“scanf("%lf%lf",&x,&y);”,所以D选项错误。故本题答案为A选项。
4.若有定义“int a[2][3],*P[3];”,则以下语句中正确的是( )。(C)
A. P=a;
B. p[0]=a;
C. P[0]=&a[1][2];
D. P[1]=&a;
解析:A选项错误,因为p是指向一个指针数组,而数组名相当于常量,不能重新赋值。B选项错误,因为p[0]是一个int指针,也就是int*,而a是一个指向指针的指针int * *。C选项正确,因为p[0]是int*,a[1][2]是int,&a[1][2]是int*,类型吻合。D选项错误,因为a作为数组名,不能取地址,即使能取,p[1]是int*,&a是int * * *,类型不吻合。故本题答案为C选项。
5.下列函数的功能是( )。
void fun(char *a,char *b)
{ while((*b=*a)!='\0')
{
a++;
b++;
}
}(A)
A. 将a所指字符串赋给b所指空间
B. 使指针b指向a所指字符串
C. 将a所指字符串和b所指字符串进行比较
D. 检查a和b所指字符串中是否有'\0'
解析:题目的fun函数内,while循环条件为“(*b=*a)!=“\0””,执行时先把指针a所指向的字符赋给指针b所在的内存单元。如果该字符不是结束标识“\0”,执行循环体“a++;b++;”,指针a、b分别指向下一个字符单元。再判断循环条件,如果成立,继续把指针a所指向的字符赋给指针b所在的内存单元,直到遇到结束标识为止。故本题答案为A选项。
6.若有定义“int w[3][5];”,则以下不能正确表示该数组元素的表达式是( )。(D)
A. *(&w[0][0]+1)
B. *(*w+3)
C. *(*(w+1))
D. *(w+1)[4]
解析:A选项中,“*(&w[0][0]+1)”表示“w[0][1]”;B选项中,“*(*w+3)”表示“w[0][3]”;C选项中,“*(*(w+1))”表示“w[1][0]”;D选项中,“*(w+1)[4]”的正确写法是“(*(w+1))[4]”,表示“w[1][4]”。故本题答案为D选项。
7.有以下程序(注:字符a的ASCII值为97):
#include
main( )
{ char *s={"abc"};
do
{printf("%d",*s%10);
++s:
}while(*s);
}
程序的运行结果是( )。(A)
A. 789
B. abc
C. 7890
D. 979899
解析:因为小写字符a、b、c的ASCII值分别为97、98、99。在do while循环语句中,每次对字符的ASCII值取余数并输出,所以分别输出7、8、9。故本题答案为A选项。
8.有以下函数:
int fun(char *x,char *y)
{ int n=0;
while((*x==*y)&& *x!='\0')
{x++;
y++;
n++;
}
return n;
}
函数的功能是( )。(C)
A. 将y所指字符串赋给x所指存储空间
B. 查找x和y所指字符串中是否有'\0'
C. 统计x和y所指字符串中最前面连续相同的字符个数
D. 统计x和y所指字符串中相同的字符个数
解析:本题中由循环条件可知,遇到“\0”或x与y所指的字符不相等时循环结束。所以函数的功能是统计x和y所指字符串中最前面连续相同的字符个数。故本题答案为C选项。
9.设有定义语句“int(*f)(int);”,则下列叙述中正确的是( )。(B)
A. f是基类型为int的指针变量
B. f是指向函数的指针变量,该函数具有一个int类型的形参
C. f是指向int类型一维数组的指针变量
D. f是函数名,该函数的返回值是基类型为int的地址
解析:此定义语句“int(*f)(int);”为指向函数的指针变量的定义方法,其中f为指向函数的指针变量,第1个int为函数返回值类型,第2个int为函数的形参类型。故本题答案为B选项。
10.函数fun的功能是在a所指的具有n个元素的数组中查找最大值并返回给调用函数,但函数不完整:
int fun(int *a,int n)<
本文档预览:3600字符,共14041字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载