【第六章·循环控制结构】第二节:计数控制的循环
目录
计数控制的循环
循环次数事先已知的循环称为计数控制的循环。
习惯上,用 for 语句编写计数控制的循环更简洁方便。
例 6.1 就是一个典型的计数控制的循环,除了累加求和问题外,累乘求积问题也通常需要使用计数控制的循环来编程实现。
示例:计算 n 的阶乘
【例 6.2】试编写一个程序,从键盘输入 n,然后计算并输出 n!。
问题求解方法分析:
这是一个循环次数已知的累乘求积问题。当 n 已知时,为了计算 n!,首先需要计算 1!,然后用 1! × 2 得到 2!,再用 2! × 3 得到 3!,以此类推,直到利用 (n-1)! × n 得到 n! 为止。这个递推算法可用如下递推公式表示:
i! = (i-1)! × i
这个递推公式就可以看成是求解阶乘问题的数学模型。假设 (i-1)! 已经求出,其值用 p 来表示,那么只要将 p 乘以 i 即可得到 i!。用 C 语句表示这种累乘关系即为:
p = p * i;
这里赋值运算符两侧的 p 虽然是同一个变量名,但对右侧的 p 是读操作,对左侧的 p 是写操作,即先读取变量 p 的当前值,乘以 i 后,再写回到变量 p 中,而原来 p 中的值被新写入的值所覆盖。
令 p 初值为 1,并让 i 值从 1 变化到 n,这样经过 n 次循环递推即可得到 n! 了。每次执行语句 p = p * i; 前后 p 值的变化情况如表 6-2 所示。
具体算法如下:
- Step 1 输入 n 值。
- Step 2 累乘求积变量赋初值,p = 1。
- Step 3 累乘次数计数器 i 置初值,i = 1。
- Step 4 若循环次数 i 未超过 n,则反复执行 Step 5 ~ Step 6,否则转去执行 Step 7。
- Step 5 进行累乘运算,p = p * i。
- Step 6 累乘次数计数器 i 加 1,i = i + 1,且转 Step 4。
- Step 7 打印累乘结果,即 n 的阶乘值 p。
程序的流程图如图 6-5 所示。与图 6-3 累加求和程序流程图的不同之处仅在于将累加运算改成了累乘运算,并且累乘变量不能初始化为 0,而应初始化为 1。
程序如下:
#include <stdio.h>
int main(void)
{
int i, n;
long p = 1; // 因阶乘值取值范围较大,故 p 定义为长整型,并赋初值 1,不能为 0
printf("Please enter n: ");
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
p = p * i; // 做累乘运算
}
printf("%d! = %ld\n", n, p); // 以长整型格式输出 n 的阶乘值
return 0;
}
程序的运行结果如下所示:
示例:计算并 1~n 之间所有数的阶乘值
【例 6.3】从键盘输入 n,然后计算并输出 1~n 之间所有数的阶乘值。
在例 6.2 程序的基础上,将第 15 行的打印语句从循环体外移到循环体内即可依次输出 1~n 之间所有数的阶乘值。
程序如下:
#include <stdio.h>
int main(void)
{
int i, n;
long p = 1; // 因阶乘值取值范围较大,故 p 定义为长整型,并赋初值 1,不能为 0
printf("Please enter n: ");
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
p = p * i; // 做累乘运算
printf("%d! = %ld\n", i, p); // 以长整型格式输出 n 的阶乘值
}
return 0;
}
程序的运行结果如下所示:
原文地址:https://blog.csdn.net/qq_53139964/article/details/143530486
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!