[计算机类试卷]国家二级C语言机试(编译预处理和指针)模拟试卷11及答案与解析.doc
《[计算机类试卷]国家二级C语言机试(编译预处理和指针)模拟试卷11及答案与解析.doc》由会员分享,可在线阅读,更多相关《[计算机类试卷]国家二级C语言机试(编译预处理和指针)模拟试卷11及答案与解析.doc(17页珍藏版)》请在麦多课文档分享上搜索。
1、国家二级 C语言机试(编译预处理和指针)模拟试卷 11及答案与解析 一、选择题 1 以下叙述中正确的是 ( A)在 C语言中,预处理命令行都以 “#“开头 ( B)预处理命令行必须位于 C源程序的起始位置 ( C) #include必须放在 C程序的开头 ( D) C语言的预处理不能实现宏定义和条件编译的功能 2 有以下程序,程序运行后的输出结果是 #define PT 3 5; #define S(x)PT*x*x; main()int a=1, b=2; printf(“ 4 1f n“, S(a+b); ( A) 31 5 ( B) 7 5 ( C)程序有错无输出结果 ( D) 14 0
2、 3 以下关于宏的叙述中正确的是 ( A)宏定义必须位于源程序中所有语句之前 ( B)宏名必须用大写字母表示 ( C)宏调用比函数调用耗费时间 ( D)宏替换没有数据类型限制 4 有以下程序,程序运行后的输出结果是 #include #define S(x)4*(x)*x+1 void main() int k=5, j=2; printf(“ d n“, S(k+j); ( A) 197 ( B) 143 ( C) 33 ( D) 28 5 设有宏定义: #define lsDIV(k, n)(k n=1)?1: 0)且变量 m已正确定义并赋值,则宏调用: IsDIV(m, 5)&IsDIV
3、(m, 7)为真时所要表达的是 ( A)判断 m是否能被 5和 7整除 ( B)判断 m被 5或者 7整除足否余 1 ( C)判断 m被 5和 7整除是否都余 1 ( D)判断 m是否能被 5或者 7整除 6 有以下程序,程序运行后的输出结果是 #include #define SUB(a)(a)-(a) main() int a=2, b=3, c=5, d; d=SUB(a+b)*c: printf(“ d n“, d); ( A) -12 ( B) 0 ( C) 10 ( D) -20 7 有以下程序,程序运行后的输出结果是 #include #define f(x)x*x*x main
4、()int a=3, s, t; s=f(a+1); t=f(a+1); printf(“ d, d n“, s, t); ( A) 10, 10 ( B) 10, 64 ( C) 64, 10 ( D) 64, 64 8 有下列程序,程序的运行结果是 #include #define N 5 #define M N+1 #define f(x)(x*M) main() int i1, i2; i1=f(2); i2=f(1+1); printf(“ d d n“, i1, i2); ) ( A) 12 7 ( B) 12 12 ( C) 11 11 ( D) 11 7 9 以下叙述中错误的是
5、 ( A)预处理命令行的最后不能以分号表示结束 ( B) C程序对预处理命令行的处理是在程序执行的过程中进行的 ( C) #define MAX是合法的宏定义命令行 ( D)在程序中凡是以 “#”开始的语句行都是预处理命令行 10 若程序中有宏定义行: #define N 100则以下叙述中正确的是 ( A)宏定义行中定义了标识符 N的值为整数 100 ( B)上述宏定义行实现将 100赋给 标示符 N ( C)在运行时用 100替换标识符 N ( D)在编译程序对 C源程序进行预处理时用 100替换标识符 N 11 若有以下程序,则程序的输出结果是 #define Sfx)x*x #defi
6、ne 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, 2401 ( C) 17, 289 ( D) 49, 289 12 有以下程序,程序运行后的输出结果是 #include #define N 2 #define M N+1 #define NUM(M+1)*M 2 main()printf(“ d n“, NUM); ( A) 4 ( B) 8 ( C) 9 ( D) 6 13 有以下程序,程序运行后的输出结果是 #include #define SUB(X
7、, Y)(X+1)*Y main()int a=3, b=4; printf(“ d n“, SUB(a+, b+); ) ( A) 20 ( B) 12 ( C) 16 ( D) 25 14 下面选项中关于编译预处理的叙述正确的是 ( A)凡是以 #号开头的行,都被称为编译预处理命令行 ( B)预处理命令行必须使用分号结尾 ( C)预处理命令行不能出现在程序的最后一行 ( D)预处理命令行的作用域是到最近的函数结束处 15 有以下程序,程序的输出结果是 #include #define SQR(X)X*X main() int a=10, k=2, m=1: a =SQR(k+m) SQR(
8、k+m); printf(“ d n“, a); ( A) 0 ( B) 1 ( C) 9 ( D) 10 16 以下叙述中正确的是 ( A)在包含文件中,不得再包含其他文件 ( B) #include命令行不能出现在程序文件的中间 ( C)在一个程序中,允许使用任意数量的 #include命令行 ( D)虽然包含文件被修改了,包含该文件的源程序也可以不重新进行编译和连接 17 有以下程序,程序的运行结果是 #include #include int fun(int n) main() int*p; int a; p=(int*)malloc(sizeof(int); a=fun(10); *
9、p=n; return*p; printf(“ d n“, a+fun(10); ( A) 10 ( B) 20 ( C) 0 ( D)出错 18 有以下程序,程序运行后的输出结果是 #include #include main() int*a, *b, *c; a=b=c=(int*)malloc(sizeof(int); *a=1; *b=2, *c=3; a=b: printf(“ d, d, d n“, *a, *b, *c); ( A) 2, 2, 3 ( B) 3, 3, 3 ( C) 1, 2, 3 ( D) 1, 1, 3 19 有以下程序,程序运行后的输出结果是 void f
10、un(int*p1, int*p2, int*s) s=(int*)malloc(sizeof(int); *s=*p1+*(p2+); main()int a2=1, 2), b2=10, 20, *s=a; fun(a, b, s); printf(“ d n“, *s); ( A) 10 ( B) 11 ( C) 2 ( D) 1 20 有以下程序段 int*p: *p=_malloc(sizeof(int);若要求使 p指向一个int型的动态存储单元,在横线处应填入的是 ( A) (int*) ( B) int ( C) int* ( D) (*int) 21 有以下程序,程序的输出结
11、果是 void fun(double*p1, double*p2, double*s) s=(double*)calloc(1, sizeof(double); *s=*p1+*(p2+1); main()double a2=1 1, 2 2), b2=10 0, 20 0, *s=a; fun(a, b, s); printf(“ 5 2f n“, *s); ( A) 1 10 ( B) 11 10 ( C) 12 10 ( D) 21 10 22 设有以下函数: void fun(int n, char*s) 则下面对函数指针的定义和赋值均正确的是 ( A) void*pf(); pf=f
12、un; ( B) void(*pf)(int, char*); pf=fun; ( C) void*pf(); *pf=fun; ( D) void(*pf)(int char); pf=&fun; 23 设有定义语句 int(*f)(int);则以下叙述正确的是 ( A) f是基类型为 int的指针变量 ( B) f是指向 int类型一维数组的指针变量 ( C) f是指向函数的指针变量,该函数具有一个 int类型的形参 ( D) f是函数名,该函数的返回值是基类型为 int类型的地址 24 以下叙述中正确的是 ( A)指针变量只能通过求地址运算符 (&)来获得地址值 ( B)语句 “p=NU
13、LL; ”与 “p= 0; ”是等价的语句 ( C) “int*p1; int*p2; int*p3; ”都是合法的定义指针变量的语句 ( D)语句 p=NULL;执行后,指针 p指向地址为 0的存储单元 25 以下叙述中正确的是 ( A)函数的类型不能是指针类型 ( B)函数的形参类型不能是指针类型 ( C)基类型不同的指针变量可以相互混用 ( D)设有指针变量为 “double*p”,则 “p+1”将指针 p移动 8个字节 26 设有某函数的说明为 int*func(int a10, int n);则下列叙述中,正确的是 ( A)说明中的 a10写成 a或 *a效果完全一样 ( B)形参
14、a对应的 实参只能是数组名 ( C) func的函数体中不能对 a进行移动指针 (如 a+)的操作 ( D)只有指向 10个整数内存单元的指针,才能作为实参传给 a 国家二级 C语言机试(编译预处理和指针)模拟试卷 11答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 在 C语言中,凡是以 “#”号开头的行,都称为 “编译预处理 ”命令行。预处理命令可以放在程序中的任何位置,其有效范围是从定义开始到文件结束。预处理命令有宏定义、文件包含和条件编译三类。 #include命令行表示程序中要引用 C标准函数库中的标准输入输出函数。 【知识模块】 编译预处理和指针 2 【正确答案】 C 【
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 试卷 国家 二级 语言 编译 预处理 指针 模拟 11 答案 解析 DOC
