第2页本章主要内容分支结构程序设计循环结构程序设计过程(8~10学时)第3页4.1分支结构程序设计第4页4.2.1分支结构1.单分支结构语句格式:(1)IF条件Then语句块ENDIF(2)IF条件Then语句条件语句块FT执行过程第5页例4-1:已知两个数x和y,比较它们的大小,使得x大于y。IfxyThent=x:x=y:y=tEndIf或IfxyThent=x:x=y:y=t注意:将两个变量中的数进行交换,必须借助于第三个变量才能实现。如果将上面的语句写成:IfxyThenx=y:y=x执行后结果会如何?第6页语句格式:If条件Then语句块1Else语句块2EndIf条件语句块1语句块2TF执行过程:2.双分支结构第7页例4-2:某地至北京的邮路里程为1043公里,通过邮局向北京邮寄“特快专递”,计费标准每克为0.05元,但超过100克后,超出数每克为0.02元。编写程序计算邮费。w*0.05w=100100*0.05+(w-100)*0.02w100F=第8页DimW!,F!W=InputBox(“请输入邮件重量:”)IfW=100ThenF=0.05*wElseF=5+(w-100)*0.02EndIfPrint“邮件重量为:”;W,“邮费为:”;F第9页3.条件函数IIf函数可用来执行简单的条件判断操作,它是“If…Then…Else”结构的简写版本。格式:Result=IIf(条件,True部分,False部分)功能:当条件为真时,IIf函数返回“True部分”,而当条件为假时,IIf函数返回“False部分”。说明:Result函数的返回值,True部分、False部分及结果变量的类型要一致。例如,dimd%,x%d=IIf(x0,1,0)'如果变量x的值大于0,变量d的值为1,否则为0。第10页又如,dimstr1,x%,y%PrintIIf(xy,“x大于y”,“y大于或等于x”)'如果xy,输出“x大于y”,否则输出“y大于或等于x”再如,用IIf函数改写例4.2DimW!,F!W=InputBox(“请输入邮件重量:”)F=IIf(W=100,0.05*w,5+(w-100)*0.02)Print“邮件重量为:”;W,“邮费为:”;F第11页1.If-EndIf语句实现多分支语句格式:If〈表达式1〉Then〈语句块1〉ElseIf〈表达式2〉Then〈语句块2〉……Else〈语句块n+1〉EndIf4.2.2多分支结构条件1语句块1条件2条件n语句块2语句块n语句块n+1TTTFFF执行过程第12页例4-4:输入一学生成绩x,评定其等级。方法是:90~100分为“优秀”,80~89分为“良好”,70~79分为“中等”,60~69分为“及格”,60分以下为“不及格”。x=Val(InputBox(“输入成绩”))Ifx=90thenPrint优秀ElseIfx=80ThenPrint良好ElseIfx=70ThenPrint中等ElseIfx=60ThenPrint及格ElsePrint不及格EndIf第13页IfX0ThenY=1ElseIfX=0ThenY=0ElseY=-1EndIfA)Y=IIf(X0,1,IIf(X=0,-1,0))B)Y=IIf(X=0,0,IIf(X0,1,-1))C)Y=IIf(X0,IIf(X0,1,0),-1)D)Y=IIf(X0,IIf(X0,-1,0),1)例:在下列赋值命令中,与If语句等效的是:第14页语句格式:SelectCase表达式Case表达式列表1语句块1Case表达式列表2语句块2………Case表达式列表n语句块n[CaseElse语句块n+1]EndSelect表达式列表2表达式列表1表达式列表n语句块1语句块2语句块n语句块n+1YNNNYY…执行过程求表达式的值2.SelectCase语句实现多分支第15页说明:各Case中的表达式列表要与SelectCase中的表达式是同类型的下面四种形式之一:例:SelectCasex‘变量x是数值表达式列表的四种形式1.表达式A+5‘变量x的值为表达式A+5的值2.一组枚举表达式(用逗号分隔)2,4,6,8‘变量x的值分别为2,4,6,83.表达式1To表达式260to100‘变量x的值为60~1004.Is关系运算符表达式Is60‘变量x的值小于60第16页SelectCasexCase90to100Print优秀Case80to89Print良好Case70to79Print中等Case60to69Print及格CaseElsePrint不及格EndSelect用SelectCase语句改写例4-4。第17页A)计算机成绩:不及格B)计算机成绩:及格C)计算机成绩:良D)计算机成绩:优SelectCasexCaseis60?计算机成绩:&不及格Caseis=60?计算机成绩:&及格Caseis=70?计算机成绩:&中Caseis=80?计算机成绩:&良Caseis=90?计算机成绩:&优Endselect例:选择与下面程序段相匹配的答案。(令计算机成绩X=89)第18页选择结构的嵌套:在IF语句的Then分支和Else分支中可以完整地嵌套另一IF语句或SelectCase语句,同样SelectCase语句每一个Case分支中都可嵌套另一IF语句或另一SelectCase语句。下面是两种正确的嵌套形式:(1)IF条件1…..If条件2……Else…..EndIf….Else….IF条件3…..Else…..EndIf…..EndIF(2)IF条件1…..SelectCase…Case条件2IF条件3……Else…..EndIf……Case条件4…..EndSelect….EndIF第19页例4-6:从键盘上输入字母或0~9之间的数字,编写程序对其进行分类。分类过程:首先判断是字母还是数字,若是字母的话,要判断是大写字母还是小写字母。若是数字的话,要判断是偶数还是奇数。判断的结果输出相应信息。不是字母或数字,也应输出相应信息。数据分类第20页程序如下:PrivateSubForm_Click()Dimmsg,str1msg1=请输入一个字母或0~9数字str1=InputBox(msg1,输入数据)IfNotIsNumeric(str1)Then'不是数字IfLen(str1)0ThenSelectCaseAsc(str1)'将字母转换成ASCII码值Case65To90'大写字母msg2=你输入的是大写字母“msg2=msg2&Chr(Asc(str1))&。Case97To122'小写字母msg2=你输入的是小写字母msg2=msg2&Chr(Asc(str1))&。CaseElsemsg2=你输入的不是一个字母或一个数字EndSelectEndIf第21页ElseSelectCaseVal(str1)'转换成数值Case1,3,5,7,9'奇数msg2=你输入的数字&str1&是一个奇数。Case0,2,4,6,8'偶数msg2=你输入的数字&str1&是一个偶数。CaseElse'出界msg2=你输入的数超出范围。EndSelectEndIfMsgBoxmsg2,,显示分类结果EndSub第22页4.2循环结构程序设计第23页4.2.1循环语句1.FOR循环结构语句格式:For循环变量=初值To终值[Step步长]语句块[ExitFor]语句块Next循环变量循环体第24页循环变量超过终值?循环变量+步长-循环变量循环变量--初值语句块TF语句块执行过程结束循环ExitFor第25页说明:(1)循环变量:是数值变量,不能是布尔或数组元素。(2)初值、终值和步长:是数值表达式,步长为正数时,表示递增循环;为负数时,表示递减循环;缺省值为1。(3)循环体:在For语句和Next语句之间的语句序列,可以是一个或多个语句。(4)ExitFor:此选项表示在满足特定条件时,强行退出循环;因此,该语句一定包含在条件语句之中。(5)Next:是循环终端语句,在其后的循环变量与For语句中的循环变量必须相同。只有一层循环时,循环变量可省略不写。(6)循环执行次数:n=Int((终值-初值)/步长)+1(7)For_Next语句可以嵌套使用,每层循环只有一个的变量作为循环变量;嵌套不能交叉。第26页例4-7:计算S=1+2+3+4+….+100的和s=0Fori=1to100s=s+iNexti?“s=”;s例:计算S=1!+2!+3!+……+10!的和s=0Fori=1to10s=s+t‘t为i!值Nexti?“s=”;st=1t=t*i例:S=20+21+22+……+263(1m3≈1.42*108颗)s=0Fori=tos=s+Nexti?“s=”;s0632^i第27页格式一:DoWhile|Until条件语句块[ExitDo]命令组Loop循环条件ExitDo结束循环语句块语句块F(While)T(Until)循环体2.Do循环结构执行过程While:当“条件”为真时,重复执行”循环体”Until:直到“条件”为真时,结束执行”循环体”T(While)F(Until)第28页语句块语句块格式二:Do语句块[ExitDo]命令组LoopWhile|Until条件结束循环循环体执行过程循环条件ExitDoF(While)T(Until)T(While)F(Until)第29页例4-8:小红今年12岁,她父亲比她大30岁,编程计算出她父亲在几年后比她年龄大一倍,那时父女的年龄各为多少?PrivateSubCommand1_Click()dimageasinteger,casintegerage=12:c=0DoWhile(age+c)*2age+30+cc=c+1LoopPrint“经过”;c;“年,小红父女的年龄分别是:”Printage+30+c;和;age+cEndSub格式1:第30页PrivateSubCommand2_Click()dimageasinteger,casintegerage=12:c=0Doc=c+1LoopUntil(age+c)*2=age+30+cPrint“经过”;c;“年,小红父女的年龄分别是:”Printage+30+c;和;age+cEndSub格式2:第31页4.2.2循环嵌套例4-9:用For—Next语句打印乘法九九表。1*1=12*1=22*2=43*1=33*2=63*3=94*1=44*2=84*3=124*4=16…………8*1=88*2=168*3=24……8*8=649*1=99*2=189*3=27……9*8=729*9=81第32页Sexp=a&“*”&b&“=”&a*bPrintTab((b-1)*8+1);Sexp;Fora=1to9Forb=1toaNextbPrintNextaForb=ato91*1=11*2=21*3=3…1*9=92*2=42*3=6…2*9=183*3=9…3*9=27…8*8=648*9=729*9=81第33页第34页例4-10:求3~200以内的所有素数(只能被1和本身整除的数)。Forx=3to200step2Fory=2tosqr(x)Ifxmody=0ThenExitForNextyIfysqr(x)ThenPrintx;Nextx计算有多少个素数?并按每行8个数输出。第35页分析下面各题的执行结果:a=0Forj=1to15a=a+jmod3Next?aforx=1to2a=0fory=1tox+1a=a+1Nexty?a;Nextxk=5forj=3to7k=k+jNext?k+