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

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

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

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

选择题

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

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[0]=a;

C. p=a;

D. p[1]=&a;

解析:定义语句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个存储单元的长度\\t

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<stdio.h>

main( )

{ int n,*p=NULL;

*p=

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

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

推荐资源

客服

扫码添加客服微信

热线

官方客服

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

电话客服:

客服微信:pujinet

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

公众号

扫码关注微信公众号