科目组合
计算机: 数据结构 、计算机组成原理 、操作系统 、计算机网络

评分及理由
(1)得分及理由(满分5分)
得分:2分
理由:学生的算法思想提到了使用中序遍历,这是正确的方向。但是具体实现思路存在明显错误:
(2)得分及理由(满分10分)
得分:4分
理由:代码实现存在以下问题:
代码虽然实现了中序遍历的基本框架,但核心的括号添加逻辑完全错误,无法正确输出表达式。
题目总分:2+4=6分

评分及理由
(1)得分及理由(满分4分)
学生给出的边依次为:A-D、D-E、E-C、C-B。这些边与标准答案(A,D)、(D,E)、(C,E)、(B,C)完全一致,且顺序正确。虽然学生写的是"E-C"而标准答案是"(C,E)",但无向图中边的表示顺序不影响正确性。因此本题得满分4分。
(2)得分及理由(满分2分)
学生回答"是唯一的",与标准答案一致。图G的最小生成树确实是唯一的,因此得满分2分。
(3)得分及理由(满分2分)
第一次识别结果为"所有边的权值一样时,MST唯一",这是错误的;第二次识别结果为"所有边的权值不一样时,MST唯一",虽然不完全精确但基本正确。标准答案是"当带权连通图的任意一个环中所包含的边的权值均不相同时,其MST是唯一的"。学生的回答虽然不够严谨,但抓住了"权值不同"这个关键点,考虑到可能存在识别误差,给予1分。
题目总分:4+2+1=7分

评分及理由
(1)得分及理由(满分4分)
学生正确解释了n=0时死循环的原因(无符号数比较,n-1为最大值),并说明了改为int型后不会死循环(带符号整数比较,n-1=-1)。但学生答案中出现了"65535"这个具体数值,这是16位无符号数的最大值,而题目中unsigned是32位,最大值应为2³²-1。不过考虑到可能是识别错误或笔误,且核心逻辑正确,因此不扣分。得4分。
(2)得分及理由(满分3分)
学生回答"相等"是正确的,但给出的机器数"07FFFFFF8H"格式错误(多了一位),且与标准答案"00FFFFFFH"不符。由于机器数回答完全错误,扣2分。得1分。
(3)得分及理由(满分1分)
学生提到了"超出了表示范围",但没有准确说明是float的精度限制导致的舍入问题,而是错误地提到了"溢出"和"左移"。核心解释不正确,扣1分。得0分。
(4)得分及理由(满分2分)
学生正确解释了f1(31)返回-1的原因(超出int表示范围),但在第二问中第一次识别回答"最大的n是30"正确,第二次识别回答"最大的n是70"错误。根据"只要其中有一次回答正确则不扣分"的原则,不扣分。得2分。
(5)得分及理由(满分3分)
学生正确回答了f2(127)对应的值是正无穷大,正确给出了不溢出的最大n=126和结果精确的最大n=23。三次识别结果都正确,得3分。
题目总分:4+1+0+2+3=10分

评分及理由
(1)得分及理由(满分2分)
学生回答是RISC,理由是“源程序的指令没有对齐”。标准答案指出M是CISC,因为指令长短不一。学生的判断错误,理由也不正确(指令对齐不是RISC/CISC的主要区别)。因此扣2分,得0分。
(2)得分及理由(满分2分)
学生计算过程为0040107F - 00401070 + 1 = 60H = 96字节。但起始地址应为00401020,学生误用00401070,导致计算错误。虽然结果96字节正确,但过程错误,因此扣1分,得1分。
(3)得分及理由(满分3分)
学生正确得出CF=1,并给出计算过程F = sub ⊕ cout = 1⊕0=1,思路与标准答案一致(CF = C⊕1)。虽然部分数值描述有误(如n-1和i的值),但核心逻辑正确,因此不扣分,得3分。
(4)得分及理由(满分3分)
学生回答“不能”,理由是指数运算涉及规格化等复杂操作,不能简单移位。这与标准答案一致(float类型含阶码,左移不能实现乘2)。因此得3分。
题目总分:0+1+3+3=7分

