《Visual Basic NET程序设计》课件第4章 程序设计结构_第1页
《Visual Basic NET程序设计》课件第4章 程序设计结构_第2页
《Visual Basic NET程序设计》课件第4章 程序设计结构_第3页
《Visual Basic NET程序设计》课件第4章 程序设计结构_第4页
《Visual Basic NET程序设计》课件第4章 程序设计结构_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

结构化程序设计的基本控制结构有三种,即顺序结构、选择结构和循环结构。

例4.2根据提示输入直角三角形的两条直角边长,求直角三角形的斜边、周长和面积。PublicClassForm1

PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDima,b,c,p,areaAsDoublea=TextBox1.Textb=TextBox2.Textc=Math.Sqrt(a^2+b^2)Label3.Text="直角三角形三边分别为:a="&a&",b="&b&",c="&Format(c,"0.00")&vbCrLfp=(a+b+c)/2area=Math.Sqrt(p*(p-a)*(p-b)*(p-c))Label3.Text&="直角三角形的周长="&Format(2*p,"0.00")&",面积="&Format(area,"0.00")

EndSubEndClass4.2选择结构在日常生活和工作中,常常需要对给定的条件进行分析、比较和判断,并根据判断结果采取不同的操作。在VisualBasic中,这样的问题通过选择结构程序来解决,而选择结构可以使用If语句、SelectCase语句来实现。4.2.1If…Then…Else语句If…Then…Else条件语句包含三种形式:单分支、双分支和多分支。1.单分支结构If…Then语句格式1: If条件表达式Then语句格式2: If条件表达式Then

语句块 EndIf例4.3输入两个数x和y,编程使得x的值始终大于y。运行结果如图4-5所示。PublicClassForm1PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimxAsInteger,yAsInteger,tAsIntegerx=Val(TextBox1.Text)y=Val(TextBox2.Text)Ifx<yThent=xx=yy=tEndIfTextBox3.Text=xTextBox4.Text=yEndSubEndClass

2.双分支结构If…Then…Else语句使用If…Then…Else语句可以定义两个语句块,VisualBasic程序可以根据检测的结果执行其中的一个语句块。既可以书写在单行中,也可以书写在多行中,其语句格式如下:格式1: If条件Then语句Else语句格式2: If条件Then

语句块1 Else

语句块2 EndIf

例4.6输入的一串英文字母,分别统计其中大写字母和小写字母的个数。PublicClassForm1

PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimcAsString,i,cu,clAsIntegerc=Trim(TextBox1.Text)cu=0:cl=0Fori=1ToLen(c)IfMid(c,i,1)>="a"AndMid(c,i,1)<="z"Thencl=cl+1Elsecu=cu+1EndIfNextLabel1.Text="小写字母个数="&clLabel2.Text="大写字母个数="&cuEndSubEndClass3.多分支结构If…Then…ElseIf语句使用If…Then…ElseIf语句可以定义多个语句块,VisualBasic程序可以根据检测的结果执行其中的一个语句块,其语句格式如下:If条件1Then语句块1ElseIf<条件2>Then语句块2… ElseIf条件nThen语句块n[Else语句块n+1]EndIf例4.7某购物超市节日期间举办购物打折扣的促销活动,优惠办法是:每位顾客当天一次性购物在100元以上者,按九五折优惠;在200元以上者,按九折优惠;在300元以上者,按八五折优惠;在500元以上者,按八折优惠。则可以根据顾客购物款数计算出优惠价。

PublicClassForm1

PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimxAsSingle,yAsSinglex=Val(TextBox1.Text)Ifx<100Theny=xElseIfx<200Theny=0.95*xElseIfx<300Theny=0.9*xElseIfx<500Theny=0.85*xElsey=0.8*xEndIfTextbox2.Text=y

