[计算机类试卷]国家二级C语言机试(翻译预处理和指针)模拟试卷11及答案与解析.doc

上传人:花仙子 文档编号:498806 上传时间:2018-11-30 格式:DOC 页数:16 大小:47.50KB
下载 相关 举报
[计算机类试卷]国家二级C语言机试(翻译预处理和指针)模拟试卷11及答案与解析.doc_第1页
第1页 / 共16页
[计算机类试卷]国家二级C语言机试(翻译预处理和指针)模拟试卷11及答案与解析.doc_第2页
第2页 / 共16页
[计算机类试卷]国家二级C语言机试(翻译预处理和指针)模拟试卷11及答案与解析.doc_第3页
第3页 / 共16页
[计算机类试卷]国家二级C语言机试(翻译预处理和指针)模拟试卷11及答案与解析.doc_第4页
第4页 / 共16页
[计算机类试卷]国家二级C语言机试(翻译预处理和指针)模拟试卷11及答案与解析.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、国家二级 C语言机试(翻译预处理和指针)模拟试卷 11及答案与解析 一、选择题 1 关于 C语言预处理命令的叙述中正确的是 ( )。 ( A)在 C语言中,预处理命令行都以 “#”开头 ( B)预处理命令行必须位于 C源程序的起始位置 ( C) #include必须放在 C程序的起始位置 ( D) C语言的预处理不能实现宏定义和条件编译的功能 2 关于宏的叙述中正确的是 ( )。 ( A)宏名称必须用大写字母表示 ( B)宏定义必须位于源程序中所有语句之前 ( C)宏调用比函数调用耗费时间 ( D)宏替换没有数据类 型限制 3 设 #define IsDIV(k, n)(k n=1)? 1:

2、0),则宏调用: IsDIV(m, 5)&IsDIV(m,7)为真时所要表达的是 ( )。 ( A)判断 m是否能被 5和 7同时整除 ( B)判断 m被 5或者 7整除是否余 1 ( C)判断 m被 5和 7整除是否都余 ( D)判断 m是否能被 5或者 7整除 4 以下程序的输出结果是 ( )。 #include #define f(x)x*x*x main()int a=3, s, t; s=f(a+1); t=f(a+1); printf( d, d n, s, t); ( A) 64, 10 ( B) 10, 64 ( C) 10, 10 ( D) 64, 64 5 关于预处理命令的

3、叙述中错误的是 ( )。 ( A)预处理命令行的最后不能以分号表示结束 ( B) C程序对预处理命令行的处理是在程序执行的过程中进行的 ( C) #define MAX是合法的宏定义命令行 ( D)在程序中凡是以 “#”开始的语句行都是预处理命令行 6 以下程序的输出结果是 ( )。 #deftne S(x)x*x #define T(x)S(x)*S(x) main()int k=5, j=2; printf( d, d n, S(k+j), T(k+j); ( A) 17, 37 ( B) 49, 289 ( C) 17, 289 ( D) 49, 2401 7 关于 #include的叙

4、述中正确的是 ( )。 ( A)在包含文件中,不得再包含其他文件 ( B) #include命令行不能出现在程序文件的中间 ( C)在一个程序中,允许使用任意数量的 #include命令行 ( D)虽然包含文件被修改了。包含该文件的源程序也可以不重新进行编译和连接 8 设 void fun(int n, char *s) ,则下面对函数指针的定义和赋值均正确的是( )。 ( A) void *pf(); *pf=fun; ( B) void (*pf)(int, char*); pf=fun; ( C) void *pf(); pf=fun; ( D) void (*pf)(int, char

5、); pf=&fun; 9 关于变量和地址的叙述中正确的是 ( )。 ( A)语句 p=NULL;执行后,指针 P指向地址为 0的存储单元 ( B)语句 p=NULL; 与 p= 0; 是 等价的语句 ( C) “int*p1; int*p2; int*p3; ”都是合法的定义指针变量的语句 ( D)指针变量只能通过求地址运算符 (&)来获得地址值 10 关于 int* func(int a10, int n);的叙述中正确的是 ( )。 ( A)说明中的 a10写成 a或 *a效果完全一样 ( B)形参 a对应的实参只能是数组名 ( C) func的函数体中不能对 a进行移动指针 (如 a+

6、)的操作 ( D)只有指向 10个整数内存单元的指针,才能作为实参传给 a 11 关于地址的叙述中错误的是 ( )。 ( A)改变函数形参的值,不会改变对应实参的值 ( B)函数可以返回地址值 ( C)当在程序的开头包含头文件 stdio h时,可以给指针变量赋: NULL ( D)可以给指针变量赋一个整数作为地址值 12 23以下程序的输出结果是 ( )。 main()int m=1, n=2, *p=&m, *q=&n, *r; r=p; p=q; q=r; printf( d, d, d, d n, m, n, *P, *q); ( A) 2, 1, 2, 1 ( B) 1, 2, 2,

