实验五 循环结构程序设计
### 实验五 循环结构程序设计 #### 目标与要求 本次实验的主要目标是让学生熟练掌握三种基本的循环结构:`while`、`do-while` 和 `for` 循环。通过实践,加深对这些循环结构的理解,并学会在实际编程中灵活运用。 #### 上机内容概览 本次实验提供了多个示例来帮助理解循环结构的应用场景和实现方法。下面将详细介绍每个示例中的关键知识点: ### 示例详解 #### 示例1:求5的阶乘 ```c main() { int n, t; n = 1; t = 1; while (t <= 5) { n = n * t; t = t + 1; } printf("%d", n); } ``` **知识点:** - 使用 `while` 循环来累加阶乘的值。 - 初始化变量 `n` 和 `t` 分别用于存储阶乘结果和当前迭代次数。 - 循环条件是 `t <= 5`,表示循环将继续执行直到 `t` 超过5为止。 #### 示例2:求1! + 2! + 3! ```c main() { int n, s = 0, t = 1; for (n = 1; n <= 3; n++) { t = t * n; s = s + t; } printf("%d", s); } ``` **知识点:** - 使用 `for` 循环来计算1到3的阶乘并求和。 - 在循环体内,`t` 用于计算当前迭代次数的阶乘值,而 `s` 用于累计阶乘的和。 - 循环条件 `n <= 3` 表示循环三次。 #### 示例3:求1! + 3! + 5! ```c main() { int s = 0, t, i, j; for (i = 1; i <= 3; i++) { t = 1; for (j = 1; j <= 2 * i - 1; j++) t = t * j; s = s + t; } printf("%d", s); } ``` **知识点:** - 使用嵌套的 `for` 循环来计算1、3、5的阶乘并求和。 - 外层循环控制计算的阶乘数,内层循环计算特定数字的阶乘。 - 内层循环条件 `j <= 2 * i - 1` 确保只计算所需的阶乘值。 #### 示例4:求和s = 3 + 33 + 333 ```c main() { int s = 0, t = 3, i; for (i = 1; i <= 3; i++) { s = s + t; t = 10 * t + 3; } printf("%d", s); } ``` **知识点:** - 使用 `for` 循环来计算形如3、33、333这样的数的和。 - 通过每次迭代将 `t` 的值乘以10并加上3来构建所需的数字。 #### 示例5:求特殊数列的前10项之和 ```c main() { int n, t; float a = 2, b = 1, s = 0; for (n = 1; n <= 10; n++) { s = s + a / b; t = a; a = a + b; b = t; } printf("%f", s); } ``` **知识点:** - 使用 `for` 循环来计算一个特殊的数列的前10项之和。 - 数列中的每一项是由前两项的比值组成。 - 循环内部通过更新 `a` 和 `b` 来构建数列。 #### 示例6:打印500以内的水仙花数 ```c main() { int i, j, k, n; for (n = 100; n <= 500; n++) { i = n / 100; j = n / 10 - i * 10; k = n % 10; if (n == i * i * i + j * j * j + k * k * k) printf("%d ", n); } } ``` **知识点:** - 使用 `for` 循环来遍历100至500之间的每一个数字。 - 通过分解数字为个位、十位和百位来判断该数是否为水仙花数。 - 水仙花数定义为一个三位数,其各位数字的立方和等于该数本身。 #### 示例7:求100之内的所有完数 ```c main() { int n, s, j; for (n = 1; n <= 100; n++) { s = 0; for (j = 1; j < n; j++) if (n % j == 0) s = s + j; if (s == n) printf("%d ", s); } } ``` **知识点:** - 使用 `for` 循环来遍历1至100之间的每一个数字。 - 对于每一个数字 `n`,再次使用 `for` 循环来找到其所有的因子,并计算因子之和。 - 完数是指一个数等于它所有真因子(除了自身以外的因子)之和的数。 #### 典型示例 ##### 示例1:计算两个数的最大公约数 ```c main() { int m, n, k, result; printf("Enter two numbers: "); scanf("%d,%d", &m, &n); if (m > 0 && n > 0) { do { k = n % m; if (k == 0) result = m; else { n = m; m = k; } } while (k > 0); printf("The greatest common divisor is: %d\n", result); } else printf("Non-positive values not allowed\n"); } ``` **知识点:** - 使用 `do-while` 循环来计算两个数的最大公约数。 - 通过欧几里得算法实现,即不断地求余数直到余数为0,此时的除数就是最大公约数。 - 输入验证确保了输入的两个数都是正整数。 ##### 示例2:用牛顿迭代法求方程的近似解 ```c main() { float x, x0, f, f1; x = 1.0; do { x0 = x; f = ((2 * x0 - 4) * x0 + 3) * x0 - 6; f1 = (6 * x0 - 8) * x0 + 3; x = x0 - f / f1; } while (fabs(x - x0) >= 1e-5); printf("%.2f", x); } ``` **知识点:** - 使用 `do-while` 循环结合牛顿迭代法来求解方程的近似解。 - 牛顿迭代法是一种求函数零点的迭代方法,通过不断逼近来获得解。 - 迭代停止的条件是当前迭代值与前一次迭代值之差小于某个阈值(这里设置为1e-5)。 ##### 示例3:打印金字塔图案 ```c main() { int i, j; for (i = 1; i <= 4; i++) { for (j = 1; j <= 4 - i; j++) printf(" "); for (j = 1; j <= 2 * i - 1; j++) printf("*"); printf("\n"); } } ``` **知识点:** - 使用嵌套 `for` 循环来打印金字塔图案。 - 第一层循环控制行数,第二层循环用于打印空格,第三层循环用于打印星号。 - 通过调整空格和星号的数量来形成金字塔形状。 ##### 示例4:判断m是否是素数 ```c main() { int m, i, k; scanf("%d", &m); k = sqrt(m + 1); for (i = 2; i <= k; i++) if (m % i == 0) break; if (i >= k + 1) printf("%d is a prime number\n", m); else printf("%d is not a prime number\n", m); } ``` **知识点:** - 使用 `for` 循环来检查一个数是否为素数。 - 素数定义为只能被1和自身整除的大于1的自然数。 - 优化算法:只需要检查到该数平方根即可确定是否为素数。 #### 作业 1. **求两个正整数的最大公约数和最小公倍数** - 可以使用欧几里得算法计算最大公约数,然后根据最大公约数来计算最小公倍数。 2. **求Sn=a+aa+aaa+…+aa…a之值,其中a是一个数字。** - 类似于示例4中的逻辑,可以通过循环来构建所需的数字序列,并计算它们的和。 通过以上实例的学习,可以更深入地理解循环结构的应用及其在解决实际问题中的重要性。
剩余8页未读,继续阅读
- 粉丝: 7
- 资源: 82
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 计算机网络基础知识,七层模型,TCP、UDP、HTTPs、数字证书等
- dlib-19.24.99-cp312-cp312-win-amd64.whl
- 热门影视APP系统源码 可二开 后端+app+搭建教程
- 这个东西类似于Google的GRPC,但是应用场景是单片机
- labview yolov5实例分割onnxruntime推理,封装dll, labview调用dll,支持同时加载多个模型并
- git-笔记啊啊啊啊啊啊啊啊啊
- 基于SpringBoot+Vue前后端分离的校园二手交易平台源码+数据库-java毕业设计
- Screenshot_2024-10-10-16-59-35-716_com.tencent.mm.jpg
- git李立超啊啊啊啊啊啊
- PAS 7060-2021电动汽车电池的安全环保设计和使用(英).pdf
- 1
- 2
前往页