VB程序设计 第五章_第1页
VB程序设计 第五章_第2页
VB程序设计 第五章_第3页
VB程序设计 第五章_第4页
VB程序设计 第五章_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Visual Basic 程序设计教程内蒙古科技大学实践训练中心内蒙古科技大学实践训练中心第五章第五章 VB控制结构控制结构5.15.1 5.1.1 5.1.1 算法的概念算法的概念 算法: 是解决问题的有序步骤。每一步骤都必须是确定的、可行的,且不论何种情况,在经过有限步骤后,算法一定能结束。 1、算法的特征 例如:求N!,其算法可描述如下: 步骤1:输入N的值; 步骤2 2:设两个变量R R、I I,I I为大于等于零的整数,R RI!I!。令I I0 0,R R1 1 步骤3 3:I=I+1I=I+1,R=RR=R* *I I 步骤4 4:判断ININ是否成立。若成立,返回到第三步骤,否

2、则向下执行 步骤5 5:输出R R,即N N!5.15.1 1 1、算法的特征、算法的特征 算法的有穷算法的有穷性性算法的确定性算法的确定性算法的有效性算法的有效性有零个或多个输入有零个或多个输入至少有一个输出至少有一个输出5.15.1 2 2、算法的描述、算法的描述 自然语言:自然语言存在着文字冗长、有二义性,表达不确切等缺点; 流程图:起止框数据框处理框判断框流程线 N-S图:是流程图的发展,去掉了流程图的流程线,全部算法都表示在一个矩形框内。5.15.1 2 2、算法的描述、算法的描述开始输入NI0 R1INI=I+1R=R*I输出R结束YN输入NI=0 R=1I=I+1R=R*IIN输

3、出R5.15.1 5.1.2 5.1.2 三种基本控制语句三种基本控制语句 1 1、顺序结构、顺序结构 算法的每一操作是按从上到下的线性次序执行的。 ABCABC5.15.1 5.1.2 5.1.2 三种基本控制语句三种基本控制语句 2 2、选择结构、选择结构 又称分支结构,根据给定的条件,选择执行一个分支的算法结构。在选择结构中,必然要包括一个条件判断。条件ABYN条件YNAB5.15.1 5.1.2 5.1.2 三种基本控制语句三种基本控制语句 3 3、循环结构、循环结构 当循环:当循环:首先判断条件是否成立,若成立,执行要循环的一组操作再返回到条件判断,决定是否继续循环;若不成立,跳过这

4、组操作,执行此结构后面的操作。条件循环体YN条件循环体5.15.1 5.1.2 5.1.2 三种基本控制语句三种基本控制语句 3 3、循环结构、循环结构 直到循环:直到循环:首先执行一遍要循环的操作,然后判断条件是否成立,若成立,则返回到这组操作的开始,重复执行这组操作;若不成立,执行此结构以后的操作。条件循环体YN条件循环体5.25.2 5.2.1 5.2.1 单行结构条件语句单行结构条件语句 格式:If If Then Then Else Else 2 功能:如果“条件”成立(其值为TrueTrue)或为非0值,则执行“语句1”,否则执行 “语句2”。 其中:“条件”通常是关系表达式或逻辑

5、表达式; “语句1”和“语句2”可为简单语句,也可为用冒号分割的复合语句; 若省略”ElseElse”,则IfIf语句简化为:If If Then Then 条件语句(序列)下一条语句FalseTrue条件语句1语句2下一条语句TrueFalse5.25.2 5.2.1 5.2.1 单行结构条件语句单行结构条件语句 例例【5-15-1】输入三个数,输出其中最大值输入三个数,输出其中最大值。 解题思路解题思路:设置一个变量max,将第一个数赋给max,然后依次和第二个、第三个数比较,将每次比较的大的数赋给max。 开始输入a,b,cmax=abmaxmax=bcmax输出maxFalseTrue

