C语言入门:100个经典算法示例与素数判断程序

需积分: 32 0 下载量 17 浏览量 更新于2024-07-23 收藏 146KB PDF 举报
在C语言经典算法的学习过程中,理解并掌握特定的编程问题和解决方案是至关重要的。本文档提供了两个典型的算法示例,旨在帮助初学者巩固基础,并通过实践提升编程技能。 第一个例子是解决著名的"斐波那契数列"问题,该数列的特点是每个数是前两个数之和,即1, 1, 2, 3, 5, 8, 13...。题目要求计算从第三个月开始每个月兔子的数量,其背后的逻辑恰好映射到了斐波那契数列。通过递归或迭代的方式,程序使用两个变量`f1`和`f2`来存储当前和前一个月的兔子数量,然后在循环中更新这两个值。这段代码演示了如何使用循环结构和条件语句来实现动态计算。 ```c main() { long f1 = 1, f2 = 1; int i; for (i = 1; i <= 20; i++) { printf("%12ld%12ld", f1, f2); if (i % 2 == 0) printf("\n"); // 控制输出,每行四个 f1 = f1 + f2; // 前两个月加起来赋值给第三个月 f2 = f1 + f2; // 前两个月加起来赋值给第三个月 } } ``` 第二个算法涉及的是查找和输出指定范围内的素数,即101到200之间的数字,素数是指只能被1和自身整除的自然数。这里使用了试除法,对于每个数`m`,检查它是否可以被2到`sqrt(m)`之间的任何整数整除,如果可以,则`m`不是素数,否则它是素数。程序中,变量`leap`用于标记当前是否找到素数,当找到素数时,会输出并计数。最后,程序会输出总的素数数量。 ```c #include <math.h> main() { int m, i, k, h = 0, leap = 1; printf("\n"); for (m = 101; m <= 200; m++) { k = sqrt(m + 1); for (i = 2; i <= k; i++) { if (m % i == 0) { leap = 0; break; } } if (leap) { printf("%-4d", m); h++; if (h % 10 == 0) printf("\n"); } leap = 1; } printf("\nThe total is %d", h); } ``` 通过这两个C语言实现的算法,学习者可以深入了解基础数据结构和控制流的运用,同时熟悉如何优化算法以提高效率。练习这类经典问题有助于培养对C语言的熟练程度,为以后解决更复杂的编程挑战打下坚实的基础。