版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
结构化程序设计与数组PrivateSubForm_Click()Dims1AsString,s2AsString,iAsIntegers1="你确定要打开计算器程序吗?"s2="计算器"i=MsgBox(s1,1+32+0,s2)
Ifi=1ThenShell("C:\WINDOWS\system32\calc.exe")Else
EndEndIfEndSub本章重点:掌握IF选择结构,selectcase结构掌握循环结构掌握数组的定义及使用。本章难点:循环结构数组的使用3.1三种基本的控制结构顺序结构选择结构循环结构一个结构化程序以及它的每一个结构,应具有的特点是:只有一个入口;只有一个出口;没有死循环,即每一语句都有被执行的可能。顺序结构DimxAsInteger,yAsInteger,tempAsIntegerx=10y=20temp=xx=yy=tempPrintx,y3.2选择结构1、语法格式1——单行IF结构IF<条件>THEN<语句1>[ELSE<语句2>]如果<条件>表达式为真,程序执行<语句1>,反之为假,程序执行<语句2>必须在同一行内写完。如果太长,需要多行,用续行符(空格加下划线)。语句1和语句2不一定只有一句代码方括号里的内容可以省略3.2选择结构例3-2输入x、y,仅当x<y时,交换x,y值,然后输出x,y的值(Text控件输入x,y值,采用label控件输出结果)
例3-1分段函数的计算,用Inputbox输入x值,将结果显示在文本框里。
1-x2x<=5(x-5)1/4x>5f(x)=注意:在单行IF语句中,如果语句1或语句2由多条语句组成,则语句间用冒号(:)连接3.2选择结构2、语法格式2——块IF结构If<条件>then<语句1>[Else<语句2>]Endif必须以Endif结束then后面不能跟任何语句Ifx>ythenmax=xelsemax=yEndif
例:请问下列语句是否正确
课堂练习:用IFElse结构实现Ifx<>0Theny=sin(x)+sqr(x*x+1)Elsey=cos(x)-x^3+3*xEndIfIfx<>0Theny=Sin(x)+Sqr(x*x+1)_Elsey=Cos(x)-x^3+3*x11思考题:程序界面如下图所示:输入一学生成绩,评定其等级。方法是:90~100分为“优秀”,80~89分为“良好”,70~79分为“中等”,60~69分为“及格”,60分以下“不合格”。对块IF结构进行变化,延伸为多分支结构格式如下:
If<表达式1>Then<语句块1>ElseIf<表达式2>Then<语句块2>… [Else
语句块n+1]EndIf不管有几个分支,依次判断,当某条件满足,执行相应的语句块,其余分支不再执行;若条件都不满足,且有Else子句,则执行该语句块,否则什么也不执行。表达式1表达式2表达式nFTElseIf
多分支结构
语句块n语句块n+1
语句块2
语句块1else…TifEndIfF14例:显示对应的五级制成绩,哪些正确,哪些错误?PrivateSubCommand1_Click()DimmarkAsSinglemark=Val(Text1.Text)Ifmark>=90ThenText2.Text="优"ElseIfmark>=80ThenText2.Text="良"ElseIfmark>=70ThenText2.Text="中"ElseIfmark>=60ThenText2.Text="及格"ElseText2.Text="不及格"EndIfEndSubPrivateSubCommand1_Click()DimmarkAsSinglemark=Val(Text1.Text)Ifmark<60ThenText2.Text="不及格"ElseIfmark<70ThenText2.Text="及格"ElseIfmark<80ThenText2.Text="中"ElseIfmark<90ThenText2.Text="良"ElseText2.Text="优"EndIfEndSubPrivateSubCommand1_Click()DimmarkAsSinglemark=Val(Text1.Text)Ifmark>=60ThenText2.Text="及格"ElseIfmark>=70ThenText2.Text="中"ElseIfmark>=80ThenText2.Text="良"ElseIfmark>=90ThenText2.Text="优"ElseText2.Text="不及格"EndIfEndSub选择结构的嵌套If语句的嵌套是指If或Else后面的语句块中又包含If语句。形式如下:
If<表达式1>ThenIf<表达式11>Then…EndIf else [If<表达式111>Then……else]EndIf例:判断一元二次方程ax2+bx+c=0根的方式的程序
Dima!,b!,c!,delta!,X1!,X2!,x!a=Val(Text1.Text)b=Val(Text2.Text)c=Val(Text3.Text)
If
________Thendelta=b^2-4*a*c
If_________ThenX1=(-b+Sqr(delta))/(2*a)X2=(-b-Sqr(delta))/(2*a)Print"X1=";X1Print"X2=";X2
ElseIfdelta=0ThenPrint"X1=X2=";-b/(2*a)
ElsePrint"方程有两个虚根"
EndIf提示:①当a<>0是,有两个根。
设delta=b2-4ac
当delta>0时,有两个不同的实根。
当delta=0时,有两个相同的实根。
当delta<0时,有两个不同的虚根。
②当a=0时如果b<>0时,有一个根。
如果b=0方程无意义。
Else
If
______Thenx=-c/bPrint"X=";x
ElsePrint"方程无意义"
EndIf
EndIfa<>0delta>0b<>03.2.2情况选择结构Selectcase<测试表达式>case<表达式列表1>[<语句块1>]case<表达式列表2>[<语句块2>]…………….[caseelse> [<语句块n+1>]]Endselect<表达式列表>为下列四种形式之一:单个表达式(单值)如"A"
一组枚举表达式(用逗号分隔)如:2,4,6
表达式1To表达式2
如:60To100Is关系运算符表达式如:Is<60<测试表达式>为数值表达式或字符串表达式根据测试表达式的不同取值决定执行哪一个分支例:用SelectCase语句求学生的成绩等级
Test_select1
Test_select2思考题:判断某一点的坐标在第几象限IF选择结构与SelectCase选择结构的区别:Selectcase单变量多分支,if单分支或多分支;多变量时只能用if结构。例3.6输入年月,输出该月的天数,注意需要考虑闰年闰年的判断?Ymod4=0andymod100<>0orymod400=0
n%=val(text1.text) IfnMod2=0Then Printn/2 ElseIfnMod3=0Then Printn/3 ElseIfn/5=0Then Printn/5 Else Printn EndIf
文本框中输入:15 结果:
5练习1PrivateSubForm_Click()DimstrCAsString*1strC=InputBox("请输入数据")SelectCasestrCCase"a"To"z","A"To"Z"Form1.PrintstrC+"IsAlphaCharacter"Case"0"To"9"Form1.PrintstrC+"IsNumeralCharacter"CaseElseForm1.PrintstrC+"IsOtherCharacter"EndSelectEndSub设输入的数据分别为“W”,“8”和“?”时,单击窗体后,窗体上显示的内容分别是什么?练习23.3循环结构计算机为什么能够大大提高人们的工作效率?一个很重要的原因就是它能够不知疲倦地进行循环运算,而且结果精确。在实际工作中,常遇到一些操作过程不太复杂,但又需要反复进行相同处理的问题,比如,统计本单位所有人员的工资,求全班同学各科的平均成绩等等。这些问题的解决逻辑上并不复杂,但如果单纯用顺序结构来处理,那将得到一个非常乏味且冗长的程序。例如,计算1~100所有整数的和,如果用顺序结构来解决这个问题:1+2+3+4+5+…+100s=0s=s+1s=s+2s=s+3……s=s+100不难看出,程序的绝大部分是在反复做两件事情,一个就是把变化了的值赋值给s,另外一件事就是把值赋值给s后立即加1。要想方便地解决这类问题,最好的办法就是用循环语句。所谓循环就是重复地执行一组语句。i=1s=0dowhilei<=100s=s+ii=i+1loop用循环语句解决上面的问题,程序非常简短:
求解:1~100之间所有整数的和。PrivateSubForm_Click()DimsAsInteger,iAsIntegeri=1s=0DoWhilei<=100s=s+ii=i+1LoopPrintsEndSub
通过上面的对比可知,循环结构非常适合于解决处理的过程相同、处理的数据相关,但处理的具体值不同的问题。我们把能够处理这类问题的语句称为循环语句。
VB提供了三种不同风格的循环语句,它们分别是:(1)For…Next语句;(2)While…Wend语句。
(3)Do…Loop语句;
我们将对这3种循环语句逐一介绍。For<循环变量>=<初值>to<终值>[Step步长]<循环体>Next[循环变量]语法格式:3.3.1For…..Next语句(一般用于循环次数已知)给循环变量赋初值判断循环变量是否在终值内循环体循环变量加步长TF注意:1、循环变量是数值型变量2、步长:用于决定循环变量每次增加的数值。分三种情况>0初值<终值<0初值>终值=0死循环步长若循环变量取值不合理,则不执行循环体;步长缺省值为1。例:用for/next语句求1到100整数的和3、循环体中可以出现语句“ExitFor”,用于将控制转移到Next后一语句。Fori=1To9Step2Ifi=5ThenPrinti:ExitForNextiPrint"i="&i循环次数例:
Forx=17To1Step-3Printx;NextxPrint"x="&x问题:循环了几次?最终的x是多少?判断下面几个循环语句分别循环了多少次。(1)
s=0Fori=1to10s=s+1Nexti(2)
s=0Fori=1to-2step-1s=s+1Nexti(3)
s=0Fori=1to10step-1s=s+1Nexti10次4次0次例3-8求下列表达式的值:
1-1/2+1/3-1/4+...(-1)^(n-1)*1/n求1~n的和?sum=0Fori=1Ton:sum=sum+i:Nexti求1-2+3-4+5……+n的和?fh=1:sum=0Fori=1Ton:sum=sum+fh*i:fh=-fh:Nexti求1-1/2+1/3-1/4+...(-1)^(n-1)*1/n的和?fh=1:sum=0Fori=1Ton:sum=sum+fh/i:fh=-fh:Nexti例3.9找出一个在1~1000中被7除余5、被5除余3、被3除余2的数(用Exitfor)PrivateSubForm_Click()DimiAsIntegerFori=1To1000IfiMod7=5AndiMod5=3AndiMod3=2_ThenExitFor
'返回满足的第一个数
NextiIfi<=1000ThenPrintiEndSub被7除余5:5,5+7,(5+7)+7,(5+7+7)+7,……Fori=5To1000Step7'返回满足的第一个数
IfiMod5=3AndiMod3=2ThenExitFor
Nexti例3-10输入n个数,输出其中的最大值PrivateSubCommand1_Click()DimiAsInteger,nAsInteger,xAsSingle,maxAsSinglen=Val(InputBox("请输入数据个数:"))Fori=1Tonx=Val(InputBox("请输入第"&Str(i)&"个数:"))Ifi=1Thenmax=xElseIfx>maxThenmax=xEndIfNextiPrintmaxEndSub思考题:请书写下列程序运行的结果PrivateSubForm_Click()Fori=5To1Step-0.9Printi;NextiPrintPrint"i=";iEndSub3.3.2while…..wend语句(一般用于循环次数未知)语法格式:While<条件><循环体>Wend例3-12:输入x,求下列级数和直至末项小于10-5为止。1+x+x2/2!+x3/3!+x4/4!+…+xn/n!+…当条件为真时执行循环体3.3.3Do/Loop语句(用于控制循环次数未知)形式1:
DoWhile<条件>
语句块
[ExitDo]
语句块LoopT表达式列表FExitDo语句块语句块DoWhilei<=100sum=sum+ii=i+1LoopDimiasinteger,sumasintegeri=1:sum=0先判断后执行FTExitDo语句块语句块表达式列表形式2:
Do
语句块
[ExitDo]
语句块LoopWhile<条件>Dosum=sum+ii=i+1LoopWhilei<=100Dimiasinteger,sumasintegeri=1:sum=0先执行后判断形式3:DoUntil<条件>
语句块
[ExitDo]
语句块Loop表达式列表TFExitDo语句块语句块DoUntili>100sum=sum+ii=i+1LoopDimiasinteger,sumasintegeri=1:sum=0条件为False时执行循环体表达式列表FTExitDo语句块语句块形式4:
Do
语句块
[ExitDo]
语句块LoopUntil<条件>Dosum=sum+ii=i+1LoopUntili>100Dimiasinteger,sumasintegeri=1:sum=0素数指除了能被1和自身外,不能被其他整数整除的自然数。PrivateSubCommand1_Click()DimnAsInteger,iAsInteger,flagAsBooleann=Val(InputBox("请输入一个整数:"))flag=TrueFori=2Ton-1IfnModi=0Thenflag=False:ExitForNextiIfflagThenPrintn&"是素数"ElsePrintn&"不是素数"EndIfEndSub例3-14:判断输入的任意正整数是否为素数例3-14:判断输入的任意正整数是否为素数PrivateSubCommand1_Click()DimnAsInteger,iAsIntegern=Val(Text1.Text)Ifn=2Orn=3ThenText2.Text=Text1.Text+"是素数"ElseFori=2ToSqr(n)IfnModi=0ThenExitForNextiIfi>Sqr(n)Then'与平方根进行比较,超出说明是素数
Text2.Text=Text1.Text+"是素数"ElseText2.Text=Text1.Text+"不是素数"EndIfEndIfEndSub3.4多重循环单一的循环结构功能较弱,如果将循环结构与分支结构进行嵌套,或者多重循环结构进行嵌套,就能实现复杂的功能。如果在一个循环内完整地包含另一个循环结构,则称为多重循环,或循环嵌套,嵌套的层数可以根据需要而定,嵌套一层称为二重循环,嵌套二层称为三重循环。(1)ForI=….…..ForJ=….….NextJ…..NextI(2)ForI=….…..DoWhile/Until….….Loop…..NextI(3)DoWhile….…..ForJ=….….NextJ…..Loop(4)DoWhile/Until….…..DoWhile/Until….….Loop…..
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年卡通水杯行业深度研究分析报告
- 2021-2026年中国一次性等离子双极电极行业全景评估及投资规划建议报告
- 2025年度个人购车无抵押贷款合同(快速审批)4篇
- 2025年水稻种植与农村电商合作购销合同3篇
- 二零二五年度绿色有机棉产品直销合作协议4篇
- 2024-2025年中国永磁材料市场行情动态分析及发展前景趋势预测报告
- 投资计划书可行性研究报告
- 2025年医用敷料弹性绷带项目可行性研究报告
- 2025年新型共享办公空间租赁合作协议范本4篇
- 二零二五年汽车租赁动产抵押担保合同
- 冬春季呼吸道传染病防控
- 【物 理】2024-2025学年八年级上册物理寒假作业人教版
- 2024年计算机二级WPS考试题库380题(含答案)
- 中医药膳学课件
- 教科版二年级下册科学第一单元测试卷(含答案)
- 春节值班安排通知
- 下腔静脉滤器置入术共27张课件
- 人教小学四年级上册数学知识点归纳
- 2022年上海健康医学院职业适应性测试题库及答案解析
- 安徽省血液净化专科护士临床培训基地条件
- 脑桥解剖ppt课件
评论
0/150
提交评论