第四章 算法基础及VB的基本语句.ppt

上传人:yyf 文档编号:5030676 上传时间:2020-01-29 格式:PPT 页数:96 大小:984KB
返回 下载 相关 举报
第四章 算法基础及VB的基本语句.ppt_第1页
第1页 / 共96页
第四章 算法基础及VB的基本语句.ppt_第2页
第2页 / 共96页
第四章 算法基础及VB的基本语句.ppt_第3页
第3页 / 共96页
第四章 算法基础及VB的基本语句.ppt_第4页
第4页 / 共96页
第四章 算法基础及VB的基本语句.ppt_第5页
第5页 / 共96页
点击查看更多>>
资源描述

《第四章 算法基础及VB的基本语句.ppt》由会员分享,可在线阅读,更多相关《第四章 算法基础及VB的基本语句.ppt(96页珍藏版)》请在三一文库上搜索。

1、第四章 算法基础及VB的基本语句,2,1、了解结构化程序设计的基本概念 2、掌握VB 程序设计中的常用语句 3、掌握顺序、选择、和循环结构及相应的语句,教学要求,3,4,4.1 算法及程序设计基础,一个程序( 过程)应包括: Nikiklaus Wirth认为: 有人认为:,对数据的描述:指定所用数据的类型,作用域和数据的 组织形式,即数据结构(data structure)。 对操作的描述:即操作步骤,也就是算法(algorithm)。,数据结构+算法=程序,程序=算法+数据结构+程序设计方法+语言工具和环境,5,1、算法的概念,算法 即解决某个问题或处理某件事的方法和步骤;“采用什么结构,

2、使用什么语句以及如何安排这些语句”。 算法分类: 数值计算算法 非数值计算算法 算法优劣: 正确性,效率,占用系统资源,便于理解,易于调试等。,6,18,10,M N R,8,10,8,2,8,2,0,2,0,R=8,R=2,R=0,M=2即最大公约数,求最大公约数,题目:求两个自然数的最大公约数 分析:求最大公约数的常用方法是辗转相除法(欧几里德算法)。,2、算法示例,7,算法描述:,S1 输入两个自然数:M,N; S2 求M除以N的余数R; S3 使M=N,即用N代换M; S4 使N=R,即用R代换N; S5 若R0,则重复执行S2,S3,S4,否则转至S6 S6 输出M,M即为M,N的最

3、大公约数。,8,3、算法的特征,确定性 可行性 有穷性 输入性 输出性,9,4、算法的描述,程序流程图,求最大公约数,10,程序编码实现算法,算法仅提供解题思路,计算机不可直接执行。 用某一程序设计语言所提供的语言成分,根据该语言的特点,并利用该语言的各种工具和手段,遵照规定的语法规则去实现算法,得到原程序代码,计算机可识别并执行。,11,5.基本算法结构,1). 顺序结构,语句1,语句2,语句块,结构化程序设计,12,2)选择结构,结构化程序设计,13,3)循环结构,结构化程序设计,14,三种基本结构的共同特点,只有单一入口和单一出口; 结构中的每一部分都有被执行的可能; 结构内不应出现永不

4、终止的死循环。,15,4.2 赋值语句及InputBox、MsgBox函数,4.2.1 赋值语句 4.2.2 InputBox函数 4.2.3 MsgBox函数,16,4.2.1 赋值语句 格式:= 功能:先计算表达式的值,再将该值赋予左端的变量。 说明: -赋值号左端不仅可以是变量名,还可以是对象的属性; -表达式的类型和变量的类型要一致 -赋值语句是按语句出现的先后顺序执行的(顺序结构) 举例:,str1 = “Nice to meet you“ number% = 72 Lable1.Caption = “Filename is:“ Text.FontSize = 12 改变字号,17,

5、使用下面的方法可以获取一个对象的属性值: var = object . Property 例如:Label1.Caption=Text1.Text 式中,var是变量名、object是对象名、property是该对象的某个属性名。 特别注意:属性也存在数据类型,所以在获取对象的属性值时,最好使用具有相同数据类型的变量。,说明,18,注意:赋值号(=)与比较运算符(=)不同 赋值是独立的一条语句; 由运算符(=)连结两个操作数的关系表达式是语句的一部分, 不可单独存在 比较运算符不会改变操作数的值; 赋值语句会,改变赋值号左边的量,所以必须是可以被赋值的变量或属性,Dim x As Intege

