二十六 认识循环
1 常见循环:
计次型for
条件型do…loop
遍历型 for…each
2 计次循环
语法:
for 计次变量=初值 to 终值 [step]
循环体
next
'用for 循环来实现
'for 循环是每执行一次初值向终值移动一次步长,默认是1
Sub for循环实现()
Dim i As Long
For i = 1 To 5 '闭区间的概念
Debug.Print i
Next
End Sub
3立即窗口输出
debug.print
4 本地窗口,显示变量值。
5 断点:左侧设置
6 监视窗口
二十七深入理解for
1循环头只运行次,循环体运行i次,next运行i+ 1次
'剖析计次循环
Sub 剖析计次循环()
Dim i As Long
'剖析循环头: 问题:循环头会执行几次?
'for 循环的循环头只执行一次
'1. 把1 作为i的初值赋值给i, 在内存某处匿名赋值了一个终值3,在某处又存了一个步长1
For i = 1 To 3
Debug.Print "循环中" & i
Next
'循环尾蕴含了两个操作:1.二话不说先对计次变量进行 i = i+ 1
' 2. if i > 终值 then 退出循环
Debug.Print "循环外" & i
End Sub
累加程序
'高斯累加问题
'1+2+3+...+n
Sub GaosiSum()
Dim sum As Long '代表和值
'sum = 0
Dim i As Long
For i = 1 To 100
sum = sum + i '这个范式就是累加范式,胡说老师也称它为高斯累加
Next
MsgBox sum
End Sub
二十八浮点数陷阱和循环的使用技术
1预防浮点数陷阱
计次的时候定要注意步长、初值、终值如果是小数的话有可能发生浮
for循环初值+步长<=终值
不要在计数循环用浮点数做为步长、初值、终值
2输出1-10 ,跳过5。
sub解法- -(
dim i&
for i=1 to 10
if i<> 5 then debug.print i
next
end sub
sub解法二) '不推荐 ,在循环中尽量不要改变计次变量
dim i&
fori=1 to 10
if i=5 then i=i+1
debug.print i
next
end sub
sub解法三( 'goto 是无条件跳转,非常容易破坏程序结构
dim i&
fori=1 to 10
if i<>5 then goto 100
100:
next
end sub
sub解法四(
dim i&
fori=1 to 10
if i<>5 then debug.print i
next
end sub
二十九for作业
作业1:计算1- 100中所有的奇数和
'思路1: 1,3,5,7,9-99
Sub 作业1循环直接生成奇数()
Dim sum As Long, i As Long
For i = 1 To 100 Step 2
sum = sum + i
Next
MsgBox sum
End Sub
作业2:计算1+2-3+4-5… + 100的和
Sub 作业1判断是否奇数()
Dim sum As Long, i As Long
For i = 1 To 100
If i Mod 2 <> 0 Then sum = sum + i
Next
MsgBox sum
End Sub
作业3:计算1+2+3+…+ 100当中所有5和7的倍数和
Sub 作业3第一种思路()
Dim sum As Long, i As Long
For i = 1 To 100
If i Mod 5 = 0 And i Mod 7 = 0 Then
sum = sum + i
End If
Next
MsgBox sum
End Sub
Sub 作业3第二种思路()
Dim sum As Long, i As Long
For i = 0 To 100 Step 35
sum = sum + i
Next
MsgBox sum
End Sub
Sub 作业2原始的思路()
Dim sum As Long, i As Long
sum = 1
For i = 2 To 100
If i Mod 2 = 0 Then
sum = sum + i
Else
sum = sum - i
End If
Next
MsgBox sum
End Sub
Sub 作业2数学思路()
Dim sum&, i&
sum = 1
For i = 2 To 100
'-1*-1 =1
'-1 * -1 * -1 =-1 '-1的奇数次方一定是-1,偶数次方一定是1
sum = sum + i * (-1) ^ i
Next
MsgBox sum
End Sub