一、选择题
1. 下列叙述中错误的是( )。
A.C 程序可以由一个或多个函数组成
B.C 程序可以由多个程序文件组成
C. 一个C 语言程序只能实现一种算法
D. —个C 函数可以单独作为一个C 程序文件存在
答:C
【解析】一个C 语言程序可以实现任意多种算法,并没有数量限制
2. 以下选项中叙述正确的是( )。
A. 是合法的变量定义语句
B. 数组说明符的一对方括号中只能使用整型常量,而不能使用表达式
C. 数组下标的下限可以是负值
D. 若有数组定义答:A
【解析】A 项正确定义了字符变量cl 、c2, 字符型指针c3, 字符型一维数组,A
项正确。是下标运算符,“下标”可以是任何非负整型数据,取值范围是0〜(数据元素的个数一1)。在引用数组元素时,下标运算符内可以是常量也可以是变量或者表达式,B 项错误。数组下标的下限不可以是负值,C 项错误。数组下标必须是整型数据,3.12为浮点数,D 项错误。
3. 有以下程序:
程序运行后的输出结果是( )。
A.1
B.2
C.4
D.8
则语句是合法的
答:D
【解析】f (l )输出2,然后调用f (2)输出4, 再调用f (4)输出8。
4. 有以下程序:
程序运行后的输出结果是( )。
A.20045537
B.20044550
C.20042580
D.20041703
答:D
【解析】把结构体变量作为一个参数传递给函数时,传递的是实参结构体变量的值,系统给结构体类型的形参开辟相应的内存空间,并把实参中各成员的值赋给对应的形参成员。所以改变形参变量的内容对实参不会有任何影响。因此本题的函数f ( )对结构体s[0]没做改动,结果还是20041703。
5. 若有定义:inta ,b :
通过语句
能把整数3赋给变量a , 5赋给变量b 的输入数据是( )。
A.3, 5
B.3;5
C.35
D.35
答:B
scanf 函数中如果使用通配符, 【解析】则在输入数据时也必须使用相同的通配符与它相匹配。
6. 以下叙述中正确的是( )。
A.
语句
B.
语句
C.
语句是合法的 是不合法的,遗漏了数组的大小 是合法的,定义了一个包含两个字符的数组
D. 语句
符
答:A 是合法的,因为数组有三个字符空间的容量,可以保存两个字
【解析】A 项正确,表示定义了长度为8的int 型数组,它里面的每个元素都是0。当所赋初值少于所定义数组的元素个数时,将自动给后面的元素补以初值0。B 项错误,C 语言规定可以通过赋初值来定义数组的大小,这时数组说明符的一对方括号中可以不指定数组的大小;C 项错误,a 是char 类型的数组,里面的元素应该是字符而非字符串,应该用单引号括起来;D 项错误,数组变量一旦定义,其地址值不可改变,不能给数组名重新赋值。
7. 以下选项中的编译预处理命令行,正确的是( )。
A.#definePI3.14
B.##defineeps0.001
C.#DEFINETRUE
D.#defineintINT
答:A
【解析】A 项正确。不带参数的宏定义是用一个指定的标识符来代表一个字符串,其一般形式如下:#define宏名替换文本。需要注意:①在#define、宏名和替换文本之间用空格隔开;②在C 程序中,宏定义的定义位置一般写在程序的开头;③宏名一般用大写字母表示,便于与变量名区别;④宏定义是用宏名来表示一个字符串,在宏展开时以该字符串取代宏名,这只是一种简单的代换,预处理程序对它不做任何检查;⑤宏定义不是语句,在行末不加分号,如加上分号则连分号也一起替换。B 项define 前多了一个#。C 项缺少“替换文本”。D 项不能将一个自定义标识符宏定义为关键字。
8. 若k 是int 类型变量,且有以下for 语句:
下面关于语句执行情况的叙述中正确的是( )。
A. 循环体执行一次
B. 循环体执行两次
C. 循环体一次也不执行
D. 构成无限循环
答:A
【解析】本题中k 初始值为-1,执行一次循环体,执行完后k 值为0, 不满足k<0条件,退出循环,所以执行了一次。
9. 有以下程序