跳转到内容

编程基础:迭代

来自维基教科书,开放世界中的开放书籍

论文 1 - ⇑ 编程基础 ⇑

← 选择 迭代 算术运算 →


计算中一个非常重要的部分是迭代的概念,即重复相同的操作。你可能每天都在使用迭代。例如,在留校察看期间写罚写;你写一些句子,检查是否达到句子限制,如果没有,你就再写一些句子,检查是否达到句子限制,以此类推,直到你达到句子限制,然后你就可以停止了。

'Programmers are lazy and can get computers to write detention lines for them
'they are also lazy as they can do a declaration and assignment at the same time:
dim count as integer = 0

While count <= 100
   console.writeline(count & ". I should always do my programming homework.")
   count = count + 1
End While
   代码输出

0. 我应该始终完成我的编程作业。
1. 我应该始终完成我的编程作业。
2. 我应该始终完成我的编程作业。
3. 我应该始终完成我的编程作业。
...
100. 我应该始终完成我的编程作业。


理解练习:While 循环
  1. 这个while循环将打印多少行?
  2. 循环执行完毕后,变量count中将存储什么值?
  3. 循环顶部条件(count <= 100)将被测试多少次?

在回答这些问题之前,请仔细思考。

答案

  1. 101 行,从编号为 0 的行开始,到编号为 100 的行结束。
  2. count退出循环后,将包含值 101。
  3. 测试将执行 102 次。前 101 次,条件count <= 100将为true,因此将执行循环体。在第 102 次(当count为 101 时),条件count <= 100将为false,因此循环执行终止。此时,程序执行从循环结束后的下一条指令继续(在本例中没有,因此它停止)。


另一个例子可能是电脑游戏,其中汽车的速度在加速踏板踩下时一直增加,直到达到最高速度。

dim maxSpeed as integer = 120
dim speedNow as integer = 0
dim pedalDown as boolean = True

While speedNow < maxSpeed And pedalDown
   console.writeline(speedNow)
   speedNow = speedNow + 1
End While
console.writeline("MAXSPEED!")
   代码输出

0
1
2
3
...
119
MAXSPEED!


练习:While 循环

编写一个程序,从 20 计数到 60(包含 20 和 60),如下所示

   代码输出

20
21
22
...
60

答案

dim count as integer = 20
While count <= 60
   console.writeline(count)
   count = count + 1
End While


编写一个程序,接收输入并输出该数字的乘法表

   代码输出

输入一个数字:7
1 * 7 = 7
2 * 7 = 14
3 * 7 = 21
4 * 7 = 28
5 * 7 = 35
6 * 7 = 42
7 * 7 = 49
8 * 7 = 56
9 * 7 = 63
10 * 7 = 70

答案

dim count as integer = 1
dim times as integer
console.write("insert a number: ")
times = console.readline()
While count <= 10
   console.writeline(count & " * " & times & " = " & count * times)
   count = count + 1
End While


编写一个程序,将 10 到 20(包含 10 和 20)的所有数字加在一起,最后输出结果

答案

dim count as integer = 10
dim total as integer = 0
While count <= 20
   total = total + count
   count = count + 1
End While
console.writeline("the total is: " & total)

while 循环:例如

While not top speed Do
increase speed
End
dim speed as integer = 0
While speed < 120
	console.writeline(speed)
	speed = speed + 1
End While
   代码输出

0
1
...
118
119

Do While 循环

[编辑 | 编辑源代码]

另一种 while 循环是 Do-While 循环。它与 While 循环略有不同,因为你是在检查是否需要再次执行任务之前执行任务的。这意味着无论检查结果如何,你都会执行该任务。

Do
increase speed
While not top speed
End

Visual Basic 使用一些略微不同的语法处理这个问题

console.write("how old are you?")
age = console.readline()
Do 
	console.writeline(age & " year olds should attend school!")
	age = age + 1
Loop Until age > 17
console.writeline(age & " is too old to attend school!")

这对年轻的学生来说很棒

   代码输出

你多大了? 15
15 岁的孩子应该去上学!
16 岁的孩子应该去上学!
17 岁太大了,不能去上学了!

但是,当我们遇到一个 78 岁的老人时,我们就遇到了问题

   代码输出

78 岁的老人应该去上学!
78 岁太大了,不能去上学了!

练习:Do While 和 While Do

对于上面那个有问题的例子,将 Do While 重写为 While Do 循环

答案

console.write("how old are you?")
age = console.readline()
While age < 17
	console.writeline(age & " year olds should attend school!")
	age = age + 1
End While
console.writeline(age & " is too old to attend school!")

使用每个循环时要小心!

For 循环

[编辑 | 编辑源代码]

你可能遇到的最复杂的工具是 for 循环。这是一个美化后的 While 循环,不要被它复杂的外观吓倒。它通常也是在 Visual Basic 中进行迭代的最简单方法之一。

For (speed = 0, not top speed, increase speed)
 drive

在 vb 中使用它要容易得多

For speed = 0 to 120
	drive()
Loop

For 循环也允许你向下计数。例如,如果你要创建一个倒计时到目标的计时器。为此,我们使用step - 1代码,从而得到以下代码

For x = 10 To 1 Step -1
   Console.Write(x & ",")
Next
console.writeline("Test over!")

显示

   代码输出

10,9,8,7,6,5,4,3,2,1,测试结束!

练习:For 循环

编写一个 for 循环,显示 40 次“我会吃我的蔬菜”这句话

答案

for x = 1 to 40
  console.writeline("I will eat my greens")
next


编写一段代码,输入一个较小的数字和一个较大的数字,然后在屏幕上显示这些数字,从较小的数字开始,依次显示每个数字,直到达到较大的数字。使用 for 循环,它应该显示以下内容

   代码输出

输入较小的数字:10
输入较大的数字:13
10
11
12
13

答案

dim lower, higher as integer
console.write("insert lower number: ")
lower = console.readline()
console.write("insert higher number: ")
higher = console.readline()
For x = lower to higher
  console.writeline(x)
Next


编写一个 for 循环,输出频率:100,200,300,400,...,20000。提示,你可能想从 1 开始并乘以。记住console.beep(200, 200)

答案

For x = 1 to 200
  console.beep(x* 100, 100)
Next


让计算机不断询问用户是否“准备发射?”。如果他们说“是”以外的任何内容,就继续询问这个问题。如果他们说“是”,就从 5 开始倒计时,最后显示“发射!”。

   代码输出

准备发射? 否
准备发射? 还没
准备发射? 是
5
4
3
2
1
发射!

扩展:如果你真的想展示你如何使用 case 语句,让它说:五、四、三、二、一,而不是显示数字

答案

Dim answer As String
Do
   Console.Write("Ready to launch? ")
   answer = Console.ReadLine()
Loop While answer <> "Yes"
For x = 5 To 1 Step -1
   Console.WriteLine(x)
Next
Console.Write("BLAST OFF!")

你已经了解了三种主要的迭代类型,其中一些比其他的更适合解决某些问题

  • While Do
  • Do While
  • For

点击这里了解更多信息

循环的循环(嵌套循环)

[编辑 | 编辑源代码]

有时,将多个循环组合在一起可能是一个好主意。看看这个例子

For x = 1 to 10
  console.writeline(x & " : ")
  for y = 0 to 10
    console.writeline(x & " * " & y & " = " & x * y)
  Next
Next

这段代码使用嵌套循环打印出乘法表。你在学校花了那么多时间学习的那些乘法表,现在可以用六行代码重新编写了!

   代码输出


1 * 0 = 0
1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
1 * 4 = 4
1 * 5 = 5
1 * 6 = 6
1 * 7 = 7
1 * 8 = 8
1 * 9 = 9
1 * 10 = 10

2 * 0 = 0
...

练习:循环的循环

编写一个嵌套 for 循环,显示一个圣诞树,如下所示

   代码输出

\
\\
\\\
\\\\
\\\\\

答案

For x = 1 to 5
  For y = 1 to x
   Console.Write("\")
  Next
  Console.WriteLine()
Next


调整上面的代码,让用户输入树的高度

答案

dim h as integer
console.writeline("please insert a height")
h = console.readline()
For x = 1 to h
  For y = 1 to x
   Console.Write("\")
  Next
  Console.WriteLine()
Next
华夏公益教科书