您的位置:首页 > 编程语言 > C语言/C++

C++ 操作系统 部分笔试选择题总结

2017-08-15 14:15 204 查看
1.假如在一个函数中有一下代码()

void fun()

{

  int * p = (int*)malloc(sizeof(int));

 int * q = p;

}

A. p指向的空间在堆上,q指向的空间在栈上

B. p指向的空间在栈上,q指向的空间在堆上

C. p指向的空间在堆上,q指向的空间在堆上

D. p指向的空间在栈上,q指向的空间在栈上

答案:D

解析:因为p指向的空间是由malloc开辟出来的,而我们又知道malloc函数是在堆上开辟的空间,所以p指向的空间在堆上,A. p指向的空间在堆上,而q和p指向了同一块儿空间,所以q指向的空间也在堆上.

2.给出下列程序的输出结果()

char *p = "helloworld";

char q[ ] = "helloworld";

printf("%d  %d  %d  %d",sizeof(p),strlen(p),sizeof(q),strlen(q));

A 4 10 4 10                   B 4 10 10 10                     C 4 11 10 10                D 4 10 11 10

答案:D

解析: 首先p是一个指针,在32位下指针是4个字节,所以sizeof(p)是4,strlen求的是字符串的有效长度,所以两个都是10,求sizeof(q)就求的是数组的字节数要算上 斜              杠0,所以是11. 

总结:

sizeof 和strlen的区别:

1.sizeof操作符的结果类型是size_t,该类型保证能容纳实现所建立的最大对象的字节大小。 

2.sizeof是操作符,strlen是库函数。 

3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。

4.数组做sizeof的参数不退化,传递给strlen就退化为指针了。 

5..strlen的结果要在运行的时候才能计算出来,时用来计算字符串的长度,不是类型占内存的大小。

6. 当适用了于一个结构类型时或变量, sizeof 返回实际的大小,当适用一静态地空间数组, sizeof 归还全部数组的大小。

3.对于int*p[5]的描述,下列选项正确的是()

A   p是一个具有5个元素的指针数组,每个元素是一个int类型的指针。

B  p[5]表示某个数组的第5个元素的值

C  p是一个指向数组的指针,所指向的数组是5个int类型的元素

D  p是一个指向某个数组中第5个元素的指针,该元素是int类型的变量

答案;A

解析:int*p[ 5] ,[ ]的优先级高于*,所以p先与[ ]结合成数组,在与*结合成指针数。

总结:

指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身的大小决定,每一个元素都是一个指针,在32 位系统下任何类型的指针永远是占4 个字节。
数组指针:首先它是一个指针,它指向一个数组。在32 位系统下任何类型的指针永远是占4 个字节,至于它指向的数组占多少字节,不知道,具体要看数组大小。

4.已知一个线性表(38,25,74,63,52,48),假定采用散列函数h(key) = key%7计算散列地址,并散列存储在散列表A[0...6]中,若采用线性探测方法解决冲突,则在该散列表上进行等概率成功查找的平均查找长度为()

A  1.5    B 1.7    C 2.0     D 2.3

答案:C

解析:对线性表中的元素对7求模取余,得到的值作为下标



5.下列关键码序列哪些是一个堆()

A  90  31  53 23 16  48

B  90  48  31  53  16  23

C 16  53  23  90  31  48 

D  16  31  23  90  53  48

答案:AD

解析:

堆有最大堆和最小堆,最大堆的堆顶元素是堆中最大的元素,并且最小堆的堆顶元素是堆中最小的元素。堆可用二叉树的形式来表示,但在最大堆中根的值要大于左右子树,在最小堆中,根的值要小于左右子树的。



6.有三个程序J1,J2,J3.程序在单核CPU执行时,三个程序需要的资源如下所示,优先级高的程序可以抢占优先级低的程序的CPU,但不能抢占IO,问当所有任务执行完毕时,共消耗的的时间是()



A  170ms        B 160ms       C 120ms        D 130ms

答案:D

解析:由题优先级高的程序可以抢占优先级低的程序的CPU,但不能抢占IO,所以J1先开始执行cpu,而J2是先IO的,所以J2的IO先执行,J2的IO执行时间为50ms,此时J1的CPU已经结束,于是可以开始J1的IO,对于J2来说,当J1的CPU结束之后,J2的IO还没有结束,所以要等上10ms后,J2的CPU才开始执行。接着J3的CPU和IO在执行。



CPU时间共100ms ,IO时间为130ms
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: