ACM编程入门:菜鸟的经典错误与筛选法解析
需积分: 50 153 浏览量
更新于2024-08-20
收藏 517KB PPT 举报
"这篇文档是关于ACM程序设计中针对菜鸟常见错误的讲解,特别是与筛选法相关的部分。文中列举了几个典型错误示例,并提供了正确的处理方式。"
在ACM程序设计,尤其是在解决算法竞赛问题时,筛选法是一种常用的算法技术。筛选法通常用于在数组或集合中查找特定条件的元素,如找出所有的素数、最大值或最小值等。然而,对于初学者来说,编写能够正确处理多组输入数据的程序往往是个挑战。文档中的内容主要针对这些挑战进行了阐述。
1. 初学者的第一个常见错误是程序无法处理多组输入数据。例如,一个简单的加法问题,如1089A+B,需要读取多个输入对并分别求和。最初的代码只会处理单个输入对,如:
```c
#include<stdio.h>
void main() {
int a, b;
scanf("%d%d", &a, &b);
printf("%d\n", a+b);
}
```
2. 为了解决这个问题,可以使用`while`循环来检测文件结束符(EOF)。但是,如果使用`while(scanf(...)!=0)`,可能会导致死循环,因为EOF的值是-1而非0:
```c
#include<stdio.h>
void main() {
int a, b;
while(scanf("%d%d", &a, &b)!=EOF) // 错误:可能导致死循环
printf("%d\n", a+b);
}
```
3. 修正上述错误的方式是在`while`条件后去除分号,确保循环体内的代码被执行:
```c
#include<stdio.h>
void main() {
int a, b;
while(scanf("%d%d", &a, &b)!=EOF) { // 去掉分号
printf("%d\n", a+b);
}
}
```
4. 另一个初学者常犯的错误是在循环条件后面误加分号,导致循环体未被执行:
```c
#include<stdio.h>
void main() {
int a, b;
while(scanf("%d%d", &a, &b)!=EOF); // 错误:分号导致循环体未执行
printf("%d\n", a+b);
}
```
在编写处理多组数据的程序时,应特别注意这些陷阱。理解EOF的正确用法以及避免在循环条件后添加分号是避免这类错误的关键。此外,良好的编程习惯,如代码审查和测试,也能帮助发现并修复这些问题。通过不断地实践和学习,ACM新手可以逐步成长为熟练的程序员。
2013-09-12 上传
2022-12-17 上传
219 浏览量
2023-05-26 上传
2021-09-19 上传
2022-09-19 上传
2012-08-12 上传
点击了解资源详情
点击了解资源详情
无不散席
- 粉丝: 32
- 资源: 2万+
最新资源
- Python中快速友好的MessagePack序列化库msgspec
- 大学生社团管理系统设计与实现
- 基于Netbeans和JavaFX的宿舍管理系统开发与实践
- NodeJS打造Discord机器人:kazzcord功能全解析
- 小学教学与管理一体化:校务管理系统v***
- AppDeploy neXtGen:无需代理的Windows AD集成软件自动分发
- 基于SSM和JSP技术的网上商城系统开发
- 探索ANOIRA16的GitHub托管测试网站之路
- 语音性别识别:机器学习模型的精确度提升策略
- 利用MATLAB代码让古董486电脑焕发新生
- Erlang VM上的分布式生命游戏实现与Elixir设计
- 一键下载管理 - Go to Downloads-crx插件
- Java SSM框架开发的客户关系管理系统
- 使用SQL数据库和Django开发应用程序指南
- Spring Security实战指南:详细示例与应用
- Quarkus项目测试展示柜:Cucumber与FitNesse实践