1、1本节课我们将通过实例来加强对 For 循环语句的使用。例 1:求 Fibonacci 数列的前 30 个数。这个数列有如下特点:前两个数为 1,从第三个数开始,其值是前两个数的和,即: F1=1 (n=1) F2=1 (n=2 ) Fn= Fn1 + Fn2 (n3) 程序如下: Private Sub Command1_Click() Dim i As Integer Dim f1 As Long, f2 As Long, fn As Long f1 = 1 f2 = 1 Print f1, Print f2,For i = 3 To 30 f1,f2 已知,从第三个数开始计算 fn =
2、f1 + f2 f1 = f2 f2 = fn 更改 f1,f2 的值 Print fn,If i Mod 4 = 0 Then Print 打印 4 个数后换行打印Next End Sub 例 2:利用随机数函数模拟投币,方法是:每次随机产生一个 0 或 1 的整数,相当于一次投币,1 代表正面,0 代表反面1、设计界面在窗体上添加三个标签、三个文本框和一个命令按钮。初始界面如图 7-3 所示。图 7-31 初始界面 图 7-32 设置属性后的界面2、设置属性表 7-3 属性设置对象 属性 属性值Label1 Caption 投币总次数Label2 Caption 正面次数Label3 Ca
3、ption 反面次数Text1 Text Text2 Text Text3 Text Command1 Caption 开始窗体中各个控件的属性设置按照表 7-3 进行设置,属性设置后的界面如图 7-33 所示。23、程序代码Private Sub Command1_Click()Randomizen=CInt(Text1.Text)n1=0n2=0For i=1 To nr=Int(Rnd*2)If r=1 Thenn1=n1+1Elsen2=n2+1End IfNextText2.Text=n1Text3.Text=n2End Sub4、程序说明在窗体上有三个文本框,名称分别是 Text1
4、、Text2、Text3,分别用于显示用户输入投币总次数、出现正面的次数和出现反面的次数。随机产生 0 或 1 的整数的表达式为:Int(Rnd*2)。5、运行程序运行程序,在文本框 Text1 中输入总次数,然后单击“开始”按钮,按照输入的次数模拟投币,分别统计出现正面、反面的次数,并显示结果。运行界面如上图所示。例 3:小猴吃桃:有一堆桃,小猴当天吃了一半多一个。第二天吃了剩下的桃子的一半多一个。以后每天都是吃剩下的桃子的一半多一个。到第 10 天小猴要吃时只剩下一个了。问原来那堆桃有多少个?程序代码如下:Private Sub Form_Click()Dim n%,i%n=1For i=
5、9 to 1 step -1n=(n+1)*2Next iPrint “peachs of the first day are:”;n(二)复习根据步长型循环语句 FORNEXT 的格式和功能填空 1、在 FOR- NEXT 循环语句中,对于循环变量要指定它的 _、_及步长,但步长在增量为时,可以省略。 2、 “NEXT I”意思是 _. 3、在 NEXT 语句中,_可以省略, 但如果出现, 要与 FOR 语句中的_一致。 4、终止 FOR- NEXT 循环语句的条件是 _。5、计算循环次数的公式是_(三)新课讲授本节课我们将通过实例来学习对 For 双重循环语句的使用。一、引入:在屏幕上输出
6、如下右图所示内容3该程序实现一行个“*“, 一共 4 行。用循环语句实现for i=1 to 4 print “*“ next其中对于 print “*“我们也可以循环进行输出for i=1 to 5 print “*“next 将两者相结合For i = 1 To 4For j = 1 To 5Print “*“;Next jPrintNext i即可得到完整代码二、循环嵌套也称为多重循环,即在一个循环结构中包含另外一个循环,这种结构可以实现很多复杂的算法。语法:for i=初值 to 终值for j=初值 to 终值循环体next jnext i其中 i 为外循环控件变量,j 为内循环控制
7、变量,这两个变量不可用同一个变量名双重循环的次数是:内循环次数外循环次数三:图形专题简单文本图形的程序设计 (用 for 和 for 双重循环嵌套语句)输出一个文本图形需要考虑 4 点:(1)图形有几行(一般由外循环控制)(2)每行首字符位置(一般由 tab( )函数控制)tab(n)函数:输出时表达式定位于第 n 列(3)每行由几个字符(一般由内循环控制) (4)用什么字符组成图形下面举例说明:1、 打印如下图形 *图 1* *Private Sub Form_click() 图 1Dim i%, j%For i = 1 To 5For j = 1 To iPrint “*“;Next jP
8、rintNext iEnd SubPrivate Sub Form_click() 图2Dim i%, j%For i = 5 To 1 Step -1For j = 1 To iPrint “*“;Next jPrintNext iEnd Sub4*图 2*图 3*图 42、 打印如下等腰三角形,如图 5 示*3、 打印如下菱形,如下图 6 示*4、 若将“*”改为数字,如图 7 示: 112123123412345提示:打印数值类型数据,数字前有个符号位,数字后面有一个空格。今天我们来介绍循环控制语句的第二种当循环控制结构。(三)新课讲授循环分为两大类:一类是循环次数已知,一类是循环次数未
9、知的情况。前者我们可以用for.next 语句实现,但对于后者呢?我们可以使用 while 当型循环。事先不能确定需要执行多少次循环,只有当条件满足时才结束循环,称为“当型循环”。Private Sub Form_click() 图 3Dim i%, j%For i = 1 To 5Print Tab(6 - i);For j = 1 To iPrint “*“;Next jPrintNext iEnd SubPrivate Sub Form_click() 图4Dim i%, j%For i = 5 To 1 Step -1Print Tab(6 - i);For j = 1 To iPri
10、nt “*“;Next jPrintNext iEnd SubFor i = 1 To 5 图 5Print Tab(6 - i);For j = 1 To 2 * i - 1Print “*“;Next jPrintNext iFor i = 1 To 5 图 7Print Tab(6 * 3 - i * 3);For j = 1 To iPrint j;Next jPrintNext iFor i = -2 To 2 图 6Print Tab(Abs(i) + 1);For j = Abs(i) - 2 To 2 - Abs(i)Print “*“;Next jPrintNext i5Wh
11、ile 循环结构用 WhileWend 语句来实现,语句格式如下: While Wend 语句说明: (1) “条件表达式”可以是关系表达式、逻辑表达式或数值表达式。如果是数值表达式,值为 0 被作为 False,非零值则为 True。 (2)语句的执行过程是:先计算条件表达式的值,若为 True,则执行循环中的语句块,遇到 Wend 语句时返回 While 语句继续判断条件表达式的值,若仍为真,则继续执行语句块,重复上述过程直到条件表达式的值为 False,则退出循环结构,执行 Wend 语句的后续语句。循环环执行过程如图 74。 (3)如果条件一开始就不成立,则语句块一次也不会被执行。表达
12、式语句块FT图 74例如,求 1 到 100 的和。 (用 FOR 循环)Private Sub Command1_Click() Dim i As Integer, sum As Integer sum = 0 给变量 sum 赋初值 0For i = 1 To 100 sum = sum + i 累加Next iPrint sum End Sub也可用 While 循环语句改写上例,程序代码如下:Private Sub Command1_Click() Dim i As Integer, sum As Integer sum = 0 :i=1While i Loop 语句执行过程:先计算条
13、件表达式的值,若为 True,则执行语句块中的语句;若为False 则退出循环结构。循环环执行过程如图 7-5-1。 格式二: Do Until Loop 语句执行过程和格式一基本相同,唯一不同的是,它在条件表达式为 False 时重复执行语句块,直到条件为 True 时退出循环结构。循环环执行过程如图 7-5-2。表达式语句块TF表达式语句块TF图 7-5-1 图 7-5-2例 1:用 DoLoop 循环结构实现求和 sum=1+2+3+100。编写程序代码。解法一:采用当型循环 Do WhileLoopPrivate Sub Command1_Click()Dim i As Integer
14、,sum As Integeri=1 计数器初值置为 1sum=0 累加器初值置为 0Do While i100sum=sum+ii=i+1LoopLabel2.Caption=Str(sum)End Sub例 2:将 10000 元存入银行,按 3.25%的利率,试问多长时间就会连本带利翻一番。程序代码如下:Private Sub Form_Click()Dim year%,money!,original!,interest!original=10000money=originalInterest=3.25/100Do While money Loop While 语句执行过程:首先执行语句
15、块中语句,然后计算条件表达式,如果条件表达式值为 True,则继续执行语句块,否则退出循环结构。循环体至少执行一次。循环环执行过程如图 7-5-3。 格式四: Do Loop Until 格式四的执行过程和格式三基本一样,也是先执行后判断。唯一不同的是,它在条件表达式值为假时重复执行语句块,直到条件表达式值为真时退出循环结构。循环环执行过程如图 7-5-4。语句块表达式TF语句块表达式FT8图 7-5-3 图 7-5-4例 3:用辗转相除法求两正整数 m,n 的最大公约数。 求最大公约数的算法如下: (1)对于已知两数 m,n,使得 mn; (2)m 除以 n 得余数 r; (3)令 m n,
16、n r; (4)若 r0 ,转到(2)继续执行,直到 r=0 求得最大公约数为 m,循环结束。 程序代码如下: Private Sub Form_Click() Dim m%,n%m = InputBox(“输入 m“) n = InputBox(“输入 n“) If mnt=m : m=n : n=tEnd If m1=m :n1=n Do r = m Mod n :m = n :n = r Loop while ( r =3000 Then Exit Do 当 s3000,执行 Exit Do 语句退出循环LoopPrint i,sEnd Sub例 4:输入一个整数,对其进行因数分解。如:
17、126=2*3*3*7。程序代码如下:Private Sub Form_Click()Dim x%,m%,flag as Booleanx= val(InputBox(“输入一个整数”)m=2flag=TrueDo While m a Then min = aNext IPrint “max=“;max,”min=“;min 一、素数的概念素数:只能被 1 和本身整除的正整数是素数。例如,2、3、5、7、11、13、17 是素数。二、判断一个数是否为素数用这个数除以 2 到该数间的每个数(不包括该数) 。一旦该数能被其中的一个数整除,则该数不是素数;若在 2 到该数之间(包括 2,不包括该数)找不到任何一个数将该数除尽,则该数是素数。算法如下:Private Sub Form_Click()Dim n As Integern = InputBox(“请输入一个正整数 “)k = Int(Sqr(n)For i = 2 To kIf n Mod i = 0 Then Exit ForNext iIf i = k + 1 ThenMsgBox Str(n) “是素数“End IfNext nPrint “200 到 300 间共有“; Counter; “个素数!“End Sub