第4章 控制结构.pptx_第1页
第4章 控制结构.pptx_第2页
第4章 控制结构.pptx_第3页
第4章 控制结构.pptx_第4页
第4章 控制结构.pptx_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

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

文档简介

1、第四章 控 制 结 构,计算机科学学院,课程引入,在计算器中输入-4,进行开平方运算(sqrt),会进行运算吗?,在文本框中提示“函数输入无效”,在VB中能否实现对用户输入数据的正确判断呢?,如果用户输入的数由变量x存储,那么进行开平方操作之前如何判断x是否为非负数呢?,选择结构,从键盘输入一个数,并计算该数的平方根。,If单分支选择结构,1、用变量获得被开方数 2、判断变量是否满足条件 3、若满足条件计算并输出结果,Private Sub Form_Click() End Sub,x = Val(InputBox(请输入一个数) If x = 0 Then Print Sqr(x) End

2、If,IfThen单分支选择结构,If Then 语句块 End If 或者 If Then ,If x = 0 Then Print Sqr(x),从键盘输入一个数,若为非负则计算该数的平方根,否则显示函数输入无效。,If单分支选择结构,Private Sub Form_Click() End Sub,If x 0 Then Print 函数输入无效。,x = Val(InputBox(请输入一个数) If x = 0 Then Print Sqr(x) End If,Private Sub Form_Click() End Sub,x = Val(InputBox(请输入一个数) If x

3、 = 0 Then Print Sqr(x) End If,从键盘输入一个数,若为非负则计算该数的平方根,否则显示函数输入无效。,If双分支选择结构,Else Print 函数输入无效。,函数输入无效,IfThenElse语句(双分支结构) if Then Else End if 或者:if Then Else ,If双分支选择结构,双分支结构实现: If x0 Then y=sin(x)+sqr (x*x+1) Else y=cos(x) - x3+3*x End If,举例,例:计算分段函数,两个单分支结构实现: If x0 Then y=sin(x)+sqr (x*x+1) If x=0

4、 Then y=cos(x)-x3+3*x,条件函数IIf,IIf函数可以看成是ifthenelse的简写版本。 IIf函数形式是: IIf(条件,当条件为True时的值,当条件为False时的值) 例:求x, y中较大的数,放入max变量中,语句如下: max=IIf(x y,x,y),功能:用来执行简单的条件判断。,注意:该函数的True部分、False部分及结果变量的类型必须一致。,评定学生成绩等级。90分及其以上为优秀,其它为不优秀。,举例,不优秀,Dim mark As Integer mark =val( InputBox(“请输入学生成绩”) If mark=90 Then Pr

5、int “优秀” End If,Else Print “不优秀”,不优秀,评定学生成绩等级。90分及其以上为优秀,60分以上为合格,其它为不合格。,If嵌套,If mark=90 Then Print “优秀” Else Print “不优秀” End If,If mark=60 Then Print “合格” Else Print “不合格” End if,评定学生成绩等级。90分及其以上为优秀,8090为良好,60分以上为合格,其它为不合格。,If多分支结构,If mark=90 Then Print “优秀” ElseIf mark =80 Then Print “良好” ElseIf

6、mark =60 Then Print “合格” Else Print “不合格” End If,If多分支结构,不管有几个分支,依次判断,当某条件满足,执行相应的语句块,其余分支不再执行 ElseIf不能写成 Else If,例:已知百分制成绩X,显示对应的五级制成绩。,判断下列方法是否正确?,方法三 If mark =90 Then Print 优 ElseIf 80= mark and mark 90 Then Print 良 ElseIf 70= mark and mark 80 Then Print 中 ElseIf 60= mark and mark 70 Then Print 及

7、格 Else Print 不及格 End If,例:已知百分制成绩mark,显示对应的五级制成绩。,Select Case多分支选择结构,Select Case 变量或表达式 Case 条件表达式1 Case 条件表达式2 Case Else End Select,数值型或字符串型,输入百分制成绩mark,显示对应的五级制成绩。,NO,YES,YES,例:已知变量C中存放了一个字符,判断该字符是字母字符、数字字符还是其它字符。,用多分支结构实现: If Ucase(C) = A And Ucase (C) = 0 And C = 9 Then Print C + 是数字字符 Else Prin

8、t C + 其它字符 End If,用Select Case语句实现: Select Case C Case a To z,A To Z Print C + 是字母字符 Case 0 To 9 Print C + 是数字字符 Case Else Print C + 其它字符 End Select,例:对三门课程奖学金的判断,一等奖获得: Select Case mark1, mark2, mark3 Case (mark1 + mark2 + mark3) / 3 = 95 Print 一等奖 Case mark1 = 100 And mark2 = 100 And mark3 = 80 En

9、d Select,Select Case x, y Case x 0 and y 0,选择控件,属性 Caption Enabled Value True False 事件 Click,1. 单选按钮的属性及事件,Private Sub option1_Click() Text1.FontName = 黑体 End Sub Private Sub option2_Click() Text1.FontName = 隶书 End Sub Private Sub option3_Click() Text1.FontName = 幼圆 End Sub,复选框的属性及事件,属性 Value 0未选 1选

10、中 2暂时禁止 事件 Click,Private Sub Form_Load() Text1.FontSize = 20 End Sub Private Sub Check1_Click() If Check1.Value = 1 Then Text1.FontUnderline = True Else Text1.FontUnderline = False End If End Sub Private Sub Check2_Click() If Check2.Value = 1 Then Text1.FontItalic = True Else Text1.FontItalic = Fals

11、e End If End Sub,框架(Frame),框架内控件的创建方法: 方法1:单击工具箱上的工具,然后用出现的“+”指针,在框架中适当位置拖拉出适当大小的控件。 不能使用双击工具箱上图标的自动方式。 方法2:将控件“剪切”到剪贴板,然后粘贴(Ctrl+V)到框架。 例题,引例:,Private Sub Form_Click() Print * Print * Print * Print * Print * End Sub,Private Sub Form_Click() Print * End Sub,For i = 1 To 5 Step 1 Next i,循环控制结构,For i

12、= 1 To 2 step 1 Print * Next i,For循环控制结构,For i = 1 To 2 step 1 Print * Next i,Print *,For循环控制结构,For i = 1 To 2 step 1 Print *” Next i,Print *,i = i + 1,For循环控制结构,For i = 1 To 2 step 1 Print * Next i,Print *,True,i = i + 1,For循环控制结构,i=2,For i = 1 To 2 step 1 Print * Next i,Print *,True,i = i + 1,退出循环

13、,For循环控制结构,For i = 2 To 1 step -1 Print * Next i,For循环控制结构,For 循环(一般用于循环次数已知) 格式: For 循环变量 = 初值 to 终值 step 步长 循环体 Next 循环变量,循环次数,当初值等于终值,不管步长为正还是为负,均执行一次循环体。,强制退出循环,Exit For,For i = 1 To 3 print i Next i,Exit For,例:求阶乘n!,Private Sub Command1_Click() Dim n% , t! n = Val(InputBox(请输入数n) Print n; !=; t

14、 End Sub,赋初值为1,连乘器,For i = 1 To n step 1,Next i,t = t * i,t = 1,n!=123n,例:求S=1+2+3+100,Private Sub Command1_Click() Dim t! , i% t = 0 For i = 1 To 100 t = t + i Next i Print S=1+2+3.+100=; t End Sub,For i = 1 To 100 t=0 t = t + i Next i,综合应用(累加和连乘),编程计算1+2!+3!+10!的值。,Private Sub Command1_Click() Dim

15、 T As Long, S As Single, k% For k = 1 To 10 Next k Form1.Print S End Sub,例: 编程判断一个大于2的整数是否为素数。,素数是一个大于或等于2,只能被1和本身整除的整数。 判别方法是: 对于整数n, 从 i=2,3,n-1 判别n能否被 i 整除,只要有一个能整除,n不是素数,否则n是素数。 说明: n 的取值范围实际上可以缩小为2int(sqr(n) )或2n2,分析,For i = 2 To n-1 Next i,If n Mod i = 0 Then print n; “不是素数” else print n; “是素数

16、” End If,For i = 2 To n-1 Next i,If n mod i = 0 then Exit for End if,If Then Print n; “是素数“ Else print n; “不是素数” End If,in-1,判断素数:,回文判断,所谓回文是指顺读字符串与倒读字符串相同。 例如:12321、abcdcba、abba,x = InputBox(请输入一个字符串) n = Len(x) For i = 1 To n 2 If Mid(x, i, 1) Mid(x, n - i + 1, 1) Then Exit For Next i If i n 2 The

17、n Print x i; 天的桃子数为:; x; 只 Next i End Sub,参考代码,1)先判断后执行。,For i = 5 To 1 Step 1 Print i Next i Print i,本例由于初值为5,超过了终值,所以一次也没有执行循环体。但由于已经执行了一次FOR语句,所以循环变量i的值为5。,2)步长取正数与取负数是不同的。,For i = 5 To 1 Step -1 Print i Next i Print i=; i,当步长为正时,“初值小于终值”, 当步长为负时,“初值大于终值”。 本例由于步长为负,所以能执行循环体。,For循环注意事项:,3)循环变量在循环体

18、内可以被引用,也可以不被引用。 如果被引用,此时循环变量称为“操作变量”。,For k = 1 To 4.5 Step 0.5 k=k+1 Print k=; k, Next k,k=2 k=3.5 k=5,注意:,循环控制值可以是整数也可以是浮点数,k=1 k=1.5 k=2 k=2.5 k=3 k=3.5 k=4 k=4.5,4)当需要循环变量在达到终值之前退出循环,可以使用Exit For 语句实现这种目的。,x = Val(InputBox(“Please Input the Value of X”) For i = 1 To 5 Print x If x = 8 Then Exit

19、For Next i,思考:当输入值为8时,会出现什么结果?,注意:,举例,s=0 For i = 1 To 100 s = s + i Next i Print s,s=0 For i = 1 To 100 s = s + i If s 100 Then Exit For Next i Print s,典型的1+2+3+.+100程序。 S=5050,当S 100 时,退出循环。 S=105,引例,例:假定目前世界人口为70亿,如果每年以1.4%的速度增长,问2015年后世界人口将达到多少亿?,Private Sub Form_Click() p = 70: r = 0.014 for i

20、= 2012 to 2015 p = p * (1 + r) next i Form1.Print p End Sub,例:目前世界人口为70亿,如果以每年1.4%的速度增长,问多少年后世界人口达到或超过80亿?,While Wend 循环(循环次数未知),格式: While 条件 语句块 Wend,举例,例:目前世界人口为70亿,如果以每年1.4%的速度增长,问多少年后世界人口达到或超过80亿?,Private Sub Form_Click() p = 70: r = 0.014 p = p * (1 + r) Form1.Print p End Sub,: n = 0,n = n + 1,

21、While p 80,Wend, n,While,注意:,While循环语句先对”条件”进行测试,然后才决定是否执行循环体。 如果条件总成立,则重复执行循环体,应避免死循环。 i=true While i 循环体 Wend,条件循环,While循环,条件循环,Do循环,Private form1_click() Dim i as Long , n as integer n=val(inputbox(录入一个整数) swit=0 While i = int(sqr(n) And swit=0 If (n Mod i) = 0 Then swit=1 Else i=i+1 End if Wend

22、If swit=0 then print n ; 是素数End sub,判断素数,状态变量,举例,例:目前世界人口为70亿,如果以每年1.4%的速度增长,问多少年后世界人口达到或超过80亿?,Private Sub Form_Click() p = 70: r = 0.014: n = 0 While p 80 p = p * (1 + r) n = n + 1 Wend Form1.Print n, p End Sub,Private Sub Form_Click() p = 70: r = 0.014: n = 0 Do While p 80 p = p * (1 + r) n = n +

23、 1 Loop Form1.Print n, p End Sub,While p 80 p = p * (1 + r) n = n + 1 Wend,Do循环控制结构,Do While p 80 p = p * (1 + r) n = n + 1 Loop,Do Until p = 80 p = p * (1 + r) n = n + 1 Loop,Do p = p * (1 + r) n = n + 1 Loop While p 80,Do p = p * (1 + r) n = n + 1 Loop Until p = 80,Do循环控制结构,格式1: Do While | Until E

24、xit Do Loop,格式2: Do Exit Do Loop While | Until ,课堂练习,计算S=1+2+3+100 要求使用条件循环语句(DoLoop),Private Sub Form_Click() i = 1: s=0 Do While i = 100 s = s + i i = i + 1 Loop Print s End Sub,Private Sub Form_Click() i = 1: s=0 Do s = s + i i = i + 1 Loop Until i 100 Print s End Sub,计算机随机产生一个100以内的整数,用户从键盘输入一个1

25、00以内的整数,由计算机判断输入的数是大还是小,并给出提示,直到输入正确为止。,猜数字游戏,二分法求根思想:已知求根区间a,b有一根,每次把求根区间缩小一半,直到找到解或求根区间足够小。,方程求解,方法: 求a,b的中点c,判断 若f(c)=0, c为求得的根,结束; f(b)与f(c)同号,则c,b无根, c代替b; 否则a,c无根,c代替a; 使求根区间缩小一半,重复上述步骤,直到区间小于精度。,a = 1: b = 4 c = (a + b) / 2 fc = c 3 + 4 * c 2 10,If fc = 0 then print 方程的根:;c Else fb = b 3 + 4

26、* b 2 10 End If,If fb * fc 0 Then b = c Else a = c End If,求解方程,Do While b - a 0.00001,Exit do,Loop,print 方程的根:;c,Private form1_click() Dim i as Long , n as integer n=val(inputbox(录入一个整数) swit=0 While i = int(sqr(n) And swit=0 If (n Mod i) = 0 Then swit=1 Else i=i+1 End if Wend If swit=0 then print n

27、 ; 是素数End sub,判断素数,Do WhileLoop与 WhileWend等价,已知e的计算公式为 编写程序计算e的值,要求精确到10-6,Dim e As Single, t As Single Print e,求e的近似值。,: n = 0,n = n + 1,: e = 1,Loop,Do While t 0.000001,t = 1,t = t / n,e = e +t, n As Single,求两个数的最大公约数,实例:求14与5的最大公约数(辗转相除),14与5的最大公约数为1,余数为0,参考代码:,r = m mod n Do While ( ) m = n n =

28、r r = m mod n Loop Print “最大公约数=”, n,m1=m : n1=n,Print 最小公倍数=, m1*n1/n,r 0,If m n Then t = m: m = n: n = t,引例,在窗体上输出一行“*”(共10个),在窗体上输出5行10列“*”(每行10个),换行,?,For j = 1 To 5 Print Next j,外循环执行一次,内循环执行一遍 外循环表示行,内循环表示列,(2)外循环必须完全包含内循环,不能交叉,For i =1 To 10 For j=1 To 20 Next j Next i,For i=1 To 10 For j=1 T

29、o 20 Next i Next j,For i =1 To 10 Next i For i =1 To 20 Next i,正确,错误,For i =1 To 10 For i=1 To 20 Next i Next i,注意,For i =1 To 10 Do Loop Next i,While For j=1 To 20 Next j Wend,(1)内循环变量与外循环变量不能同名,多重循环,思考:打印上三角或下三角,程序如何改动?,For i = 1 To 9 For j = 1 To 9 S = i Next j Print Next i,例:打印九九乘法表。,输出三位数,输出由1、

30、2、3构成的三位数并统计。,Private Sub Command1_Click() Dim x%, n%, a%, b%, c% x = 100 * a + 10 * b + c Form1.Print x; End Sub,n = n + 1,For a = 1 To 3 For b = 1 To 3 For c = 1 To 3 Next c Next b Next a,Form1.Print Form1.Print 三位数的个数是:; n,求水仙花数,所谓水仙花数是指一个三位正整数其各位数字的立方和等于该数本身,如153。,For i = 1 To 9 Step 1 For j = 0

31、 To 9 Step 1 For k = 0 To 9 Step 1 Next k Next j Next i,n = i * 100 + j * 10 + k,If n = i 3 + j 3 + k 3 Then Print n; End If,Dim i%, j%, k%, n%,穷举法,换零钞,将一张面值为100元的人民币等值换成100张5元、1元和0.5元的零钞,要求每种零钞不少于1张,有哪几种组合?,a + b + c = 100 5a + b + 0.5c = 100,For a = 1 to 18 For b = 1 to 98 c = 100 a b if 5*a + b + 0.5*c = 100 then print a, b, c Next b Next a,For n =200 to 1000 Next n,思考:找出2001000范围内的所有素数,判断 n 是否为素数,猜父子年龄,Private Sub F

温馨提示

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

评论

0/150

提交评论