实验 5:让计算机做复杂的事情——循环结构

一、实验目标

  1. 能够运用计算思维分析解决简单的实际问题。
  2. 能够熟练应用 whiledo...whilefor 语句的基本语法和执行流程。
  3. 能够在 VS2010 开发环境中综合运用循环结构编写较强功能的程序。

二、知识回顾

1. 循环的四要素

  • 循环体:重复执行的核心操作。
  • 循环初始条件:初始化循环控制变量。
  • 循环控制条件:构建循环控制表达式。
  • 循环控制变量的修改:构建循环退出机制,避免死循环。

2. 三种循环语句

(1)while 循环

  • 语法

    while (表达式) {
        循环体;
    }
    
  • 特点:先判断后执行,循环体执行次数为 0 到多次。

(2)do...while 循环

  • 语法

    do {
        循环体;
    } while (表达式);
    
  • 特点:先执行后判断,循环体至少执行一次。

(3)for 循环

  • 语法

    for (表达式1; 表达式2; 表达式3) {
        循环体;
    }
    
    • 表达式1:初始化循环变量。
    • 表达式2:循环控制条件。
    • 表达式3:更新循环变量。
  • 特点:结构紧凑,适合已知循环次数的情况。

3. 循环注意事项

  • 循环控制变量必须在循环开始前初始化。
  • 循环体内必须有修改控制变量的语句,确保循环能正常终止。
  • 避免死循环:确保循环条件最终能变为假。
  • 若进入循环前条件为假,则循环体一次也不执行(whilefor)。

三、实验内容与实现

1. 实验1:统计字符串中各类字符个数

  • 要求:输入一行字符,统计英文字母、空格、数字和其他字符的个数。
  • 实现方法
    • 使用 while((c = getchar()) != '\n') 逐字符读取。
    • 使用 if-else 结构判断字符类型并计数。
  • 扩展:可分别统计大写字母、小写字母、数字、空格等。

2. 实验2:输出所有“水仙花数”

  • 定义:一个3位数,其各位数字的立方和等于该数本身,如 (153 = 1^3 + 5^3 + 3^3)。
  • 实现方法
    • 方法一:遍历100到999的所有数,分解出各位数字,判断是否满足条件。
    • 方法二:使用三重循环遍历百位、十位、个位,组合成三位数进行判断。
  • 输出:153、370、371、407。

3. 实验3:猴子吃桃问题

  • 问题描述:猴子每天吃前一天剩下的一半又一个,第10天只剩1个,求第一天摘了多少桃子。
  • 解决方法:逆向推导,从第10天开始往前推:
    • 第10天:1个
    • 第9天:(1 + 1) × 2 = 4个
    • 通用公式:(前一天 = (当天 + 1) × 2)
  • 扩展:若每天吃前一天剩下的一半又两个,结果会不同。

4. 实验4:牛顿迭代法求方程的根

  • 方法:利用切线逼近方程的根。
    • 迭代公式:(x_{n+1} = x_n – \frac{f(x_n)}{f’(x_n)})
    • 终止条件:(|x_{n+1} – x_n| < \varepsilon)
  • 示例方程:(2x^3 – 4x^2 + 3x – 6 = 0)
  • 实现:使用 do...while 循环进行迭代,直到满足精度要求。
  • 扩展:可修改初始值、输出迭代次数和每次迭代结果,分析不同初始值对迭代收敛的影响。

四、重点与难点

重点

  • 循环结构的构建。
  • 三种循环语句的语法与使用。
  • 循环与选择结构的结合运用。

难点

  • 实际问题中循环要素的判定与设计。
  • 循环嵌套的逻辑理解与实现。
  • 迭代算法的设计与实现(如牛顿迭代法)。

五、思考题

  1. 如何灵活中断循环的执行?举例说明(如使用 breakcontinue)。
  2. 多重循环语句的执行过程是怎样的?内外层循环如何协同工作?