选择题
数据结构
T4 -----好题,对了,但是我觉得还是要把之前王道书上的所有关于这个的类型都弄一下,重新回顾
注意的是对于矩阵的压缩考了四年,对于这种题背公式是没用的,永远记不住,方法是现场推,根据题目给的条件,因为条件多种多样,有行存储、列存储,数组元素从0开始,从1开始,多种条件组合,背不完的,也背不了。
这道题是考三对角矩阵
可以看到三角矩阵按行进行压缩存储,那么除了第一行和最后一行以外,其他行都是每行三个元素,因此题目给出m30,30在数组中的位置,(i,j都从1开始),因此先找前29行存了多少个元素(即要算第I行就先算前I-1行总数)
第一行 2个
第二行 3个
第三行 3个
.
.
第 I-1行 3个
因此前I-1行共3*(I-1)-1=3I-4
而第I行看题目条件了,因为有可能是最后一行
但这题是第30行<100行,所以不是最后一行,而最后一行的算法是,如果是按行存储则这一行的存入数组元素的个数为J-I+2;而如果三角矩阵是按列存储,则最后一列存入数组的元素个数为I-J+2,自己推敲推敲就出来了。
因此按行优先存储三角矩阵(I,J>=1,数组从0开始存储的在数组的下标是)=3I-4+J-I+2-1 (减1是因为从0开始,算公式的时候是按元素个数来算的)=2I+J-3
因此这题答案就出来了=60+30-3=87
注意的是上三角矩阵J>=I,而下三角矩阵J<=I
C语言的一维数组是从0开始的
第一行 n个
第二行 n-1个
.
.
第I-1行 n-(I-1)+1=n-I+2个
第I行 J-I+1个(按行优先是这样算),而如果是按列优先,上三角最后一列存i个
因此共计=[(I-1) * (2n-I+2)/2]+J-I+1个元素
但在数组中的下标是==[(I-1) * (2n-I+2)/2]+J-I
代入即可获得答案50
这题要求M7,2.已经不在上三角的J>=I内了,因此要用对称矩阵的性质,存储M7,2的元素等价于存储M2,7的元素。
按列优先存储上三角
第一列 1个
第二列 2个
.
.
第J-1列 J-1个
第J列 I个
共计 [J*(J-1)/2]+I个
而需要存入C语言的一维数组,C语言的数组从0开始
因此存入的下标=[J*(J-1)/2]+I-1
代入可得22
扩充:改题 而如果这题是对称矩阵求M7,2,按行优先存储,存入C语言数组中,满足下三角矩阵性质I>=J
第一行 1个
第二行 2个
.
.
第I-1行 I-1个
第I行 J个
共计=[I*(I-1)/2]+J个
存入从0开始的C语言一维数组下标=[I*(I-1)/2]+J-1.
代入M7,2,可得22
扩充:改题 而如果这题是对称矩阵求M7,2,按行列先存储,存入C语言数组中,满足下三角矩阵性质I>=J
第一列 n个
第二列 n-1个
第J-1列 n-(J-1)+1=n-J+2个
第J列 I-J+1个
共计=[(2n-J+2)*(J-1)/2]+I-J+1
存入从0开始的C语言一维数组下标=[(2n-J+2) * (J-1)/2]+I-J.
代入M7,2,可得15
如果这么考还有另一种方法,直接看,因为一列10个,只要到第二列,而第二列要存储的元素个数=I-J+1,因此存储了10+7-2+1=16个,从0开始存储,因此下标为15
计算机组成原理
考点:Cache命中率,这题有坑,踩了两次了,裂开!!!
数据区大小为1KB,块大小为16B,因此Cache能装入的块数=1KB/16B=64块,而一个块中能装入int4B的数据的个数=16B/4B=4个,一个Cache块能装4个int类型的数据,而把Cache数据区装满的int类型个数=256个int类型,说明1000次循环,没256次循环就会把每一个块都替换掉,且第一次访问修改数据后,继续访问该块进行数据修改,因此每次循环都需要访问2次。可以以整个Cache来分析,为64/(256*2)=1/8,64块每次第一次都会缺失,而后面不会,共256次循环,每个循环2次访问,共访问256 *2=512次
也可用一个Cache块来分析,一个Cache块可装4给int,第一次缺失,而一个Cache块,访问了8次,因此为1/8=12.5%
T19
数据冒险指令对:写后读就是I2、I3发生数据冒险,I2必须先写入寄存器,I3才能读。
读后写:只有本条指令读寄存器后,下一条指令才能写(乱序发射发生冒险)
写后写:本条指令写回寄存器后,下一条指令才能写
T20
错误原因:对总线结构忘了。错误选了C,当时想着指令执行肯定要改变控制信号,就觉得会改变其控制信号,就选了C。但是这里说的是指令执行的过程中,而不是时钟信号到来的时候。
单周期的处理器,配合多总线结构数据通路(右图)
多周期的处理器,配合单总线结构数据通路(左图)
操作系统
T30
错误原因:排除了A、D,选了B,试了a、b的值会改变不同,就选了B,但是尽管对a=x、b=x进行互斥,但是a和b的值还是会不同,没法解决它值会变化的问题,原因在于T3和T4的同步问题导致了a和b的值不同。而如果x+1=1和x+=2不互斥访问,会导致其值发生变化,原因在于对x的取数和修改不是一气呵成的执行。
计算机网络
T36