6、r, y As Integer, z As Boolean x=3 : y=4 : y=x z = x=y Print x, y, z,19,Private Sub Form_Click() Dim a As Integer,b As Integer a=10 b=3*a Print a,b End Sub,Private Sub Form_Click() Dim a As Integer,b As Integer b=3*a a=10 Print a,b End Sub,例:单击窗体,下列两段程序的执行结果分别是()和()。,提示:利用赋值语句给变量赋值后,在未有新的赋值语句再次给它赋值前,

7、变量值保持不变。,20,例:交换两个变量的值。,Private Sub Form_Click() Dim a As Integer,b As Integer a=10 : b=2 Print a,b 填入程序代码 Print a,b End Sub,正确答案 Dim Temp As Integer Temp=a : a=b : b=Temp,题目说明 单击窗体程序执行结果为: 10 2 2 10, 注意 变量a和b为两个不定值的变量,因此不能直接用 a=2 : b=10 语句来解决这个问题。,一旦利用赋值语句给变量赋新值,会覆盖原值,所以不能直接用 a=b : b=a 语句来解决这个问题。,2

8、1,例:求一元一次方程x+5=0的解。,Private Sub Form_Click() Dim x As Integer 3*x+5=0 Print “x=”;x End Sub,Private Sub Form_Click() Dim x As Integer x=(0-)/3 - Print “x=”;x End Sub,语句是该例题的算法。,错误程序,正确程序,总结: 利用程序设计语言处理问题,我们首先要知道的是怎么解决问题,其次要知道怎么将解决问题的方法用程序设计语言来表达。,22,4.2.2 InputBox函数 格式:InputBox$(,) 功能: 弹出对话框,用户输入数据后回

9、车或单击“确定”按钮后,将输入内容赋值给相应的变量;按ESC键或单击“取消”按钮,返回空串。,23,说明 (1)prompt:必选项。对话框中的提示信息。 (2)title:可选。对话框的标题。省略则为应用程序名。 (3)default:可选。显示在用户编辑框中的缺省值,省略为空。 (4)x,y:可选。指定对话框的显示位置,省略则居中。,例: i = InputBox(“输入数组元素”+Chr(10)+“第一个元素为:”,“程序示例“, 100),缺省值,标题,提示字符串,24,例:用InputBox函数输入出生日期,计算年龄。,Option Explicit Private Sub Form

10、_Click() Dim BirthDay As Date, Age As Integer BirthDay = InputBox(“输入出生日期“, “计算年龄“) Age = Year(Date) - Year(BirthDay) Print “你今年:“; Age; “岁“ End Sub,25,如果赋值号左端的变量为数值型或日期型等非字符型变量,输入字符数据 单击“取消”按钮 不输入直接按回车键,则系统都会提示出错:,Dim x As Integer x = InputBox(“输入数组元素“ + Chr(10) + “第一个元素为:“, “示例“, “10“, 100, 100),注

11、意,26,4.2.3 MsgBox函数 格式:MsgBox(Prompt,Button,Title,HelpFile,Context) 功能:向用户发布提示信息,并要求用户作出必要的响应。 说明: (1)Prompt:必选项。字符串表达式,对话框中的提示信息。 (2)Button:指定显示按钮的数目及形式,使用的图标样式,这是一个由4个数值常量组成的式子,形式为c1+c2+c3+c4,用于决定信息框中按钮的个数和类型以及出现在信息框中的图标类型,各个参量的可选值及其功能; 详见P.62表4.2 (3)Title:对话框标题栏的显示信息。,27,MsgBox “需要重新来一次?“, 2 + 32

12、 + 256 + 4096, “询问“,MsgBox “数据非法,请重输!“,1 + 16 + 0 + 4096, “警告“,举 例,28,方法一: 发布提示信息,无须用户响应,在程序中作为独立语句存在,不加括号; 例: MsgBox “非法数据!“, , “警告“,如果省略其中参数,逗号不能省略,MsgBox函数的用法,方法二: 需要用户响应,和普通函数调用方法相同。 例: Response=MsgBox(“真的删除该项吗?“,4+48,“提示信息“) If Response=vbYes Then Else End If,29,30,1、 If-Then-Else语句 格式1:If Then

