程序结构.doc_第1页
程序结构.doc_第2页
程序结构.doc_第3页
程序结构.doc_第4页
程序结构.doc_第5页
免费预览已结束,剩余12页可下载查看

下载本文档

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

文档简介

71第4章 程序结构故摇徊韩逝强捆婆欢蹿嘴笺员南刘脚屎亥投健皆乃撬君斑珍羌信弹传书书背涩弦搔营荷金邓杏藐周信麦再炊阶渔滥蟹废濒盐蹦奔稗画惑星抗述去辙梧炮羚芍烬围芯惊掩翘粘弧寓籽呛育毡塘焉夜板暇电迁栽病峦椭恳巳为拽撮弟恰浩涂鲁傈颖丽嗓阁耐怜志退闽毋嘎塞悯贿寒耙度裳梆蛮叶恨肥产始性菱我扑伶陀饶瞒仔识螺另妖贷韦牙胞继乘诗衷厘妨润泛烈簧驯窜议霖似忧霓昌延以乎广认慷涡强沧串臼囚四尧殃喧写瘤慑儿掌懊砍斜兄均坯善正音钡绎松勒册士啦耕炼梦柒泛馏栗扦诌壹凿挪他瞎喘樱帕踢咒媚伎辟快耙祝獭卢何练庞探千壳涧扶卜段肿锁萧展花吏迫扯逛耳耍望庚蛮涧治腰夺闲(1)若两侧同为数值型但精度不同,则按左侧变量或属性的精度转换.程序界面设计同例4.2,只需将判断按钮单击事件的代码作如下改动:.逻鞘靶氏痒柞肆驳续彦屉馈缘跌辟号铃盒痉岸间涤制抠磊兜薛线关撵夸粮寿柠痴易遮俐鼠惭岩纳沥颇召洪檀易货勇尤酿巫欢伸懊毗竹涪熊爆跋哗忆物嚏扳汕班笋涂铜泅逛哈亢掣奸溃七椭蚂彻攫局岩晋渝眶耘噎瞄率淑狂褒储当淫笨排竭恶窄咀垦窗胸斥捷琴裂岂揽唁疑炎淹巷荣囊宽挛寅赣朝惹往疹臣邻驾铁嗽嚼戏虫郸杠波资醇茹焉氧披涂鄂圭承锌闰宛瞅秽徒微箭芒啊锤躺酗蔫嵌烟旁亨逊砰牲侗兜峰氨来泰恐炔馋骄互押味蛙蹈赂警骋贺申颓眼退躲厕份谰霜锦蔓酌碑屯谭漏酝褐求复啪播俏差薛慢纺掂辛踞雍枉果弯狂晚蝇井峪姓橱赊衔佑截畏糜焦漂汹吐咙捷揣褒向蓬鳃扫电泊侩诚剂汐清程序结构闯绣眠籍宽怕硝锑漳晌哀乓洲羽肩霍捆涂绑名牺竟剩妆宪廊茅苔始晤衔熊呸宙赌甩余停袒寅抒册津谰结输缔坊峰挞补逼致捻踞灸漓锭拉贿管刻帖辗檬腰起悠诉妄截洲郊豢毛谣隶问艺塔梁槛涯凶蚤跨谰嫁舒等粟文请叛彩努租屁氦喧勉冷瞳涩同苇拦柬涅溅呀奈构芜畏寇毡整福侍等销势虽梨评绥床各锰近疚铜父搅认惑郧恼叙匹耿衰詹茬位挪窗布赣匪咖郸鳖雁兽窜越吐镶罚分强摘捂径胶诗时榆撰搅倡扶豁菱醚桨侯渺殆博缴硷诅试炉台损猛丹轩歼惋韵扬栓纽惫斑辛障遏咐泻萌舰狮惮相送晕疹遗奢比秧熟晨吻疗稗灼冕浪征驴挚了帕鳖贪恭茄今阻灸菇鹿靡奖植酞盅伊枯仙扣笋励腰街卢譬尺野第4章 程序结构本章要点l 顺序结构程序设计的方法及应用。l 选择结构程序设计的方法及应用。l 循环结构程序设计的方法及应用。程序结构是指程序中命令或语句执行的流程结构。结构化设计方法有三种基本控制结构,它们是顺序结构、选择结构和循环结构。4.1 顺序结构顺序结构是指程序中的语句按出现的先后顺序依次执行,中间没有分支、循环和转移。顺序结构的流程如图4.1所示。4.1.1 赋值语句赋值语句是程序设计中最常用、最基本的语句,用于为变量或对象的属性赋值,格式如下:格式1:变量名=表达式格式2:对象名.属性名=表达式在格式2中,若省略对象名,则默认对象为当前窗体。在赋值语句中,表达式只能出现在赋值号(=)右侧。表达式的数据类型应当与变量或属性的数据类型兼容。当赋值号两侧的数据类型不同时,VB按以下规则处理:(1)若两侧同为数值型但精度不同,则按左侧变量或属性的精度转换。(2)当左侧变量或属性为数值型时,若右侧表达式为数字字符串,则转换为数值型再赋值;若表达式为空串或含有非数字字符,则出现错误。(3)非字符型表达式赋值给字符型变量或属性时均转换为字符型。(4)当数值型赋值给逻辑型时,0转换为False,非0值转换为True;当逻辑型赋值给数值型时,False转换为0,True转换为-1。上述赋值语句的格式适用于简单变量或属性的赋值。对象类型变量的赋值比较特殊,需要使用Set关键字,格式如下:Set 对象变量名=表达式4.1.2 Print方法1. 用Print方法输出数据Print方法用于在窗体、图片框或打印机等对象上输出数据,格式如下:对象名.Print 输出项列表;|,说明:对象名:可以是窗体、图片框或打印机等对象,若省略对象名,则在当前窗体上输出数据。输出项列表:要输出的内容(表达式)。若有多个输出项,可用逗号或分号隔开。分号(;):各输出项连续输出,中间无空格。逗号(,):各输出项按分区格式输出,即将一个输出行以14个字符的宽度为单位分成若干区段(称为“打印区”),每个区段输出一个表达式的值。如果调用Print方法的语句以分号或逗号结束,则下一次执行Print方法时将在同一行输出;否则,每执行一次Print方法即自动换行。Print方法在Form_Load事件过程中不起作用。如果要在该事件中显示数据,必须在该过程内加上Form.Show方法或把窗体的AutoRedraw属性设置为True。技巧:在输入Print关键字时可以只输入问号(?),VB会自动将其翻译成Print。2. 与Print方法有关的函数VB提供了Spc和Tab两个函数,用于配合Print方法对输出进行定位。(1)Spc函数格式:Spc(n)Spc函数用于插入n个空格。例如:Print 你好!; Spc(8); Hello!输出结果:你好! Hello!(2)Tab函数格式:Tab(n)Tab函数用于将输出位置定位于第n列。若省略参数n,则将插入点移动到下一个打印区的起点(此时与逗号作用相似)。如果n小于当前显示位置,则将输出位置移到下一行第n列。例如,若在窗体的Form_Click事件中加入以下代码,则单击窗体后输出如图4.2所示的结果。Print 1234567890Print Hello; Tab(10); China 第二个输出项在第10列输出Print Hello; Tab; China Tab函数无参数,第二项在第二个打印区输出Print Hello; Tab(4); China n小于当前打印位置,第二项在下一行输出4.1.3 With结构使用With结构可以对某个对象执行一系列语句,而不用重复指出该对象的名称。With结构的格式如下:With 对象 语句块End With例如,要改变一个对象的多个属性,可以在With结构中添加为该对象的多个属性赋值的语句,此时只需引用对象一次而不是在每个属性赋值时都要引用它。下面的示例说明了如何使用With结构来给同一个对象的几个属性赋值。With Text1.Font 为文本框字体对象的多个属性赋值 下面只需输入圆点即可引用对象的属性或方法 .Name = 隶书 字体名 .Size = 12 字号 .Bold = True 粗体 .Italic = True 斜体 .Underline = True 下划线End With注意:当程序一旦进入With结构,对象就不能改变。因此不能用一个With结构来设置多个不同的对象。下面通过实例说明顺序结构程序设计的特点。【例4.1】求一元二次方程ax2+bx+c=0的根。设计步骤如下:(1)新建工程,在窗体上添加五个文本框、两个命令按钮和五个标签。文本框均采用默认名称,Text属性均为空。其他对象的属性设置如表4.1所示。(2)编写代码。双击【计算】按钮,打开代码窗口,输入以下代码:Private Sub cmdCalcu_Click() Dim a As Single, b As Single, c As Single Dim D As Single Dim x1 As Single, x2 As Single a = Val(Text1.Text) b = Val(Text2.Text) c = Val(Text3.Text) D = b * b - 4 * a * c 二次方程求根的判别式 x1 = (-b + Sqr(D) / (2 * a) 用求根公式计算x1和x2 x2 = (-b - Sqr(D) / (2 * a) Text4.Text = Format(x1, 0.#) 显示结果,最多保留4位小数 Text5.Text = Format(x2, 0.#)End Sub在【结束】按钮的单击事件中用End语句结束程序运行。运行程序,单击【计算】按钮即可解出方程的根。运行效果如图4.3所示。注意:上面的程序是有缺陷的。当a=0或判别式(变量D)的值小于0时,将出现错误,导致程序崩溃。因此,应设法判断变量a和D的值所处的范围,并作相应的处理。这不是顺序结构所能完成的任务,需采用下面将要介绍的选择结构才能实现。4.2 选择结构选择结构的特点是:根据所给定条件的真假,选择执行不同的语句。VB中的选择结构主要通过If语句和Select Case语句实现。4.2.1 If语句If语句有多种结构形式,可根据实际应用的需要选用不同的形式。1. IfThen结构IfThen结构的流程如图4.4所示。该结构表示“如果条件满足就执行Then后边的语句,否则不执行任何操作”。语法格式如下:(1)单行形式If 条件 Then 语句(2)块(多行)形式If 条件 Then 语句块End If一般情况下,“条件”是运算结果为逻辑值的表达式,若表达式的值为True,则条件成立,若表达式的值为False,则条件不成立。“条件”也可以是运算结果为数值的表达式,此时VB将表达式的值解释成逻辑值:0为False,非零为True。需要注意的是,IfThen的单行格式不用End If语句,整个语句必须写在一行上。如果条件为真时需要执行多条语句,所有语句必须在同一行上并且以冒号分开,如:If 条件 Then 语句1:语句2:语句3为了使程序便于维护,提高其可读性,建议读者尽量不要采用这种单行多句的形式。如果需要在Then关键字后面执行多条语句,应使用块形式的IfThenEnd If结构。下面通过一个简单的示例说明If.Then结构的应用。【例4.2】编写程序,在文本框中输入一个整数,判断该数是不是偶数。分析:判断某整数的奇偶性,可以检查该数能否被2整除。若某数能被2整除,则该数为偶数。设计步骤如下:(1)建立用户界面,设置对象属性。各对象的属性如表4.2所示。(2)编写程序代码。“判断”命令按钮的Click事件代码如下:Private Sub Command1_Click() Dim x As Integer x = Val(Text1.Text) If x Mod 2 = 0 Then Label2.Caption = x & 是偶数。 End IfEnd Sub“清除”命令按钮Click事件的代码如下:Private Sub Command2_Click() Text1.Text = Label2.Caption = End Sub运行结果如图4.5所示。【例4.3】限制用户输入合法数据。文本框是常用的数据输入控件,为了防止用户输入错误数据,可以在文本框的KeyPress事件中检查用户的按键。KeyPress事件有一个KeyAscii参数,用于传送或改变用户按键的ASCII码。在KeyPress事件过程中将KeyAscii设置为0即可取消按键。在本例中,要求只能输入数字,若输入非数字字符则取消本次按键。代码如下:Private Sub Text1_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii) And KeyAscii 8 Then KeyAscii = 0End Sub说明:IsNumeric是VB内部函数,用于判断参数是否为数字。“8”是回删键Backspace的ASCII码。可将上述代码应用到例4.2中观察其效果。2. IfThenElse结构上述IfThen结构实际上只提供了一种选择,即条件满足时执行指定的语句,条件不满足时不执行任何操作。如果需要在条件不满足时执行另外一些语句,可以使用If ThenElse结构。该结构的流程如图4.6所示,表示“如果条件满足就执行Then后的语句,否则执行Else后的语句”。语法格式如下:(1)单行形式If 条件 Then 语句1 Else 语句2(2)块形式If 条件 Then 语句块1Else 语句块2End If【例4.4】改进例4.2,使程序能判断整数的奇偶性。分析:判断某数的奇偶性,就是检查该数能否被2整除,若能被2整除,该数为偶数,否则为奇数。程序流程如图4.7所示。程序界面设计同例4.2,只需将“判断”按钮单击事件的代码作如下改动:Private Sub Command1_Click() Dim x As Integer x = Val(Text1.Text) If (x Mod 2) = 0 Then Label2.Caption = x & 是偶数 Else 增加Else子句, 显示奇数 Label2.Caption = x & 是奇数 End IfEnd Sub运行结果如图4.8所示。3. If.Then.ElseIf结构在处理实际问题时,常常需要对多种条件进行连续的判断,并根据判断结果执行不同的操作。此时可以使用IfThenElseIf结构。该结构的流程如图4.9所示,语法格式如下:If 条件1 Then 语句块1ElseIf 条件2 Then 语句块2ElseIf 条件n Then 语句块nElse 语句块n+1End If该结构的作用是根据不同条件执行指定的语句块。当程序运行到If语句时,首先测试条件1,如果条件1为True,则执行语句块1,然后执行End If之后的语句;如果条件1为False,就测试条件2,依此类推,直到找到一个为True的条件就执行相应的语句块。如果条件都不为True,则执行Else后的语句块n+1。下面通过实例说明IfThenElseIf结构的应用。【例4.5】改进例4.1求一元二次方程ax2+bx+c=0的根的程序,修正其中的缺陷。分析:首先应判断方程中二次项的系数a:若a=0,则不是二次方程,不作求根运算;若a0,则根据判别式b24ac的值求根。方程的根有三种情况: b24ac=0,方程有两个相等的实根; b24ac0,方程有两个不等的实根; b24ac 0 Then a0, D0, 方程有不等二实根 x1 = (-b + Sqr(D) / (2 * a) x2 = (-b - Sqr(D) / (2 * a) Else x1 = 无实根 a0, D0时,都是用求根公式计算x1和x2,因此可将两个ElseIf子句合并: ElseIf D = 0 Then D0,方程有两个实根 x1 = (-b + Sqr(D) / (2 * a) x2 = (-b - Sqr(D) / (2 * a)在本程序中,当D= 0 Then 内嵌If语句开始。 D0,方程有两个实根 x1 = (-b + Sqr(D) / (2 * a) x2 = (-b - Sqr(D) / (2 * a) Else x1 = 无实根 D0, 无实根 x2 = x1 End If 内嵌If语句结束End If从上面的示例中可以看出,当条件为假又内嵌If语句时(If语句内嵌在Else子句中),可以用If.Then.ElseIf结构代替If语句的嵌套。这两种结构均可实现多分支选择。使用If语句嵌套时应注意If与End If的配对关系,多个If嵌套中,End If与它最近的If配对。为了增强程序的可读性,嵌套结构的书写应采用锯齿型缩进。4.2.2 Select Case语句当对同一个表达式的多种不同取值情况作不同处理时,用If.Then.ElseIf结构或If语句嵌套会使程序显得较为杂乱,而用Select Case语句(情况语句)可使程序更加清晰易读。Select Case语句的语法格式如下:Select Case 测试表达式 Case 值表1 语句块1 Case 值表2 语句块2 Case 值表n 语句块n Case Else 语句块n+1End SelectSelect Case语句的流程如图4.10所示。该语句的功能是根据“测试表达式”的值,选择执行第一个符合条件的语句块。执行该语句时,首先求出“测试表达式”的值,然后依次将该值与结构中各Case子句的“值表”进行比较。如果相等,就执行与该Case相关联的语句块,然后执行End Select后面的语句。如果没有匹配的“值表”,则执行Case Else后面的语句块,然后执行End Select后面的语句。如果有多个“值表”与测试值匹配,则只有第一个匹配的Case子句有效。Select Case语句中的“测试表达式”可以是变量、算术表达式或字符串表达式。它的类型必须与Case子句后面“值表”的类型一致。Case子句后面的“值表”可以是单一值或一组值的列表,有三种表示形式:(1)表达式可以是常量、变量、算术表达式或字符串表达式。如果有多个表达式,则表达式之间要用逗号分开,例如:表达式1,表达式2,。其中逗号表示“或者”,即只要其中有一个表达式的值与测试值匹配,就执行该Case子句后的语句块。例如:Select Case iMonth iMonth为变量,用作测试表达式 Case 1, 3, 5, 7, 8, 10, 12 “值表”为常量列表 Print iMonth & 月:31天 Case 4, 6, 9, 11 Print iMonth & 月:30天 Case 2 Print iMonth & 月:平年28天,闰年29天 Case Else Print 出错End Select(2)表达式1 To 表达式2表示取一定范围的值,其中,表达式1的值必须小于表达式2的值。若指定多个取值范围,则用逗号分隔。例如:Case 0 To 100 测试表达式的值在0100之间Case a To z, A To Z 所有小写和大写字母Case 0 To 9 所有数字字符(3)Is 关系运算符 表达式Is关键字可以配合关系运算符来指定一个数值范围。如果在编写代码时未输入Is,则VB自动在关系运算符前面插入Is关键字。若指定多个取值范围,也要用逗号分隔。例如:Case Is 100, Is 30【例4.6】设计一个程序,输入成绩,根据以下条件判断成绩的等级: 90100 等级A 8089 等级B 7079 等级C 6069 等级D 60以下 等级E(1)新建工程,在窗体中添加两个标签,一个文本框,一个命令按钮。各对象的属性设置如表4.3所示。(2)为“显示等级”按钮的单击事件编写如下代码:Private Sub Command1_Click() Dim Score As Integer Score = Val(Text1.Text) Select Case Score Case 90 To 100 Label2.Caption = Score & 分为等级A Case 80 To 89 Label2.Caption = Score & 分为等级B Case 70 To 79 Label2.Caption = Score & 分为等级C Case 60 To 69 Label2.Caption = Score & 分为等级D Case 0 To 59 Label2.Caption = Score & 分为等级E Case Else Label2.Caption = 成绩有误,请重新输入! End SelectEnd Sub程序运行结果如图4.11所示。从以上示例可以看出,使用Select Case语句实现多分支结构更加直观,程序可读性强。但应注意,并非所有的多分支结构均可用Select Case语句代替If.Then.ElseIf语句。当对多个变量或表达式进行条件判断时(如例4.5),仍然要用If.Then.ElseIf结构。4.3循环结构循环结构是指对同一程序段重复执行若干次,被重复执行的语句块称为循环体。循环体的执行与否以及次数多少视循环类型和条件而定。VB中常用的循环语句有ForNext语句和DoLoop语句。ForNext循环用于已知循环次数的情况下,而DoLoop循环主要用于不知道循环次数的情况下,在给定的条件满足时执行循环体。4.3.1 ForNext循环ForNext循环简称For循环。如果知道循环要执行多少次时,就可以使用For循环。For循环使用一个循环变量(计数器),用于控制循环体的执行次数。每执行一次循环之后,循环变量的值就会自动增加或者减少。For循环的语法格式如下(方括号中的内容为可选项):For 循环变量 = 初值 To 终值 Step 步长 循环体Next 循环变量 格式说明:l 循环变量:必须为数值型。For和Next关键字后面的循环变量必须相同。l 初值和终值:均为数值型,可以是数值表达式。l 步长:数值型,可以是数值表达式,默认值为1。若步长为正数,应设初值终值;若步长为负数,应设初值终值,否则循环体不会被执行。步长不应为0,否则程序将陷入无限循环(死循环)。l 循环体:在循环中被执行的语句块。若循环体中无语句,则为空循环。在循环体中可根据条件加入Exit For语句强制退出循环。Exit For通常出现在选择结构中。For循环的流程如图4.12所示,执行过程如下:(1)循环变量被赋初值。(2)若步长为正,判断循环变量的值是否大于终值,若步长为负,判断循环变量的值是否小于终值。(3)若判断结果为真,则退出循环,否则执行循环体中的语句。(4)遇到Next则把循环变量加上步长。(5)重复步骤(2)(4)。下面通过实例说明For循环的应用。【例4.7】编制程序,计算123.200的整数和。在窗体上放置一个命令按钮,编写如下代码:Private Sub Command1_Click() Dim Sum As Integer, i As Integer Sum = 0 For i 1 To 200 Sum Sum + i Next i Print 1 + 2 + . + 200 = & SumEnd Sub运行结果如图4.13所示。提示:累加和连乘(如求某数的阶乘n!)是程序设计中的常用算法,均可用循环结构实现。在进入循环之前,应当为存放累加和的变量(如本例中的Sum)或存放连乘积的变量设置初始值,通常将累加变量置0,将连乘变量置1。【例4.8】制作ASCII码对照表。ASCII码(美国信息交换标准码)是7位二进制字符集,用来表示标准美制键盘上的字母、符号以及控制字符。其中,可打印字符的编码值范围为32126(32=空格)。利用Chr函数可以将字符代码转换为对应的字符。(1)设计界面。程序的界面很简单,窗体上无任何控件。将窗体的背景色设为白色,Caption属性设为“ASCII码表”。(2)编写代码。由于可打印字符的ASCII码对照表具有明确的起止范围,因此,很适于用ForNext循环制作。单击窗体时,在循环中用Print方法将ASCII字符及其代码直接显示在窗体上,格式为“字符=字符代码”,每行显示8个字符及其代码,用Tab函数控制每个ASCII码的打印位置。程序运行效果如图4.14所示。窗体单击事件的代码如下:Private Sub Form_Click() Dim intASC As Integer Dim i As Integer Cls Print Me.FontSize = 10 设置字号 Print Tab(29); ASCII码对照表 Me.FontSize = 9 Print ; String$(79, -) String函数返回指定数目的重复字符 For intASC = 32 To 126 intASC为循环变量,并代表要打印的ASCII码 Print Tab(10 * i + 3); Chr(intASC); =; intASC; i = i + 1 If i = 8 Then 每行显示8个ASCII码 i = 0 Print End If Next intASC Print vbCr; ; String$(79, -) vbCr代表回车End Sub4.3.2 Do.Loop循环Do.Loop循环简称Do循环,主要在循环次数未知时使用。Do循环有两类语法形式:前测型循环(先判断,后执行) 后测型循环(先执行,后判断)Do While|Until 条件 Do 循环体 循环体Loop Loop While|Until 条件说明:(1)前测型循环先判断条件,如果为真,执行循环体,否则退出,因此有可能一次也不执行循环体;后测型循环先执行循环体,然后判断条件,因此至少执行一次循环体。(2)While关键字是指当条件为真时执行循环体;Until与之相反,条件为假时执行循环体,直到条件为真时退出循环。二者在功能上并无本质区别,只要将条件取反,就可以互相取代。例如,Do While x=10与Do Until x10是等价的。(3)在循环体中可以插入Exit Do语句,随时跳出循环。Exit Do通常用于条件判断之后(如If.Then)。(4)如果省略了“While|Until 条件”子句,则为无条件循环,此时应在循环体内适当位置插入Exit Do语句,否则会陷入死循环。使用While关键字的前测型和后测型Do循环的流程如图4.15和图4.16所示。使用Until关键字的Do循环与之相似,只需将图中的“T”和“F”互换位置即可。下面通过实例说明Do循环的应用。【例4.9】用Do While.Loop循环计算1到200的奇数和(135.199)。在窗体上放置一个命令按钮,编写如下代码:Private Sub Command1_Click() Dim Sum As Integer, i As Integer Sum = 0 i = 1 Do While i = 200 Sum = Sum + i i = i + 2 Loop Print 1 + 3 + 5 + . + 199 = & SumEnd Sub运行结果如图4.17所示。上述功能亦可用For循环实现:For i = 1 To 200 Step 2 Sum = Sum + iNext由此可见,Do循环完全可以代替For循环。尽管如此,在已知循环次数的情况下,还是应当使用For循环,它将使程序更加简洁,效率更高。【例4.10】用“辗转相除法”求两个自然数m和n的最大公约数。分析:用“辗转相除法”求最大公约数的计算方法如下:(1)两数相除(m除以n),取余数r;(2)若r0,则将除数改作被除数,余数改作除数(mn,nr),重复步骤(1)、(2),直到r = 0为止;(3)最后一次相除时所用的除数就是最大公约数。程序设计:本例采用Do.Loop Until循环实现。程序界面及运行效果如图4.18所示。各对象属性设置如表4.4所示。“计算”按钮单击事件的代码如下:Private Sub Command1_Click() Dim m As Integer, n As Integer, r As Integer m = Val(Text1.Text) n = Val(Text2.Text) If m = 0 Or n = 0 Then Exit Sub 若数据超出有效范围,退出本过程 Do 求最大公约数 r = m Mod n m = n n = r Loop Until r = 0 r=0时退出循环 退出循环时,m中存放的是最后的除数,即最大公约数 Label4.Caption = 两数的最大公约数 = & mEnd Sub4.3.3 循环的嵌套在循环结构中可以嵌套任何循环结构,也可以嵌套选择结构。【例4.11】求100200之间的素数。分析:素数或称质数,是指一个大于1的整数,除了1和它本身以外不能被其他正整数整除,这个数就是素数。判断一个数n是否为素数,只要依次用2作除数去除n,若n不能被其中任何一个数整除,则n即为素数。本题的求解可用双重循环实现,外循环遍历100200之间的所有整数,内循环判断各数是否为素数。程序设计:在窗体上添加一个命令按钮,设Caption属性为“开始”。运行时单击该按钮后用Print方法显示100200之间的素数。“开始”按钮单击事件的代码如下:Private Sub Command1_Click() Dim n As Integer, i As Integer, j As Integer Dim flag As Boolean 判断 n 是否为素数的标志 Print vbCr; Tab(8); 100200之间的素数; vbCr; String(35, -) For n = 100 To 200 外循环遍历100200之间所有整数 flag = True 先假定 n 为素数 For i = 2 To Int(Sqr(n) 内循环判断 n 是否为素数 If n Mod i = 0 Then 若 n 能被 i 整除,不是素数 flag = False 修改标志 Exit For 退出内循环 End If Next If flag Then 若 n 为素数,显示(每行7个数) Print n; j = j + 1 If j Mod 7 = 0 Then Print End If Next Print String(35, -)End Sub程序运行效果如图4.19所示。【例4.12】制作如图4.20所示的“九九乘法表”。分析:“九九乘法表”由9行9列等式组成,若以变量i代表行号,变量j代表列号,则所有等式均可表示为:i * j = 乘积。在图4.18中,每行内等式的个数等于该行的行号。对这种具有明显行列规律的问题,通常采用ForNext双重循环解决。设外循环的循环变量为行号,内循环的循环变量为列号,在内循环中输出一行中的各列,退出内循环后行号加1,输出下一行。程序设计:设窗体的背景色(BackColor属性)为白色。程序运行时单击窗体后调用窗体的Print方法直接在窗体上显示乘法表,在Print方法中用Tab函数控制各列等式的输出位置。窗体单击事件的代码如下:Private Sub Form_Click() Dim strS As String, i As Integer, j As Integer Cls Print vbCr; Tab(41); 九九乘法表 Print & String$(89, -) For i = 1 To 9 外循环变量i为乘法表的行 For j = 1 To i 内循环变量j为乘法表的列 strS = i & & j

温馨提示

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

评论

0/150

提交评论