7、 1 ( C) 1, 2, 1, 2 ( D) 2, 1, 1, 2 13 设 float a10, *s=a;以下能够代表数组元素 a3的是 ( )。 ( A) (*s)3 ( B) *s3 ( C) *s+3 ( D) *(s+3) 14 若 int a23, *p3;则以下语句中正确的是 ( )。 ( A) p0=&a12; ( B) p0=a; ( C) *p+=1; ( D) p=a; 15 若 float a, *p=&a;以下叙述中错误的是 ( )。 ( A)定义语句中的 *是一个说明符 ( B)定义语句中的 P只能存放 float类 型变量的地址 ( C)定义语句中木 p=&a

8、把变量 a的地址作为初值赋给指针变量 p ( D)定义语句中的 *是一个间址运算符 16 以下程序的输出结果是 ( )。 int fun1(double A)return a*=a; int fun2(double x, double y) double a=0, b=0; a=fun1(x); b=fun1(y); return(int)(a+b); main() double w; w=fun2(1 1, 2 0); ( A) 5 00 ( B) 4 0 ( C) 4 21 ( D) 5 0 17 以下程序的输出结果是 ( )。 void fun(int n, int *s)int f;

9、if(n=1)*s=n+1; elsefun(n一 1, &f); *s=f; main()int x=0; fun(4, &x); printf( d n, x); ( A) 4 ( B) 3 ( C) 1 ( D) 2 18 以下程序的输出结果是 ( )。 #include main() #define N 4 int xN=1, 2, 3), 4), 5, 6, 7, 8), 9, 10, void fun(int aN, int b) yN, i; int i; fun(x, y); for(i=0; i N; i+)bi=aii; for(i=0; i N; i+)printf( d

10、, , yi); printf( n); ( A) 3, 4, 8, 10, ( B) 1, 4, 5, 9, ( C) 1, 0, 7, 0, ( D) 1, 2, 3, 4, 19 以下程序的输出结果是 ( )。 #include main() void fun(char *c, int d) char b=a, a=A; *c=*c+1; d=d+1; fun(&b, a); printf( c, c n, b, a); printf( c, c, , *c, d); ( A) b, B, b, A ( B) a, B, a, B ( C) a, B, B, a ( D) b, B, B

11、, A 20 以下程序的输出结果是 ( )。 #include int funa(int a, int b)return a+b; int funb(int a, int b)return a一 b; int sss(int(*t)(), jnt x, int y)retern(*t)(x, y); main()int x; x=sss(funa, 9, 3); x+=sss(funb, 8, 3); printf( d n, x); ( A) 17 ( B) 22 ( C) 24 ( D) 23 21 以下程序的输出结果是 ( )。 void fun(int *p, int* q)int t

12、; t=*P; *P=*q; *q=t; *q=*p; main()int a=0, b=9; fun(&a, &b); printf( d n, a, b); ( A) 9 0 ( B) 9 9 ( C) 0 0 ( D) 0 9 22 以下程序的输出结果是 ( )。 void swap(char*x, char*y) main() char t; char*s1=abc, *s2=123*; t=*x; *x=*y; *y=t; swap(s1, s2); printf( s, s n, s1, s2); ( A) 321, cba ( B) 123, abc ( C) abc, 123

13、( D) 1bc, a23 23 以下函数的功能是 ( )。 int fun(char*s) char*t=s; while(*t+); return(t一 s); ( A)计算 s所指字符串的长度 ( B)比较两个字符串的大小 ( C)计算 s所指字符串占用内存字节的个数 ( D)将 s所指字符串复制到字符串 t中 24 以下程序的输出结果是 ( )。 #include void fun(char*P) +p; printf( sh, *P); main() char*a=Morning, Afternoon, Evening, Night); fun(a); ( A) Morning (

14、B) fternoon ( C) orning ( D) Afternoon 25 以下程序的输出结果是 ( )。 #include main() void fun(char*a, char*b) char*s=*a*b*, t80; while(*a=*)a+; fun(s, t); puts(t); while(*b=*a)b+; a+; ( A) ab ( B) *a*b ( C) a*b* ( D) a*b 国家二级 C语言机试(翻译预处理和指针)模拟试卷 11答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 C语言规定,凡是以 “#”开头的行,都称为 “编译预处理 ”命令行

