一、选择题
1. 以下叙述错误的是( )。
A. 未经赋值的全局变量值不确定
B. 未经赋值的auto 变量值不确定
C. 未经赋值的register 变量值不确定
D. 未经赋值的静态局部变量值为0
答:A
【解析】C 语言中,系统将未经赋初值的全局变量默认为0, 答案为A 选项。
2. 有以下程序:
程序运行的结果是。
答:D
【解析】外层主循环i 从3减到1执行了3次,嵌套的循环变量j 从1增到2, 每轮执行2次,每次输出i+j的值,即为3+1、3+2、2+1、2+2、1+1、1+2,但注意每次内循环结束要换行。
3. 以下不能将键盘输入的字符串:This is a string〈回车〉读入到str 中的程序段是( )。
A. B. C. D.
答:A
【解析】在使用scanf 函数时,在输入数据时,遇到空格,或按“回车”键或按“跳格”(Tab )键时该数据 认为结束。A 项中输入This 后有一个空格,认为数据输入结束,以后的数据不能再读入到str 中,故选择A 项。 B 项用getchar 读人字符,键盘输入的所有字符均被认为是有效字符
读入,用while 循环控制读入,当读入字符为 回车时结束读入,字符串被正确的读入到str 中。C 项用gets 函数读入字符串,它读入键盘输入的所有字符,遇到回车自动结束读入,所以也能正确读入字符串到str 中。D 项用do...while 和指针循环控制字符输入,依次判断输入字符是否为回车符,若不是回车符则放人字符数组中,直到读入回车符,结束循环,数组str 中正确存放人指定的字符串。
4. 以下选项中合法的C 语言赋值语句是( )。
A.++i;
B.a=b=34
C.a=3,b=9
D.k=int(a+b);
答:A
【解析】B 项和C 项缺少分号,不合法。D 项类型转换不合法,应为k=(int )(a+b)。
5. 若i 和k 都是int 类型变量,有以下for 语句:
下面关于语句执行情况的叙述中正确的是。
A. 循环体执行两次
B. 循环体执行一次
C. 循环体一次也不执行
D. 构成无限循环
答:D
【解析】本题中for 循环判断条件为k=l, 这个语句是赋值语句,总是正确的,所以会陷入无限循环中。
6. 有以下定义inta ;longb ;doublex , y ;,则以下选项中正确的表达式是( )。
D.y=x+y=a
答:A
【解析】%运算是取两整数相除后余数的运算符,它只适用于整数的运算。A 项正确,x-y 结果为double 型,但是通过强制类型转换将其转换为int 型;B 项错误,中==和!=是同一个优先级的,先运行a==x,而因为double 是占8位的,不能自动转换,必须要强制类型转换
,
才是正确的;C 项错误,(a*y)%b中的(a*y)为double 型;D 项错误,x+y不
能作为左值。
7. 关于C 语言中数的表示,以下叙述中正确的是( )。
A. 只有整型数在允许范围内能精确无误地表示,实型数会有误差
B. 只要在允许范围内整型和实型都能精确表示
C. 只有实型数在允许范围内能精确无误地表示,整型数会有误差
D. 只有八进制表示的数才不会有误差
答:A
【解析】实型数据在内存中存储的二进制位数是有限的,而一个十进制实数转化为二进制实数时,其有效数字位数有可能会超过尾数的存储长度,从而导致有效数字丢失而产生误差。在整形数允许范围之内,二进制可以 表示任意一个整数。
8. 若有定义语句:
执行
正确的输入语句是( )。
答:A
【解析】double 类型,scanf 函数中格式应该使用%lf ,px 中存储的是x 的地址,可以直接在scanf 函数中使用。
9. 有以下程序:
程序运行后的输出结果是( )。
A.6
B.10
C.11
D.15
答:C
for 循环计算a 元素中某5个元素的和, 【解析】数组b 用来存储需要求和的a 中元素的下标。
10.有以下程序:
程序运行后的输出结果是( )。