自学内容网 自学内容网

【第六章·循环控制结构】第二节:计数控制的循环

目录

计数控制的循环

示例:计算 n 的阶乘

示例:计算并 1~n 之间所有数的阶乘值


计数控制的循环

        循环次数事先已知的循环称为计数控制的循环

        习惯上,用 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)!