6、FalseTruemax=c Dim a As Single,b As Single Dim c As Single, max As Single a = Val(InputBox(输入第一个数:输入第一个数:) b = Val(InputBox(输入第二个数:输入第二个数:) c = Val(InputBox(输入第三个数:输入第三个数:) max = a If b max Then max = b If c max Then max = c FontSize = 12 Print Print a; 、; b; 、; c; 中最大数是:中最大数是:; max5.25.2 5.2.1 5.2.

7、1 单行结构条件语句单行结构条件语句 例例5-25-2编程求函数编程求函数sgn(x)sgn(x)的值的值。 解题思路解题思路:根据题意:x0,sgn=1 x=0,sgn=0 x 0 Then Print 1 Else If X = 0 Then Print 0 Else Print -15.25.2 5.2.2 5.2.2 块结构条件语句块结构条件语句 格式: If Then Elseif Then Elseif Then Else End If 条件语句中的“条件”不但可以是逻辑表达式 或关系表达式,还可以是数值表达式;”语句块语句块“中的语句不能与中的语句不能与“Then”Then”在同

8、一在同一行上,否则行上,否则VBVB认为是一个单行结构的条件语句;认为是一个单行结构的条件语句;当省略ElseifElseif子句和ElseElse子句时,块结构就 简化为: If If Then Then End If End If5.25.2 5.2.2 5.2.2 块结构条件语句块结构条件语句 条件1条件2条件n1语句块n语句块1下一条语句语句块2语句块n1FalseFalseFalseTrueTrueTrue5.25.2 5.2.2 5.2.2 块结构条件语句块结构条件语句 例例【5-35-3】 输入系数输入系数a a,b b,c c,求二次方程:,求二次方程:axax2 2+bx+c

9、=0 +bx+c=0 的实根的实根。 d0d0 X1=(-b+ )/(2*a) X2=(-b- )/(2*a)FalseFalseTrueTrue开始输入a,b,cd=b*b4*a*cdd输出x1,x2x=b/2a无实根输出x结束5.25.2 5.2.2 5.2.2 块结构条件语句块结构条件语句 例例【5-55-5】 输设计一个程序,从键盘输入学生的分数,统计其中及格的人数以输设计一个程序,从键盘输入学生的分数,统计其中及格的人数以 及总平均数。及总平均数。 解题思路解题思路:在窗体上建立三个文本框,用于显示人数、成绩的及格人数和总平 均数,并分别编写相应的命令。5.25.2 5.2.3 5.

10、2.3 多分支语句多分支语句 格式: Select Case Case Case Case Else End Select 先对“测试表达式”求值,而后顺序测试与哪一个CaseCase子句中的“表达式表列”相匹配,找到就执行该分支的“语句块”,而后退出该分支;,否则就执行“Case ElseCase Else”分支的语句块,然后,执行“End SelectEnd Select”后面的语句;“测试表达式”可以是数值表达式或字符串表达式,通常为变量或常量;每个CaseCase子句中的语句块可以是一行或多行VBVB语句;“表达式表列”中的表达式必须与测试表达式的类型相同;5.25.2 5.2.3 5

11、.2.3 多分支语句多分支语句 使用举例: 若变量x x的值为1、3、5、7,则Select CaseSelect Case语句使用如下: Select case xSelect case x case 1 case 1 表示当表示当x x1 1时应执行的语句时应执行的语句 . . case 3 case 3 表示当表示当x x3 3时应执行的语句时应执行的语句 case 5 case 5 表示当表示当x x5 5时应执行的语句时应执行的语句 case else case else 表示当表示当x x1 1、3 3、5 5(即(即x x7 7)时应执行的语句)时应执行的语句 End selec

12、t End select 5.25.2 5.2.3 5.2.3 多分支语句多分支语句 ”表达式表列“称为域值,可以是下列形式之一: 1, 2 当“测试表达式”的值与其中之一相同时目就执行该CaseCase子句中的语句 块;例: Case 2Case 2,4 4,6 6,8 8,1010 to to 2 当”测试表达式“的值落在表达式1和表达式2之间时(包含表达式1和 表达式2的值),执行该CaseCase子句的语句块。书写时,把小值写在前书写时,把小值写在前 面面 例:Case 2 to 10Case 2 to 10 Is Is 当”测试表达式“的值满足”关系表达式“指定条件时,执行该Case

13、Case子句 的语句块。 例:Case Is18Case Is18* *a a ”测试表达式“的值大于18*a的值 Case IsCase Is5 5 ”测试表达式“的值等于5 Case Is5Case Is5,1 to 21 to 2 ”测试表达式“的值大于大于5 5或或在1 12 2之间 5.25.2 5.2.3 5.2.3 情况语句情况语句 例例【5-65-6】 从键盘上输入学生成绩,然后在文件框中显示其等级(按从键盘上输入学生成绩,然后在文件框中显示其等级(按5 5级计级计分制输出不及格、及格、中等、良好、优秀)分制输出不及格、及格、中等、良好、优秀) 解题思路解题思路:利用input

14、boxinputbox输入成绩,根据其百分制成绩转换为5级制成绩; 059:不及格; 6069:及格; 7079:中等; 8089:良好; 90100:优秀; 5.25.2 5.2.3 5.2.3 情况语句情况语句 例例【5-75-7】 商店售货,按购买货物的款数给予不同的优惠折扣,编程计商店售货,按购买货物的款数给予不同的优惠折扣,编程计 算购货款数。算购货款数。 解题思路解题思路:利用inputboxinputbox输入“应付款”,根据其值,折算为“实付款”; 购货不足250元,无折扣; 购货满250元,不足500元,减价5; 购货满500元,不足1000元,减价7.5; 购货满1000元

15、,不足2000元,减价10; 购货满2000元,减价15;5.25.2 5.2.4 IIf5.2.4 IIf函数和函数和ChooseChoose函数函数 1 1、IIfIIf函数函数 IIfIIf函数用于执行简单判断及相应处理。 格式:IIf(IIf(条件,条件,TrueTrue部分,部分,FalseFalse部分部分) ) 功能:当“条件”为真时,返回TrueTrue部分的值为函数值,当“条件”为假 时,返回FalseFalse部分的值为函数的值; 说明: ”条件“是逻辑表达式或关系表达式; ”TrueTrue部分“或”FalseFalse部分“是表达式; ”TrueTrue部分“和”Fal

16、seFalse部分”的返回值类型必须与结果变量类型一致; IIfIIf函数与IfThenElseIfThenElse的执行机制类似; 5.25.2 5.2.4 IIf5.2.4 IIf函数函数 IfThenElseIIf函数函数If x=0 Then y=0 Else y=1/xy=iif(x=0,0,1/x)d=b*b4*a*cIf d=0 Then Print “此方程有解此方程有解”Else Print “此方程无实解此方程无实解”End Ifd=b*b4*a*cPrint IIf(d=0,”此方程有解此方程有解”,”此方程无实此方程无实解解”)5.25.2 2 2、ChooseChoo

17、se函数函数 Choose Choose函数可以替代Select CaseSelect Case语句,适用于简单的多重判断场合; 格式:Choose(Choose(变量,值为变量,值为1 1的返回值,值为的返回值,值为2 2的返回值的返回值值为值为n n的返回值的返回值) ) 功能:当变量的值为1时,函数值为“值为1的返回值”,依此类推,当变量 的值为n时,函数值为“值为n的返回值”。 说明: 变量的类型为数值型; 当变量的值是在1 1n n的非整数时系统自动取整; 若变量的值不在1 1n n之间,则ChooseChoose函数的值为NullNull; 例:例:op=Choose(Nopop=

18、Choose(Nop,”+”+”,”,”* *”,” ” ”)”) 则当:NopNop1 1时,opop”+”+”; NopNop2 2时时,opop”,依此类推。5.25.2 5.2.5 5.2.5 嵌套的选择结构嵌套的选择结构 例例【5-45-4】 输入系数输入系数a a,b b,c c,问能否构成三角形的,问能否构成三角形的3 3边;若能,则求此三边;若能,则求此三角形的面积角形的面积 解题思路解题思路:a,b,c构成三角形的3 3边,必须俱备以下条件: a,b,c均为正数 即 a0 and b0 and c0; a,b,c中任意两数之和大于第三个数 即 a+bc and a+cb an

19、d b+ca ; (3)三角形的面积公式: p=(a+b+c)/2 s = Sqr(p * (p - a) * (p - b) * (p - c)5.25.2 5.2.5 5.2.5 嵌套的选择结构嵌套的选择结构 例例【5-4_15-4_1】 设计一个登录界面,并对输入的用户名和密码进行验证。设计一个登录界面,并对输入的用户名和密码进行验证。 假假设用户名为:设用户名为:rootroot,密码为:,密码为:“abc123abc123”。 解题思路解题思路:窗体上画两个文本框,用于输入用户名和密码,以及两个命令按钮,若用户输入用户名或密码错误,则提示错误以及剩下登录的次数。If Text1.Te

20、xt root or Text2.Text abc123 Then i = i + 1 If i 5 Then MsgBox 错误!你还有错误!你还有” & 5-i & “ 次机会次机会 ElseIf i = 5 Then MsgBox “你没有登录机会了!你没有登录机会了! End End If Else MsgBox “登录成功!登录成功! End End If5.35.3 5.3.1 For5.3.1 ForNextNext循环循环 For For循环也称ForForNextNext循环或计数循环,常用于循环次数已知的程序中。 格式: For For = To To Step Step

21、Exit For Exit For Next Next 例例:For iFor i1 To 10 Step 21 To 10 Step 2 Print i Print i Next i Next i结果:依次输出1 1、3 3、5 5、7 7、9 9。共执行5 5次 Print iPrint i 语句;说明:循环变量:为一数值变量(或为简单变量); 初值、终值、步长值:均为数值型,若为实数,则自动取整; Exit ForExit For:用于退出循环。 循环次数:循环次数IntInt(终值初值)/步长值1 1 5.35.3 开始循环变量初值循环变量终值执行循环体循环变量循环变量步长结束(a)步

22、长为正数NY开始循环变量初值循环变量终值执行循环体循环变量循环变量步长结束(b)步长为负数NY5.35.3 ForFor循环可以嵌套,但内外循环之间不得交叉:一般形式: For I1= For I2= For I3= Next I3 Next I2 Next I1 省略Next后面的循环变量: For I1= For I2= For I3= Next Next Next 当内外循环有相同的终点时,可共用一个NextNext语句,此时NextNext后面的循环变量名不能省。 For I1= For I2= For I3= Next I3,I2,I1 5.35.3 并列的循环可以共用一个变量名作循

23、环变量名,而嵌套的循环不能用同一并列的循环可以共用一个变量名作循环变量名,而嵌套的循环不能用同一个变量名作循环变量名。如个变量名作循环变量名。如:For i=1 To 5 For i=1 To 10 Next Next错误错误For i=1 To 5 Next For i=1 To 10 Next正确正确5.35.3 例例【5-85-8】求自然数求自然数n n的阶乘的阶乘。 解题思路:解题思路:首先利用inputbox输入n的值,利用ForNext循环,以及连乘方法,即可求出n! Dim n As Integer, k As Integer, i As Integern = Val(Input

24、Box(“请输入一个整数:请输入一个整数:)k = 1For i = 1 To n k = k * iNextPrint n; !=; k5.35.3 例例【5-95-9】 输入一个班的学生成绩,统计其中的及格人数,并计算出全班的输入一个班的学生成绩,统计其中的及格人数,并计算出全班的平均分。学生人数不定,输入负数就截止,设全班人数不超过平均分。学生人数不定,输入负数就截止,设全班人数不超过5050人。人。解题思路解题思路:利用ForForNextNext循环、inputboxinputbox输入成绩,若输入成绩小于零,则退出循环,在循环内求出累计总成绩,以及及格人数。5.35.3 例例【5-

25、105-10】 求求1 11/2+1/3+1/4+1/n1/2+1/3+1/4+1/n。 该题通项为该题通项为a ai i=1/i =1/i ,求,求 。 解题思路解题思路:首先利用textboxtextbox或inputboxinputbox输入n的值,在ForForNextNext循环内利用累加,求出每个单项的值,以及总和。niia1 Dim n As Integer, i As Integer n为项数,为项数,i为循环变量为循环变量 Dim sum As Single, a As Single sum为和,为和,a为为1/i sum = 0 n = Val(Text1.Text) Fo

26、r i = 1 To n a = 1 / i sum = sum + a Next Print n; 项的和为:项的和为:; sum5.35.3 5.3.2 While5.3.2 WhileWendWend循环循环 While While又称当循环,根据某一条件进行判断,决定是否执行循环。 格式: While While 条件条件 循环体循环体 WendWend开始计算“条件”值条件为“真”?循环体结束YN功能:当给定的条件为真时,执行循环体当给定的条件为真时,执行循环体;说明: While循环语句首先对“条件”进行测试, 然后决定是否执行循环体; 若“条件”总是成立,则不停地执行循环 体,构

27、成“死循环”。 当循环可以嵌套,不允许交叉;5.35.3 5.3.2 While5.3.2 WhileWendWend循环循环 例例【5-115-11】 小红今年小红今年1212岁,她父亲比她大岁,她父亲比她大3030岁,编程计算出她的父亲在几年岁,编程计算出她的父亲在几年后比她年龄大一倍。后比她年龄大一倍。 解题思路解题思路:利用While循环语句,循环的条件时“小红的年龄*2父亲的年龄”,在循环体中,小红的年龄累加1,直到”小红的年龄*2父亲的年龄“时,退出While循环。 另:本题也可使用ForNext循环语句解答。 Dim age As Integer age = 12 While a

28、ge * 2 age + 30 age = age + 1 Wend Print 经过经过; age - 12; 年,小红父女的年龄分别是:年,小红父女的年龄分别是:; age + 30; age5.35.3 5.3.3 DO5.3.3 DOLoopLoop循环循环 格式1: Do While | UntilDo While | Until Exit Do Exit Do Loop Loop 格式2: Do Do Exit Do Exit Do Loop While | Until Loop While | Until 功能: 当循环“条件”为真(WhileWhile条件)或直到指定的循环结束

29、“条件”为真之前(UntilUntil条件)重复执行循环体。5.35.3 说明: WhileWhile是当条件为TrueTrue时执行循环,而UntilUntil则是在条件变为TrueTrue之前重复 当只有Do和Loop关键字时,格式简化为: DoDo Exit Do Exit Do Loop Loop 此时,要使循环正常结束,循环体内应有 Exit DoExit Do语句。 在格式1中,While和Until放在循环的开头是先判断条件,再决定是否执行 循环体; 在格式2中,While和Until放在循环的尾部,是先执行循环再判断条件,以决定是重复循环还是终止循环。5.35.3 例如例如:

30、求求1 1100100的自然数之和的自然数之和。 n=1:sum=0 Do While n100 sum=sum+n n=n+1 Loop Print “Sum=“;Sum n=1:sum=0 Do sum=sum+n n=n+1 Loop While n100 Print “Sum=“;Sum 5.35.3 例例【5-125-12】 编写程序,对任意输入的正数编写程序,对任意输入的正数n(nn(n3)3)判断其是否是素数判断其是否是素数。解题思路解题思路; 素数:除了1和自身外,不能被任何数整除的数。用数n依次去除2n1间的各个数,只要都除不尽,即为素数。 Dim n As Integer,

31、 i As Integer, k As Integer rem n为判断的正数为判断的正数, i为循环变量为循环变量 n = Val(InputBox(请输入一个正数:请输入一个正数:) i = 2: k = Int(n / 2) Do While i k Then Print n; 是素数是素数; Else Print n; 不是素数不是素数5.35.3 例例【5-135-13】 输入两个正整数,求它们的最大公约数输入两个正整数,求它们的最大公约数。解题思路解题思路:求最大公约数的方法为“辗转相除法”;如24和1614和26的最大公约数为2021221214二121426一14和2624和1

32、6的最大公约数为80816二81624一24和16结论余数r除数n被除数m步骤原数注:程序中无比要将注:程序中无比要将m m置为最大的值,置为最大的值,n n为最小的数。为最小的数。 Do r = m Mod n 求被除数、除数的余数求被除数、除数的余数 m = n 将除数赋予被除数将除数赋予被除数 n = r 将余数赋予除数将余数赋予除数 Loop Until r = 05.35.3 5.3.4 5.3.4 多重循环多重循环 在一个循环结构的循环体系内含有另一个循环结构,称为循环嵌套,又称多重循环,处于内部的循环为内循环,处于外部的循环为外循环。例例【5-155-15】用台劳公式求解Sinx

33、的近似解 ;x,n由键盘输入。)!12(.!7!5!31121753)1(nxSinxxxxxnn 解题思路解题思路:需要用两层循环。外层循环控制计算的项数,内层循环具体计算每一个项的值,而后进行计算结果的累加。5.35.3 5.3.4 5.3.4 多重循环多重循环 例例【5-165-16】编写程序,输出编写程序,输出100100200200间的所有素数。间的所有素数。解题思路解题思路:需要设置两层循环,其中外层循环负责控制取值范围,即100200;内层循环具体判断每一个数是否为素数。 number为输出计数器,为输出计数器,x为输出的素数,为输出的素数,i,k为循环变量为循环变量 Dim n

34、umber As Integer, x As Integer, i As Integer, k As Integer number = 0 For x = 100 To 200 i = 2: k = Int(x / 2) Do While i k Then number = number + 1 If number Mod 5 = 0 Then Print x Else Print x, 每每5个素数为一行个素数为一行 End If Next5.45.4 5.4.1 5.4.1 累加、连乘累加、连乘 累加:就是在原有和的基础上再加一个数,并重复该操作; 连乘:在原有积的基础上再乘以一个数,并重

35、复该操作; 例如例如:求求100100以内的自然数之和。其中以内的自然数之和。其中sumsum为累加和变量,为累加和变量,i i为循环控制变量为循环控制变量 求求1010以内的偶数连乘之乘积以内的偶数连乘之乘积; Private Sub Command1_Click() sum=0 For i=1 to 100 sum=sum+i Next Print sum End Sub Private Sub Command1_Click() p=1 For i=2 to 10 Step 2 p=p*i Next Print p End Sub 5.45.4 5.4.2 5.4.2 定位输出定位输出 例

36、例【5-175-17】编写程序,打印出如下的乘积表 * 3 6 9 12 15 45 90 135 180 16 48 96 144 192 17 51 102 153 204 18 54 108 162 216 19 57 114 171 228 20 60 120 180 240 解题思路解题思路:第一行可看为标题,具体计算可从第二行开始:需要设置两层循环, 外层循环负责控制行数或向内层循环传输每列的第一个值,内层循环具体计算每列的第一个值同3、6、9、12的乘积,并显示出来。 5.4 5.4 5.4.2 5.4.2 定位输出定位输出例例【5-19_15-19_1】编写程序,打印出如下图形

37、 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *思路一:采用单层循环,每一行显示的tab值(列的坐标)应依次递加。思路二:采用二重循环,外层循环控制行数和打印位置,内层循环具体显示每一行的*。5.4 5.4 5.4.2 5.4.2 定位输出定位输出例例【5-19_25-19_2】编写程序,打印出如下图形 * * * * * 解题思路解题思路:采用二重循环,外层循环控制行数和打印位置,内层循环具体显示每一行的*;每行显示*的个数与所在行数的关系为:个数2*行数1;每行显示的tab值(列

38、的坐标)依次递减; Dim i, j As Integer For i = 1 To 5 控制显示的行数控制显示的行数 Print Tab(15 - 2 * i); 每行显示的列的起始位置每行显示的列的起始位置 For j = 1 To 2 * i - 1 每行显示的每行显示的*的个数的个数 Print * ; Next Print Next5.4 5.4 例例【5-195-19】编写程序,打印出如下数的金字塔编写程序,打印出如下数的金字塔 1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 . 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1 思路:采用二重循环

39、,外循环控制行数和打印位置,内循环实际为2个并列循环,分别控制打印一行的前半部和后半部。5.4 5.4 5.4.3 5.4.3 穷举法穷举法 根据提出的问题,列举所有可能的情况,并用问题中给定的条件检验那些是需要的,哪些是不需要的。 例例【5-205-20】 算经算经中出了一道题:中出了一道题:“鸡翁一,值钱五;鸡母一,值钱三;鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?” 解题思路解题思路:设x,y,z分别为鸡翁、鸡母、鸡雏的数,则有: 5*x+3*y+z/3=100(元) x+y+z=100(只) 则按

40、x取值0100,y取值:0100,依次取值,直到满足上式即可; Dim x, y, z As Integer FontSize = 14 Print cock, hen, chick For x = 0 To 100 For y = 0 To 100 z = 100 - x - y If 5 * x + 3 * y + z / 3 = 100 Then Print x, y, z Next Next5.4 5.4 5.4.3 5.4.3 穷举法穷举法 例例【5-255-25】将一张将一张1 1元钞票分成一分、二分和五分硬币,每种至少元钞票分成一分、二分和五分硬币,每种至少8 8枚,问枚,问有多

41、少种方案?有多少种方案? 解题思路解题思路:每种硬币至少8枚,则1分最多有44枚(1002*85*8)/1,2分硬币最多有26枚,5分硬币最多有15枚。 则1分币取值:844, 2分币取值:826, 5分币取值:815, 各依次取值,直到满足:1分币总值2分币总值5分币总值100分5.4 5.4 5.4.4 5.4.4 递推法递推法 又称迭代法,就是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都在旧值的基础上递推出新值,并由新值代替旧值。例例【5-145-14】 求方程求方程f(x)=xf(x)=x3 32x2x5=05=0在区域在区域1.5,2.51.5,2.5上的一个实根。要求按

42、四上的一个实根。要求按四舍五入的方式精确到小数点后第二位。舍五入的方式精确到小数点后第二位。 解:本题采用牛顿迭代法: x xn+1n+1=x=xn nf(xf(xn n)/f(x)/f(xn n).).f(x1)=f(x1)/(x1-x2)f(x1)=f(x1)/(x1-x2)为曲线f(x)在xx1点处的切线斜率,因此,若给出x1和f(x),先找到f(x1),通过f(x1)作切线求出x2:x2=x1f(x1)/f(x1),x2为上诉切线与x轴的交点。求出x2后,再找出f(x2),通过f(x2)作切线,与x轴交与x3,f(x2)是通过f(x2)的切线斜率,如此求下去,直至接近方程真正的根。f(

43、x)f(x1)x1x2x3f(x2)5.4 5.4 5.4.4 5.4.4 递推法递推法例例【5-145-14】 求方程求方程f(x)=xf(x)=x3 32x2x5=05=0在区域在区域1.5,2.51.5,2.5上的一个实根。要求按四上的一个实根。要求按四舍五入的方式精确到小数点后第二位舍五入的方式精确到小数点后第二位。已知:f(x)=xf(x)=x3 32x2x5 5,则,则f(x)=3xf(x)=3x2 22 2;用f f代表f(x)f(x),f1f1代表f(x)f(x),给出x x的初值,赋给x1x1,用x xn+1n+1=x=xn nf(xf(xn n)/f(x)/f(xn n)

44、)式式求出x2x2(程序中用x x表示),再将新求出的x2x2(程序中的x x)作为下一次迭代时的x1x1,再去求新的x2x2。f(x)f(x1)x1x2x3f(x2)5.4 5.4 5.4.4 5.4.4 递推法递推法 例例【5-265-26】 有一个数列,第一个数为有一个数列,第一个数为2 2,第二个是为,第二个是为3 3,第三个是前两个数之,第三个是前两个数之和,以后每个数都是前两个数之和,要求输出该数列的前和,以后每个数都是前两个数之和,要求输出该数列的前N N项项。 解题思路解题思路:可先把前两个数分别赋给变量A和B中,再计算CAB;再将上一轮B的值移到A中,将上一轮的C的值移到B中

45、,再计算C=A+B,得到的就是第四个数; 再B的值移到A中,C的值移到B中,计算C=A+B,得到的就是第五个数以此循环,以此循环,就可得到第N个数; A B C 2 3 5 3 5 8 5 8 13 .C=A+B -5=2+3 第一轮 A=3: B=5 -将上一轮的B赋给A、C赋给B5.65.6 例例【5-215-21】 求整数求整数351351432432之间既不能被之间既不能被3 3整除又不能被整除又不能被8 8整除的数的个数及这整除的数的个数及这些数的和。些数的和。 解题思路解题思路:不能被3整除: n mod 30;不能被8整除:n mod 80 Dim i As Integer, n

46、 As Integer, sum As Long For i = 351 To 432 If (i Mod 3) 0 And (i Mod 8) 0 Then n = n + 1 sum = sum + i End If Next FontSize = 14 Print 数的个数:数的个数:; n Print 数的和是:数的和是:; sum5.65.6 例例【5-225-22】在在200,900200,900范围内同时满足以下两个条件的十进制数:范围内同时满足以下两个条件的十进制数: (1 1)其个位数与十位数之和除以)其个位数与十位数之和除以1010所得的余数是百位数;所得的余数是百位数; (2 2)该数是素数;)该数是素数;问有多少个这样的数?问有多少个这样的数? 解题思路解题思路:设置两层循环,外层循环控制取值范围:200900,并取其个位数、十位数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论