南开二级C语言上机改错与编程解析

需积分: 0 5 下载量 187 浏览量 更新于2024-12-22 收藏 63KB DOC 举报
"南开大学二级C语言课程的100道上机改错题,包含编程题目,涉及质因子的查找和计算低于平均分的人数。" 在C语言编程中,改错题通常用于训练学生的编程技能和逻辑思维。这两道题目分别涉及寻找整数的质因子和统计低于平均分的分数。 首先,我们来看第一道改错题。程序的目的是找出一个整数的所有质因子。在给定的代码中,存在两个错误: 1. 函数`IsPrime`定义时的分号被误写在了函数声明的末尾,这会导致编译错误。应将分号去掉,正确写法为: ```c IsPrime(int n) ``` 2. 在`if`语句的条件判断中,使用了错误的逻辑操作符。应当使用`!`来取反,而不是`!`与`(`的组合,所以应将`if!(n%i)`更改为`if(!(n%i))`。修正后的代码片段如下: ```c if (!(n % i)) { m = 0; break; } ``` 这个修正后的`IsPrime`函数会检查输入的整数`n`是否为质数,如果是,则返回1,否则返回0。 接下来是第二道编程题,目标是统计并存储低于平均分的分数。题目给出的代码框架中,有两个关键部分需要填写: 1. 计算平均分的部分已经给出,但需要注意的是,变量`aver`应初始化为0,而不是声明时赋值。修正后的代码为: ```c int i, k = 0; float aver = 0; for (i = 0; i < m; i++) aver += score[i]; aver /= m; ``` 2. 统计低于平均分的分数并存入`below`数组。这部分应在`for`循环中完成,当分数低于平均分时,将分数添加到`below`数组,并累加计数器`k`。修正后的代码为: ```c for (i = 0; i < m; i++) { if (score[i] < aver) { below[k++] = score[i]; } } ``` 这里,`k++`用于递增计数器,表示找到了一个低于平均分的分数。 完成这两个修正后,程序将能够正确执行其指定的任务。在实际编程学习中,这样的改错练习有助于提高对C语言语法的理解,培养调试和修复代码错误的能力。