跳转到内容

编程基础/Do While 循环

来自维基教科书,自由的教科书

do while 循环是一种控制流语句,它至少执行一次代码块,然后根据代码块末尾给定的布尔条件重复执行代码块或不执行代码块。[1]

某些语言可能对这种类型的循环使用不同的命名约定。例如,Pascal 语言有一个 repeat until 循环,它会一直运行,直到控制表达式为真(然后终止)——而“while”循环会在控制表达式为真时运行(并在表达式变为假时终止)。[2]

循环后测试介绍

[编辑 | 编辑源代码]

在控制结构的迭代(或重复)类别中,有两种常用的循环后测试循环。它们是:do while 和 repeat until。本模块涵盖这两者。

理解一般迭代 - do while

[编辑 | 编辑源代码]

迭代的概念与可能需要重复操作有关。与所有控制结构一样,我们提出一个问题来控制循环的执行。术语“循环”来自使用流程图时发生的圆形循环运动。do while 循环的基本形式如下

do
    some statements or action
    some statements or action
    some statements or action
    update the flag
while the answer to the question is true

在大多数编程语言中,问题(称为测试表达式)是一个布尔表达式。布尔数据类型有两个值——true 和 false。让我们重写结构以考虑这一点

do
    some statements or action
    some statements or action
    some statements or action
    update the flag
while expression is true

在 do while 控制结构中,正常工作的循环具有三个属性。它们是

  • 操作或操作
  • 标志的更新
  • 测试表达式

英文表达是,“当表达式为真时,你执行操作”。这是基于 true 的循环。当测试表达式为假时,你停止循环并继续执行程序中的下一个项目。请注意,由于这是循环后测试,因此操作将始终至少发生一次。它被称为循环后测试,因为测试发生在操作之后。它有时也被称为后测试循环,这意味着测试是在操作和更新之后(或拉丁语中的之后)。

理解一般迭代 - repeat until

[编辑 | 编辑源代码]

迭代的概念与可能需要重复操作有关。与所有控制结构一样,我们提出一个问题来控制循环的执行。术语“循环”来自使用流程图时发生的圆形循环运动。repeat until 循环的基本形式如下

repeat
    some statements or action
    some statements or action
    some statements or action
    update the flag
until the answer to the question becomes true

在大多数编程语言中,问题(称为测试表达式)是一个布尔表达式。布尔数据类型有两个值——true 和 false。让我们重写结构以考虑这一点

repeat
    some statements or action
    some statements or action
    some statements or action
    update the flag
until expression becomes true

在 repeat until 控制结构中,正常工作的循环具有三个属性。它们是

  • 操作或操作
  • 标志的更新
  • 测试表达式

英文表达是,“你重复操作,直到表达式变为真”。这是基于 false 的循环。当测试表达式变为真时,你停止循环并继续执行程序中的下一个项目。请注意,由于这是循环后测试,因此操作将始终至少发生一次。它被称为“循环后测试”,因为测试发生在操作之后。它有时也被称为后测试循环,这意味着测试是在操作和更新之后(或拉丁语中的之后)。

Do
    Output "What is your age?"
    Input user_age
    Output "What is your friend's age?"
    Input friend_age
    Output "Together your ages add up to: "
    Output age_user + friend_age
    Output "Do you want to try it again? y or n"
    Input loop_response
While loop_response == 'y'

循环后测试的三个属性都存在。操作部分包括提示输入数据然后显示两个年龄总和的 6 行代码。标志更新是显示问题并获取变量 loop_response 的答案。测试是变量标志中的值与字符 y 的小写形式的相等关系比较。循环将继续处理,直到 loop_response 为“y”。

这种类型的循环控制称为事件控制循环。标志更新是一个事件,用户在其中决定是否要再次执行循环。

使用缩进和循环操作和标志更新的对齐是正常的行业实践。

无限循环

[编辑 | 编辑源代码]

在这一点上,值得一提的是,良好的编程总是提供一种方法来确保循环问题最终会变为假,以便循环停止执行,程序继续执行下一行代码。但是,如果这种情况没有发生,那么程序将处于无限循环中,并且不会停止,直到程序从外部终止或计算机重新启动。考虑以下代码

loop_response = 'y'
Do
    Output "What is your age?"
    Input user_age
    Output "What is your friend's age?"
    Input friend_age
    Output "Together your ages add up to: "
    Output user_age + friend_age
While loop_response == 'y'

程序员在循环之前为标志分配了一个值,但忘记更新标志。每次询问测试表达式时,它将始终为真。因此,这是一个无限循环,因为程序员没有提供退出循环的方法(他忘记更新标志)。

考虑以下代码

do
    Output "What is your age?"
    Input user_age
    Output "What is your friend's age?"
    Input friend_age
    Output "Together your ages add up to: "
    Output age_user + friend_age
    Output "Do you want to try it again? y or n"
    Input loop_response
While loop_response = 'y'

无论用户在标志更新期间回复什么,测试表达式都不会进行关系比较,而是进行赋值。它将“y”分配给变量并询问“y”是否为真?由于所有非零值都被视为表示真,因此对文本问题的答案为真。瞧,你有一个无限循环。

关键词

[编辑 | 编辑源代码]
操作项
迭代控制结构的一个属性。
至少一次
表示循环后测试至少执行一次操作。
do while
循环后迭代控制结构。
无限循环
一系列指令,这些指令无休止地循环,要么是因为循环没有终止条件,要么是因为终止条件永远无法满足,要么是因为终止条件导致循环重新开始。[3]
事件控制循环
使用用户输入来控制循环。[4]
repeat until
某些编程语言中可用的循环后迭代控制结构的替代方案。
测试项
迭代控制结构的一个属性。
更新项
迭代控制结构的一个属性。
华夏公益教科书