南开大学二级C语言上机改错与编程题解析
需积分: 10 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语言基本语法、条件判断、循环控制以及数组操作的理解和应用能力。
2009-03-11 上传
2007-07-01 上传
2010-11-03 上传
2011-06-23 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
2010-09-17 上传
linzhenming
- 粉丝: 7
- 资源: 28
最新资源
- JHU荣誉单变量微积分课程教案介绍
- Naruto爱好者必备CLI测试应用
- Android应用显示Ignaz-Taschner-Gymnasium取消课程概览
- ASP学生信息档案管理系统毕业设计及完整源码
- Java商城源码解析:酒店管理系统快速开发指南
- 构建可解析文本框:.NET 3.5中实现文本解析与验证
- Java语言打造任天堂红白机模拟器—nes4j解析
- 基于Hadoop和Hive的网络流量分析工具介绍
- Unity实现帝国象棋:从游戏到复刻
- WordPress文档嵌入插件:无需浏览器插件即可上传和显示文档
- Android开源项目精选:优秀项目篇
- 黑色设计商务酷站模板 - 网站构建新选择
- Rollup插件去除JS文件横幅:横扫许可证头
- AngularDart中Hammock服务的使用与REST API集成
- 开源AVR编程器:高效、低成本的微控制器编程解决方案
- Anya Keller 图片组合的开发部署记录