1、写出输出:char array[] = “abcde”; char* s = array;
答案:6545
2、什么是用户级线程和内核级线程?区别。
内核线程:线程切换由内核控制,切换的时候,要从用户态进入内核态,切换完毕要从内核态返回用户态;可以很好的利用smp,即利用多核cpu。windows线程就是这样的。
用户级线程:用户态程序自己调度线程切换,不需要内核干涉,少了进出内核态的消耗,但不能很好的利用smp。目前linux pthread大体是这么做的。
3、从C++文件到生成exe文件经过哪三个步骤?
1)用户点击编译程序时,编译程序将C++源代码转换成目标代码,目标代码通常由 机器指令和记录如何将程序加载到内存的信息组成。其后缀通常为.obj或.o;
2)目标文件中存储的只是用户所编写的代码的转换结果,并不包括底层的操作指令,不能直接运行。例如程序包 iostream 实现了所有有关输入和输出的操作,并且其所有实现操作的机器代码都放在一个库中,库是对已实现的程序经编译后所产生的代码集合,用户可以在程序中直接使用库。
3)一个被称为链接程序的特殊程序将用户程序的目标文件和iostream库中必要代码链接起来生成一个可执行文件,其后缀通常为.exe 。这个可执行文件中包含了执行该用户程序所需要的所有机器代码,其过程大体如下所示:
4、有个二维数组A(6*8),每个元素占6字节,起始地址为1000,请问最后一个元素A[5][7]的起始地址为??? 数组A占内存大小为??? 假设以行优先,则A[1][4]起始地址为???
答:A[5][7]起始地址:1000+(6*8-1)*6=1282
数组A占用内存:6*8*6=288字节
A[1][4]起始地址:(1*8+4)*6+1000=1072
5、用C语言把双向链表中的两个结点交换位置,考虑各种边界问题。
6、.dll,.lib,*.exe文件分别是什么,有什么区别?
用C语言把双向链表中的两个结点交换位置,考虑各种边界问题。
7、如右图所示,一个n*m的矩阵M中,标记0为白色区域,标记1为黑色区域,白色区域代表可以行走的区域,黑色区域代表阻挡,可以看到,如果在这个矩阵中只向上,下,左,右移动,那么有某些白色区域是不能到达的,我们称为这样的矩阵不是全相通的。
(1) 如何验证一个矩阵是不是全相通?请给出算法思路。
(2) 计算出你的算法的空间复杂度和时间复杂度
(3) 用C/C++编写出代码,并在适当地方加上注释。
附加题(20):使用八叉树算法把24位真彩色转化成256色。24位真彩色包括R,G,B颜色,每种颜色8位。
有11盆花,围成一圈,要求每次组合时,每盆花相邻的两盆花与上次不同,请问有多少排列方法?
貌似是组合数学问题。。复习一下组合数学吧。。男士和女士跳舞的变形。。
集合问题,一个村有70人,进行PVP比赛,共有4个职业:骑士,牧师,法师,刺客。
已知有34人报名骑士,
24人报名牧师,
13人报名法师,
32人报名刺客,
12人既报名骑士又报名牧师,
13人既报名牧师又报名法师,
……
3人报名骑士,牧师和法师,
……
请问有多少人没有报名?以上数字为捏造。
输出结果是什么?
改错题:
2只宠物合成,1只有5技能,1只有4技能,每个技能有a%概率遗传,请问刚好有7个技能遗传成功的概率是?
输出结果是什么?