13、 Else End If,4.3.1 If-Then-Else- End If语句,逻辑变量、关系表达式、逻辑表达式,逻辑框图:,功能: 如果条件成立,则执行A组语句,否则执行B组语句。,说明: If和End If语句成对出现,缺一不可; Else和B组语句部分可以省略,当条件不成立时,直接执行End If的后继语句;,31,Private Sub cmdCalculate_Click() Dim x as Single x=Val(text1.text) If x= 0 Then Text2.text = Str(Sqr(x) Else Text2.text = “数据小于0,错误!“ En

14、d If End Sub,Private Sub cmdExit_Click() End End Sub,Private Sub cmdClear_Click() Text1.Text = “ Text2.Text = “ Text1.SetFocus End Sub,例:从键盘输入一个数,求它的平方根。,缩格输入,32,例:计算分段函数y的值。,Private Sub cmdCalculate_Click() Dim x As Single,y As Single x=Val(Text1.Text) If x = 0 Then y = 2*Sqr(x+7)-6 Else y = 5*x+Ex

15、p(x)-2 End If Text2.Text=Str(y) End Sub,cmdCalculate,33,格式2:单行If-Then-Else语句 If Then Else 说明: (1)在A组语句和B组语句都只有一个语句时,可使用该格式; (2)End If语句省略。 例:上例可改写为以下程序段。,Private Sub cmdCalculate_Click() Dim y As Single,x As Single x=Val(Text1.Text) If x = 0 Then y = 2*Sqr(x+7)-6 Else y = 5*x+Exp(x)-2 Text2.Text=Str

16、(y) End Sub,34,格式3: If Then End If 格式4: If Then ,逻辑框图,35,36,例:输入三角形的三边a、b、c,求三角形的面积,P 64 例4-1,a0 and b0 and c0,a+bc and b+ca and a+cb,37,Private Sub cmdCalculate_Click() Dim a As Single,b As Single,c As Single,p As Single,s As Single a=Val(Text1.Text) b=Val(Text2.Text) c=Val(Text3.Text) If (1) Then

17、If a+bc And b+ca And c+ab Then p=(a+b+c)/2 s=Sqr(p*(p-a)*(p-b)*(p-c) Text4.Text=Str(s) Else Text4.Text=“不能构成三角形” End If Else Text4.Text=“边长不能小于0” End If End Sub,计算公式:,其中:,a0 And b0 And c0,38,例:计算分段函数y的值。,Private Sub cmdCalculate_Click() Dim x As Single,y As Single x=Val(Text1.Text) If x0 Then y=1/(x

18、-5) Else If x5 Then y=3*x2+4*x+5 Else y=Log(x) End If End If Text2.Text=Str(y) End Sub,39,例:输入分数并判断等级分。计算规则如下: 分数 100-90 89-80 79-70 69-60 60 等级分 A B C D E,Private Sub Text1_KeyPress(KeyAscii As Integer) Dim Score As Integer, Degree As String If KeyAscii = 13 Then Score = Val(Text1.Text) If Score =

19、90 And Score = 80 Then Degree = “B“ Else If Score = 70 Then Degree = “C“ Else If Score = 60 Then Degree = “D“ Else Degree = “E“ End If End If End If End If Text2.Text = Degree End If End Sub,缺点: 嵌套层次过多,结构不清晰,容易出错。,从文本框取数据,向文本框放数据,40,3、多分支If-Then-ElseIf语句 格式: If Then ElseIf Then ElseIf Then Else End

20、If,功能: -对条件自上而下依次判断,若条件i成立,则执行相应的Ai组语句; -若所有条件都不成立,则执行An+1组语句。 -无论执行了哪个语句块,都将执行End If的后继语句。,41,(1)该语句结构可以解决多分支问题,只有一个End If语句,避免If语句嵌套层数过多的情况; (2)Else语句可以省略; (3)该结构是一个单出口的结构,即只会执行一组语句,若条件中有两个成立,则按语句的顺序执行前面的一组语句。,说 明,42,Private Sub Text1_KeyPress(KeyAscii As Integer) Dim Score As Integer, Degree As S

21、tring If KeyAscii = 13 Then Score = Val(Text1.Text) If Score = 90 And Score = 80 Then Degree = “B“ ElseIf Score = 70 Then Degree = “C“ ElseIf Score = 60 Then Degree = “D“ Else Degree = “E“ End If Text2.Text = Degree End If End Sub,特点: 结构清晰。,将上例用If-Then-ElseIf语句改写:,90Score=80 ?,43,格式:Select Case Case

22、 Case Case Case Else End Select,功能: 计算测试表达式的值,自上而下检查测试条件; 若表达式的值符合测试 i,则执行相应的语句块 i; 若所有条件都不成立,则执行语句块n+1。无论执行了哪个语句块,都将执行End Select的后继语句。,4.3.2 多分支Select-Case-End Select语句,44,(1)测试表达式可以是算术表达式或字符表达式; (2)测试条件有四种形式: 常量,如2、3、“A”等 闭区间,如3 To 78、“B” To“H”等 开区间,如Is20、 Is“P”等 以上三种形式的组合,以逗号间隔,条件组合是或的关系,不能表示与的关系

23、 (3)Case Else语句部分可以省略; (4)以End Select语句结束; (5)该结构是一个单出口的结构,即只会执行一个语句块,若条件中有两个成立,则按语句的顺序执行前面的语句块。,说 明,45,例:将上例用Select Case语句改写。,Private Sub Text1_KeyPress(KeyAscii As Integer) Dim Score As Integer, Degree As String If KeyAscii = 13 Then Score = Val(Text1.Text) Select Case Score Case 90 To 100 Degree

24、= “A“ Case 80 To 89 Degree = “B“ Case 70 To 79 Degree = “C“ Case 60 To 69 Degree = “D“ Case Is60 Degree = “E“ End Select Text2.Text = Degree End If End Sub,46,练习:键盘输入三个数,将它们从大到小依次排列输出。,Private Sub Form_Click() Dim a As Integer, b As Integer, c As Integer, temp As Integer a = InputBox(“输入a“, “顺序输出“)

25、b = InputBox(“输入b“, “顺序输出“) c = InputBox(“输入c“, “顺序输出“) If a c Then Print a, b, c Else Print a, c, b End If End Sub,保证a为a,b两数中的大值,47,48,4.4 循环结构与循环结构语句,4.4.1 Do-loop循环结构语句(条件循环) 4.4.2 For-Next 循环结构语句(计数循环) 4.4.3 循环嵌套,49,由一定的条件控制,反复执行某个程序段的程序结构称为循环结构。 用于解决一些需要重复进行某些操作的问题。 循环要素: & 循环控制条件 条件或逻辑表达式 & 循环

26、体 重复执行的语句块 & 为防止死循环,在循环体内必须要有对应语句,使得循环控制条件会不满足,结束循环运行。,基本概念,50,例:在窗体上打印10行“Hello”。 循环控制条件 是否已打印了10行 循环体在窗体上打印一行“Hello” 提示:要设立一个变量,用于记录已打印的行数,每打印一行,计数变量要加1,循环控制条件即计数变量小于等于10,51,一、“当型”循环条件成立时,执行循环体,图2:先执行一次循环体,然后再判断条件,决定是否继续执行循环,此结构至少执行一次循环体。,图 1,图 2,图1:先判断条件,当条件成立则执行循环体,否则执行循环结构 的后续语句。,52,二、“直到型”循环条件

27、不成立时,执行循环体,图3:先判断条件,条件不成立则执行循环体,直到条件不成立,执行循环结构的后续语句。,图 3,图 4,图4:先执行一次循环体,再判断条件,决定是否继续执行循环。,53,4.4.1 Do-Loop 循环结构语句 格式一 Do While Loop,执行步骤: 1 判断条件是否成立。如果条件不成立,转向第4步 2 执行循环体; 3 转向执行第1步; 4 执行Loop语句的后继语句。,当型循环,54,Private Sub Form_click() Dim i as integer i=0 Do While i10 print “hello” i=i+1 Loop End Sub

28、,上例的实现:,缩格,55,例 求S=1+2+3+4+100,Private Sub Form_click() Dim n as Integer,s as Long n=1 s=0 Do While n=100 s=s+n n=n+1 Loop Print “1+2+3+100=”;s End Sub,实现累加,56,格式二: Do Loop While ,执行步骤: 1 执行循环体; 2 判断条件是否成立。如果条件成立,转向第 1 步 3 条件不成立,则结束循环,执行Loop语句的后继语句。,当型循环,57,格式三 Do Until Loop,执行步骤: 1 判断条件是否成立。如果条件成立,

29、转向第4步 2 执行循环体; 3 转向执行第 1 步; 4 执行Loop语句的后继语句。,直到型循环,58,格式四 Do Loop Until ,执行步骤: 1 执行循环体; 2 判断条件是否成立。如果条件不成立,转向第 1 步,若条件成立,则执行 第3步 3 执行Loop语句的后继语句。,直到型循环,59,(1)While 短语总是在条件成立时,继续进行循环;条件不成立时,结束循环。因此用于“当型”循环; (2)Until 短语总是在条件不成立时,执行循环体;条件成立时,则结束循环。因此称为“直到型”循环; (3)上述两条短语是可以相互转换的。,总 结,Do While i10 print

30、“hello” i=i+1 Loop,Do Until i=10 print “hello” i=i+1 Loop,60,格式五(特殊形式): Do Loop,执行过程:反复执行循环体。 该结构称为“死循环“,在循环体内必须通过 Exit Do 语句强制退出循环体。 Exit Do语句一般与If-then语句结合使用,即当满足某一条件时,才强制退出循环。 If Then Exit Do,Loop后续语句,Do print “hello” i=i+1 If i=10 then Exit Do Loop,61,(1)Do和Loop为循环结构关键字,必须成对出现,缺一不可; (2)循环体为可执行语句

31、组成,可以嵌套分支结构和循环结构; (3)语句 Exit Do 用于无条件退出循环,可在任意Do-Loop语句结构的循环体中出现。 (4)使用循环结构,一定要避免死循环的出现。,Do-Loop语句使用说明,62,算法分析:求最大公约数的常用方法是 辗转相除法。,例:求两个数的最大公约数。,P 68 例4-3,18,10,M N R,8,10,8,2,8,2,0,2,0,R=8,R=2,R=0,M=2即最大公约数,63,在该例中,我们使用了三个变量,分别表示被除数(m)、除数(n)及余数(r)。,Do r=m Mod n m=n n=r Loop Until r=0,最大公约数是( )?,64,

32、由于输入的数据M和N要求是自然数,在程序中应加入对数据的合法性进行检验的部分; 考虑到程序的应用范围,数据类型可选用长整型。,问题分析及界面设计,65,Private Sub Command1_Click() Dim m As Long, n As Long, r As Long m = Val(Text1.Text) 取数据M n = Val(Text2.Text) 取数据N If m Int(m) Or m Int(n) Or n 1 Then Text3.Text = “数据错误!“ Else Do 求最大公约数 r = m Mod n m = n n = r Loop Until r

33、= 0 Text3.Text = CStr(m) 输出最大公约数 End If End Sub,Private Sub Command2_Click() Text1.Text = “ Text2.Text = “ Text3.Text = “ End Sub,Private Sub Command3_Click() End End Sub,检验数据合法性,Mod 前后加空格,66,例:将十进制数转换成二进制。,算法分析:十进制向二进制转换, 采取的是除2取余法。,解决这类问题必须考虑的是如下几点: (1)需要重复运行的操作除2取余 (2)终止循环的条件商为0,67,注意: 在循环控制条件中必须

34、出现变量,且该变量在循环体中一定要改变值,否则会造成“死循环”,即无休止的循环。 若在运行程序过程若出现“死循环”,用Ctrl+Break可以强制终止程序的执行。,s = Cstr(r) & s,将余数逆序输出,即将最新获得的余数,连接在已获得的余数串的前面,68,练习1:计算圆周率的近似值。计算公式如下:,计算精确到通项的值小于10-7。 提示:s=s+可实现累加。,解决求累加和的问题,关键注意两点: (1)通项的表示; (2)循环的结束条件;,69,Private Sub Form_Click() Dim Pi As Single, s As Single, r As Single Dim

35、 n As Integer n = 1: s = 0 s为累加器 Do r = 1 / (2 * n - 1) 2 求通项 s = s + r n = n + 1 Loop While r 1e-7 Pi = Sqr(8 * s) Print Pi End Sub,70,71,Private Sub Form_Click() Dim Pi As Single, s As Single, r As Double Dim n As Integer n = 1: s = 0 Do r = (-1) (n + 1) * 1 / (2 * n - 1) 求通项 s = s + r n = n + 1 L

36、oop While Abs(r) 0.0001 Pi = 4 * s Print Pi End Sub,72,格式: For = To Step 循环体 Next 功能:由计数变量控制,有限次地执行循环体。,4.4.2 计数循环(For-Next循环),步骤: 1. 计算初值、终值和步长值,将初值赋予计数变量; 2. 比较计数变量和终值,若计数变量大于终值,结束循环; 3. 计数变量小于终值,执行循环体; 4. 计数变量=计数变量+步长值 5. 转向第2步。,73,For - Next是关键字,成对出现,缺一不可; 循环体由可执行语句组成,可嵌套分支结构和循环结构; 计数变量应为整型或单精度型

37、,初值、终值和步长值为相应类型的表达式; 步长值可以为正,也可以为负,省略时默认步长值为1; 循环次数为:Int(终值-初值)/步长值)+1 Exit For语句可以出现在循环体中,用于无条件退出循环,说 明,74,Private Sub Form_Click() For i = 1 To 10 Step 2 Print i; Next i Print “i=“; i End Sub,执行本程序,窗体上将显示:1 3 5 7 9 i=11。它表明循环一共执行了5次,退出循环时,i的取值为11。,例:请写出窗体上打印的内容,以及循环执行的次数。,P 70,75,循环控制变量主要是用于控制循环的执

38、行次数, 但我们通过 合理的设置,可以在循环体中巧妙加以利用,以提高程序的效率.,分析:这个式子有现成的求和公式,在这里主要借助该例体现一下在循环体中计数变量的应用。 设计数变量为i,初值为1,终值为100,步长值为1,可省略。i从1变化到2、3、4、100,正好和式子中的通项变化一致。,S=0 For i=1 To 100 S=S+i Next i,S=0 For i=100 To 1 Step -1 S=S+i Next i,例:求S=1+2+3+100。,S=0:n=0 For i=1 To 100 n=n+1 S=S+n Next i,76,写出下列程序的运行结果,Private Su

39、b Form_Click() Dim p As Integer, i As Integer, n As Integer p = 2: n = 20 For i = 1 To n Step p p = p + 2 n = n - 3 i = i + 1 If p = 10 Then Exit For Next i Print i, p, n End Sub,77,分析:这类问题没有什么算法,只有将所有情况列举然后检查得分情况,直到发现答案为止。设该生共答对i道题,答错(26-i)道题,如果 i*8-(26-i)*5=0 那么i就是答案。i的变化范围是1-26。一旦找到答案,可以立即结束循环。,穷

40、举法要点: -通过循环语句,遍历所有可能的情况; -在循环体内通过条件语句,将符合条件的情况找出来。,例:某试卷有26个问题,答对一题得8分,答错一题扣5分,某学生 回答了全部26个问题,总分为0分,问他答对几道题,答错几道题。,Private Sub Form_Click() Dim i As Integer For i = 1 To 26 If i * 8 - (26 - i) * 5 = 0 Then Exit For Next i Print “答对“; i; “道“, “答错“; 26 - i; “道“ End Sub,条件(关系表达式),78,例4_5 从字母数字组成的字符串中找出

41、所有的大写字母并逆序输出,79,一、界面设计(如上图) 二、算法设计 由题意,所需执行的操作应该是:依次判断字符串中的每一个字符是否是大写字母,若是,则取出放入结果字符串中。 考虑通过在一个循环结构里面嵌套一个判断结构实现,因重复执行判断的次数,即字符串的长度len(s)已知,则循环结构用FOR语句实现; 判断一个字符是否是大写字母,可先将单个字符从字符串中取出Mid(s,i,1),并将该字符直接与“A”、”Z”字符进行比较,应大于等于“A” ,并同时小于等于”Z”x=“A” AND x=“Z”; 要实现逆序,即将最新获得的大写字母字符,连接在已获得的结果字符串的前面t=x & t。,80,P

42、rivate Sub Cmd1_Click() Dim s As String, x As String, t As String Dim i As Integer s = Text1.Text Text2.Text = t End Sub,For i = 1 To Len(s) x=Mid(s,i,1) If x = “A“ And x = “Z“ Then t = x & t End If Next i,注意与书上代码的比较,81,分析:素数:除了1和它本身,不能被其它数整除的数。 算法考虑用穷举法。 程序:,For i = 2 To x - 1 If x Mod i = 0 Then E

43、xit For Next i,例:判断一个数是否为素数.,If Then Print x; “是素数!“ Else Print x; “不是素数!“ End If,i = x,错误程序 For i=2 To x-1 If x Mod i=0 Then Print x;“不是素数“ Else Print x=;“是素数“ End If Next i,其实不用整除到X-1,整除到Sqr(X),即可判断,82,4.4.3 循环的嵌套 所谓循环的嵌套,是指在循环结构中包含另一个循环结构。条件循环和计数循环可以相互嵌套。,83,例:在窗体上按行依次打印1到10,每个数字打印10遍。 分析:这是一个典型的

44、需要用二重循环结构的例子,外层用于控制打印数字的个数,内层控制每个数字打印的遍数。,Private Sub Form_cliclk() Dim i as integer,j as integer For i=1 to 10 For j=1 to 10 Print i; Next j Print Next I End Sub,问题: 在执行整个程序中 print i 语句共执行了多少次?,打印10个数字,每个数字打印10遍,换行,84,(1)内层循环必须完全包含在外层循环之中,不能交叉; (2)内层循环中还可以嵌套循环结构,但建议不要使用多层循环,解决一般问题最多需要三重循环; (3)在多重DO

45、-LOOP循环中,若有EXIT DO语句,则只会强制退出该语句所在的循环,并执行LOOP的后续语句,并不会退出所有的循环。 (4)在多重FOR-NEXT循环中,若有EXIT FOR语句,则只会强制退出该语句所在的循环,并执行NEXT的后续语句,并不会退出所有的循环。,说 明,85,4.5 程序示例,86,例:产生10个2050随机整数,打印在窗体上,并指出最大值和最小值。,分析: 1. 要求得到10个随机数,用记数循环FOR语句实现。 2. 产生随机整数的方法是 x = Int(上界 -下界+1)*Rnd)+下界 必须和Randomize语句配合使用。 3. 要求出最大值和最小值,则每产生一个

