### C语言必备18程序算法知识点解析 #### 1. 输出9*9乘法口诀表 **知识点:** - **循环控制结构**: 使用双重`for`循环来控制行和列,实现9*9乘法表的输出。 - **格式化输出**: `printf("%d*%d=%-3d", i, j, result);`中的`%-3d`表示左对齐且占用3个字符宽度,确保输出整齐。 **示例代码解析**: ```c #include "stdio.h" main() { int i, j, result; for (i = 1; i < 10; i++) { for (j = 1; j < 10; j++) { result = i * j; printf("%d*%d=%-3d", i, j, result); /* 左对齐,占3位 */ } printf("\n"); /* 每一行后换行 */ } } ``` #### 2. 斐波那契数列与兔子繁殖问题 **知识点:** - **斐波那契数列**: 从第三个数开始,每个数都是前两个数的和(1, 1, 2, 3, 5, 8...)。 - **循环控制结构**: 使用`for`循环计算数列,并控制每行输出的元素数量。 **示例代码解析**: ```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; f2 = f1 + f2; } } ``` #### 3. 判断101-200之间的素数 **知识点:** - **素数判断**: 通过遍历2到根号n的所有数字来判断一个数是否为素数。 - **格式化输出与计数**: 计算并输出素数个数,并按照每10个数换行的方式进行输出。 **示例代码解析**: ```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("\nTotal is %d", h); } ``` #### 4. 寻找1000以内的所有完数 **知识点:** - **完数定义**: 一个数如果恰好等于它的因子之和(除了自身)。 - **循环控制结构与数组使用**: 使用静态数组存储因子,并通过循环来判断完数。 **示例代码解析**: ```c main() { static int k[10]; int i, j, n, s; for (j = 2; j < 1000; j++) { n = -1; s = j; for (i = 1; i < j; i++) { if ((j % i) == 0) { n++; s = s - i; k[n] = i; } } if (s == 0) { printf("%d is a perfect number:", j); for (i = 0; i < n; i++) { printf("%d,", k[i]); } printf("%d\n", k[n]); } } } ``` #### 5. 数组逆时针旋转90度 **知识点:** - **二维数组操作**: 输入4x4数组,并将其逆时针旋转90度。 - **数组转换**: 使用两个二维数组,原数组和目标数组进行数据交换。 **示例代码解析**: ```c main() { int a[4][4], b[4][4], i, j; printf("Input 16 numbers:"); for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { scanf("%d", &a[i][j]); b[3 - j][i] = a[i][j]; } } printf("Array B:\n"); for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { printf("%6d", b[i][j]); } printf("\n"); } } ``` #### 6. 打印直角杨辉三角形 **知识点:** - **杨辉三角**: 每一行的首尾元素均为1,中间的元素为其上方两元素之和。 - **动态数组初始化与填充**: 动态初始化二维数组,并使用循环进行填充。 **示例代码解析**: ```c main() { int i, j, a[6][6]; for (i = 0; i <= 5; i++) { a[i][i] = 1; a[i][0] = 1; } for (i = 2; i <= 5; i++) { for (j = 1; j <= i - 1; j++) { a[i][j] = a[i - 1][j] + a[i - 1][j - 1]; } } for (i = 0; i <= 5; i++) { for (j = 0; j <= i; j++) { printf("%4d", a[i][j]); } printf("\n"); } } ``` #### 7. 计算3名学生4门课程的平均成绩 **知识点:** - **多维数组**: 使用4行5列的二维数组存储学生成绩。 - **成绩计算**: 分别计算每个学生的平均成绩以及每门课程的平均成绩。 **示例代码解析**: ```c #include <stdio.h> #include <stdlib.h> main() { float a[4][5], sum1, sum2; int i, j; for (i = 0; i < 3; i++) { for (j = 0; j < 4; j++) { scanf("%f", &a[i][j]); // 缺失的代码部分,用于输入成绩 } } // 这里省略了成绩计算的部分 } ``` 该示例代码中缺少了成绩输入后的处理逻辑,包括成绩计算、平均分计算等。这部分可以根据实际需求进一步补充完整。
剩余9页未读,继续阅读
- 粉丝: 1
- 资源: 8
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助