《第4章 程序控制结构与算法基础.pps》由会员分享,可在线阅读,更多相关《第4章 程序控制结构与算法基础.pps(61页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第4章 程序控制结构与算法基础,实验五说明,上机教材 实验 P137 实验3-5素数的判定算法3:由2n/2之间的数去除算法4:由2,之间的数去除,综合小例:,1.求 1!+2!+n!2.在列表框显示1100之间的所有 素数;而不是素数的则显示在组合框中3.将上例修改为在窗体上直接打印要求:每显示8个则换行显示下一行内容,例:,* 输出移动的标签除数为0的判定密码登录验证素数(质数)判定随机计算题,三种基本结构,顺序结构,分支(选择)结构,循环,代码书写规则,每个语句一行,以回车键结束;多个语句可以写在同一行上,各语句之间用冒号(:)进行分隔;一条长语句可以分成多行书写,在除最后一行之外的其余
2、各行的末尾使用下划线(_)作为续行符,并且续行符与它前面的字符之间至少要有一个空格;所有语句中的变量名、函数名、关键字、对象名、对象属性名、对象方法名等均不区分大小写,但保留定义时所使用的大小写格式;代码的物理行最多可含1023个字符,一个逻辑行最多可由10个物理行组成。,自动语法检测,VB的IDE默认情况下具有自动语法检测功能。如果用户输入有语法错误的语句,在按下回车键后,系统将弹出一个出错提示框,并用红色标出有语法错误的语句。,赋值语句,格式:变量对象.属性名 =表达式 可以给一个变量(或对象的属性)多次赋值,但变量中保留的是最后一次的值。累加:B=B+N 累乘:C=C*N,交换两个变量的
3、值,中间变量法T=AA=BB=T数值加减法A=A+B B=A-B A=A-B,适合任何两个相同类型的变量,适合两个数值类型的变量,算法,程序=数据结构+算法算法是解决问题的方法、步骤,是程序的核心。 算法的特性确定性能行性有穷性输入输出,程序的三种基本结构,顺序结构:按语句书写顺序执行。分支结构:也叫选择结构,根据一个条件决定程序执行的走向。循环结构:将某些语句重复执行有限次。,顺序结构,示例,输入正方形边长,求其周长与面积。,Private Sub Command1_Click() Dim A As Single, L As Single, S As Single A = Val(Text1
4、.Text)获取Text1中的内容 L = 4 * A S = A 2 Text2.Text = L在Text2中输出周长 Text3.Text = S在Text3中输出面积End Sub,分支结构-If语句,单行结构If语句If 条件 Then 语句A Else 语句B块结构If语句,If 条件 Then 分支1Else 分支2End If,If语句流程图,示例,输入一个整数,若为偶数,则输出“偶数”,否则输出“奇数”。,Private Sub Form_Click() Dim X As Integer X = Val(InputBox(输入一个整数A) If X Mod 2 = 0 The
5、n Print 偶数“ Else Print 奇数“ENDIFEnd Sub,说明,If语句中的条件一般是一个逻辑表达式,也可以是一个返回值为数值的表达式。如果是数值表达式,则0对应False,非0的任何数对应True。 If语句中如果条件成立,则执行对应的语句或语句块,然后便跳出条件语句结构。 在块结构的条件语句中,语句块中的语句不能与Then、Else书写在同一行上。 单行结构的条件语句中不能有End If,而块结构的条件语句中不能缺少End If。,例1,除数判定 (结合val函数)密码登录验证(结合msgbox函数)移动的标签,例2,改进的密码验证 (结合msgbox函数)三角形面积(
6、海伦公式)单击窗体,判断输入的数是奇数还是偶数,改进1,1.用户名错误,则判定为“非法用户”,弹出对话框后,退出2.用户名正确密码不正确 ,判定为“密码错误”密码也正确 ,判定为“合法用户”, 并进入另一个表单,改进2,用户名正确密码不正确 ,判定为“密码错误”如果密码错误,弹出对话框提示用户重新输入,如果用户确认重新输入,则令密码框获取焦点,并清空;否则退出程序,分支的嵌套,不允许交叉,例3:根据三角形的三条边求三角形的面积,输入三条边a, b, c ;如果a+bc且b+ca且a+cb则利用海伦公式计算三角形的面积;否则弹出错误信息后结束。,多分支语句-If-ElseIf,If 条件1 Th
7、en 语句块1 ElseIf 条件2 Then 语句块2ElseIf 条件3 Then 语句块3Else 语句块n+1End If,ElseIf中的Else与If之间不能有空格!ElseIf语句的数量没有限制!前面的条件成立执行对应语句后结束!,行IF语句块IF语句,多分支语句-Select Case,Select Case 测试表达式 Case 表达式列表1 语句组1 Case表达式列表2 语句组2 Case表达式列表3 语句组3 Case Else 语句组n+1End Select,Select Case语句功能,首先计算出测试表达式的值,然后自上而下依次与各个表达式列表进行比较,如果匹配
8、,则执行相应的语句组,然后跳到End Select后面的语句继续执行;如果测试表达式的值不能与给出的任何一个表达式列表匹配,则执行Case Else之后的语句组。如果缺省了Case Else部分,而测试表达式的值不能与给出的任何一个表达式列表匹配,则不执行任何语句组,直接跳到End Select后的语句执行。,测试项的形式,具体的取值(表达式),值与值之间用逗号分隔。如:1,3,5,A+B等。连续的范围,范围是用关键字To连接的两个值。如:10 To 20,”A” To “Z”。使用Is关键字构成的比较表达式。如:Is=10。也可以是上述几种形式的组合,用逗号分隔开。,示例,输入一个成绩,输出
9、此成绩相应的等级。,Private Sub Command1_Click() Dim CJ As Single, DJ As String CJ = Val(Text1.Text) 获取成绩 Select Case CJ 判断等级 Case Is = 90 DJ = 优秀 Case Is = 80 DJ = 良好 Case Is = 70 DJ = 中等 Case Is = 60 DJ = 及格 Case Else DJ = 不及格 End Select Text2.Text = DJ 输出等级End Sub,注意在Select Case语句中,各测试项执行的顺序是自上而下依次判断的,如果执行
10、到“Case Is = 80”,说明“Is = 90”已经不成立,一定要注意书写的顺序,如果顺序混乱,可能导致结果不正确。,练习,输入一个月份,输出该月有多少天。(略)复选 框与分支结构,练习,输入一个年份,判断该年是否为闰年。满足下列条件之一的年份即为闰年年份能被4整除但不能被100整除年份能被400整除输入一个三位正整数,判断其是否为水仙花数。水仙花数:一个三位整数等于其各位数字的立方和,如153=13+53+33,IIf函数,格式:IIf(逻辑表达式,值1,值2) IIf函数的功能类似于有两个分支的If语句。当逻辑表达式的值为True时,函数返回值1,当逻辑表达式的值为False时,函数
11、返回值2。,If AB Then MaxData=AElse MaxData=BEnd If可以简化为:MaxData=IIf(AB,A,B),循环结构-For循环,For循环也叫计次循环,格式为:For 循环变量=初值 To 终值 Step 步长循环体Exit For循环体Next 循环变量,说明-1,(1)循环变量。用做循环计数器的数值变量,不能是布尔类型或数组元素。(2)初值。循环变量的初始值,一般是一个数值表达式。(3)终值。循环变量的终值,一般是一个数值表达式。(4)步长。循环变量的增量,一般是一个数值表达式。其值可正可负,但不能为0。步长可以省略,若省略,则步长为1。(5)循环体。
12、放在 For 和 Next 之间的一条或多条语句,它们将被执行指定的次数。(6)Exit For。退出当前一层For-Next循环。循环中可以在任何位置放置任意个 Exit For 语句,随时退出循环。Exit For通常在条件判断之后使用,例如 If.Then,并将控制权转移到紧接在 Next 之后的语句。(7)Next。循环结构的最后一个语句,其后的循环变量可以缺省,若不缺省,则要与For语句中的循环变量一致。,说明-2,For-Next循环遵循“先检查后循环”的原则。步长为正,循环变量初值大于终值时,不循环;步长为负,循环变量初值小于终值时,不循环。,For循环的执行,把初值赋给循环变量
13、;检查循环变量值是否超过终值,若超过,则不执行循环体而转到Next后一条语句执行,否则转到3;执行一次循环体;循环变量=循环变量+步长;转到2。,超过有两种情况:若步长为正,为循环变量值大于终值;若步长为负,为循环变量值小于终值。,示例,求1+2+3+100。,Dim I As Integer, S As IntegerFor I = 1 To 100 S = S + INextPrint 1+2+3+.+100=; S,循环结束后I=?,思考 :求n!,注意变量类型,注意,如果在For循环中,循环变量的初值、终值及步长是用变量表示的,则这些变量在循环体中的改变不会影响循环次数。,问:如下程序
14、循环多少次? Dim A As Integer, B As Integer Dim C As Integer, I As Integer A = 1: B = 10: C = 1 For I = A To B Step C A = A + 1 B = B - 1 C = C + 1 Next,答案:10次,如何实现 ?,练习,输入一个整数,判断其是否为素数。素数:一个整数除了1与本身之外再无其他因子。随机生成10个两位整数并输出。找出1000以内所有同构数。,素数的判定算法 1,(1)输入整数 N( N=2)(2)统计整数的因子个数的C,初值为0(3)依次由1到N进行判定如果N能够被中间任何一
15、个数整除,则C=C+1(4)若C最终的统计结果为2,则表示该 数仅能被1和它本身两个数整除,结论:是素数反之,不是,素数的判定算法 2,(1)输入整数 N( N=2)(2)依次由2到N-1进行判定如果N能够被中间任何一个数整除,则不是素数,此时,在退出循环时,循环变量的值肯定会大N-1反之,就不是素数,练习,输入一个整数,判断其是否为素数。素数:一个整数除了1与本身之外再无其他因子。随机生成10个两位整数并输出。找出1000以内所有同构数。,在窗体上有一个列表框LIST1, 一个文本框TEXT1,一个命令按钮COMMAND1;要求程序运行后(FORM的LOAD事件),在列表框中自动建立三个列表
16、项,分别为“数学”,“语文”,“英语”。如果选择列表框中的一项,则单击“复制”按钮时,可以把该项复制到文本框中。,与循环有关的控件,列表框与组合框List1 与 combo1,问题1:随机生成20个15, 89 之间的整数并显示到列表框或组合框中,问题2:随机生成20个15, 89 之间的整数并显示在窗体上,每行显示5个,产生 100, 800 之间的水仙花数并显示到列表框或组合框中,输入一个三位正整数,判断其是否为水仙花数。水仙花数:一个三位整数等于其各位数字的立方和,如153=13+53+33,理解:从判定一个整数判定100999之间的整数,循环结构-Do循环,Do循环有当型与直到型两种。
17、,Do While 条件 循环体 Exit Do 循环体Loop,Do 循环体 Exit Do 循环体Loop While 条件,Do Until 条件 循环体 Exit Do 循环体Loop,Do 循环体 Exit Do 循环体Loop Until 条件,当型,直到型,说明,(1)对于循环次数未知的情况下,Do-Loop循环十分有用。(2)在Do While循环中,当条件为真时,要继续循环;在Do Until循环中,条件为真时,结束循环。(3)在Do-Loop循环中可以没有While或Until部分,也称为无条件循环,但在循环体中一定要有Exit Do语句,否则会造成死循环。与Exit Fo
18、r语句一样,Exit Do语句通常在条件判断之后使用。(4)Exit Do语句可以退出当前一层Do循环,把控制权转移到Loop语句后的语句。,用do循环改写(1) 1+2+n(2) n!,练习,猜数字游戏(增加限定次数)随机生成十个能被3整除但不能被5整除的三位整数。求任意两数的最大公约数,注意:与随机函数RND有关的语句RANDOMIZE 产生不同的随机数,示例,求两个整数的最大公约数。经典算法:欧几里德算法,Dim M As Integer, N As Integer, R As Integer M = val(InputBox(“输入M”) N =val(InputBox(“输入N”)
19、R = M Mod N Do While R 0 M = N N = R R = M Mod N Loop Print 最大公约数为:; N,思考 :如何求最小公倍数?,嵌套中的Exit语句,当有多个Do循环嵌套时,Exit Do语句只跳出当前一层Do循环;当有多个For循环嵌套时,Exit For语句只跳出当前一层For循环;当Do循环与For循环嵌套时,使用Exit Do语句可退出Do循环,若内层循环为For循环,则Exit Do语句同时跳出For循环;使用Exit For语句可退出For循环,若内层循环为Do循环,则Exit For语句同时跳出Do循环。,结构的嵌套,一个结构把另一个结构
20、完全包含。注意嵌套的层数没有限制。一个控制结构必须完全位于另一个结构之内。结构层次比较多时,应尽可能让程序呈现锯齿形。多个循环结构嵌套时,注意循环控制变量的使用。,嵌套练习 :九九乘法表,级数 (do循环典型案例),1+1/2+1/3+.+1/n (直到最后一项为小于10-4为止)1-1/2+1/3-1/4+.+(-1)(n-1)(1/n)(直到最后一项为绝对值为小于10-4为止),P102 第9题,练习,用二分法求方程根用矩形法求定积分。计算近似值。,返回,计数的算法,计数变量 c=0计数时 c=c+1例,求回文数 算法思想,回文数如11, 121, 1221, 12521(1)将数 转换为
21、 字符 (2)依次取出第1个字符与倒数第1个字符比较,第2个字符与倒数第2个比较比较次数为LEN(S)2,一旦发现第K个字符不等于倒数第K个字符,则停止,并断定其不是回文数。可以利用字符类函数方便的取字符的长度和子串LEN( )STR( )TRIM( )LEFT( ), RIGHT( ),MID( ),更简洁的算法,取出S的逆串(倒序串)再与S比对,看是否相等主要用函数STRREVERSE( ),实验教材: P142实验3-8 有点差别实验教材用的取子串函数,作了一点处理,等效于STRREVERSE( )函数,本章算法,交换变量奇数偶数判定水仙花数累加和累乘积素数的判定“金字塔”*输出随机数的产生与输出组合框与列表框最大公约数和最小公倍数判断回文数求级数求方程根,建立如图程序,求同构数 算法思想,将数 转换为 字符 可以利用字符类函数方便的取字符的长度和子串LEN( )STR( )TRIM( ),