EndSubEndClass例4.8已知某课程的百分制分数mark,将其转换为等级制(优、良、中、及格和不及格)的评定等级grade。评定条件如下:方法一:Ifmark>=90Thengrade="优"Elselfmark>=80Thengrade="良"Elselfmark>=70Thengrade="中"Eiselfmark>=60Thengrade="及格"Elsegrade="不及格"EndIf方法二:Ifmark>=90Thengrade="优"Eiselfmark>=80Andmark<90Thengrade="良"Elselfmark>=70Andmark<80Thengrade="中"Elselfmark>=60Andmark<70Thengrade="及格"Elsegrade="不及格"EndIf方法三:Ifmark>=60Thengrade="及格"Elselfmark>=70Thengrade="中"Eiselfmark>=80Thengrade="良"Eiselfmark>=90Thengrade="优"Elsegrade="不及格"EndIf4.If语句的嵌套If语句的嵌套是指If或Else后面的语句块中又包含If语句。其语句形式如下:If条件1ThenIf条件2Then…EndIf…EndIf

例4.9比较三个数x,y,z的大小并排列,使得x<y<z。实现语句如下:Ifx>yThent=x:x=y:y=tIfy>zThent=y:y=z:z=tIfx>yThent=x:x=y:y=tEndIfEndIf例4.10输入一串字符,统计英文字母、数字和其它字符的个数。假设字符串通过文本框textbox1输入,并赋值一个字符到变量ch中。Fori=1tolen(trim(textbox1.text))Ch=mid(trim(textbox1.text),I,1)(方法一或方法二)Nexti方法一:IfChar.isletter(ch)ThenIfChar.isupper(ch)ThenMsgbox(ch+"是大写字母") ElseMsgbox(ch+"是小写字母") EndIfElseifchar.lsnumber(ch)ThenMsgbox(ch+"是数字字符")ElseMsgbox(ch+"是其他字符")EndIf方法二(利用字符比较):Ifchar.ToUpper(ch)>="A"cAndChar.ToUpper(ch)<="Z"cThenIfch>='A"cAndch<="Z"cThenMsgBox(ch+"是大写字母")ElseMsgBox(ch+"是小写字母")EndIfElseifch>="0"cAndch<="9"cThenMsgBox(ch+"是数字字符")ElseMsgBox(ch+"是其他字符")EndIf例4.11编程判断某年是否是闰年。判断闰年的条件是:年份能被4整除但不能被100整除,或者能被400整除。程序算法框图如图4-9所示。本例可用四种方法实现。主要源代码如下:方法一(使用日期时间型变量的成员来判断闰年):IfDateTime.IsLeapYear(Year)ThenMsgBox(Year&"yearisaleapyear!")ElseMsgBox(Year&"yearisnotaleapyear!")EndIf方法二(使用一个逻辑表达式包含所有的闰年条件):IfYearMod4=0AndYearMod100<>0OrYearMod400=0ThenMsgBox(Year&"yearisaleapyear!")ElseMsgBox(Year&"yearisnotaleapyear!")EndIf方法三(使用嵌套的If语句):IfYearMod400=0ThenMsgBox(Year&"yearisaleapyear!")ElseIfYearMod4=0ThenIfYearMod100=0ThenMsgBox(Year&"yearisnotaleapyear!")ElseMsgBox(Year&"yearisaleapyear!")EndIfElseMsgBox(Year&"yearisnotaleapyear!") EndIfEndIf