46、随机数,即与已知的最大数、最小数比较,若它大于已知的最大数,则它是新的最大数;若它小于已知的最小数,则它是新的最小数。,87,Private Sub Form_Click() Dim i As Integer, x As Integer, Dim max As Integer, min As Integer For i = 1 To 10 x = Int(Rnd * 31) + 20 Print x; Next I Print Print “max=“; max Print “min=“; min End Sub,max = 0: min = 51,If max x Then min = x,

47、88,Private Sub Form_Click() Dim S As Long, i As Integer Dim j As Integer, fact As Long For i = 1 To 10 fact = 1 For j = 1 To i fact = fact * j Next j S = S + fact Next i Print “s=“; S End Sub,Private Sub Form_Click() Dim S As Long, i As Integer Dim fact As Long fact = 1 For i = 1 To 10 fact = fact * i S = S + fact Next i Print “s=“; S End Sub,问题:这两段程序的功能分别是什么?,请注意多重循环中赋初值语句的位置。,89,分析: 设要解的方程为f(x)=0,并已知一个不够精确的初始解X0,则有牛顿迭代公式:Xn+1=Xn-f(Xn)/f(Xn) n=0,1,2, 利用迭代公式,依次求得X1,X2,X3, , 当| Xn+1-Xn | 时, Xn+1即为所求得根。 3 注意此算法的三要素:迭代公式、初值、和迭代精度(结束条件).,例4-9 用牛顿迭代法求方程xex-1=0在X0=0.5附近的一 个根,要求精确到10-7。,90,Priv

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 商业贸易


经营许可证编号:宁ICP备18001539号-1