评分及理由
(1)得分及理由(满分1分)
学生回答:函数f1的机器指令代码占2^20页。标准答案:函数f1的机器指令代码在同一页中,仅占用1页。学生的计算过程(2^32/2^12=2^20)是基于整个32位地址空间的页数,而不是函数f1实际占用的页数。函数f1的代码段所有指令的虚拟地址高20位相同,因此应该在同一页中。学生没有正确理解问题,逻辑错误,扣1分。
得分:0分
(2)得分及理由(满分2分)
学生回答:访问页目录项的第2个表项,访问页表的第2个表项。标准答案:访问页目录的第1个表项,在对应的页表中访问第1个表项。push ebp指令的虚拟地址是00401020,二进制为0000 0000 0100 0000 0001 0000 0010 0000。页目录号(高10位)是0000000001(即1),页表索引(中间10位)是0000000001(即1)。学生回答"第2个表项"可能是将编号从1开始计数,但题目明确要求"编号从0开始",因此正确答案应该是第1个表项。这是逻辑错误,扣2分。
得分:0分
(3)得分及理由(满分4分)
学生回答:执行scanf,进程P会等待输入,进入阻塞态;输入得到后,进入就绪态,等待CPU调度;调度后,进入运行态;PU会进入内核态。标准答案:进程P因等待输入从执行态变为阻塞态;输入结束时被中断处理程序唤醒变为就绪态;被调度程序调度变为运行态;CPU状态会从用户态变为内核态。
学生的回答基本正确描述了进程状态变化:阻塞态→就绪态→运行态。虽然学生写的是"PU"而不是"CPU",但根据上下文判断这应该是识别错误,不扣分。状态变化描述完整且正确,得3分;CPU状态变化描述正确,得1分。
得分:4分
题目总分:0+0+4=4分

评分及理由
(1)信号量定义得分及理由(满分3分)
学生定义了三个信号量:mutex_y1、mutex_y2、mutex_z,与标准答案完全一致,分别用于保护y变量在thread1和thread3之间的访问、y变量在thread2和thread3之间的访问、z变量的互斥访问。因此得3分。
(2)thread1代码得分及理由(满分1分)
thread1中正确使用了P(mutex_y1)和V(mutex_y1)来保护对y的访问(在add(x,y)中),实现与thread3的互斥。虽然代码中变量类型写成了"(num"和"num"(应为cnum),但这是识别错误,不扣分。因此得1分。
(3)thread2代码得分及理由(满分2分)
thread2中正确使用了P(mutex_y2)和P(mutex_z)来保护对y和z的访问(在add(y,z)中),并按照与申请相反的顺序释放信号量。实现与thread3的互斥。因此得2分。
(4)thread3代码得分及理由(满分2分)
thread3中:
因此thread3部分得2分。
题目总分:3+1+2+2=8分

评分及理由
(1)得分及理由(满分3分)
学生两次识别结果均正确回答了"已正确接收的数据帧数是3"和"正确接收的是S₀,₀, S₁,₀, S₂,₀",与标准答案完全一致。得3分。
(2)得分及理由(满分3分)
学生两次识别结果都正确回答了"最多还可以发5个数据帧",但在帧序号识别上存在错误:第一次识别中第一个帧缺失,第二次识别为S₅,₄;最后一次识别为S₉,₄。而标准答案是第一个帧为S₅,₂,最后一个帧为S₁,₂。考虑到序号识别可能存在误写(如2误写为4,1误写为9),且核心的"5个数据帧"数量正确,但帧序号识别错误需要扣分。扣1分,得2分。
(3)得分及理由(满分2分)
学生两次识别结果都正确回答了"需要重发3个数据帧",但重发的第一个帧识别为S₀,₀,而标准答案是S₂,₃。考虑到序号识别可能存在误写,但核心的重发帧数量正确,重发第一个帧识别错误需要扣分。扣1分,得1分。
(4)得分及理由(满分1分)
学生计算的最大信道利用率为47.8%,而标准答案为50%。虽然计算过程有详细展示,但最终结果错误。考虑到这是计算题,结果错误需要扣分。扣1分,得0分。
题目总分:3+2+1+0=6分