第四章 程序设计基础.docx
《第四章 程序设计基础.docx》由会员分享,可在线阅读,更多相关《第四章 程序设计基础.docx(17页珍藏版)》请在冰豆网上搜索。
![第四章 程序设计基础.docx](https://file1.bdocx.com/fileroot1/2023-1/9/d31aa015-0d52-4c38-87fa-f09c1eccfdd8/d31aa015-0d52-4c38-87fa-f09c1eccfdd81.gif)
第四章程序设计基础
第四章程序设计基础
教学目的及要求:
使学生掌握顺序结构、分支结构、循环结构的语法规则和具体应用,程序调试的步骤和方法。
重点与难点:
1、熟练掌握表达式、赋值语句及逻辑表达式等的书写约定
2、掌握InputBox和MsgBox函数的用法
3、掌握单分支和多分支条件语句
4、熟练掌握For语句和While语句的使用
5、难点是多重循环的程序设计
主要外语词汇:
context、prompt、msgbox、inputbox
授课内容:
1、三种基本结构:
顺序结构、选择结构、循环结构
2、流程图:
(1)传统的流程图
(2)N-S流程图
第一节顺序结构程序设计
特点:
按书写时的顺序依次执行。
一、VB中的语句及书写约定:
1、自动语法检测
2、格式化处理
3、续行符:
下划线,一条语句写在多行上。
下划线与其前面的字符之间至少要有一个空格。
4、复合语句行:
冒号,多条语句写在一行上。
二、赋值语句:
1、可以给一个变量或某一个对象的属性赋值。
格式1:
变量名=表达式
格式2:
[对象名.]属性名=属性值
若省略对象名,则默认是当前窗体。
方向性:
从右向左赋值。
2、最终的结果是最后一次的赋值。
3、数据类型要匹配,注意相容现象:
(1)逻辑型->数值型:
True->-1,False->0
数值型->逻辑型:
非0->True,0->False
(2)实型->整型:
四舍五入原则,不是去尾原则
整型->实型:
扩展小数位数
4、不管表达式是什么数据类型,都可以赋给一个Variant变量。
5、系统提供的默认初始值:
(1)数值型:
0
(2)货币型:
0(3)字符型:
空字符串
(4)逻辑型:
False(5)日期型:
0:
00:
00
(6)可变型:
Empty(7)对象型:
Nothing
6、不能连续赋值:
例:
DimaAsInteger,bAsInteger,cAsInteger
a=b=c=1错误
a=1:
b=1:
c=1正确
7、交换两个变量中的数据:
例:
a=b:
b=a错误
t=a:
a=b:
b=t正确,t是中间变量
注意:
VB中的数字和只包含数字的字符串可以方便地互换类型,例:
(1)隐式转换:
PrivateSubCommand1_Click()
DimxAsInteger,yAsString
y=“100.23”:
x=y‘隐式转换
Printx
EndSub
(2)显式转换字符型->数值型:
利用Val函数:
PrivateSubCommand1_Click()
DimxAsInteger
Text1.Text=“100.23”
x=Val(Text1.Text)‘显式转换
Printx
EndSub
(3)显式转换数值型->字符型:
利用Str函数:
PrivateSubCommand1_Click()
DimxAsInteger
x=100.23
Text1.Text=Str(x)‘显式转换
PrintText1.Text
EndSub
三、注释、暂停、结束语句:
1、注释语句:
非执行语句
(1)格式1:
Rem注释语句
(2)格式2:
‘注释语句(常用)
(3)块注释:
视图->工具栏->编辑->设置注释块、解除注释块
2、暂停语句:
格式:
Stop
暂停程序的运行,但不关闭所有已打开的文件,相当于在程序代码中设置断点,主要用于调试程序。
3、结束语句:
格式:
End
停止程序的运行,关闭所有已打开的文件。
还可以用来结束一些模块的操作。
例:
PrivateSubCommand2_Click()
End
EndSub
四、输入函数InputBox:
在一对话框中显示提示,等待用户输入内容,并返回包含文本框内容的字符串。
1、格式:
InputBox(prompt[,title][,default][,xpos,ypos][,helpfile,context])
(1)prompt:
对话框的消息提示文字。
(2)title:
对话框的标题,标题省略取默认值“工程1”。
(3)default:
文本框的默认输入信息。
2、InputBox函数的返回值是字符型的。
3、每运行一次InputBox函数只能给一个变量赋值。
总结:
输入数据的方法:
1、在程序代码中直接指定:
优点:
代码简单
缺点:
缺少灵活性
2、利用TextBox文本框输入数据:
优点:
可以输入任意值
缺点:
要添加多个文本框,界面复杂
3、利用InputBox函数输入数据:
优点:
界面简单,可以输入任意值
缺点:
代码复杂,参数较多
五、消息函数和语句MsgBox:
在一对话框中显示消息,等待用户单击按钮,并返回包含文本框内容的字符串。
1、MsgBox函数:
(1)格式:
MsgBox(prompt[,buttons][,title][,helpfile,context])
①prompt:
对话框的消息提示文字。
②buttons:
a)组合值,每组只能取一个数字,数字间用“+”连接。
b)进行相加(只有唯一的分解方式)。
c)使用VB常数。
(表4-1)
d)方式a)和方式c)可以结合起来使用。
e)把“+”换成“Or”
例:
3+32+0
35
vbYesNoCancel+vbQuestion+vbDefaultButton1
vbYesNoCancel+32+vbDefaultButton1
③title:
对话框的标题,标题省略取默认值“工程1”。
(2)MsgBox函数的返回值是整型的:
1-7(表4-2)
例:
PrivateSubForm_Load()
DimaAsInteger
Show
a=MsgBox("请你选择:
",3+32+0,"Buttons参数组合举例")
Ifa=6Then
UnloadForm1
Form2.Show
EndIf
Ifa=7Then
UnloadForm1
Form3.Show
EndIf
Ifa=2Then
End
EndIf
EndSub
2、MsgBox语句:
仅仅用于显示一些简单的信息而不需要返回值。
格式:
MsgBoxprompt[,buttons][,title][,helpfile,context]
参数含义:
同上
不用写小括号,没有返回值,可以单独作为一个语句来使用。
六、数据输出:
Print方法的缺省输出:
从窗体的第1行第1列开始输出。
1、Tab函数:
格式:
Tab(n),参数n是绝对列数值。
(1)Tab函数与表达式之间用分号分隔。
(2)如果当前行的打印位置大于n,则Tab将打印位置移动到下一行的第n列上。
(3)如果n小于1,则Tab将打印位置移动到该行的第1列。
(4)如果n大于输出行的宽度,则Tab函数用以下公式计算下一个打印位置:
nMod行宽。
2、Spc函数:
格式:
Spc(n),参数n是相对列数值。
(1)Spc函数与表达式之间用分号分隔。
(2)如果n小于输出行的宽度,则下一个打印位置将紧接在数个已打印的空白之后。
(3)如果n大于输出行的宽度,则Spc函数用以下公式计算下一个打印位置:
当前打印位置+(nMod行宽)。
3、Space函数:
格式:
Space(n),输出n个空格
注:
Spc函数与Space函数作用相同,但Space函数可以使用字符串运算符&和+。
总结:
输出行的控制:
Print后面不跟表达式,只输出一行空行。
输出列的控制:
用Tab、Spc或Space函数调整。
七、输出到打印机:
1、直接输出:
格式:
Printer.Print[表达式]
只能打印文本信息,不能打印图形图像信息。
(1)Page属性:
用来设置页码,默认缺省值为1。
(2)NewPage方法:
强制打印机跳到下一页打印。
(3)EndDoc方法:
用来结束文件的打印。
2、窗体输出:
格式:
[窗体.]PrintForm
既将信息输出到窗体,又将信息输出到打印机。
预览作用
(1)[窗体.]AutoRedraw=True
(2)可以打印窗体上的文本、任何可见的控件及图形信息。
附:
方法与函数的区别:
(1)方法可以单独作为语句使用,函数不可以。
(2)方法没有返回值,函数有返回值。
(3)方法的格式:
[对象.]方法[参数列表]
函数的调用格式:
函数名([参数列表])
(4)方法是隶属于某一个对象的,函数存在于VB自带的函数库。
第二节选择结构程序设计
特点:
根据指定的条件进行判断,根据判断的结果在两条分支或多条分支路径中选取其中的一条执行。
一、行If语句:
单行形式,双分支结构
格式1:
If条件Then语句组1
格式2:
If条件Then语句组1Else语句组2
语句组中的多个语句之间用冒号分隔。
二、块If语句:
多行形式,双分支结构
格式3:
If条件Then格式4:
If条件Then
语句组1语句组1
EndIfElse
语句组2
EndIf
1、Else必须单独一行。
2、If…EndIf必须成对出现。
行If语句中不需要EndIf。
3、最好采用缩进形式。
4、如果语句组1、语句组2中含有多条语句时,最好使用块If语句。
三、If语句的嵌套:
多分支结构
四、ElseIf语句:
多分支结构
格式:
If条件1Then
语句组1
ElseIf条件2Then
语句组2
……
ElseIf条件nThen
语句组n
Else
语句组n+1
EndIf
1、VB首先测试条件1,如果它为False,VB就测试条件2,依次类推,直到找到一个为True的条件。
此时,VB就会执行相应的语句组,然后执行EndIf后面的语句。
2、不能交叉嵌套,只能完全嵌套。
3、可以使用任意数量的ElseIf语句。
4、只有一个EndIf与If相对应。
例题4-5:
方法一:
Ifcj>=0Andcj<60Then
Print"不及格"
Else
Ifcj>=60Andcj<75Then
Print"及格"
Else
Ifcj>=75Andcj<90Then
Print"良好"
Else
Ifcj>=90Andcj<=100Then
Print"优秀"
EndIf
EndIf
EndIf
EndIf
方法二:
Ifcj>=90Andcj<=100Then
Print"优秀"
Else
Ifcj>=75Then
Print"良好"
Else
Ifcj>=60Then
Print"及格"
Else
Print"不及格"
EndIf
EndIf
EndIf
方法三:
Ifcj>=90Andcj<=100Then
Print"优秀"
ElseIfcj>=75Then
Print"良好"
ElseIfcj>=60Then
Print"及格"
Else
Print"不及格"
EndIf
方法四:
SelectCasecj
Case90To100
Print“优秀”
Case75To89
Print“良好”
Case60To74
Print“及格”
CaseElse
Print“不及格”
EndSelect
五、多条件选择语句SelectCase:
多分支结构
格式:
SelectCase测试表达式
Case表达式1
语句组1
Case表达式2
语句组2
……
Case表达式n
语句组n
[CaseElse
语句组n+1]
EndSelect
改进:
SelectCase测试表达式‘复合语句
Case表达式1:
语句组1
Case表达式2:
语句组2
……
Case表达式n:
语句组n
[CaseElse:
语句组n+1]
EndSelect
1、测试表达式只能是数值型或字符型。
2、测试表达式只计算一次,然后VB将表达式的值与结构中的每个Case的值进行比较,如果相等,就执行与该Case相关联的语句组。
3、如果不止一个Case与测试表达式相匹配,则只对第一个匹配的Case执行与之相关联的语句组。
4、表达式n的可能形式:
(1)表达式1[,表达式2][,表达式3]……无大小顺序。
(2)表达式1To表达式2包括表达式1和表达式2在内。
(3)Is<关系运算符><表达式>
只能是简单的条件,不能用逻辑运算符将两个或多个条件组合在一起。
以上三种形式可以混合使用。
六、条件判断函数IIf:
双分支结构
格式:
IIf(条件,表达式1,表达式2)
1、当条件为真时,函数返回值是表达式1的值;当条件为假时,函数返回值是表达式2的值。
例:
PrintIIf(cj>=60,“通过”,“不通过”)
2、IIf函数可以嵌套使用。
例:
PrintIIf(a<0,-1,IIf(a=0,0,1))
总结:
1、行If语句:
双分支结构
2、块If语句:
双分支结构
3、If语句的嵌套:
多分支结构
4、ElseIf语句:
多分支结构
5、多条件选择语句SelectCase:
多分支结构
6、条件判断函数IIf:
双分支结构
第三节循环结构程序设计
1、特点:
根据给定条件是否满足决定是否继续执行循环体中的操作。
注:
避免出现“死循环”。
当程序运行了“死循环”的结构,必须按Ctrl+Break中断。
2、三种循环结构:
(1)For…Next
(2)While…Wend(3)Do…Loop
3、循环方式:
(1)计数法
(2)标志法
一、For循环结构:
格式:
For循环变量=初值To终值[Step步长]
循环体
Next[循环变量]
1、缺省步长时,默认是1。
步长可以为正值或为负值。
2、先判断条件,后执行循环体。
注:
若循环体执行n次,则条件将被判断n+1次。
3、ExitFor语句的作用:
提前退出循环体,结束循环结构。
4、空循环的作用:
延时。
5、For循环一般用在已知循环次数的情况。
6、多重循环:
不能交叉嵌套,只能完全嵌套。
各层次的循环变量名不能相同。
7、多重循环可以共用一个Next语句,但此时循环变量名不能省略,并且先内循环变量,后外循环变量。
例:
Fori=1To10
Forj=1To15
Fork=1To20
循环体
Nextk
Nextj
Nexti
二、当型循环While…Wend结构:
格式:
While条件
循环体
Wend
1、先判断条件,后执行循环体。
注:
若循环体执行n次,则条件将被判断n+1次。
2、循环体内一定要有改变条件的语句,否则就会导致“死循环”。
3、多重循环:
不能交叉嵌套,只能完全嵌套。
例题4-11:
求两个数的最大公约数。
(1)该程序算法:
(2)PrivateSubText1_KeyPress(KeyAsciiAsInteger)
IfKeyAscii=13ThenText2.SetFocus
EndSub
注:
CommandButton的Default属性默认是False,该属性设置为True时,说明该按钮是缺省按钮,按回车键就相当于单击了该按钮。
两者不能相互冲突。
三、Do…Loop循环结构:
先判断后执行
先执行后判断
当
型
循
环
DoWhile条件
循环体
Loop
与While…Wend结构相同
Do
循环体
LoopWhile条件
直
到
型
循
环
DoUntill条件
循环体
Loop
Do
循环体
LoopUntill条件
1、既可以是当型循环,也可以是直到型循环。
2、While与Untill后面的“条件”总是相反的。
3、既可以先判断后执行:
若循环体执行n次,则条件将被判断n+1次。
也可以先执行后判断:
若循环体执行n次,则条件将被判断n次。
4、ExitDo语句的作用:
提前退出循环体,结束循环结构。
总结:
提前退出循环体的方法:
(1)For…Next:
用ExitFor语句
(2)While…Wend
(3)Do…Loop:
用ExitDo语句
Page79:
i=1
DoWhilei<=99
s=s+i
Ifs>2000Then
ExitDo
EndIf
i=i+2
Loop
例题4-10:
方法一:
用For循环结构
Fori=1To9
Forj=1Toi
PrintTab(j*8);j&"×"&i&"="&j*i;
Nextj
Print
Nexti
方法二:
用While…Wend循环结构
i=1
Whilei<=9
j=1
Whilej<=i
PrintTab(j*8);j&"×"&i&"="&j*i;
j=j+1
Wend
Print
i=i+1
Wend
方法三:
用Do…Loop循环结构
i=1
DoWhilei<=9
j=1
DoWhilej<=i
PrintTab(j*8);j&"×"&i&"="&j*i;
j=j+1
Loop
Print
i=i+1
Loop
例题4-5:
DimcjAsInteger
cj=InputBox(“请输入学生的成绩:
0~100分:
”)
DoWhileTrue
Ifcj>=0Andcj<=100Then
ExitDo
Else
MsgBox“必须输入0~100分之间的整数!
”
cj=InputBox(“请输入学生的成绩:
0~100分:
”)
EndIf
Loop
例题4-13:
方法一:
用While…Wend循环结构
f=0
i=2
Whilei<=n-1Andf=0
IfnModi=0Then
f=1
Else
i=i+1
EndIf
Wend
方法二:
用For循环结构
f=0
Fori=2Ton-1
IfnModi=0Then
f=1
ExitFor
EndIf
Nexti
方法三:
用Do…Loop循环结构
f=0
i=2
DoWhilei<=n-1
IfnModi=0Then
f=1
ExitDo
EndIf
i=i+1
Loop
总结:
1、For循环结构:
计数法。
2、While循环结构:
计数法、标志法,可以实现多条件判断。
3、Do…Loop循环结构:
计数法、标志法,可以实现多条件判断。
第四节其他辅助语句
一、Goto语句:
功能:
无条件地转向执行语句标号或行号的语句。
1、格式1:
Goto语句标号
语句标号后面必须加一个冒号。
2、格式2:
Goto行号
行号后面不能加冒号。
二、On-Goto语句:
缺点:
BS现象
辅助教学情况:
多媒体课件、VisualBasic6.0
复习思考题、作业题
思考当窗体的名称改为form1时,该窗体的对象名是什么。
教材习题一1、2、3、4、5
参考教材或资料:
《VisualBasic程序设计教程》,刘炳文许蔓舒编著,清华大学出版