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

评分及理由
(1)得分及理由(满分10分)
得分:10分。
理由:学生正确判断“该方法不能求得最短路径”,并给出了反例,符合标准答案的核心要求。学生构造的图例中,A→B权值为1,B→C权值为5,A→C权值为2;按题目算法,从A出发会先选择离A最近的未访问顶点B,再选择C,得到路径A→B→C,长度为6;而实际最短路径为A→C,长度为2。该反例能够说明按照题目方法不一定能得到最短路径,逻辑正确,举例有效。虽然图的规模与标准答案中的示例不同,但思路与标准答案一致,属于正确作答,不扣分。
题目总分:10分

评分及理由
(1)得分及理由(满分5分)
得分:4分。
理由:学生的设计思想是通过先遍历一遍链表得到长度 n,再将“倒数第 k 个”转化为“正数第 n-k+1 个”结点,然后再次遍历定位。该思路本身是正确的,能够解决问题,因此不因与标准答案“快慢指针一遍扫描”不同而扣分。但是,标准答案和评分说明明确指出:采用两遍扫描才能得到正确结果的,最高分10分(总分15分中思想和步骤、代码合起来上限10分)。在设计思想上,两遍扫描并非“尽可能高效”,因此不能给满分。基本设计思想完整、正确,扣1分较为合理。
(2)得分及理由(满分5分)
得分:3分。
理由:详细步骤基本描述了“第一次遍历求长度 n,第二次遍历找第 n-k+1 个结点”的过程,主体正确。但存在以下问题:
① 第③步写“if(p->link == NULL) 得到链表长度为n”,逻辑上应先移动 p 再判断 p 是否为空,或判断 p->link 为空后仍需确认计数是否对应尾结点;否则当链表为空、或循环结束时长度统计容易出错。该问题在代码中表现为 while(p->link != NULL) 时 i 统计的是边数而不是结点数,若链表只有头结点,n=0,但实际长度也为0,尚可;若链表有1个结点,p=list,p->link=NULL 不进入循环,i=0,n=0,实际长度应为1,导致后续 n-k+1 计算错误。因此步骤中关于求链表长度的描述不够准确。
② 第⑥步“if(j == n-k+1) 输出q->data,否则转⑤”没有明确说明失败时返回0,但后文代码有体现,规范性稍弱。
综上,步骤思路正确但边界和循环结束条件存在逻辑瑕疵,扣2分。
(3)得分及理由(满分5分)
得分:3分。
理由:代码整体采用两遍扫描,思路正确,最终在多数正常输入下可以得到正确结果,但存在以下逻辑错误:
① 求链表长度部分:
int i=0;
Node *p = list;
while(p->link != NULL){
p = p->link;
i++;
}
int n = i;
该循环统计的是“从第一个结点到最后一个结点移动的次数”,当链表至少有1个数据结点时,i 正好等于数据结点个数;但当链表为空(只有头结点)时,i=0,n=0,此时若 k 为正整数,n-k+1<=0,返回0,正确。对于非空链表,n 实际等于数据结点个数,这一点基本正确。但注意题目给出的是带头结点的单链表,list 指向头结点,list->link 是第一个数据结点。代码中 p=list,循环条件 p->link!=NULL,等价于从第一个结点开始数,最终 i 确为数据结点个数。因此求长度部分在常规情况下是正确的,识别结果中的“→”按题目结构应为“->”,不扣分。
② 输出语句 printf(q->data); 格式不正确。若 data 为 int,应写为 printf("%d", q->data);;若为其他类型也需给出格式串。这是实现上的错误,但属于细节,扣1分。
③ 边界条件 if(n-k+1 <= 0) return 0; 可以排除 k 超过链表长度的情况,正确。
④ 第二遍查找中,while(q->link != NULL) 与 q=q->link; j++; if(j==n-k+1) 的配合:当目标位置恰好是最后一个结点时,j 会在 q 指向最后一个结点时等于 n,循环条件 q->link != NULL 仍成立,可以进入循环并判断成功;但如果目标位置是最后一个结点之后的逻辑位置,则已被 n-k+1<=0 排除。因此第二遍在正常范围内能够找到目标。代码逻辑基本正确。
⑤ 函数名、结构体名与题目不完全一致(题目为 LinkList、LNode,学生为 Node),但作为算法描述可接受,不扣分。
综合来看,代码实现了正确思路,但未达到“一遍扫描”的高效要求,且存在 printf 格式错误和部分边界描述不严谨,给3分。
题目总分:4+3+3=10分

