首页 > 全部 > 二级C语言 > 国家二级C语言机试(编译预处理和指针)模拟试卷12

国家二级C语言机试(编译预处理和指针)模拟试卷12

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

国家二级C语言机试(编译预处理和指针)模拟试卷12

选择题

1.设有定义: int x=0,*p;紧接着的赋值语句正确的是(B)

A. *p=NULL;

B. p=NULL;

C. p=x;

D. *p=x;

解析:定义指针变量时,必须将指针变量初始化为NULL(为空),否则,如果不赋给它地址,系统会随机给它分配一个地址。

2.以下叙述中错误的是(D)

A. 函数可以返回地址值

B. 改变函数形参的值,不会改变对应实参的值

C. 当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULL

D. 可以给指针变量赋一个整数作为地址值

解析:指针变量的值只能是存储单元地址,而不能是一个整数,选项D的描述是错误,为待选答案。函数可以返回内存空间的地址,同时函数形参和实参分别占用不同的内存单元,改变形参的值不会改变对应实参的值,在头文件stdio.h中,NULL被定义为void型的指针。

3.设已有定义: float x;则以下对指针变量P进行定义且赋初值的语句中正确的是(B)

A. int*p=(float)x;

B. float*p=&x;

C. float p=&x;

D. float*p=1024;

解析:定义指针变量的一般形式为:类型名 *指针变量名1,*指针变量名2,……;。对一个指针变量赋值要通过求地址运算符(&)获得变量的地址值,然后把此地址值赋给指针变量。因而在选项A的表达式中,赋值号的左边表示定义了指针变量p,而右边表示求变量x的地址值。

4.有以下程序,程序运行后的输出结果是

main(){int m=1,n=2,*p=&m,*q=&n,*r;

r=p;p=q;q=r;

printf(\\(B)

A. 1,2,1,2

B. 1,2,2,1

C. 2,1,2,1

D. 2,1,1,2

解析:在主函数定义了3个整数指针变量p,q,r,并且使P指向m,q指向n,再执行“r=p;p=q;q=r;”这三条语句,使q指向m,p指向n,再输出变量“m,n,*p,*q”时,它们值分别为1,2,2,1。

5.下面选项中的程序段,没有编译错误的是(A)

A. char*sp,S[10];sp=\\

B. char*sp,s[10];s=\\

C. char str1[10]=\\

D. char mark[];mark=\\

解析:选项B中数组名为常量,不能赋值,选项C字符数组之间无法完成赋值操作,选项D和选项B相同,无法对数组进行赋值。

6.设有定义double a[10],*s=a;以下能够代表数组元素a[3]的是(D)

A. (*s)[3]

B. *s[3]

C. *s+3

D. *(s+3)

解析:语句*s=a,使用指针变量s指向一维数组a的首地址,所以*(s+3)表示的是引用数组a[3]。

7.有以下程序,执行后的输出结果是

main() {int a=1,b=3,c=5;

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

*p=*p1*(*p2);

printf(\\(B)

A. 2

B. 3

C. 1

D. 4

解析:程序使整型指针p1、p2、p3指向a、b、c值所存放的地址空间。然后再将指针变量*p1、*p2中的值的乘积赋给指针变量*p,即赋给变量c,输出c的值3。

8.若有定义语句: int a[2][3],*p[3];则以下语句中正确的是(A)

A. p[0]=&a[1][2]

B. ++(*p);

C. *p++;

D. *p+=1;

解析:定义语句“int a[2][3],*p[3];”定义了整型二维数组a[2][3]和指针数组p[3]。在C语言中,二维数组名也是一个存放地址常量的指针,其值为二维数组中第一行的地址。所以选项A中,把整型数组a[0]的指针赋给p[0]。

9.若有定义语句:int year=2009,*p=&year;以下不能使变量year中的值增至2010的语句是(C)

A. (*p)++;

B. ++(*p);

C. *p++;

D. *p+=1;

解析:由于自加运算符++的运算级高于间接运算*的运算级,所以选项A的表达式*p++不能使变量year中的值增至2010。

10.有以下程序

main(){ int a[5]={2,4,6,8,10},*p,**k;

p=a;

k=&p;

printf(\\(B)

A. 4 4

B. 2 4

C. 2 2

D. 4 6

解析:主函数中指针变量p指向数组a中下标为0的元素,k指向P,那么*(p++)的值为2,p指向数组中下标为1的元素,k指向P,所以**k的值为4。

11.以下叙述中正确的是(C)

A. 如果p是指针变量,则*p表示变量p的地址值

B. 如果p是指针变量,则&p是不合法的表达式

C. 在对指针进行加、减算术运算时,数字1表示1个存储单元的长度

D. 如果p是指针变量,则*p+1和*(p+1)的效果是一样的

解析:移动指针是对指针变量加上或减去一个–整数,或通过赋值运算,使指针变量指向相邻的存储单元。因此,只有当指针指向一串连续的存储单元时,指针的移动才有意义。当指针指向一串连续的存储单元时,可以对指针变量进行加上或减去一个整数的运算,也可以对指向同一串连续存储单元的两个指针进行相减的运算。除此之外,不可以对指针进行任何其他的算术运算。C语言提供了一个间接访问运算符(*),又称间址运算符,它是一个单目运算符,优先级比较高,高于普通的算术运算符,但是低于()运算符,因此*p+1和*(p+1)的含义是不一样。当指针变量中存放了一个确切的地址值时,就可以用“间接访问运算符,,通过指针来引用该地址的存储单元。

12.有以下程序(注:字符a的ASCII码值为97)

main(){char*s={\\(D)

A. abc

B. 7890

C. 979899

D. 789

解析:因为小写字符a,b,c的ASCII的值分别为97,98,99,而在do while循环语句中,每次对字符的ASCII的值取余数并输出,第一次循环输出7,第二次循环输出8,第三次循环输出9。

13.设有定义: char*c;以下选项中能够使c正确指向一个字符串的是(A)

A. char str[]=\\

B. scanf(\\

C. c=getchar():

D. *c=\\

解析:在题目的题干中定义了字符指针变量c。在选项A中,首先定义字符数组str,然后再把字符数组str的首地址赋给字符指针变量c。所以选项A是正确的。在选项D中,如果在定义字符指针c时,同时给c赋初值时,这样的表达式是正确的。而本题不是在定义指针c时,同时给c赋初值。

14.有以下程序

#include

main()

<

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

剩余未完,查看全文
收藏
国家二级C语言机试(编译预处理和指针)模拟试卷12

推荐资源

客服

扫码添加客服微信

热线

官方客服

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

电话客服:

客服微信:pujinet

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

公众号

扫码关注微信公众号