选择题
1.选择表达式 11|10 的结果(本题数值均为十进制)()
A.11
B.10
C.8
D.2
11的二进制为1011,10的二进制为1010
1011 |(或)1010 = 1011 | 按位或 有1为1,& 按位与 有0为0
进制的转法
关于二进制与十进制互转的方法(简单好学!)_二进制转十进制-CSDN博客
2.若有定义语句: int a=10 ; double b=3.14 ; 则表达式 ‘A’+a+b 值的类型是()
A.char
B.int
C.double
D.float
类型自动提升
'A’是char类型,占一个字节,a是int 类型, 占4个字节,c是double类型,占8个字节。不同类型运算会自动提升,小范围提升为大范围 ,所以最后转换为double类型。
3.以下程序的运行结果是()
include <stdio.h>int main(void) {printf("%s , %5.3s\n", "computer", "computer");return 0;
}
A.computer , puter
B.computer , com
C.computer , computer
D.computer , compu.ter
对于%5.3s并不常见: % m.ns:
m : 输出字符串的宽度
n :左起截止目标字符串的n个字符,而且是右对齐,左边不够补空格。所以%5.3s 输出的是 com且,com前面补两个空格
4.以下for循环的执行次数是()
for(int x = 0, y = 0; (y = 123) && (x < 4); x++);
A.是无限循环
B.循环次数不定
C.4次
D.3次
初始化,判断,再++ y=123是赋值为真的,后面就是剩下x = 0、1、2、3 总共四次循环所以选C
5.下列main()函数执行后的结果为()
int func(){ int i, j, k = 0;for(i = 0, j = -1;j = 0;i++, j++){k++;}return k;
}
int main(){cout << (func());return 0;
}
A.-1
B.0
C.1
D.2
这里的条件判断部分j 赋值为0恒为假,不会进入循环,所以K等于0
6.下面程序输出是什么?
include <stdio.h>int main()
{ int a=1,b=2,c=3,d=0;if(a == 1 && b++==2)if(b!=2||c--!=3)printf("%d,%d,%d\n" ,a,b,c);else printf("%d,%d,%d\n" ,a,b,c);else printf("%d,%d,%d\n" ,a,b,c);return 0;
}
A.1,2,3
B.1,3,2
C.3,2,1
D.1,3,3
else匹配有就近原则 : 匹配最近的if
|| 逻辑或:任意一方为真就是为真。 左边表达式为真,右边表达式就不会执行第一个if就判断为假,直接到最后一个printf 打印,答案选D
7.下面,p[1] [2]的值是 的值是()
int p[][4] = {{1}, {3, 2}, {4, 5, 6}, {0}};
A.1
B.0
C.6
D.2
二维数组
8.
int fun(int a){a^=(1<<5)-1;return a;
}
fun(21)运行结果是()
A.10
B.5
C.3
D.8
<<是位运算,左移操作符 。 最后为21^31,^异或,相同为0,相异为1·
9.若有定义语句:int year=1009,*p=&year;以下不能使变量 year 中的值增至 1010 的语句是()
A.*p+=1;
B.(*p)++;
C.++(*p)
D.*p++
运算符优先级的问题,*的优先级大于 +=,()的优先级比++高,而++的优先级比*要高,没有对1009进行++,而是对指针++.所以选D
10.下面关于"指针"的描述不正确的是()
A.当使用free释放掉一个指针内容后,指针变量的值被置为NULL
B.32位系统下任何类型指针的长度都是4个字节
C.指针的数据类型声明的是指针实际指向内容的数据类型
D.野指针是指向未分配或者已经释放的内存地址
free指针只是把指向的空间销毁了 ,并没有把值置为NULL,指针的值置空需要我们自己去手动置空,选A