C语言编程:经典算法详解

需积分: 13 3 下载量 18 浏览量 更新于2024-07-30 收藏 184KB DOC 举报
是变量,左侧的`s`是累加的结果,右侧的`i`是每次累加的项。在循环中,`i`每次自增1,保证了累加的顺序性。最终输出的是1到100所有整数的和。 【应用】 累加算法常用于计算序列的和,例如斐波那契数列的和、等差数列的和等。例如,计算斐波那契数列的前n项和,可以使用动态规划的方法: ```c #include <stdio.h> int fibonacci(int n) { if (n <= 1) return n; return fibonacci(n - 1) + fibonacci(n - 2); } int main() { int n, i, sum = 0; scanf("%d", &n); for (i = 1; i <= n; i++) { sum += fibonacci(i); } printf("Sum of Fibonacci series till %d is: %d\n", n, sum); return 0; } ``` 这里,我们用`fibonacci()`函数计算斐波那契数列的第n项,然后在主函数中通过累加的方式得到前n项的和。 2.累乘 累乘算法与累加类似,形如“s=s*A”的累乘式。累乘也常常出现在循环中,但要注意防止溢出问题。 例2、求1×2×3×……×100的积。 ```c #include <stdio.h> #include <limits.h> int main() { int i, product = 1; for (i = 1; i <= 100; i++) { if (product > INT_MAX / i) { // 检查是否会溢出 printf("Integer overflow occurred.\n"); return 1; } product *= i; // 累乘 } printf("1*2*3*...*100=%d\n", product); return 0; } ``` 在这个例子中,我们使用`INT_MAX`来检测是否会发生整数溢出。如果累乘的结果超过了整数的最大值除以当前项`i`,那么就说明下一步的乘法会导致溢出,程序会提前结束并输出警告信息。 【拓展】 - 排序算法:冒泡排序和选择排序是最基础的排序方法。冒泡排序通过相邻元素比较并交换位置,逐渐将最大(或最小)的元素“冒”到序列末尾。选择排序则在每一轮中找到未排序部分的最小(或最大)元素,与未排序部分的第一个元素交换。 - 查找算法:顺序查找(线性查找)是最简单的查找方式,遍历整个数组直到找到目标元素或者遍历完数组未找到。 - 穷举法:在限定的范围内枚举所有可能的解,常用于解决一些有限条件下的问题,如密码破解、组合问题等。 - 级数计算:如等比数列求和,等差数列求和,几何级数等,可以通过公式直接计算或递推方式求解。 - 一元非线性方程求根:牛顿迭代法和二分法是两种常见的求解方法,适用于连续函数。 - 定积分计算:矩形法和梯形法则利用逼近思想估算函数在一定区间的积分值。 - 迭代法:通过不断重复某个过程,逐步接近目标解,如求解方程的根、优化问题等。 - 进制转换:二进制、八进制、十六进制与十进制之间的转换。 - 字符处理:包括统计字符出现次数、数字串处理、字母大小写转换、加密算法等。 - 辗转相除法求最大公约数(GCD)和最小公倍数(LCM):通过不断相除直到余数为0,最后一个非零余数即为最大公约数。 - 数组操作:插入、删除元素,二维数组的特殊问题,如杨辉三角形的生成。 这些是C语言编程中常见的算法,掌握它们对于提高编程能力至关重要。在实际编程中,应根据具体问题灵活运用这些算法,并结合数据结构和设计模式,以实现更高效、更简洁的代码。