文章

201

粉丝

1

获赞

100

访问

41.8k

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


评分及理由

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

得分:4分

理由:学生的基本设计思想与标准答案基本一致,都指出通过中序遍历并在非根非叶结点处添加括号来得到中缀表达式。但学生的描述中“若其不为根结点也不为叶结点时在访问左子树前输出左括号”存在一点不严谨:标准答案中是通过深度参数(deep>1)来判断是否需要加括号,这意味着除了整个表达式的最外层(根结点)不加括号,其他内部子表达式都需要加括号,而学生的描述“不为根结点也不为叶结点”在逻辑上可能遗漏了某些情况(例如一个内部结点如果只有一个孩子?但表达式树是二叉树,操作符结点通常有两个孩子,所以实际影响不大)。由于核心思想正确,仅扣1分。

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

得分:4分

理由:学生的代码框架大致正确,采用了中序遍历并在遍历前后加括号的思路。但存在多处逻辑错误和语法错误:
1. 函数参数类型错误:void Pt(BTree R) 应为指针类型 BTree* RBTree *R
2. 条件判断 if (R->left || R->right && R != T) 存在运算符优先级问题,实际意图是当结点有孩子且不是根结点时加括号,但逻辑表达式可能不符合预期,且 T 未定义(应为传入的根结点指针)。
3. printf 使用错误:Printf (%c, "(") 应为 printf("(");且 printf("%c", "R->data")"R->data" 是字符串字面量,应改为 printf("%s", R->data)
4. 缺少对叶结点(操作数)的直接输出处理,标准答案中专门判断叶结点并输出操作数,而学生的代码对所有结点都执行相同的加括号和输出操作符的流程,这会导致叶结点也被错误处理。
5. 代码结构不完整,没有体现深度控制,可能造成括号嵌套错误。
由于这些逻辑和语法错误较多,严重影响了算法的正确性,故扣6分。

题目总分:4+4=8分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发