ACM编程入门:以A+B问题解析筛选法

需积分: 50 3 下载量 128 浏览量 更新于2024-08-20 收藏 517KB PPT 举报
"ACM程序设计相关教程,以C语言实现A+B问题的筛选法" 这篇内容主要围绕ACM(国际大学生程序设计竞赛)程序设计的话题展开,特别关注如何使用C语言处理A+B问题,并通过筛选法来解决多组输入数据的情况。首先,题目描述是计算两个正整数A和B的和,输入数据由多行组成,每行包含两个正整数,当遇到两个负数时,表示输入结束。 示例输入和输出如下: ``` Sample Input 1 5 -1 -1 Sample Output 6 ``` 在处理这类问题时,初学者常犯的一些错误被一一列举出来。首先,一个简单的错误是不能处理多组数据。一个初阶的解决方案如下: ```c #include<stdio.h> void main() { int a, b; scanf("%d%d", &a, &b); printf("%d\n", a + b); } ``` 但这个程序只能处理一组数据,因为它没有循环结构。为了解决这个问题,可以使用`while`循环来读取和处理多组数据,直到遇到文件结束符EOF(End Of File): ```c #include<stdio.h> void main() { int a, b; while(scanf("%d%d", &a, &b) != EOF) printf("%d\n", a + b); } ``` 然而,这里需要注意的是,EOF的值是-1而不是0,因此`while(scanf(...)!=0)`可能会导致无限循环,造成Time Limit Exceeded(TLE)错误。为了避免这个问题,应检查`scanf`的返回值是否为EOF: ```c #include<stdio.h> void main() { int a, b; while(scanf("%d%d", &a, &b) != EOF) printf("%d\n", a + b); } ``` 另一个常见错误是在循环条件后意外添加了分号,使得循环体没有被执行: ```c #include<stdio.h> void main() { int a, b; while(scanf("%d%d", &a, &b) != EOF); printf("%d\n", a + b); } ``` 虽然这个程序可以编译成功,但它不会按预期运行,因为分号意味着循环体为空。在写循环时,要确保循环体内的代码被正确执行,避免这种分号错误。 总结一下,处理ACM中的多组输入数据问题,需要理解如何正确地使用循环结构,尤其是处理文件结束符EOF。同时,编程时要细心,避免分号误用等低级错误,这些错误可能导致程序行为不符合预期,甚至在竞赛中影响成绩。在编写处理多组数据的代码时,应该熟练掌握`while`循环,并注意其内部逻辑的正确性。