方法四(使用If…Else…lf语句):IfYearMod400=0ThenMsgBox(Year&"yearisnotaleapyear!")ElseIfYearMod4<>0ThenMsgBox(Year&"yearisnotaleapyear!")ElseIfYearMod400=0ThenMsgBox(Year&"yearisnotaleapyear!")ElseMsgBox(Year&"yearisaleapyear!")EndIf4.2.2Select…Case语句SelectCase语句的功能与If…Then…Else语句类似,但对多重选择的情况,SelectCase语句使代码更加易读。SelectCase语句处理一个测试表达式并只计算一次。然后,将表达式的值与结构中的每个Case的值进行比较。如果相等,就执行与该Case相关联的语句块。如果不止一个Case子句中的值与测试值相匹配,则只对第一个匹配的Case执行与之相关联的语句块。其流程见图4-10所示。SelectCase语句的格式为:SelectCase测试表达式或变量Case表达式列表1语句块1Case表达式列表2语句块2…[CaseElse语句块n+1]EndSelect其中,“测试表达式或变量”为必要参数,可以是任何数值型表达式或字符串表达式。在Case子句中,“表达式列表”为必要参数,必须与“测试表达式或变量”的类型一致,它用来测试其中是否有值与“测试表达式或变量”相匹配,是一个或多个如表4-5所示形式的列表。例4.12例4.7中计算优惠价格的算法可以改写为如下代码:PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimxAsSingle,yAsSinglex=Val(Text1.Text)SelectCasexCaseIs<100y=xCaseIs<200y=0.95*xCaseIs<300y=0.9*xCaseIs<500y=0.85*xCaseElsey=0.8*xEndSelectText2.Text=yEndSub循环语句产生一个语句序列,不断重复执行,直到某个特定的时刻才停止。VisualBasic提供了4种不同风格的循环结构,包括For…Next语句、While语句、Do…Loop语句和ForEach…Next语句。4.3循环结构4.3.1For循环For循环也称为For-Next循环或计数循环。其一般格式如下:For循环变量=初值To终值[Step步长][循环体][ExitFor]Next[循环变量]For循环按指定的次数执行循环体。例如:Fori=1to100Step1Sum=Sum+iNexti说明:(1)循环变量:亦称“循环控制变量”、“控制变量”或“循环计数器”。它是一个数值变量,但不能是下标变量或记录元素。(2)初值:循环变量的初值,它是一个数值表达式。(3)终值:循环变量的终值,它也是一个数值表达式。(4)步长:循环变量的增量,是一个数值表达式。其值可以是正数(递增循环)或负数(递减循环),但不能为0。如果步长为1,则可略去不写。(5)循环体:在For语句和Next语句之间的语句序列,可以是一个或多个语句。(6)ExitFor:用于在循环执行过程的某个时机,退出循环。(7)Next:循环语句尾标记,在Next后面的“循环变量”与For语句中的“循环变量”必须相同。(8)For语句的执行过程①For循环语句在执行时,首先计算初值、终值和步长(仅此一次)。②“初值”赋给“循环变量”。③检查“循环变量”的值是否超过终值,如果超过就停止执行“循环体”,跳出循环,执行Next后面的语句;否则执行一次“循环体”。④当遇到Next时,把“循环变量”按照“步长”的值进行调整后,再转步骤③继续循环程。例4.13求1+3+5+…+99的累加和可用For-Next循环实现:PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimxAsSingle,yAsSingleDimSAsInteger,nAsIntegerS=0Forn=1To99Step2S=S+nNextnTextbox1.text=SEndSub例4.14判断一个自然数是否是素数。算法思想:“素数”是指除了1和该数本身,不能被任何整数整除的数。判断一个自然数n(n>1)是否是素数,只要依次用2~作除数去除n,若n不能被其中任何一个数整除,则n即为素数;否则,n不是一个素数。程序运行结果如图4-12所示。程序源代码如下:PublicClassForm1PrivateSubForm1_Click1(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMe.ClickDimnAsLong,iAsLong,flagAsLongn=Val(TextBox1.Text)Ifn>0AndInt(n)=nThenflag=0Fori=2ToInt(Math.Sqrt(n))IfnModi=0Thenflag=1ExitForEndIfNextiIfflag=0ThenTextBox2.Text="是素数"ElseTextBox2.Text="不是素数"EndIfElseTextBox2.Text="请输入正整数"EndIfEndSubEndClass4.3.2While循环其格式如下:While条件[语句块]Wend在上述格式中,“条件”为一布尔表达式。当循环语句的功能是:当给定的“条件”为True时,执行循环中的“语句块”(即循环体)。例4.15从键盘上输入字符,对输入的字符进行计数,当输入的字符仅为“?”时,停止计数,并输出结果。由于需要输入字符的次数没有指定,不宜用For循环来编写程序。停止计数的条件是输入的字符为“?”,可以用While循环语句来实现。程序如下:PrivateSubForm1_Click1(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMe.ClickDimchAsString,msg$,Counter%Constch1$="?"counter=0msg$="EnteraCharavter:"ch=InputBox(msg$)Whilech<>ch1$Counter=Counter+1ch=InputBox$(msg$)EndWhileLabel1.Text="NumberofCharactersentered:"&CounterEndSub例4.16使用While语句编写程序,判断一个自然数是否是素数。PrivateSubForm1_Click1(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMe.ClickDimnAsLong,iAsLong,flagAsLong,rAsLongn=Val(TextBox1.Text)flag=0i=2While(i<=Int(Math.Sqrt(n)))And(flag=0)r=nModiIfr=0Thenflag=1Elsei=i+1EndIfEndWhileIfflag=0ThenTextBox2.Text="是素数"ElseTextBox2.Text="不是素数"EndIfEndSub4.3.3Do循环1.先判断型Do…Loop循环DoWhile|Until条件语句块[ExitDo]语句块Loop例4.16用循环语句求1+2+3+…+100的累加和,代码如下:PrivateSubForm1_Click1(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMe.ClickDimSAsInteger,nAsIntegerS=0DoWhilen<=100S=S+nn=n+1LoopLabel1.Text=SEndSub2.后判断型Do…Loop循环Do语句块[ExitDo]语句块LoopWhile|Until条件例4.17用辗转相除法求两个自然数m和n的最大公约数和最小公倍数。求最大公约数的算法思想:(1)对于已知两数m,n,使得m>n;(2)以大数m作被除数,小数n作除数,m除以n得余数r;(3)若r≠0,m←n,n←r,继续执行步骤(2);(4)若r=0,则n即为所求的m与n的最大公约数,算法结束。求最小公倍数的算法思想:将m与n相乘后除以最大公约数即为所求。PrivateSubForm1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMe.ClickDimm%,n%,t%,r%,mn&m=Val(TextBox1.Text)n=Val(TextBox2.Text)Ifm<=0Orn<=0ThenTextBox3.Text="输入错误"End'End用于结束程序的运行EndIfmn=m*nIfm<nThent=m:m=n:n=tEndIfDor=mModnm=nn=rLoopWhiler<>0TextBox3.Text=mTextBox4.Text=mn/mEndSub4.3.4ForEach循环ForEach…Next语句用于枚举数组或对象集合中的元素,并对该数组或集合中的每个元素执行一次相关的嵌入语句。ForEach…Next语句用于循环访问数组或集合以获取所需信息。当为数组或集合中的所有元素完成迭代后,控制传递给ForEach…Next之后的下一个语句。ForEach…Next语句的格式为:ForEach变量名[Asdatatype]In数组成集合名称[语句块][CountionFor] [语句块] [ExitFor] [语句块]Next[变量名]说明:(1)“变量名”是一个循环变量,在循环中,该变量依次获取数组或集合中各元素的值。如果在使用ForEach循环之前尚未声明,则必须使用Asdatatype声明其数据类型。(2)“变量名”必须与数组或集合的类型一致。(3)在ForEach循环体语句块中,数组或集合的元素是只读的。其值不能改变。如果需要迭代数组或集合中的各元素,并改变其值,就应使用For循环。(4)ContinueFor:将控制转移到ForEach循环的开始。(5)ExitFor:将控制转移到ForEach循环外。例4.18使用ForEach循环显示整数数组的内容。运行结果如图4-16所示。程序代码如下:PrivateSubForm1_Click1(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMe.ClickLabel1.Text=""DimmyArray()AsInteger={10,20,30,40,50} '整数数组ForEachitemAsIntegerInmyArray'输出整数数Label1.Text&=item&""NextEndSub4.3.5多重循环通常把循环体内不含有循环语句的循环叫做单重循环,而把循环体内含有循环语句的循环称为多重循环。多重循环又称多层循环或嵌套循环。例如在循环体内含有一个循环语句的循环称为二重循环。例4.19打印“九九乘法表”,输出结果如图4-17所示。“九九乘法表”是一个9行9列的二维表,行和列都在变化,而且在变化中互相约束。这个问题可以用下面的二重循环来实现。程序如下:PrivateSubForm1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMe.ClickDimiAsInteger,jAsInteger,sAsStringLabel1.Text=""Fori=1To9s=""Forj=1Toi ‘字符串左对齐,在右边以空格填充以达到总长度为8s&=(i&"x"&j&"="&i*j).PadRight(8)NextjLabel1.Text&=s&vbCrLfNextiEndSub显示图4-18结果的程序代码如下:PrivateSubForm1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMe.ClickDimiAsInteger,jAsInteger,sAsStringLabel1.Text=""Fori=1To9s=""Forj=1Toi-1s&=(String.Format("")).PadRight(8)NextjForj=iTo9s&=(String.Format(i&"x"&j&"="&i*j)).PadRight(8)NextjLabel1.Text&=s&vbCrLfNexti

EndSub例4.20编写程序,输出100以内的素数。代码如下:PrivateSubForm1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMe.ClickDimnAsLong,iAsLong,flagAsLong,rAsLongDimcountAsIntegercount=0Label1.Text=""Forn=2To100flag=0i=2While((i<=Int(Math.Sqrt(n)))And(flag=0))r=nModiIfr=0Thenflag=1Elsei=i+1EndIfEndWhileIfflag=0ThenLabel1.Text&=n&""count=count+1IfcountMod5=0ThenLabel1.Text&=vbCrLfEndIfNextnEndSub4.4跳转语句跳转语句用于无条件地转移控制。VisualBasic提供了许多转移控制的语句,包括GoTo,Countinue,Exit,End,Stop等。4.4.1GoTo语句4.4.2Continue语句4.4.3Exit语句4.4.4End语句4.4.5Stop语句计算机解决问题必须按照一定的算法“循序渐进”,算法就是解决问题或处理事物的方法和步骤。对于求解同一问题,往往可以设计出多种不同的算法,它们的运行效率、占用内存量可能有较大的差异。一般而言,评价一个算法的好坏是看算法是否正确、运行效率的高低和占用系统资源的多少等。4.5综合应用

PublicClassForm1PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimx,x0,f,f1AsSinglex0=Val(TextBox1.Text)Dox0=xf=((2*x0-4)*x0+3)*x0-6f1=(6*x0-8)*x0+3x=x0-f/f1LoopWhileMath.Abs(x-x0)>=0.00005TextBox2.Text=xEndSubEndClass2.猜数游戏例4.25设计一个“猜数游戏”程序,窗体界面如图4-22所示。单击“开始”按钮,计算机随机产生一个1~100以内的随机整数;单击“猜猜看”按钮,用户输入所猜的数后,计算机给出相应的提示:数大了、数小了或猜对了用了几次;单击“不玩了”按钮,结束程序的执行。PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.LoadLabel3.Text="随机产生一个1-100之间的整数,看看你用几次能猜对?"Button2.Enabled=FalseEndSubPrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickRandomize()js=Int(100*Rnd()+1)n=0TextBox1.Text=""TextBox2.Text=""Button1.Enabled=FalseButton2.Enabled=TrueEndSubPrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.ClickDimcsAsShortButton1.Enabled=FalseButton2.Enabled=FalseDon=n+1cs=Val(InputBox("请输入你猜的数","猜数游戏",400,300))Ifjs=csThenTextBox1.Text=jsTextBox2.Text="猜对了!"&"用了"&n&"次"

温馨提示

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

评论

0/150

提交评论