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

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

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

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

选择题

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. l,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

main()

{

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

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

5.有以下程序:

#include

main()

{

int n,*p=NULL;

*p=&n:

printf(“Input 13:”);

ScaRf(“%d”,&p);

prinff(“output n:”);

printf(“%d\11”,P);

}

该程序试图通过指针P为变量n读入数据并输出,但程序有多处错误,下列语句中正确的是( )。(A)

A. int n,*p=NULL;

B. *P=&n;

C. scallf(“%d”,&p)

D. printf(“%d\n”,P);

解析:B选项的正确写法应为p=&n;C选项的正确写法应为scanf(“%d’t,p);选项D的正确写法应为printf(“%d\n”,*p)。

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

A. scanf(“%If%le”,px,py);

B. scanf(“%f%f”&x,&y);

C. scallf(“%f%”,x,y);

D. s(2anf(“%If%If”,x,y);

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

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

A. int*p;scanf(“%d”,&p);

B. int*p;seailf(“%d”,P);

C. int k,*p=&k;searlf(“%d”,P);

D. int k,*p;*p=&k;seanf(“%d”,P);

解析:A选项中错在没有对指针进行初始化,无效指针,并且在scanf(“%d,&p)中无须再进行取地址操作;B选项中没有对指针进行初始化,无效指针;D选项中语句*p=&k;的左端*p是指针所指内存空间的值,&k是地址,应为p=&k。C选项正确。

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

9.有以下程序:

#include

void fun(char*c,intd)

{

*c=*c+1:

d=d+1:

prinff(“%c,%c,”,*c,d);

}

main()

{

char b=’a’,a=’A’;

fun(&b,a);

printf(“%c,%c\n”,b,a);

}

程序的运行结果是( )。(A)

A. b,B,b,A

B. b,B,B,A

C. a,B,B,a

D. a,B,a,B

解析:本题重点考查函数的调用。首先要了解字母对应的ASCII码,例如A为65,a为97,字母+1可得到下一个字母。其次是函数形参和实参的问题,运行过程如下:在fun(&b,a)中,*e=‘a’,d=65。*c+1=’b’,d+1=66,prinff(“%c,%c,”,*c,d);输出b,B;因为指针c指向地址的值为b,此时b=*c=’b’;函数返回执行prinff(“%c,%c\n”,b,a);输出b,A,因此A选项正确。

10.以下函数实现按每行8个输出W所指数组中的数据:

#include

void fun(int*w,int n)

{

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

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

推荐资源

客服

扫码添加客服微信

热线

官方客服

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

电话客服:

客服微信:pujinet

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

公众号

扫码关注微信公众号