编程基础/Do While 循环
do while 循环是一种控制流语句,它至少执行一次代码块,然后根据代码块末尾给定的布尔条件重复执行代码块或不执行代码块。[1]
某些语言可能对这种类型的循环使用不同的命名约定。例如,Pascal 语言有一个 repeat until 循环,它会一直运行,直到控制表达式为真(然后终止)——而“while”循环会在控制表达式为真时运行(并在表达式变为假时终止)。[2]
在控制结构的迭代(或重复)类别中,有两种常用的循环后测试循环。它们是:do while 和 repeat until。本模块涵盖这两者。
迭代的概念与可能需要重复操作有关。与所有控制结构一样,我们提出一个问题来控制循环的执行。术语“循环”来自使用流程图时发生的圆形循环运动。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 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
- 循环后迭代控制结构。
- 事件控制循环
- 使用用户输入来控制循环。[4]
- repeat until
- 某些编程语言中可用的循环后迭代控制结构的替代方案。
- 测试项
- 迭代控制结构的一个属性。
- 更新项
- 迭代控制结构的一个属性。