15、。预处理命令可以放在程序中的任何位置。其有效范围是从定义开始到文件结束。预处理命令有宏定义、文件包含和条件编译三类。 #include命令行表示程序中要引用 C标准函数库中的标准输入输出函数。 【知识模块】 编译预处理和指针 2 【正确答案 】 D 【试题解析】 本题考查宏替换的规则。使用宏时应注意几点: 宏定义仅仅是符号替换,不是赋值语句,因此不做语法检查; 为了区别程序中其他的标识符,宏名的定义通常用大写字母,但不是必须用大写; 双引号中出现的宏名不替换; 使用宏定义可以嵌套,即后定义的宏中可以使用先定义的宏。 【知识模块】 编译预处理和指针 3 【正确答案】 C 【试题解析】 本题考查宏

16、定义和三目运算符。三目运算符: test?语句 1:语句2;其中, test可以是任何表达式。语句 1,当 test是非零时执行该语句,可以是复合语句;语句 2,当 test是零时执行该语句,可以是复合语句。 IsDIV(k, n)要表达的是当 k除 n的余数是 1时表达式的值为 1,否则为 0,所以题中要表达的是m被 5和 7整除是否都余 1。 【知识模块】 编译预处理和指针 4 【正确答案】 B 【试题解析】 根据题中宏 f(x)的定义,运算过程应为:s=f(a+1)=a+1*a+1*a+1=a+a+a+1=10,因此最后 s的结果为 10,而f(a+1)=(a+1)*(a+1)*(a+1

17、)=4*4*4=64的结果为 64。 【知识模块】 编译预处 理和指针 5 【正确答案】 B 【试题解析】 C语言中预处理命令行是以 “#”开始的语句,预处理命令行的最后不能以分号表示结束。其中宏定义的字符替换的定义格式为: #define标识符字符串,预处理命令行是在系统对源程序进行编译之前进行处理的,不是在程序执行的过程中。 【知识模块】 编译预处理和指针 6 【正确答案】 A 【试题解析】 本题考查了宏替换, C语言中的宏替换不会进行语法错误检查也不会进行运算。 “S(k+i)”宏展开以后为 “k+j*k+j”,值为 17, “T(k+j)”宏展开以 后为“k+j*k+j*k+j*k+j

18、”值为 37。 【知识模块】 编译预处理和指针 7 【正确答案】 C 【试题解析】 C语言的预编译处理符号 include具有以下规则: 包含文件的 include命令行通常应书写在所用源程序文件的开头,故有时也把包含文件称作 “头文件 ”。头文件名可以由用户指定,其后缀不一定用 “ h”; 包含文件中,一般包含有一些公用的 #define命令行、外部说明或对 (库 )函数的原型说明; 当包含文件修改后,对包含该文件的源程序必须重新进行编译链接; 在一个程序中,允许 有任意多个 #include命令行; 在包含文件中还可以包含其他文件。 【知识模块】 编译预处理和指针 8 【正确答案】 B 【

19、试题解析】 void(*pf)()定义了一个没有返回值的函数指针 pf,在给函数指针变量赋值时,只需给出函数名而不必给出参数。所以给 pf赋值时,把函数名 fun赋给 pf即可。 【知识模块】 编译预处理和指针 9 【正确答案】 C 【试题解析】 C语言规定指针变量赋地址值的方式有 3种方式: 通过求地址运算符 (&)获得地址值; 通过指针变量获得地址值; 通过 标准函数获得地址值。另外 NULL是在 stdio h头文件中定义的预定义符。 NULL的代码值为 0。可以给指针变量赋 NULL值。例如 p=NULL;赋值语句,称 p为空指针。这条语句等价于 p= 0;或 p=0;这时,指针 p并

20、不是指向地址为 0的存储单元,而是具有一个确定的值 “空 ”。 【知识模块】 编译预处理和指针 10 【正确答案】 A 【试题解析】 函数 func为返回值为指针的函数,有两个形参,形参数组 a为指针变量,保存实参数组的首地址,其元素个数由实参数组决定,因此说明中的a10可以写成 a或 *a。 【知识模块】 编译预处理和指针 11 【正确答案】 D 【试题解析】 C语言中指针变量的值只能是存储单元地址,而不能是一个整数,选项 D的描述错误。函数可以返回内存空间的地址,同时函数形参和实参分别占用不同的内存单元,改变形参的值不会改变对应实参的值,在头文件 stdio h中, NULL被定义为 vo

21、id型的指针。 【知识模块】 编译预处理和指针 12 【正确答案】 B 【试题解析】 题目中在主函数定义了 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。 【知识模块】 编译预处理和指针 13 【正确答案】 D 【试题解析】 C语言中,指针可以指向一个数组,语句 *s=a,使用指针变量 s指向一维数组 a的首地址,所以 *(s+3)表示的是引用数组 a3。 【知识模块】 编译预处理和指针 14 【正确答案】 A

