国家二级C语言机试(选择题)模拟试卷571
公共基础选择题
1.设已有定义“float x;”,则下列对指针变量P进行定义且赋初值的语句中正确的是( )。(B)
A. int *P=(float)x;
B. float *P=&x;
C. float P=&x;
D. float *P=1024;
解析:指针是用来存放地址的变量,定义指针变量的形式:类型名*指针变量名。赋值时应将某个变量地址赋给指针变量,如选项B中将变量x的地址&x赋给指针变量。故本题答案为B选项。
2.有以下程序:
#inctude
main( )
{
int a=1,b=3,c=5;
int *p1=&a,*p2=&b,*P=&c;
*P=*p1*(*p2);
printf("%d\n",c);
}
程序的运行结果是( )。(C)
A. 1
B. 2
C. 3
D. 4
解析:该程序中“int * p1=&a,*p2=&b,*p=&c;”定义了3个指针变量并赋值。指针变量p1指向a,p2指向b,p指向c。执行“*p=*p1*(*p2);”语句,给p所指的存储单元c赋值。p1所指的存储单元的值与p2所指的存储单元的值相乘,也就是c=a*b,等价于c=1*3=3。故本题答案为C选项。
3.下列程序段中完全正确的是( )。(C)
A. int *P;scanf("%d",&p);
B. int *p;scanf("%d",P);
C. int k,*P=&k;scanf("%d",P);
D. int k,*p;*P=&k;scanf("%d",P);
解析:A选项中,没有对指针进行初始化,属于无效指针,并且在“scanf("%d",&p);”中无须再进行取地址操作;B选项中,没有对指针进行初始化,属于无效指针;D选项中,语句“* p=&k;”书写错误,应为“p=&k;”。故本题答案为C选项。
4.设有以下函数“void fun(int n,char*s){…}”,则下列对函数指针的定义和赋值均正确的是( )。(D)
A. void(*pf)(int,char);pf=&fun;
B. void*pf( );pf=fun;
C. void*pf( );*pf=fun;
D. void(*pf)(int,char*);pf=fun;
解析:函数的参数可以是指针类型,它的作用是将一个变量的地址传送到另一个函数中。函数名代表函数的入口地址,指向函数的指针应该定义为“void(*pf)( );”。如果定义为“void*pf( );”,则表示函数pf的返回值是一个基类型为void的指针。故本题答案为D选项。
5.有以下程序:
#include
#define N4
void fun(int a[][N],int b[])
{ int i;
for(i=0;i<N;i++)
b[i]=a[i][i]-a[i][N-1-i];
}
main( )
{ int x[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},y[N],i;
fun(x,y);
for(i=0;i<N;i++)
printf("%d,",y[i]);
printf("\n");
}
程序的运行结果是( )。(A)
A. -3,-1,1,3,
B. -12,-3,0,0,
C. 0,1,2,3,
D. -3,-3,-3,-3,
解析:本题由fun函数可知,执行for循环,当i=0时,b[0]=a[0][0]-a[0][3]=1-4=-3;当i=1时,b[1]=a[1][1]-a[1][2]=6-7=-1;当i=2时,b[2]=a[2][2]-a[2][1]=11-10=1;当i=3时,b[3]=a[3][3]-a[3][0]=16-13=3。主函数中输出y数组元素的值为:-3,-1,1,3。故本题答案为A选项。
6.下列语句组中正确的是( )。
A
解析:字符型指针变量可以用A选项的赋值方法“char *s;s="Olympic";”。C选项的写法“char * s;s={"Olympic"};”是错误的。字符数组可以在定义的时候初始化,如“char s[]={"Olympic"};”或者“char s[ ]="Olympic";”,但是不可以在定义字符数组后对数组名赋值(数组名是常量,代表数组首地址),所以B选项和D选项都是错误的。对于本例,B、D选项中字符数组s的大小至少为8,才能存放下字符串(字符串的末尾都有结束标识“\0”),同时,此时s为字符数组的地址,是常量,不能为其赋值。故本题答案为A选项。
7.设有定义“char *c;”,以下选项中能够使C正确指向一个字符串的是( )。(A)
A. char str[ ]="string";c=str;
B. scanf("%s",c);
C. c=getchar( );
D. *c="string";
解析:A选项为正确用法,先将字符串存于字符数组中,然后将数组名赋给字符指针(数组名代表数组首地址,定义数组时为其分配确定的地址)。C选项错误,getchar函数输入一个字符给字符变量,而不是字符指针。B选项和D选项有类似的错误,两个选项并无语法错误,但运行时可能会出现问题。因为在B选项和D选项中,字符指针没有被赋值,是一个不确定的值,指向一个不确定的内存区域,这个区域可能存放有用的指令或数据。在这个不确定的区域重新存放字符串,可能会发生无法预知的错误。故本题答案为A选项。
8.下列语句组中正确的是( )。
B
解析:A选项去掉花括号后,赋值正确;C选项和D选项应在定义时赋初值,因为数组名相当于常量,不能重新赋值。故本题答案为B选项。
9.下列语句中存在语法错误的是( )。
A
解析:数组定义后,不可以对数组整体赋值。ss是二维数组,因ss[1]是一维字符数组,相当于一维数组的数组名,是常量,不能重新赋值,所以A选项错误。B选项和D选项是定义时对数组初始化。在C选项中,将字符串在内存中的首地址赋给指针数组的一个元素。故本题答案为A选项。
10.关于地址和指针,以下叙述正确的是( )。(A)
A. 可以通过强制类型转换让char型指针指向double型变量
B. 函数指针P指向一个同类型的函数f时,必须写成“P=&f;”
C. 指针P指向一个数组f时,必须写成“P=&f;”
D. 一个指针变量P可以指向自身
本文档预览:3600字符,共11501字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载