文章

81

粉丝

0

获赞

0

访问

2.2k

头像
2018年(408)计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年12月3日 16:50
阅读数 7


评分及理由

(1)得分及理由(满分3分)

得分:1分

理由:学生的基本设计思想是“在数组中依次查找1,2,3,...,n”,这是一种可行的思路,即从最小的正整数1开始,检查它是否在数组中,如果不在则它就是答案,否则继续检查2,依此类推。这个思路是正确的,但描述过于简略,没有详细说明如何高效地“查找”(例如,没有提及如何利用数组下标进行原地标记等优化方法),也没有明确说明最坏情况下的查找范围(是到n还是n+1)。因此,虽然思路方向正确,但不够完整和清晰,扣2分。

(2)得分及理由(满分8分)

得分:2分

理由:学生尝试用C语言描述了算法,但代码存在严重的逻辑错误和语法错误,无法正确实现所描述的功能。

  1. 函数原型不完整:int find (a[],n) 缺少参数类型,应为 int find(int a[], int n)
  2. 循环变量初始化和范围错误:i=1, j=1 且循环条件为 i<nj<n,这忽略了数组下标从0开始,并且查找的正整数范围应该是1到n+1,而不仅仅是1到n-1。
  3. 核心逻辑混乱:内层循环中的多个if语句逻辑不清,if(i!= count 是语法错误(括号不匹配),countlength 的计数逻辑无法正确判断是否找到当前正整数i。代码意图似乎是如果遍历完整个数组都没找到i就返回i,但 lengthcount 在内层循环中每次迭代都增加,导致它们始终相等,判断条件 if (length == count) 永远为真,这会导致算法在第一次外层循环(i=1)时就提前返回1,无论数组内容如何。
  4. 代码不完整:函数缺少返回值的情况(例如,如果1到n都出现了,应该返回n+1)。
由于代码存在根本性的逻辑错误,不能正确解决问题,因此扣分严重。考虑到学生有正确的思路方向(暴力查找),给予基础分2分。

(3)得分及理由(满分2分)

得分:0分

理由:学生作答中没有说明算法的时间复杂度和空间复杂度。根据题目要求,这部分需要独立说明,但学生的答案中完全没有涉及,因此不得分。

题目总分:1+2+0=3分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发