22、【试题解析】 题目中定义语句 “int a23, *p3; ”定义了整型二维数组 a23和指针数组 p3。在 C语言中,二维数组名也是一个存放地址常量的指针,其值为二维数组中第一行的地址。所以选项 A中,把整型数组元素 a12的地址赋给p0。 【知识模块】 编译预处理和指针 15 【正确答案】 D 【试题解析】 在指针定义语句 “float a, *p=&a”中,指针变量 p前面的 *只是一个说明符,说明变量 p是指针类型的变量。 【知识模块】 编译预处理和指针 16 【正确答案】 A 【试题解析】 题目中子函数 funl(double A)的功能是返回 a的平方值的 整数部分。子函数 fun

23、2(double x, double y)的功能是返回 x的平方值的整数部分与 y的平方值的整数部分的和。又因为题中变量 w的定义为 double型,函数 fun2的定义为 int型,按照各类数值型数据间的混合运算,整型数据被转换为实型数据。所以双精度型变量 w的值为 5 00。 【知识模块】 编译预处理和指针 17 【正确答案】 D 【试题解析】 题目中函数 fun为递归调用函数,如果 n的值为 1,那么后面形参指向的空间存放 n+1,否则继续计算 fun(n一 1)的值。调用分析过程: fun(4,&x)fun(3 , &x)fun(2 , &x)fun(1 , &x)在回归的过程中,对于

24、 x内的数据并没有改动。 【知识模块】 编译预处理和指针 18 【正确答案】 C 【试题解析】 题目中函数 fun(int aN, int b)的功能是把矩阵 aNN主对角线上的元素赋给一维数组 b。在主函数中由 xN的初始化可知,其主对角线上的元素是 1, 0, 7, 0。所以当执行完函数 fun(x, v)后,一维数组 y中的元素值为 1, 0, 7, 0,选项为 C。 【知识模块】 编译预处理 和指针 19 【正确答案】 A 【试题解析】 本题中 fun函数的参数传递方式有两类,形参 c是传地址,形参 d是传值,所以在主函数中,执行 fun时,把变量 b的地址传给了 c,把 a的值传递给

25、了 d,经过运算,输出的值为 b, B。在主函数的输出语句中,输出变量 b的值为 b,变量 a的值为 A。 【知识模块】 编译预处理和指针 20 【正确答案】 A 【试题解析】 题目中函数 funa的功能计算两个数据的和, funb的功能计算两个数据的差,函数 sss中利用指向函数的指针作为函数的参数,可以在调用的时候,根 据接收的函数地址来决定调用哪一个函数。主函数中调用 x=sss(funa, 9, 3),将 funa函数的地址传递给 t,因此 sss函数成为求两个数据的和 12,继续将 funb函数地址传给 t,求两个数据差为 5,和 x累加后结果为 17,选项 A正确。 【知识模块】

26、编译预处理和指针 21 【正确答案】 B 【试题解析】 题目中函数 fun的主要功能是交换 p和 q指向的地址空间的数据,然后更改 p的指向的地址空间数据,使之和 q指向的数据相同。主函数调用 fun后, p指向 a, q指向 b,因此 ab的数据全部为 9,选项 B正确。 【知识模块】 编译预处理和指针 22 【正确答案】 D 【试题解析】 题目中函数 void swap(char*x, char*y)的功能是交换两个字符 *x和 *y中的内容。在主函数中字符指针 s1指向字符串 abc, s2指向字符串 123。所以函数 swap(s1, s2)的执行结果就是字符 a和 1相互交换。 【知

27、识模块】 编译预处理和指针 23 【正确答案】 A 【试题解析】 题目中在函数 fun(char*s)中,首先用字符指针变量 t指向 s,而循环语句 wliile(*t+);的功能是使指针变量 t指向字符串变量 s的末尾,这时退出循环,因而语句 return(ts);返回的就是字符串 s所指字符串的长度。选项 A正确。 【知识模块】 编译预处理和指针 24 【正确答案】 D 【试题解析】 题目中指针的指针变量 a和 p都是指向字符串的指针。执行 fun(a)语句时, p指向的是字符串数组 a的第一个字符串 “Morning”, p自加 1之后, *p指向了字符串数组 a的第 2个字符串 “Afternoon”。 【知识模块】 编译预处理和指针 25 【正确答案】 C 【试题解析】 题目中主函数 main()定义了指向字符串的指针和一个字符数组,接着调用 fun(s, t)函数,进行实参向形参传递,函数 fun第一个 while语句判断 *a中的值为木时继续扫描,当遇到不是 *的字符时结束,接着第二个 while循环语句,将 *a中从 “a”开始的后续所有字符都赋予 b,也就是 t80中的内容为“a*b*”。 【知识模块】 编译预处理和指针

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1