一、选择题
1. 以下关于宏的叙述错误的是( )。
A. 宏替换不具有计算功能 B. 宏是一种预处理指令 C. 宏名必须用大写字母构成 D. 宏替换不占用运行时间 答:C
【解析】宏名习惯采用大写字母,以便与一般变量区别,但是并没有规定一定要用大写字母,因此,答案为C 选项。
2. 有如下程序:
程序运行后的输出结果是( )。 A.59 B.73 C.115 D.72 答:A
【解析】整型常量有3种,①十进制整常量,没有前缀,输出格式控制符为%d ; ②八进制整常量,以0作为前缀,输出格式控制符为%〇; ③十六进制整常量,以故A 项正确。
3. 设有以下函数:
则下面对函数指针的定义和赋值均是正确的是( )。
A. B. C. D. 答:D
【解析】函数指针的一般定义形式为:数据类型(*指针变量名)( )。定义函数指针时,
第 2 页,共 32 页
作为前缀,输出
格式控制符为%x 。八进制数072表示成十进制数为58,即x=072=58,以十进制格式输出x+l=59,
对应的类型名以及 返回值类型都要和对应函数的参数列表以及返回值类型一致。在给函数指针赋值时,可以直接将函数名赋值给对 应的函数指针,也可以将函数名取地址后在赋值给对应的函数指针。ABC 三项中函数指针的定义均是错误的, 参数列表和fun 函数的参数列表不一致。
4. 有以下程序
执行后的输出结果是( )。 A.5, 11 B.5, 5 C.11, 11 D.11, 5 答:A
【解析】fun 函数中m 和i 是静态变量,退出函数以后,下次再进入该函数时,m 和i 仍然保持上一次的数 值。第一次调用
返回11。
5. 有如下程序:
程序运行时,从键盘输入2,输出结果是( )。 A.ykpf B.wind C.xjoe D.2222
第 3 页,共 32 页
时,返回5; 第二次调用时
,
答:A
【解析】程序执行过程为:定义字符数组str 并且初始化为:“wind”,定义password 并通过scanf 函数从 键盘为其赋值2。定义指针p 并使其指向字符串。通过while 循环,将字符数组中每一个字符的码加2, 并且按字符格式输出每一个字符。程序运行后输出结果是:ykpf 。
6. 以下针对全局变量的叙述错误的是( )。
A. 全局变量的作用域是从定义位置开始至源文件结束 B. 全局变量是在函数外部任意位置上定义的变量 C. 用extern 说明符可以限制全局变量的作用域 D. 全局变量的生存期贯穿于整个程序的运行期间 答:C
【解析】在不同编译单位内用extern 说明符来扩展全局变量的作用域,extern 可以将全局变量作用域扩展到 其他文件,而不是限制全局变量的作用域,答案为C 选项。
7. 以下关于宏的叙述中正确的是( )。
A. 宏名必须用大写字母表示
B. 宏定义必须位于源程序中所有语句之间 C. 宏替换没有数据类型限制 D. 宏调用比函数调用耗费时间 答:C
【解析】A 项错误,用作宏名的标识符通常习惯用大写字母表示,宏名可以是任何合法的C 语言标识符;B 项错误,在语言中,宏定义可以根据需要写在任何位置:D 项错误,宏调用是在编译前由编译预处理程序完成的,不占运行的时间。
8. 若有定义:
则以下不能正确表示该数组元素的表达式是( )。
A. B. C. D. 答:A 【
解
析
】
a
数
组
元
素
可
用
五
种
表
达
式
来
引
用
:
A 项,C 语言中规
定,方括号的优先级高于相当于是项,
第 4 页,共 32 页
B 项,是不能表示数组元素。
C 项
,
是元素
是
的地址,
D
的地址,
表示数组元素
是元素
的地址,
的地址,
表示数组元素的地址,表示数组元素