牛客网错题知识点整理C/C++(三)
- 一. 知识点以及错题
- 1. 进程申请不到CPU时,其状态将变为阻塞状态,这样的说法准确吗?
- 2. const int &test,这样的写法对不对,为什么?
- 3.设char型变量x中的值为10100111,则表达式(2+x)^(~3)的值是什么?
- 4. 关于C语言,下列指针变量的定义和解释,均正确的是();
- 5.在文件的索引节点中存放直接索引指针10 个,一级和二级索引指针各 1 个。磁盘块大小为 1KB,每个索引指针占 4 个字节。若某文件的索引节点已在内存中,则把该文件偏移量(按字节编址)为 1234和 307400 处所在的磁盘块读入内存,需访问的磁盘块个数分别是()。
- 6.下列for语句执行的次数为?
- 7.函数指针与指针函数的区别?
- 8. 网络利用率是全网络的信道利用率的多少?
- 9. 逻辑文件有两种形式,流式文件和记录式文件,源程序属于记录式文件,学生选课文件属于流式文件;
- 10.在一个IP数据包到达目的地之前,可能发生很多情况,这个过程可能会发生什么情况?
- 11.下列C代码中,不属于未定义的是?
- 12.下列代码的输出结果是什么?
- 13. 下列关于线程、进程、协程的说法正确的是?
- 14.内存管理中的 LRU 方法是用来管理什么的?
- 15.单处理系统中,进程P1,P2,P3处于就绪队列,进程P4,P6处于等待队列,P5正占用处理器运行,以下关于进程调度时机分析正确的是( )
一. 知识点以及错题
1. 进程申请不到CPU时,其状态将变为阻塞状态,这样的说法准确吗?
进程若已获得除CPU以外的所有运行所需资源,此时申请CPU的得不到满足,应该依然处于就绪状态。正在运行的进程,因为某种原因而暂停,此时处于阻塞状态(也称等待状态、挂起状态)
2. const int &test,这样的写法对不对,为什么?
这样的写法是错误的,因为引用在使用的时候必须要初始化,但是指针不需要;
3.设char型变量x中的值为10100111,则表达式(2+x)^(~3)的值是什么?
这道题的错误之处在于未将3写成00000011,然后在取反;
4. 关于C语言,下列指针变量的定义和解释,均正确的是();
A选项中,[]的优先级高于*,所以可以写成这样int* p[10],可以理解为是一个数组,它的数据类型是指向int的指针变量,所以是一个指针数组;
B选项的写法是错的
C选项必须要给定一个数组元素的个数的值,int (*p)[n];就是正确的;
D选项中,应该同上用行指针指向一个二维数组, 而非一个int型的二级指针;
5.在文件的索引节点中存放直接索引指针10 个,一级和二级索引指针各 1 个。磁盘块大小为 1KB,每个索引指针占 4 个字节。若某文件的索引节点已在内存中,则把该文件偏移量(按字节编址)为 1234和 307400 处所在的磁盘块读入内存,需访问的磁盘块个数分别是()。
解析:
根据索引的知识可知
(1)直接索引:101KB = 10KB;
(2)一级索引:1KB/4B = 256;2561KB = 256KB
(3)二级索引:2562561KB = 64MB;
因为1234<10kb,所以,直接索引访问一次;
10+256 <307400 < 64MB,所以二级索引,在访问一次,共三次;
6.下列for语句执行的次数为?
int i, j;
for (i = 0, j = 5;i = j; ){
cout<<i<<j<< endl;
i++;
j--;
}
这里的条件中是i = j, 不是i==j,所以当i大于0时条件成立,故执行的次数为5次;
7.函数指针与指针函数的区别?
函数指针:指向函数的指针;
指针函数:是返回值为指针的函数
8. 网络利用率是全网络的信道利用率的多少?
利用率,首先应该分清楚研究的是哪一个利用率,是单一信道的利用率还是整个网络的所有信道利用率:信道利用率是指某一信道在时间单位内有无数据通过的百分比,数值在0-1之间,而整个网络的利用率则是全网络的信道的通道利用率的加权平均值;
9. 逻辑文件有两种形式,流式文件和记录式文件,源程序属于记录式文件,学生选课文件属于流式文件;
这样的分类是错误的;反过来了;
记录式文件是一组有序记录的集合,可分为记录式文件和不定长记录文件;
记录式的有结构文件可以把文件中的记录按不同的方式排列;
流式文件时有序字符的集合,流式文件无结构,所以用户可以方便的进行操作;
10.在一个IP数据包到达目的地之前,可能发生很多情况,这个过程可能会发生什么情况?
可能会成为碎片,但是不会重组;
参考大佬解析:
11.下列C代码中,不属于未定义的是?
A选项中,编译器无法选择自增和赋值的顺序,所以属于未定义;
B选项中,“hello”属于字符串长点,对字符串常量进行修改,所以会出现段错误,也属于未定义
C选项中,只是通过指针找到第二个字符并将它赋值给一个字符变量,并没有改变这个字符串常量,所以不属于未定义行为;
12.下列代码的输出结果是什么?
int i = -1;
unsigned j = 1;
if (j > i)
printf(" (j>i)成立\n");
else
printf(" (j>i)不成立\n");
if (i < j)
printf(" (i<j)成立\n");
else
printf(" (i<j)不成立\n");
如果在C语言中遇到unsigned和int,系统会自动将int自动转化成unsigned int;
-1转成无符号,会变成255,左移i>j;
13. 下列关于线程、进程、协程的说法正确的是?
A选项中,线程是运算调度的最小单位
C选项中,线程的堆是共享的,但是每个线程有自己独立的栈空间;
摘自网络—
14.内存管理中的 LRU 方法是用来管理什么的?
虚拟内存的分配和物理内存的释放;
15.单处理系统中,进程P1,P2,P3处于就绪队列,进程P4,P6处于等待队列,P5正占用处理器运行,以下关于进程调度时机分析正确的是( )
进程调度时机:当前运行进程主动放弃处理机和当前运行进程被动放弃处理机。
主动放弃处理机:
(1)进程正常终止 运行态->终止态
(2)运行过程中发生异常而终止 运行态->终止态
(3)进程主动请求阻塞 如等待I/O 运行态->阻塞态
被动放弃处理机:
(1)分给进程的时间片用完 运行态->就绪态
(2)有更紧急的事需要处理 如I/O中断 运行态->就绪态
(3)有更高优先级的进程进入就绪队列 运行态->就绪态