配色: 字号:
第七章 程序控制结构
2016-06-21 | 阅:  转:  |  分享 
  
第七章程序控制结构7.1程序控制结构类型7.2程序中常用的基本语句1.Let语句[Let]<变量名>=<表达式>表达式值的类型应与变量声明的数据类型一致PrivateSubForm_Click()DimaAsVariantDimcAsStringDimbAsSingleLetc="efg"Letb=0.000314a=c ''将字符串变量赋值给变体型变量Printa ''输出efga=b ''将数值变量赋值给变体型变量Printa+1 ''输出1.000314c=a ''将变体型变量赋值给字符串变量Printc+"abc" ''输出1.000314abca="abc"b=a ''将不能转换成数的变体型变量赋值给数值变量,错误Printb ''显示“类型不匹配错误”EndSub2.REM语句Rem<注释内容>DimaAsVariantDimcAsString :Rem定义字符串变量DimbAsSingle ''定义单精度型变量5.Date语句Date=<日期表达式>设置系统日期日期型表达式可以是日期型常量、变量、函数以及表达式PrintDate‘输出当前系统日期Date=“06/20/2006”‘重置系统日期为2006-06-20Date=date+307.Stop语句Stop暂停执行7.3选择结构程序设计选择结构是根据条件选择执行不同的分支语句,以完成问题的要求。在VisualBasic程序设计中,使用IF语句和SelectCase语句来处理选择结构。其特点是:根据所给定的条件成立(True)或不成立(False),从各实际可能的不同分支中执行某一分支的相应操作(程序块),并且任何情况下总有“无论条件多寡,必择其一;虽然条件众多,仅选其一”的特性。(1)单行结构条件语句If<条件表达式>Then<语句组1>[Else<语句组2>]注:当在单行结构中,Then和Else后可以描述多条语句,但所有语句必须在同一行上并且用冒号分开[例]变量a的值大于10时,分别对变量a、b、c进行赋值。Ifa>10Thena=a+1:b=b+a:c=c+b[例]求两个数中的最大值:Ifa>bThenmax=aElsemax=b(2)块结构条件语句If<条件表达式>Then<程序段1>Else<程序段2>]EndIf(3)多分支If语句多分支结构流程图(4)If语句的嵌套If语句允许嵌套。所谓嵌套,就是指If语句的分支程序段中又可以出现If语句,甚至重重嵌套下去。2.SelectCase语句(情况语句)形式: SelectCase数值|字符串表达式 Case<值的列表1> [<程序段1>] Case<值的列表2> [<程序段2>] … [Case<值的列表n> [<程序段n>]][CaseElse<程序段n+1>] EndSelect说明:①进入SelectCase语句后,先计算<数值|字符串表达式>的值,然后将该值与第1个Case子句后的<值的列表1>中的值比较,不相等则再往下比较,如果与某一个Case子句中列表的值相等,那么就去执行该子句下的程序段,执行完毕后跳出SelectCase语句子句,而不管下面的Case子句中是否还有匹配的值。②表达式必须是数值表达式或者字符串表达式,其值为数字或者字符串。与此对应,Case子句后面列表中值的类型也必须与表达式结果的类型一致。③Case子句后还可以使用“Is<关系表达式>”,Is后面可以跟关系运算符,包括<、<=、>、>=、<>、=等关系运算符,表示把SelectCase后的表达式之值与Is表达式后的值进行指定的关系运算。④如果CaseElse子句不省略,表示当表达式的值与所有Case子句后面列表中的值都不匹配,即条件都不满足时,就会进入CaseElse子句后的程序段执行,最后跳出SelectCase语句。[例]任意输入一个年份和月份,输出该月份对应的天数。在一年的12个月中,1、3、5、7、8、10、12月有31天,4、6、9、11月有30天,2月比较特殊,闰年的2月有29天,非闰年的2月有28天。PrivateSubCommand1_Click()Dimyear,month,dayAsIntegeryear=Val(InputBox("输入年份:",,""))month=Val(InputBox("输入月份:",,""))SelectCasemonthCase1,3,5,7,8,10,12day=31Case4,6,9,11day=30Case2:IfyearMod400=0OryearMod4=0AndyearMod100<>0Thenday=28Elseday=29EndIfCaseElsePrint"输入有误!"EndSelectMsgBoxStr(year)+"年"+Str(month)+"月有"+Str(day)+"天!"EndSub3.条件函数(1)IIF函数IIf(<条件表达1>,<表达式2>,<表达式3>)说明:当<条件表达1>成立时,返回<表达式2>的值;当<条件表达1>不成立时,返回<表达式3>的值。例如:求两个数中的最大值可以表达为max=IIf(a>b,a,b)例如,根据输入的星期几编号(1~7),输出对应的英文单词缩写,可以表达为:day=Val(InputBox("输入星期编号:","",1))PrintChoose(day,"Mon","Tue","Wed","Thu","Fri","Sat","Sun")3While型循环语句While<循环条件表达式><循环体>Wend例利用While型循环语句编写程序,计算1+2+3+4+5+…+99+100的值。PrivateSubForm_Load()Dimi,sumAsIntegeri=1sum=0Whilei<=100sum=sum+ii=i+1WendMsgBox("sum="+Str(sum))EndSubFor型循环和While型循环可以相互转换、取代。如果把For型循环改写成While型循环,For型循环语句中对循环变量的初值、终值和步长的设定则分别出现在While型循环的以下位置:<循环变量>=<初值>While<循环变量><=<终值><循环体><循环变量>=<循环变量>+<步长>Wend当步长为负数时,循环条件可改成“<循环变量>>=<终值>”。例利用Do型循环语句编写程序,计算1+2+3+4+5+…+99+100的值。程序如下:PrivateSubForm_Load()Dimi,sumAsIntegeri=1sum=0DoWhilei<=100sum=sum+ii=i+1LoopMsgBox("sum="+Str(sum))EndSubDosum=sum+ii=i+1LoopWhilei<=100如果用Until来描述条件,则其后的条件是退出循环的条件。因此While后的循环条件是i<=100,而在Until后的退出循环的条件应该改为i>100。程序如下:DoUntili>100sum=sum+ii=i+1Loop再改写成Until出现在循环语句的后面,程序如下:Dosum=sum+ii=i+1LoopUntili>1005goto型循环语句<语句标号>:<程序段>If<条件表达式>Thengoto<语句标号>EndIf例:利用goto语句编写程序,计算1+2+3+4+5+…+99+100的值。6Exit语句Exit语句的作用是在循环体执行的过程中强制终止循环,退出循环结构语句。与循环语句相配合,在For型循环中,为ExitFor;在Do型循环中,为ExitDo。例任意输入若干非零整数,进行大小判断,找出其中的最大数,直到输入0,表示输入结束,把所有输入数中的最大数显示出来。Dimmax,nAsIntegermax=0DoWhileTruen=InputBox("n=","input")Ifn=0ThenExitDoElseIfn>maxThenmax=nEndIfLoopMsgBox("max="+Str(max))PrivateSubForm_Click()Dimi,jAsIntegerPrintFori=9To1Step-1PrintTab((9-i)4+1);Forj=iTo1Step-1PrintLeft(CStr(ij)&Space(5),4);NextjPrintNextiEndSub本章主要介绍程序控制的基本结构。要求主要掌握选择结构的多种表达语句,熟悉各控制语句的格式和功能,掌握相同类型语句之间的联系、区别以及适用范围,并且能够进行相互之间的转换。掌握各种循环语句的格式和功能,它们之间的异同。(1)有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?(2)一个整数,它加上100后是一个完全平方数,加上268又是一个完全平方数,请问该数是多少?(3)1+3+7+…+(2-1)(4)求(5)s=1-1/2+1/3-1/4+…+1/(n-1)+1/n古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....例计算n的阶乘,n是一个大于1的正整数,其值由用户输入。PrivateSubCommand1_Click()Dimi,fact,nAsIntegern=InputBox("n=","input")i=1fact=1Whilei<=nfact=factii=i+1WendMsgBox("n="+Str(n)+",n!="+Str(fact))EndSub第一种Do<循环条件表达式><循环体>Loop4.Do型循环语句进行循环条件判断的时机不同,第一种循环语句是在执行循环体之前先进行判断,条件成立才进入循环体的执行。如果第一次判断条件就不成立,则不会进入循环,这样,可能出现循环体一次都不被执行的情况第二种Do<循环体>Loop<循环条件表达式>在执行循环体后进行循环条件的判断,因此在第一次执行循环体时是直接进入而不需要条件判断,执行完后再进行循环条件的判断以决定是否进行下一次循环,这样,循环体至少要被执行一次。While和Until的区别While属于“当型循环”,与循环条件相结合表示当循环条件成立,条件表达式的值为真时,才进行循环体的执行;Until属于“直到型循环”,与循环条件结合表示直到条件成立时才退出循环,相当于在条件不成立时进行循环,一旦条件成立,则退出循环。While引出继续循环的条件,而Until引出退出循环的条件。<语句标号>用标识符表示,命名规则与变量名相同,不能用整数作为标号。当<条件表达式>成立时,执行程序段,然后通过跳转语句跳到<语句标号>处,再次进行条件的判断,成立则继续循环,不成立则跳出If语句退出循环,执行下面的程序。因此循环条件实际是在If语句中表达的。Dimi,sumAsIntegersum=0i=1s:sum=sum+ii=i+1Ifi<=100ThengotosEndIfPrint"1+2+3+…+99+100=",sumExit语句与循环结构相配合的程序流程图N<10Max=AN=1A>MaxMax=A输入A开始再输入给AN=N+1打印Max结束YNNY例:输入10个数,打印输出其中的最大的数的流程图PrivateSubForm_Click()Dima%,max%,i%a=Val(InputBox("A=?"))max=aFori=1To10a=Val(InputBox("A=?"))Ifa>maxThenmax=aNextiPrint"Max=";maxEndSub上例的计算机程序可以表示为几种循环语句比较循环控制结构的嵌套循环控制结构的嵌套又称为多重循环,是指某一个循环控制结构内又出现另一个或多个循环控制结构。内层的控制语句一定要被完整地包含在外层的控制语句中。书写上最好采用分层递进的书写格式。对于For…Next语句和ForEach…Next语句内外嵌套的情况,内外层的控制变量一定不能同名。可以在多重循环中使用Exit语句,Exit语句的作用是在循环体执行的过程中强制终止循环,退出循环结构语句。Exit语句常用于在循环过程中因为一个特殊的条件而退出循环,往往出现在If语句中。如果遇到循环嵌套的情况,Exit语句将只会使程序流程跳出包含它的最内层的循环结构,即只跳出一层循环。(1)ForI=….…..ForJ=….….NextJ…..NextI(2)ForI=….…..DoWhile/Until….….Loop…..NextI(3)DoWhile….…..ForJ=….….NextJ…..Loop(4)DoWhile/Until….…..DoWhile/Until….….Loop…..Loop例如:在窗体中打印九九乘法表PrivateSubForm_Click()Dimi,jAsIntegerPrintFori=1To9Forj=1ToiPrintLeft(CStr(ij)&Space(5),4);NextjPrintNextiEndSub应用程序举例求100-999之间的水仙花数计算个人所得税个人所得税计算采用的是分段累进算法进行计算,2008年规定的起征点为2000元,超过2000元的计税金额根据超过金额所在级数,采用不同的税率计算税款,总税款等于各级税款之和,通常采用速算扣除数来快速计算,即:总税款=计税金额×税率-速算扣除数打印图形在本实例中,任务说明如图7-14所示,用VisualBasic制作一简单应用程序,实现根据输入的行数打印三角形。使用外循环i控制行,所以i的终值为n;使用内循环j控制每行输出的“”,通常内循环的初值或终值会使用到外循环的循环变量,本例中第i行应该输出“2i-1”个“”,所以内循环变量j的终值为“2i-1”;在第i行输出“”前应该先定位第一个“”的位置,所以在内循环开始前先用“PrintSpc(n-i+1);”本章小结:作业熟悉两重循环结构的写法。根据输入的行数打印各种图形。10第七章VisualBASIC程序设计本章内容及要求:1.了解算法概念及表示,掌握用N—S流程图表示算法;2.熟练掌握赋值语句、输入/输出消息框函数的使用;3.熟练掌握行if语句、块if结构、SelectCase情况选择结构有使用,掌握选择的嵌套结构;4.熟练掌握实现循环结构的For/Next循环结构及ExitFor语句、Do/Loop循环结构的使用,掌握多重循环。重点:选择结构及循环结构的实现及其应用难点:选择的嵌套及多重循环结构1.顺序结构条件语句1语句2YN语句1语句22.选择结构3.循环结构a)当型循环b)直到循环条件语句组YN(b)条件(a)YN语句组三种基本结构的特点:(1)只有一个入口(2)只有一个出口(3)不存在死循环3.load语句load<对象名>加载窗体和控件4.unload语句unload<对象名>程序执行结束,把窗体和控件从内存中卸载6.Time语句Time=<系统时间>设置系统时间,系统时间可以是时刻的数值表达式、字符串表达式及其组合Time=#9:30:00PM#‘设置系统时间为下午9:30Time=#9:30:00AM#8.End语句End‘停止执行,关闭代码执行以及以Open语句打开的文件并且清除变量结束一个过程或块。9.Exit语句Exitdo/for/function/property/sub退出Do……Loop、For……Next、Function、Property、Sub代码块1.IF语句[说明]<条件表达式>一般是比较表达式或关系表达式,描述一定的判断条件。可以把If语句理解成一个两路分支结构,执行哪一路分支完全依据条件表达式的结果而定:当<条件表达式>的值为True时,执行<程序段1>;当<条件表达式>的值为False时,执行<程序段2>。子句Else作为两路分支的分隔符。不管执行哪一路分支,执行完后将跳出If语句,去执行子句EndIf后相邻的语句。用方括号括起的Else及<程序段2>可以默认,这样,当<条件表达式>不成立时,程序什么也不做就直接跳出If语句。例如:输出x,y两个中值较大的一个值。IFX>YThenPrintXElsePrintYEndIf也可以写成如下的单行形式:IFX>YThenPrintXElsePrintYIf<条件表达式1>Then<语句段1>[ElseIf<条件表达式2>Then<语句段2>][ElseIf<条件表达式3>Then<语句段3>]…[Else<语句段n>]]EndIf例:任意输入1个百分制成绩,输出该分数对应的级别:90≤分数≤100,输出“优”;80≤分数<90,输出“良”;70≤分数<80,输出“中”;60≤分数<70,输出“差”;分数<60,输出“不及格”;分数<0或分数>100,则输出“输入有误”。PrivateSubForm_Click()DimscoreAsIntegerscore=InputBox("score=","input")Ifscore<0orscore>100ThenMsgBox("输入有误")ElseIfscore<60ThenMsgBox("不及格")ElseIfscore<70ThenMsgBox("差")ElseIfscore<80ThenMsgBox("中")ElseIfscore<90ThenMsgBox("良")ElseMsgBox("优")EndIfEndSub[例]对3个数大小的判断可以用下面的结构来表达,核心语句如下:Ifa>bThenIfa>cThenmax=aElsemax=cEndIfElseIfb>cThenmax=bElsemax=cEndIfEndIf(2)Choose函数Choose(<数值表达式>,<表达式1>,<表达式2>,….<表达式n>)说明:第一个参数<数值表达式>的运算结果一般是一个数值,界于1和后面的总选项个数之间。Choose函数会根据<数值表达式>的值决定返回哪个选项列的值。当<数值表达式>的值是1,则返回<选项表达式1>的值作为函数的返回值;当<数值表达式>的值是2,则返回<选项表达式2>的值作为函数的返回值;以此类推,当<数值表达式>的值是n,则返回<选项表达式n>的值作为函数的返回值。如果<数值表达式>的值小于1或大于选项总数时,Choose函数返回Null值。如果<数值表达式>之值不是整数,则会先四舍五入为与其最接近的整数,作为选择的依据。7.4循环语句For…Next型循环ForEach…Next型循环While型循环语句Do型循环语句goto型循环语句Exit语句循环控制结构的嵌套1.For…Next型循环(一般用于循环次数已知)For<循环变量>=<初值>To<终值>[Step<步长>]<循环体>Next[<循环变量>]例编程计算:1+2+3+4+5+…+99+100的值Dimi,sumAsIntegersum=0Fori=1To100sum=sum+iNextiMsgBox("sum="+Str(sum))当i<=100i=i+1输出sumsum=0,i=1sum=sum+i算法流程图循环次数例:ForI=2To13Step3PrintI,NextIPrint“I=“,I循环执行次数:4输出I的值分别为:25811出了循环输出为:I=14所以,For型循环是循环次数固定的循环,循环次数在编程的时候即可确定。2.ForEach…Next型循环ForEach<变量>In<数组名|对象集合><循环体>Next[<变量>]这种形式的循环语句针对一个数组或集合中的每个元素,重复执行一组语句,用一个变量来代表遍历的每一个元素。对于集合来说,变量可以是变体型变量或对象变量;对于数组而言,变量只能是变体型变量。只要集合中有一个元素,就会进入循环体执行。针对数组或集合中的每一个元素执行一遍循环,直到处理完所有元素后,才退出循环。该语句也属于“当型循环”,类似于DoWhile…Loop型循环语句。在进入循环之前,先进行循环条件的判断。若条件成立,则执行循环体;若条件不成立,则退出循环。 For....to



Next Dowhile/until....



Loop do

....

LoopWhile/until... 循环类型 当型循环 当型循环 直到循环 循环控制条件 循环变量大于或小于终值 条件成立/不成立执行循环 条件成立/不成立执行循环 循环变量初值 在FOR语句行中 在DO之前 在DO之前 使循环结束 For语句中无需专门语句 必须用专门语句 必须使用专门语句 使用场合 循环次数容易确定 循环/结束控制条件易给出 循环/结束控制条件易给出

献花(0)
+1
(本文系信检彭博海...首藏)