首页 > 全部 > 二级C语言 > 国家二级C语言(指针、编译预处理和动态存储分配)机试模拟试卷3

国家二级C语言(指针、编译预处理和动态存储分配)机试模拟试卷3

本单篇文档共8005字,内容预览3600字,预览为有答案版,源文件无水印,下载后包含无答案空白卷版和有答案版,同时也有计算机类NCRE全国计算机二级整科真题模拟题,讲义课件,思维导图,易错高频题等下载。
二级C语言 章节练习 5601人下载
价格: 0.80 原价:¥7.00
收藏

国家二级C语言(指针、编译预处理和动态存储分配)机试模拟试卷3

选择题

1.有以下程序:

#include<stdio.h>

void]]f(int*p,int*q);

main( )

{

int m=1,n=2,*r=&m;

f(r,&n);

prinff(\\(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.设已有定义float x;,则下列对指针变量p进行定义且赋初值的语句中正确的是( )。(B)

A. int*p=(float)x;

B. float*p=&x;

C. float p=&x;

D. float*p=1024;

解析:指针是用来存放地址的变量,用(类型名*指针变量名)的形式定义。赋值时应将某个变量地址即&x赋给指针变量,所以选择B。

3.若有定义语句double a,*P=&a;,下列叙述中错误的是( )。(A)

A. 定义语句中的*号是一个间址运算符

B. 定义语句中的*号是一个说明符

C. 定义语句中的p只能存放double类型变量的地址

D. 定义语句中,*p=&a把变量a的地址作为初值赋给指针变量p

解析:在变量定义double a,*p=&a;中,*号是一个指针运算符,而非间址运算符,所以A错误。

4.有以下程序:

#include<stdio.h>

main( )

{

int a=1,b=3,c=5;

int*p1=&a,*p2=&b,*p=&c;

*p=*p1*(*p2);

printf(\\(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所指的存储单元的值,即a的值,与p2所指的存储单元b的值相乘,也就是c=a*b,等价于c=1*3=3,因此C选项正确。

5.有以下程序:

#include<stdio.h>

main( )

{

int n,*p=NULL;

*p=&n:

prinff(\\(A)

A. int n,*p=NULL;

B. *p=&n;

C. scanf(\\

D. prinff(\\

解析:B选项的正确写法应为p=&n;C选项的正确写法应为scanf(\\

6.若有定义语句double x,y,*px,*py;,执行了px=&x;py=&y;之后,正确的输入语句是( )。(A)

A. searlf(\\

B. seanf(\\

C. scard\\

D. seanf(\\

解析:因为x和y都是double型数据,所以输入时的格式字符应为%lf,所以B、C选项错误。D选项中的scanf(\\

7.下列程序段中完全正确的是( )。(C)

A. int*p;scanf(\\

B. int*p;scanf(\\

C. int k,*p=&k;scanf(\\

D. int k,*p;*p=&k;scanf(\\

解析:A选项中错在没有对指针进行初始化,无效指针,并且在scanf(\\

8.若有定义语句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***,类型不对。

9.设有以下函数: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选项正确。

10.)下列函数的功能是( )。

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’

解析:while循环条件为:(*b=*a)!=’’0],执行时先把指针a所指向的字符赋给指针h所在的内存单元,如果该字符不是结束标识“\0”,执行循环体“a++;b++;”,指针a、b分别指向下一个字符单元。再判断循环条件,如果成立,继续把指针a所指向的字符赋给指针b所在的内存单元,直到遇到结束标识为止,因此A选项正确。

11.有以下程序:

#include<stdio.h>

#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++)

prinff(\\(A)

A. -3,-1,1,3,

B. -12,-3,0,0,

C. 0,1,2,3,

D. -3,-3,-3,-3,

解析:本题由fun函数可知,b[0]=a[0][0]-a[0][3]=1-4=-3,b[1]=a[1][1]-[1][2]=6-7=-1,b[2]=a[2][2]-[2][1]=11-10=1,b[3]=a[3][3]-[3][1]=16-13=3,所以主函数中打印y

本文档预览:3600字符,共8005字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载

剩余未完,查看全文
收藏
国家二级C语言(指针、编译预处理和动态存储分配)机试模拟试卷3

推荐资源

客服

扫码添加客服微信

热线

官方客服

如遇问题,请联系客服为您解决

电话客服:

客服微信:pujinet

工作时间:9:00-18:00,节假日休息

公众号

扫码关注微信公众号