C语言程序设计错题集(1)
一、单选题
- 假设有变量定义如下 int a, k; 则以下哪条语句不能确保将变量k的值变为0:
A.k = a + ~a + 1;
B.k ^= k;
C.k = (k && !a) || (!k && a);
D.k = k && !k;
正确答案:C
解析:(1)对A选项,~ 表示按位取反,运算对象是二进制数据,1变0,0变1。所有正整数的按位取反是其本身+1的负数,所有负整数的按位取反是其本身+1的绝对值,零的按位取反是 -1。例如,7的二进制为0000 0111,取反1111 1000,表示-8,即 ~ 7的值为-8。故A不符合题意。
(2)对选项B,异或运算符( ^ )的运算规则是参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。即: 0 ^ 0 =0 ; 0 ^ 1 =1 ; 1 ^ 0 =1; 1 ^ 1=0 。例如:3 ^ 5 = 0000 0011 ^ 0000 0101 =0000 0110 ,即 3 ^ 5 = 6 。故B不符合题意。 - ▁▁▁▁▁ 不是合法的常量。
A.38
B.038
C.3E8
D."\38"
正确答案:B
解析:对选项A,38是十进制常量,合法;对选项B,以0开头,表示八进制,其中不能出现8、9,故038不是合法常量;对选项C,3E8是实型常量(E的前面必须有数字,E的后面必须是整数),合法;对选项D,"\38"表示一个转义字符,是特殊的字符常量,合法。 - ▁▁▁▁▁ 是合法的C标识符。
A.TOM
B.char
C.1st
D.You&Me
正确答案:A
解析:合法标识符:(1)只能由字母,数字和下划线组成,且不能以数字开头;(2)关键字是保留字,不能用来做标识符;(3)大小写字母表示不同意义, 即代表不同的标识符。 - ▁▁▁▁▁ 不是关键字(保留字)。
A.int
B.extern
C.break
D.main
正确答案:D
解析:详见百度百科C语言关键字 - 若有定义:char ch=’\x42’;则变量ch中包含( )个字符。
A.1
B.2
C.4
D.定义不合法
正确答案:A
解析:’\x42’是转义字符,x表示42是十六进制数,42是字母a的ASCII码值。 - 若有定义语句:int x=12,y=8,z;,在其后执行语句z=0.9+x/y;,则z 的值为 ▁▁▁▁▁ 。
A.1.9
B.1
C.2
D.2.4
正确答案:B
解析:x的值为12,y的值为8,则 x/y 的值就是1,因为z的类型是int,所以0.9+1变成int的值就是1。 - 有下列语句组:short a=127,b=035;printf(“a+b=%x\n”,a+b);执行后显示( )。
A.a+b=162
B.a+b=156
C.a+b=9c
D.a+b=a2
正确答案:C
解析:a=127,十进制;b=035,八进制,即为十进制29;a+b的和等于十进制156,转化为十六进制得 9c 。 - 假设下列op1(操作数1)、op(操作符)、op2(操作数2三个)变量都被正确声明。 如果执行语句 scanf (”% d% c% f” ,& op1,& op,& op2) ; ,op1、 op 和 op2的值分别为1、 * 和2.0,则输入必须为()。
A.1.02
B.12
C.1 * 2
D.1 * 2.0
正确答案:B
二、填空题
- 设 c=‘w’,a=1,b=2,d=-5, 则表达式 ‘x’+1>c, ‘y’!=c+2, -a-5b<=d+1, b==(a=2)的值分别为▁▁▁、▁▁▁、▁▁▁、▁▁▁ 。
正确答案:1 0 1 1
解析:(1)c=‘w’,其ASCII码值为119,'x’的ASCII码值为120,则 ‘x’+1>c 即120+1>119为真,值为1;(2)'y’的ASCII码值为121,‘y’!=c+2 即 121!=119+2 为假,值为0;(3)-a-5b<=d+1 即 -1-5*2<=-5+1 为真,值为1;(4)b==(a=2) 即 2==2 为真,值为1 。 - 下列语句中,▁▁▁▁▁可输出“☼”字符(ASCII 码为 15)。
A) putchar(‘☼’);
B) putchar(15);
C) putchar(’\17’);
D) printf("%c", ‘\Xf’);
注:请按顺序填大写字母。
正确答案:BC - 以下代码执行后,填写相应变量的值:a=▁▁▁ ,b=▁▁▁,c=▁▁▁ 。
int a=8, b=5, c=1;
c=(a=8,b);
正确答案:8 5 5
解析:c=(a=8,b) 是一个逗号表达式,c 的值是整个逗号表达式的值,逗号表达式从左向右计算,最右边的值是逗号表达式的值。 - 以下程序的输出结果是▁▁▁▁▁ 。
int main(void)
{
int a, b, c;
a = 25;
b = 025;
c = 0x25;
printf("%d %d %d\n", a, b, c);
return 0;
}
正确答案:25 21 37
解析:(1) a = 25,十进制;(2)b = 025,以0开头,八进制;(3)c = 0x25,以0x开头,十六进制(0x是十六进制的前缀,H是十六进制的后缀)。
以上。