1、 32 位机上根据下面的代码,问哪些说法是正确的? ( ) signed char a = 0xe0; unsigned int b = a; unsigned char c = a; A. a>0 && c>0 为真 B. a == c 为真 C. b 的十六进制表示是:0xffffffe0 D. 上面都不对
解析:答案:C。变量a为有符号字符型变量,最高位为符号位,符号位为1,所以a<0。用a为c赋值,c为无符号字符型变量,最高位不是符号位,c>0,因此a不等于c,AB选项都不对。用a为b赋值,b为无符号整形变量,使用a的符号位补充b中的高位3个字节,因此C选项正确。
2、 下面哪些选项能编译通过? ( ) int i; char a[10]; string f(); string g(string & str); A. if(!!i){f();} B. g(f()); C. a=a+1; D. g(“abc”);
解析:答案:A。在BCD三个选项中,B中在C++中只有const引用才能被临时变量或临时对象所初始化,f()函数的返回值为临时变量,只能赋值给const引用,B错误。C肯定不对,C中a为数组名,a可以加1,但是不能直接给数组这样赋值,C错误。D参数为char*的指针,string为类库中的字符类,指针到类无法进行转换,D错误。
3、 int a[10]; 问下面哪些不可以表示 a[1] 的地址? ( ) A. a+sizeof(int) B. &a[0]+1 C. (int*)&a+1 D. (int* ) ((char*)&a+sizeof(int))
解析:答案:A。A中首地址加4,为a[4]的地址,BCD选项都可以表示a[1]的地址。
4、 问下面的数据都存放在哪些存储区? ( ) int main() { char *p = “hello,world”; return 0; } A. 代码段 B. 栈 C. 常量区 D. 堆
解析:答案:BC。注意审题,题目中问的是数据存放的位置,数据包括了指针p,字符串常量,和0,指针p存放在栈中,其他的放在常量区。本程序还有代码如main,函数体存放在代码段中。
5、 下面哪些函数调用必须进入内核才能完成? ( ) A. fopen B. exit C. memcpy D. strlen
解析:答案:AB。A选项,fopen打开一个文件,打开文件必然使用它的驱动,驱动在内核之中。B选项,exit结束当前调用该函数的进程,只有操作系统才能决定进程的结束,必然进入内核。C为内存拷贝函数,D为获取字符串长度,都是在内存之中,都不会进入内核。
6、 死锁发生的必要条件? ( ) A. 互斥条件 B. 请求和保持 C. 不可剥夺 D. 循环等待
解析:答案:ABCD。A,一个资源一次只能被一个任务或线程占有。B,D,资源已经被占有,其他线程进行请求,请求不到就要保持和等待。C,资源被一个线程占用后不可剥夺,其他线程必须等待。 考的是操作系统原理的知识。
7、 有两个线程,最初 n=0,一个线程执行 n++; n++; 另一个执行 n+=2; 问,最后可能的 n 值? ( ) A. 1 B. 2 C. 3 D. 4
解析:答案:
考的是操作系统原理中的多线程编程的知识。
8、 下面哪些说法正确? ( ) A. 数组和链表都可以随机访问 B. 数组的插入和删除可以达到 O(1) C. 哈希表无法法进行范围检查 D. 二叉树无法进行线性访问
解析:
9、 基于比较的排序的时间复杂度下限是多少? ( ) A. O(n) B. O(n^2) C. O(nlogn) D. O(logn)
解析:
10、 对于下列程序,在一个 big endian 的 32 位的计算机上,b 的结果是? ( ) unsigned int a = 0x1234; char b = ((char)&a); A. 0x12 B. 0x34 C. 0x00 D. 程序崩溃
解析:
11、 编写函数求两个整数 a 和 b 之间的较大值。要求不能使用 if, while, switch, for, ?: 以及任何的比较语句。
解析:
#include <iostream>using namespace std;//找到 a 和 b 中大的数。 要求不能使用 if, while, switch, for, ?: 以//及任何的比较语句。int max(int a, int b){ int d = a - b; int flag = ((unsigned int)d) >> 31; int array[] = {a , b}; return array[flag];}int main(){ cout<<max(1,2)<<endl; cout<<max(100,10000)<<endl; cout<<max(2000,1000)<<endl; cout<<"PRess the enter key..."<<endl; cin.get(); return 0;}新闻热点
疑难解答