评分及理由
(1)得分及理由(满分4分)
得分:4分。
理由:学生正确计算出中断方式下CPU用于该外设I/O的时间占比为2.5%。其计算思路是:先算出外设每次中断间隔对应的CPU时钟周期数 \(4B / (0.5MB/s) \times 500MHz = 4000\),再算出每次中断服务及开销所需的时钟周期数 \(5 \times (18+2)=100\),最后得到占比 \(100/4000=2.5\%\)。虽然与标准答案“先算每秒中断次数,再算总时钟周期”的表述顺序不同,但逻辑等价且结果正确。第2次识别结果中出现的“118”根据上下文及第1次识别结果判断为识别误写,不扣分。
(2)得分及理由(满分4分)
得分:4分。
理由:学生正确计算出改用DMA方式后CPU用于该外设I/O的时间占比为0.1%。其计算思路是:先算出每次DMA传送间隔对应的CPU时钟周期数 \(5000B / (5MB/s) \times 500MHz = 500000\),再结合每次DMA预处理和后处理总开销500个时钟周期,得到占比 \(500/500000=0.1\%\)。该思路与标准答案等价,结果正确。
题目总分:4+4=8分

评分及理由
(1)得分及理由(满分13分)
学生作答与参考答案一完全一致,核心逻辑正确。具体分析如下:
学生作答思路与标准答案一一致,所有节拍功能和控制信号均正确,无逻辑错误。因此给满分13分。
题目总分:13分

评分及理由
(1)得分及理由(满分7分)
本题满分为7分,学生作答最终得分为7分。
理由:
mutex=1、empty=N、以及两个同步信号量。虽然两个同步信号量的命名与标准答案(odd/even)不同,但标准答案允许合理命名,且学生注释中明确说明分别用于奇数和偶数。信号量含义完整,无逻辑缺失。P(empty) 判断是否有空单元,再执行 P(mutex) 互斥访问缓冲区,put(x) 后执行 V(mutex) 释放缓冲区,最后根据 x 的奇偶性分别执行 V(full_O) 或 V(full_E) 通知 P2 或 P3。与标准答案一致。P(full_O) 等待奇数,再执行 P(mutex) 互斥访问缓冲区,执行 getodd() 和 countodd(),最后执行 V(mutex) 和 V(empty) 释放缓冲区并通知 P1。与标准答案一致。P(full_E) 等待偶数,再执行 P(mutex) 互斥访问,执行 geteven() 和 counteven(),最后执行 V(mutex) 和 V(empty)。与标准答案一致。关于注释与命名“笔误”的判定:学生两次识别结果中,注释分别写为“缓冲区已利用的偶数个数”和“缓冲区已利用的奇数个数”,但因为代码逻辑与注释存在对应不一致(full_O 实际用于奇数,full_E 实际用于偶数),且识别结果本身存在不稳定,属于识别或书写时的笔误。根据打分要求第6条“对于判定为误写的字符,误写导致的逻辑错误不扣分”,以及第2条“主要判断核心逻辑是否正确”,该笔误不影响信号量同步与互斥的核心逻辑(P1根据奇偶性分别V不同信号量,P2/P3分别P对应信号量),因此不扣分。
其他说明:学生代码中 while(true) 循环结构是标准的生产者-消费者模型写法,与标准答案一致。学生将 countodd()/counteven() 放在临界区内执行,标准答案也将其放在 V(empty) 之后但在 V(mutex) 之后,本质上无区别,不影响互斥,且不会导致死锁。思路与标准答案完全一致,无逻辑错误。
题目总分:7分

评分及理由
(1)得分及理由(满分6分)
得分:6分。
理由:学生正确计算了三个虚地址的访问时间,过程与标准答案一致:
学生逻辑清晰,计算结果正确,符合标准答案,得满分6分。
(2)得分及理由(满分2分)
得分:2分。
理由:学生正确得出虚地址1565H的物理地址为101565H,并说明了淘汰0号页面的理由:驻留集大小为2,采用LRU局部淘汰策略,访问1565H前已访问2号页,结合初始页表,0号页比2号页更早被访问,因此淘汰0号页,将101H页框分配给1号页。理由充分,结果正确,得满分2分。
题目总分:6+2=8分

评分及理由
(1)得分及理由(满分3分)
得3分。学生正确判断出需要划分2个子网,主机号至少7位,子网号1位,并给出子网划分为202.118.1.0/25和202.118.1.128/25。虽然未明确说明“每个子网可用地址数不少于120”,但核心划分结果正确,符合标准答案要求。识别结果中“$2^6<120<2^7$”或“$2^6<12<2^7$”属于识别误差,不扣分。
(2)得分及理由(满分4分)
得4分。学生给出的R1路由表完整包含到局域网1、局域网2、域名服务器主机路由和互联网默认路由,接口和下一跳均正确。子网掩码255.255.255.128和255.255.255.255使用正确,默认路由0.0.0.0/0正确。与标准答案一致,不扣分。
(3)得分及理由(满分2分)
得2分。学生正确采用路由聚合,将局域网1和局域网2聚合为202.118.1.0/24,下一跳为202.118.2.1,接口为L0,与标准答案一致。
题目总分:3+4+2=9分