C语言编程实践:经典实例与解析

需积分: 29 25 下载量 111 浏览量 更新于2024-09-10 收藏 58KB TXT 举报
"C语言经典源程序" 在C语言编程中,经典的源程序通常涉及到基本算法、数据结构和问题解决技巧。以下是从提供的代码片段中提取的一些关键知识点: 1. 斐波那契数列(Fibonacci sequence): 斐波那契数列是计算机科学中的一个基础概念,它的定义是每个数是前两个数的和。在这个例子中,程序通过for循环计算并打印出斐波那契数列的前20项。`f1`和`f2`分别代表当前数列的前两个数字,每次迭代后,它们会更新以生成下一个数字。`f1=f1+f2`和`f2=f1+f2`是实现斐波那契数列的关键步骤。 ```c // 示例代码 main() { long f1, f2; int i; f1 = f2 = 1; for (i = 1; i <= 20; i++) { printf("%12ld%12ld", f1, f2); if (i % 2 == 0) printf("\n"); /* 换行 */ f1 = f1 + f2; /* 更新f1 */ f2 = f1 + f2; /* 更新f2 */ } } ``` 2. 质数判断(Prime numbers): 此段代码用于寻找101到200之间的质数。质数是只有1和自身两个正因数的自然数。程序通过`sqrt(m+1)`确定检查的因子范围,然后使用嵌套循环检查每个数字是否能被2到平方根之间(包括平方根)的任何数字整除。如果找到因子,则`leap`变量设为0,表示该数字不是质数。反之,如果循环结束后`leap`仍为1,则打印该数字。 ```c // 示例代码 #include <math.h> main() { int m, i, k, h = 0, leap = 1; 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); } ``` 3. 水仙花数( Narcissistic number): 水仙花数是指一个三位数,其各位数字的立方和等于这个数本身。程序遍历100到999的每个数,分别提取百位、十位和个位数字,并计算它们的立方和。如果结果与原数相等,则该数是水仙花数。 ```c // 示例代码 main() { int i, j, k, n; printf("'waterflower' number is:"); for (n = 100; n < 1000; n++) { i = n / 100; /* 百位 */ j = n / 10 % 10; /* 十位 */ k = n % 10; /* 个位 */ if (i * 100 + j * 10 + k == i * i * i + j * j * j + k * k * k) { printf("%-5d", n); } } printf("\n"); } ``` 4. 数字分解(Factorization): 这个例子展示了如何分解一个数n的质因数。方法是找出所有小于或等于n的质数k,如果n能被k整除,就将k打印出来。这里的关键是正确地检查和输出质因数,同时确保只输出一次每个质因数。 ```c // 示例代码(未给出) // 该代码可能会包括以下部分: // - 首先,检查n是否大于1,因为1没有质因数。 // - 然后,从2开始迭代,直到k * k > n。 // - 如果n % k == 0,说明k是n的一个质因数,打印k并更新n(例如,n /= k)。 // - 如果k * k > n,说明已经处理完所有可能的质因数。 // - 最后,检查n是否大于1,因为可能n本身就是质数,需要单独输出。 ``` 以上四个示例涵盖了C语言中基本的数学运算、循环控制、条件判断以及简单的算法实现,这些都是学习C语言的基础。通过这些实例,开发者可以加深对C语言编程的理解,并能够解决类似的问题。