C语言编程:经典算法实例解析

需积分: 9 1 下载量 61 浏览量 更新于2024-07-31 收藏 247KB DOC 举报
"经典简单 C程序例题,包含194个C程序,涉及经典算法,适合初学者学习。" 本文将深入解析两个经典C语言编程例题,旨在帮助初学者理解和掌握C语言的基本概念以及常见算法。第一个例题是求解两个正整数的最大公约数(Greatest Common Divisor, GCD)和最小公倍数(Least Common Multiple, LCM),第二个例题是统计输入字符串中字母、空格、数字和其他字符的数量。 1. **求最大公约数和最小公倍数** 在C程序中,我们通常使用欧几里得算法来计算两个正整数的最大公约数。这个算法基于这样一个原理:对于任何正整数a和b,如果b能被a整除,那么b就是它们的最大公约数;否则,用a除以b的余数作为新的b,继续这个过程,直到余数为0。在这个例题中,我们定义了一个名为`hcf`的函数,它接受两个整数u和v作为参数,通过不断交换值和取模运算,最终返回v作为最大公约数。计算最小公倍数(LCM)时,我们利用公式`LCM(a, b) = (a * b) / GCD(a, b)`,定义了`lcd`函数,它接收u、v和它们的最大公约数h作为参数,返回u * v / h的结果。 ```c int hcf(int u, int v) { int t, r; while ((r = u % v) != 0) { u = v; v = r; } return (v); } int lcd(int u, int v, int h) { return (u * v / h); } ``` 2. **统计字符串中字符类型** 第二个例题要求统计输入字符串中的字母、数字、空格和其他字符的数量。为此,我们定义了一个`count`函数,遍历输入字符串的每个字符,根据ASCII码判断字符类型,并相应增加计数器。主函数`main`首先接收用户输入的字符串,然后调用`count`函数进行统计,并输出结果。 ```c void count(char str[]) { int i; for (i = 0; str[i] != '\0'; i++) { if ((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z')) letter++; else if (str[i] >= '0' && str[i] <= '9') digit++; else if (str[i] == ' ') space++; else others++; } } ``` 这两个例子展示了C语言的基础语法和算法应用。对于初学者,理解并实现这些例子可以帮助巩固变量、控制流、函数、输入/输出等基本概念,同时也能提升处理实际问题的能力。通过不断地练习和实践,可以逐步精通C语言编程。