牛客网错题知识点整理C/C++(二)
- 一. 知识点以及错题
- 1.避免死锁的一个著名的算法是___________
- 2. 如果一个程序为多个程序所共享,那么该程序的代码在执行的过程中不能修改,即程序应该是____B______
- 3.C语言中引入++运算符的目的是为了提高编译后的目标程序的运行频率,请问这句话正确的吗?
- 4. 默认block size = 4k情况下,Ext3文件系统支持的最大文件大小是______
- 5. 在系统内存中设置磁盘缓冲区的作用是什么?
- 6.文件系统中在创建一个文件时,为它建立了______.
- 7. 下列对函数double add(int a, int b)进行重载,正确的是:
- 8.在64位操作系统中,下面程序返回什么结果?
- 9. 有以下程序,运行之后的结果是什么?
- 10. unsigned 和 void 在 C 中都是保留字。请问这句话的说法是正确的吗?
- 11.C 语言本身有输入输出语句?
- 12.设p是指针变量,语句p=NULL;等价于什么?
- 13. 已知ch为字符型变量,下列赋值错误的是?
- 14. 下面函数的结果是什么?
一. 知识点以及错题
1.避免死锁的一个著名的算法是___________
- 正确的答案为银行家算法:
参与者有客户,银行家以及资金。 客户相当于是申请资源的进程,银行家相当于是操作系统,而资金就相当于是资源。
银行家给客户分配资源之前,会预先估计资金分配的安全性。银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。否则,就不给顾客分配。
- 先入先出和优先级算法是进程调度算法。
- 银行家算法是死锁避免算法。
- 资源按序分配法是死锁预防算法。
死锁预防算法和避免算法的区别:死锁的预防是通过打破死锁的4个必要条件来实现,资源按序分配打破了其中的“环路等待”。但是死锁预防算法限制了进程对资源的请求,降低了系统效率,死锁避免算法是针对这个问题进行的改进。
2. 如果一个程序为多个程序所共享,那么该程序的代码在执行的过程中不能修改,即程序应该是____B______
A.可执行码
B.可重入码
C.可改变码
D.可再现码
可重入代码(Reentry code)也叫纯代码(Pure code)是一种允许多个进程同时访问的代码。为了使各进程所执行的代码完全相同,故不允许任何进程对其进行修改。程序在运行过程中可以被打断,并由开始处再次执行,并且在合理的范围内(多次重入,而不造成堆栈溢出等其他问题),程序可以在被打断处继续执行,且执行结果不受影响。
3.C语言中引入++运算符的目的是为了提高编译后的目标程序的运行频率,请问这句话正确的吗?
- 自加运算并不会提高运行时效率,反而会降低,只是为了代码更精简
4. 默认block size = 4k情况下,Ext3文件系统支持的最大文件大小是______
ext3还是使用15个inode来查找数据块,前12个为直接数据块,直接指向存储数据的数据块,接下来分别为一级间接块,二级间接块,三级间接块.
最大文件:前面直接指向12个数据块,一级间接块最大为block size / 4,block size就是数据块的大小,因为一个索引是4个字节,所以除以4,这样计算下来,最大的文件可以使用的总块数为:12 + (block size/4) + (block size/4)^2 + (block size/4)^3,如果block size大小为4K,则为(12 + 2^10 + 2^20 + 2^30) * 2^12 约等于4T。
5. 在系统内存中设置磁盘缓冲区的作用是什么?
为了减少磁盘I/O的次数
6.文件系统中在创建一个文件时,为它建立了______.
建立了文件目录项,不是目录文件;
7. 下列对函数double add(int a, int b)进行重载,正确的是:
int add(int a, int b, int c);
int add(double a, double b);
double add(double a, double b);
int add(int a, int b);
上述四个重载中,第四个是错误的,因为重载的要求是参数的类型和个数不同,对返回值的类型不做要求;
8.在64位操作系统中,下面程序返回什么结果?
int main(){
int *k[10][30];
printf("%d\n", sizeof(k));
return 0;
}
结果是:2400:8x30x10
9. 有以下程序,运行之后的结果是什么?
#include <stdio.h>
int main(void){
int a = 2, b = 2, c = 2;
printf("%d", a/b&c);
return 0;
}
易错点:这里是位运算&不是&&;
10. unsigned 和 void 在 C 中都是保留字。请问这句话的说法是正确的吗?
这句话是正确的的;
11.C 语言本身有输入输出语句?
这句话是错误的,C语言本身并不提供输入输出语句,其输入输出语句都是由函数来实现的;也就是说printf和scanf是函数的名字不是关键字;
12.设p是指针变量,语句p=NULL;等价于什么?
ASCII码第0个, 对应代码NUL, 对应转义字符\0, 对应字符解释空字符
13. 已知ch为字符型变量,下列赋值错误的是?
错误答案为:A
这里的’\‘不是字符,所以是错误的,C选项中的NULL表示(void*)0,可以理解为’\0’
14. 下面函数的结果是什么?
void func() {
int k = 1^(1 << 31 >> 31);
printf("%d\n", k);
}
1算术左移31位变为-128:
1000 0000 0000 0000 0000 0000 0000 0000
-128算术右移31 位变为-1:
1111 1111 1111 1111 1111 1111 1111 1111
-1与1异或得-2