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

需积分: 10 3 下载量 195 浏览量 更新于2024-08-02 收藏 59KB DOC 举报
"南开二级C语言上机改错100题,包括两个题目,一个是改正程序错误找出整数的质因子,另一个是编写函数找出低于平均分的成绩并计数。" 在C语言编程中,正确性和效率是非常重要的考虑因素。这两个题目分别涉及了程序错误的修正以及数组处理和统计分析的基础知识。 首先,我们来看第一个改错题。程序的目标是找到输入整数的所有质因子。问题出现在函数`IsPrime`的定义和`if`语句的判断条件上: 1. 函数`IsPrime`定义末尾的分号是多余的,需要移除。正确的定义应为: ```c int IsPrime(int n); ``` 2. `if`语句的条件判断有误,应使用双否定表示逻辑非,即`!`前应无额外的括号。正确写法是: ```c if (!(n % i)) ``` 修正后的代码如下: ```c #include <conio.h> #include <stdio.h> int IsPrime(int n) { int i, m; m = 1; for (i = 2; i < n; i++) { if (!(n % i)) { m = 0; break; } } return m; } main() { int j, k; clrscr(); printf("请输入一个介于2和10000之间的整数:"); scanf("%d", &k); printf("\n该整数的质因子(如果存在)是:\n"); for (j = 2; j <= k; j++) if ((!(k % j)) && (IsPrime(j))) printf("%4d", j); printf("\n"); } ``` 接下来是第二个编程题,要求编写一个函数`fun`,找出成绩数组中低于平均分的元素个数,并将这些成绩存储到另一个数组中。题目中给出的部分源代码已经包含了计算平均分和遍历数组的基本框架,但缺少了将低于平均分的成绩存入`below`数组的逻辑。 在`for`循环内,当`score[i]`小于平均分`aver`时,我们需要将`score[i]`添加到`below`数组,并增加计数器`k`。修正后的`fun`函数如下: ```c int fun(int score[], int m, int below[]) { int i, k = 0; float aver = 0; for (i = 0; i < m; i++) aver += score[i]; aver /= m; for (i = 0; i < m; i++) { if (score[i] < aver) { below[k++] = score[i]; // 将低于平均分的成绩存入below数组 } } return k; // 返回低于平均分的人数 } ``` 现在,`fun`函数可以正确地计算出低于平均分的成绩数量,并将这些成绩保存到`below`数组中。主函数`main`中调用此函数后,可以进一步处理返回的结果。这两个题目旨在检验对C语言基本语法、条件判断、循环控制以及数组操作的理解和应用能力。