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

需积分: 9 99 下载量 74 浏览量 更新于2024-08-01 1 收藏 96KB DOC 举报
"2010年南开大学C语言编程练习题目,包含改错题和编程题,旨在考察考生对C语言基础知识的理解和应用能力,特别是关于质因子的判断和找出低于平均分的分数的处理。" 在给定的题目中,我们可以提炼出以下两个知识点: ### 1. 质因子的判断与输出 改错题1的目标是编写一个程序,读取用户输入的整数并找出其所有的质因子。在这个过程中,我们需要理解质因子的定义,即一个数除1和自身外,没有其他正因数的数。程序中存在一处错误,需要进行修正: - 错误点:`IsPrime` 函数定义末尾的分号。这个分号使得函数定义成为一个空语句,实际上`IsPrime`函数的实现被放置在了另一个独立的代码块中,导致调用错误。修正方法是去掉分号,使`IsPrime`函数定义完整。 - 正确的条件检查:在循环中,判断是否能整除时,原始代码使用了`if!(n%i)`,这实际上是语法错误。应改为`if (!(n%i))`,确保条件检查正确。 ```c IsPrime(int n) { int i, m; m = 1; for (i = 2; i < n; i++) { if (!(n % i)) { // 修改条件检查 m = 0; break; } } return (m); } ``` ### 2. 计算低于平均分的分数数量及存储 编程题1要求编写一个函数`fun`,该函数接收一个成绩数组和数组长度,计算并返回低于平均分的人数,并将这些分数存入另一个数组。关键在于计算平均分和遍历数组来找出低于平均分的元素: - 平均分计算:首先,遍历整个数组,累加所有分数,然后除以人数得到平均分。 - 存储低于平均分的分数:再次遍历数组,将低于平均分的分数添加到`below`数组中,并计数。 ```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; // 返回低于平均分的分数个数 } ``` 这两个题目主要考察了C语言的基础语法、逻辑判断、循环控制以及数组操作等核心概念,同时也是对算法设计和问题解决能力的检验。对于初学者,这类题目有助于巩固和提高C语言编程技能。