[计算机类试卷]国家二级C语言(指针、编译预处理和动态存储分配)机试模拟试卷1及答案与解析.doc

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

1、国家二级 C语言(指针、编译预处理和动态存储分配)机试模拟试卷1及答案与解析 一、选择题 1 有以下程序: #include void f(int*P, int*q); main() int m=1, n=2, *r=b+; ”,指针 a、 b分别指向下一个字符单元。再判断循环条件,如果成立,继续把指针 a所指向的字符赋给指针 b所在的内存单元,直到遇到结束标识为止,因此 A选项正确。 【知识模块】 指针 13 【 正确答案】 A 【试题解析】 本题由 fun函数可知, b0=a00一 a03=1一 4=一 3,b1=a11一 12=67=一 1, b2=a22一 21=1110=1, b3=

2、a33一31=1613=3,所以主函数中打印 y数组元素的值为 A选项。 【知识模块】 指针 14 【正确答案】 A 【试题解析】 p是指向二维字符数组第二行 one*Dream!的数组指针,所以长度是 10,打印输出的也是该字符串。 【知识模块 】 指针 15 【正确答案】 D 【试题解析】 A选项中 *(&w00+1)表示 w01; B选项中 *(*w+3)表示w03; C选项中 *(*(w+1)表示 w01;而 D选项中 *(w+1)4的正确写法是(*w+1)4,表示 w14,因此选择 D选项。 【知识模块】 指针 16 【正确答案】 A 【试题解析】 字符型指针变量可以用 A选项的赋值

3、方法: chaur*s;s=“Olympic”。 C选项的写法: char*s, s= Olymp;是错误的。字 符数组可以在定义的时候初始化: char s=Olymp”;或者 char s=“Olymp“,但是不可以在定义字符数组后对数组名赋值 (数组名是常量,代表数组首地址 ),所以 B选项和 D选项都是错误的。对于本例, B、 D选项中字符数组 s的大小至少为 8,才能存放下字符串 (字符串的末尾都有结束标志 “ 0”)。 【知识模块】 指针 17 【正确答案】 A 【试题解析】 因为小写字符 a、 b、 c的 ASC 码值分别为 97、 98、 99,而在 do while循环语句中

4、,每次对字符的 ASC 码值取余数并输 出,所以分别输出 7、8、 9。 【知识模块】 指针 18 【正确答案】 A 【试题解析】 选项 A为正确用法,先将字符串存于字符数组中,然后将数组名赋给字符指针 (数组名代表数组首地址,定义数组时为其分配确定的地址 )。 C选项错误, getchar()函数输入一个字符给字符型变量,而不是字符指针。 B选项和 D选项有类似的错误,两个选项并无语法错误,但运行时可能会出现问题。因为在B选项和 D选项中,宁符指针没有被赋值,足个不确定的值,指向一个不确定的内存区域,这个区域可能存放有用的指令或数据。在这个不确定的 区域重新存放字符串,可能会发生无法预知的错

5、误。 【知识模块】 指针 19 【正确答案】 C 【试题解析】 本题中由循环条件可知,遇到 0或 x与 y所指的字符的值不等中的一个条件时就结束,所以功能是统计 x和 y所指字符串中最前面连续相同的字符个数。 【知识模块】 指针 20 【正确答案】 B 【试题解析】 A选项去掉大括号就正确了; C选项和 D选项应在定义时赋初值。B选项正确。 【知识模块】 指针 21 【正确答案】 B 【试题解析】 int(*f)(int);为 指向函数的指针变量的定义方法,其中 f为指向函数的指针变量,第一个 int为函数返回值类型,第二个 int为函数的形参类型,因此 B选项正确。 【知识模块】 指针 22

6、 【正确答案】 D 【试题解析】 D选项中, *f(a, b)表示调用后返回一个指向整型数据的地址指针,即该函数的返回值为指针类型,所以不能将其赋值给整形变量 k。 【知识模块】 指针 23 【正确答案】 A 【试题解析】 数组定义后,不可以对数组整体赋值, s是二维数组,因 ss1是一维字符数组,即字符串,字符串赋值可以使 用 “strcpy(ss1, “right”); ”这样的形式,而 A选项中对二维数组中的第 “1”维 (相当于一个一维数组 )赋值是不可以的。B选项和 D选项是定义时对数组初始化,这是可以的。在 C选项中,将字符串在内存中的首地址赋给指针数组的一个元素,这是可以的。 【

7、知识模块】 指针 24 【正确答案】 A 【试题解析】 预处理命令是以 “#”号开头的命令,它们不是 C语言的可执行命令,这些命令应该在函数之外书写,一般在源文件的最前面书写,但不是必须在起始位置书写,所以 B、 C选项错误。 C语言的预处理能够实 现宏定义和条件编译等功能,所以 D选项错误。 【知识模块】 编译预处理和动态存储分配 25 【正确答案】 A 【试题解析】 宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头,所以 B选项中 “宏定义必须位于源程序中所有语句之前 ”是错误的。宏名一般用大写,但不是必须用大写,所以 C选项错误。宏展开不占运行时间,只占编译时间,函数调

8、用占运行时间 (分配内存、保留现场、值传递、返回值 ),所以D选项错误。 【知识模块】 编译预处理和动态存储分配 26 【正确答案】 C 【试题 解析】 宏定义不是 C语句,末尾不需要有分号,语句 printf(“ 4 Ifn”, S(a+b);展开后为 printf(“ 4 If n”, 3 5; *a+b*a+b; );,所以程序会出现语法错误。 【知识模块】 编译预处理和动态存储分配 27 【正确答案】 B 【试题解析】 本题考查预编译相关知识,宏定义在编译程序时做了一个简单的替换,所以 B选项正确。 【知识模块】 编译预处理和动态存储分配 28 【正确答案】 C 【试题解析】 本题考查带参数的宏定义, s为带参数的宏定义,运 行 s(k+j)为4*(k+j)*k+j+1=143, C选项正确。 【知识模块】 编译预处理和动态存储分配 29 【正确答案】 C 【试题解析】 本题考查宏定义。宏定义只是做简单的替换,本题中SUB(a+b)*c=(a+b)一 (a+b)*c=一 20,所以 C选项正确。 【知识模块】 编译预处理和动态存储分配 30 【正确答案】 A 【试题解析】 本题考查预处理命令行。预处理是在程序编译之前进行的,所以 A选项错误。 【知识模块】 编译预处理和动态存储分配

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

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

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