C语言筛选法代码详解与ACM入门问题

需积分: 50 3 下载量 94 浏览量 更新于2024-08-20 收藏 517KB PPT 举报
本资源是一份关于C语言编程中的常规筛选法的代码示例,用于解决数学领域中质数筛选问题。筛选法是一种高效的查找质数的方法,该代码通过一个整数数组a来标记非质数,当遍历到一个未被标记的数(即质数候选)时,将其所有倍数标记为已知非质数,以此递归地筛选出质数。 在`main`函数中,首先通过`scanf`读取输入的整数n,表示需要筛选的范围。然后,用两个嵌套的`for`循环进行质数的筛选。外部循环从2开始,逐个检查每个数是否为质数;内部循环从当前数的两倍开始,每次增加当前数,直到n的边界,将所有倍数标记为非质数。筛选结束后,统计并打印未被标记的数,即质数的数量。 值得注意的是,这部分代码展示了几个常见的编程陷阱和误区,如处理多组数据的结构、正确使用`EOF`判断、避免死循环以及循环条件的书写规范。例如,`while(scanf(…)!=EOF)`的使用可能会导致死循环,因为`EOF`值为-1,而非0。同时,对`scanf`语句后添加分号可能导致循环条件不被执行,尤其是在处理多组数据时,这可能会影响程序的预期行为。 此外,资源中还提到了几个"菜鸟之伤"的例子,这些是ACM(算法竞赛)编程中常见的错误,如处理单次输入和多组输入的区别,以及对循环条件和分号使用的理解不足。这些错误提示程序员在编程过程中需要格外关注细节,确保代码的正确性和效率。 总结来说,这份代码不仅提供了常规筛选法的具体实现,而且通过列举错误示例,帮助学习者理解如何避免在C语言编程中遇到的常见问题,对于提高编程技能和理解算法实现具有实用价值。