第8节 选择结构
知识点
目标
考试要求
算法的程序实现
①赋值语句、选择语句
②解析算法
c
必考+加试
1.选择语句是根据不同的判断结果,选择执行不同的语句。
2.选择语句条件表达式结果的数据类型是逻辑型,值只有True和False两个。
3.行IF语句必须在一行内写完,最后没有End If。
4.块IF语句的ElseIF语句部分和Else语句部分是可选的。
5.多选择结构ElseIF语句中,依次从上往下执行条件表达式,如果条件成立,就退出选择结构。
6.单分支结构语句:If 条件表达式 Then 语句块1
7.双分支结构语句:If 条件表达式 Then 语句块1 Else语句块2
8.多分支结构语句:
If 条件表达式1 Then
语句块1
ElseIf 条件表达式2 Then
语句块2
…………………
ElseIf 条件表达式n Then
语句块n
Else
语句块0
End If
一个程序不论有多复杂,都是由顺序、选择和循环三种基本结构组成,整个程序可以看成一个大的顺序结构,其中的选择结构和循环结构可以简化为其中一条语句,而循环结构中可以包含选择结构,因此理解选择结构是理解整个程序的开始,是解程序填空和程序改错的开始。本章内容试着来罗列各种可能碰到的选择结构,以帮助我们来理解这些语句的功能。
一、判断是否符合条件
在程序设计中,往往要找出符合某个条件的值,如查找某个数、验证码是否正确等,此时要用到选择结构,同时输出结论。
【例1】 对于正整数n,若是它平方数的尾部,则称n为同构数,判断一个两位数n是否是同构数的语句,请把下列语句补充完整。
If ________________Then
Text1.Text=”是同构数”
Else
Text1.Text=”不是同构数”
End If
解析 本题考核的知识点选择结构的条件和Int函数的应用。选择结构要关注他的条件,n是它平方数的尾部,n平方数的后两位数为n*n mod 100。
答案 n*n mod 100=n
[方法总结] 在解此类题目时,要紧紧抓住题目中描述的条件,并找到与条件相关的变量。
【变式训练】 判断当前计算得到验证码变量yzm(整型)与商品识别条码s(文本型)第13位是否相等语句,请把下列语句补充完整。
If ________________Then
Text1.Text=”验证通过”
Else
Text1.Text=”验证不通过”
End If
解析 本题考核的知识点是选择结构的条件和Mid函数的应用。条件为计算结果与最后一位字符相同。但要注意类型的匹配,前者是数字,后者是数字。
答案 yzm=Val(Mid(s,13,1))
二、判断数x是否能整除数y
在求是否是素数,或者是质因子分解问题时,经常要判断两者是否能整除。
【例2】 输入一个身份证号码s(文本型),如果他的第17位是奇数,表示该公民的性别为男性,否则为女性,请把下列语句补充完整。
If ________________Then
Text1.Text=”男性”
Else
Text1.Text=”女性”
End If
解析 本题考核的知识点是选择结构的条件和Mid函数的应用。取出身份证号码s的第17位的表达式为Mid(s,17,1),但该表达式的值为文本,不能用于算术运算。判断是否是奇数的条件是除以2后的余数是否为0。
答案 Val(Mid(s,17,1)) Mod 2<>0
[方法总结] 理解条件的含义是理解选择结构的题眼。前提还要会表示各种关系。
【变式训练】 若某个在2至(n-1)之间数i能被数n整除,则判定是否是素数的标志变量flag(逻辑型)为假,请把下列语句补充完整。
If __________ Then ________
解析 本题考核的知识点是选择结构的条件和Mid函数的应用。条件是被n整除,那么n 是被除数。
答案 n Mod i=0 flag=False
三、判断条件的合理性
在文本框输入某个数值时,必须要符合题目的要求,如身份证号码的长度,二进制中的数字是否只有0和1,判断输入的数是否是整数等等。
【例3】 输出某个温度范围内(从低温t1到高温t2)气体的密度变化情况,在文本框Text1输入温度t1,在文本框Text2输入温度t2,要保证温度t1低于温度t2,把下列语句补充完整。
If__________________Then t=t1:t1=t2:t2=t
解析 本题考核的知识点是选择结构的条件和交换语句的应用。从三条语句t=t1:t1=t2:t2=t来看,是要交换t1和t2的值,根据题目的要求,从低温t1到高温t2,因此若t1 比 t2大时,需要交换两者。
答案 t1>t2
[方法总结] 为了保证程序的可靠性和真实性,通常在程序开始部分要进行判断输入数值的有效性。关键还是有效性的条件。
【变式训练】 在文本框Text1中输入密码送给变量psd,若密码的长度小于6位,需重新输入密码并退出程序,否则进行密码强度检测等操作。请把下列语句补充完整。
If ________________Then
Text1.Text=""
End Sub
Else
′其他代码略
End If
解析 本题考核的知识点是选择结构的条件和Len函数的应用。条件是长度小于6。
答案 Len(psd)<6
1.判断一个三位数i是否是水仙花数的条件是:他的各个位数字a、b、c的立方和与他本身是否相等,若相等为水仙花数,请把下列语句补充完整。
If ________________ Then
Text1.Text=”是水仙花数”
Else
Text1.Text=”不是水仙花数”
End If
解析 本题考核的知识点是选择结构的条件和表达式的应用。条件是各个数字的立方和与他本身相等,那么各个数字的立方和又该如何表达。
答案 a^3+b^3+c^3=i
2.某单位用户系统登录界面中,正确的用户名和密码分别是“admin”、“Zjcx2018”,在文本框Text1中输入用户名user,文本框Text2中输入密码psd,根据输入情况,在标签Label1中输出相应信息,请把下列语句补充完整。
If ____①____Then
Label1.Caption=”用户名不正确”
____②____Then
Label1.Caption=”密码不正确”
____③____
Label1.Caption=”欢迎登录!”
End If
若用户名和密码均不正确,系统的提示信息是____④____
划线处代码为:①__________________________________________________
②________________________________________________________________
③________________________________________________________________
④________________________________________________________________
解析 本题考核的知识点是多分支选择结构的条件和语法。要特别注意条件与对应的语句。多分支结构中,从上往下匹配条件,如果有一个条件匹配到了,就退出选择结构。
答案 ①user<>”admin” ②ElseIf psd<>”Zjcx2018” ③Else 用户名不正确
3.若三条线段的长度分别为a、b、c,判断他们是否能构成三角形(任意两边之和大于第三边)的程序段如下,请把下列语句补充完整。
If _________________________ Then
Text1.Text=”能构成三角形”
Else
Text1.Text=”不是构成三角形”
End If
解析 本题考核的知识点是选择结构的条件和多条件表达式的表示方法。任意两边有几种可能性,他们之间是且还是或的关系。
答案 a+b>c And a+c>b And b+c>a
4.检测密码强度时,需判断他包含字符种类情况,判断当前字符ch是否是大写字母并记录是否含有大写字母的语句如下,请把下列语句补充完整。
If __________________ Then dx=1
语句dx=1与 dx=dx+1的区别是:dx=1表示只要其中一次符合条件,dx的值就为1,相当于他的标志为真,而dx=dx+1的功能是计算符合条件的个数。
解析 本题考核的知识点是选择结构的条件和多条件表达式的表示方法。条件是大写字母,在字母A与Z之间。
答案 ch>=”A” And ch<=”Z”
5.输入三个数a、b、c,经过某些操作,要求把这三个数按从大到小的顺序依次放在变量a、b、c中,请完善下列程序段
If ____①____Then t=a:a=b:b=t
If ____②____Then t=a:a=c:c=t
If ____③____Then t=b:b=c:c=t
划线处代码为:①________________________________________________
②______________________________________________________________
③______________________________________________________________
解析 从执行语句来看,是两个变量的交换,把握交换的条件。
答案 ①a6.用计算机程序模拟扔1000次硬币的过程,用0和1分别表示硬币的正反两个面,用变量a表示0的个数,用变量b表示1的个数。某次扔硬币的点数(用Rnd函数产生一个0或1的数),并统计个数的语句如下所示,请把下列语句补充完整。
If ____①____ Then
a=a+1
Else
____②____
End If
划线处代码为:①__________________________________________________
②________________________________________________________________
解析 理解变量的含义及把握选择的条件。
答案 ①Int(Rnd()*2)=0或Int(Rnd()+0.5)=0 ②b=b+1
7.在文本框Text1、Text2和Text3分别输入年月日yy、mm和dd,判定输入的20世纪(1900-1999年)日期是否符合实际。最后在标签Label1中输出该日期是否符合实际,请完善下列程序段。
flag=True
If yy<1990 Or yy>1999 Then
flag=False
ElseIf ____①____Then
′月份mm在1-12之间
flag=False
End If
′以下程序段判断2月份的天数是否符合要求
If mm=2 And flag=True Then
If yy Mod 400=0 Or (yy Mod 100<>0 And yy Mod 4=0) Then ′闰年
If ____②____Then flag=False
End If
′以下程序段判断非2月份的天数是否符合要求
If mm<>2 And flag=True Then
If mm=1 Or mm=3 Or mm=5 Or mm=7 Or mm=8 Or mm=10 Or mm=12 Then
If ____③____
Then flag=False
Else
If dd>30 Then flag=False
End If
End If
If ____④____Then Label1.Caption=”相符” Else Label1.Caption=”不符”
划线处代码为:①__________________________________________________
②________________________________________________________________
③________________________________________________________________
④________________________________________________________________
解析 要找到月份不正确的条件,最多天数不正确的条件,判断是否相符的条件。
答案 ①mm<1 Or mm>12 ②dd>29 ③dd>31 ④flag=True
8.设计一个程序,根据输入的劳务报酬收入计算劳务报酬所得税。解决此问题的流程图如图所示。
若要测试所有分支程序代码是否正确,下列测试数据中最恰当的一组是( )
A.500,830,4200 B.500,800,4000
C.0,800,1000 D.400,900,1200
答案 A
9.COD(化学需氧量)是衡量水质污染程度的重要指标之一,污水处理时根据污水的COD指标来计算COD去除剂的投放量。当COD指标x小于50时,剂量为10,指标大于等于50且小于等于500时,剂量为1.2X/5,指标超过500时,剂量为1.5X/4。在文本框Text1中输入COD指标,单击“计算”按钮Command1后,在文本框Text2中输出计算结果。程序运行界面如图所示:
为实现上述功能,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim x As Single,s As Single
____①____
If x<50 Then
s=10
ElseIf x<=500 Then
____②____
Else
____③____
End If
Text2.Text=Str(s)
End Sub
划线处代码①_____________________________________________________
划线处代码②_____________________________________________________
划线处代码③______________________________________________________
答案 ①x=Val(Text1.Text) ②s=1.2*x/5 ③s=x/4*1.5
10.《浙江省电网销售电价表》中规定,不满1千伏“一户一表”居民用电价格,按以下标准计算:月用电量在50千瓦时及以下部分,每千瓦时以0.538元计算;51~200千瓦时部分,则每千瓦时按0.568元计算;200千瓦时以上部分,每千瓦时按0.638元计算。在文本框Text1输入用电量,在文本框Text2中输出相应的电费。程序运行的界面如图所示:
为实现上述功能,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim x As Integer
____①____
If x<0 Then
Text2.Text=”用电量不能是负的!”
ElseIf x<=50 Then
Text2.Text=Str(0.538*x)
____②____ Then
Text2.Text=Str(0.568*(x-50)+0.538*50)
Else
Text2.Text=Str(0.638*(x-200)+0.568*150+0.538*50)
End If
End Sub
划线处代码①_____________________________________________________
划线处代码②_____________________________________________________
答案 ①x=Val(Text1.Text) ②ElseIf x<=200
1.能表示“如果a,b同时大于等于0,那么x←2y”的VB语句是_________。
解析 注意两个条件的逻辑连接,注意大于等于符号的表达及2y的表达。
答案 If a>=0 And b>=0 Then x=2*y
2.该数是某个数的平方,称为完全平方数。求数x是否是完全平方数的语句如下,请补充完整。
If ____________________ Then
Text1.Text=”完全平方数”
Else
Text1.Text=”不是完全平方数”
End If
解析 条件是该数是某个数的平方,那么该数的平方根是整数。
答案 Int(Sqr(x))=Sqr(x)
3.一个四位数等于它每一位数的4次方之和,则称为玫瑰花数。若某个数n的各个位上的数字分别是a、b、c、d,请完善下列程序段。
If ________________ Then
Text1.Text=”是玫瑰花数”
Else
Text1.Text=”不是玫瑰花数”
End If
解析 理解选择结构的条件。
答案 a^4+b^4+c^4+d^4=n
4.在文本框Text1中输入电子邮箱的名称s,查找“@”符号所在位置,查找到第i个字符ch(ch=Mid(s,i,1)),如果是“@”符号,用变量p记录“@”符号的位置。请把下列语句补充完整。
If ________ Then ________
解析 条件是当前字符ch与“@”符号比较,注意加引号,i表示当前位置。
答案 ch=”@” p=i
5.杭州机动车限行规定中,对本地和外地牌照车限行有不同的规定,在文本框Text1输入汽车牌照s,若以“浙A”开头,是否为本地牌照的标志变量flag为True,否则为False。请把下列语句补充完整。
If ________ Then ________
解析 条件是开头两个字符是否是”浙A”。
答案 Mid(s,1,2)=”浙A” flag=True
6.星期一那天,杭州本地牌照尾号为1和9的汽车是限行的,在汽车牌照本中取得最后一个数字ch(文本型),判断该车是否限行,请把下列语句补充完整。
If ________________ Then
p=”限行”
Else
p=”不限行”
End If
解析 两个条件满足一个,注意数据类型。
答案 ch=”1” Or ch=”9”或Val(ch)=1 Or Val(ch)=9
7.在文本框Text1、Text2、Text3中分别输入一元二次方程系数a、b、c,单击按钮Command1,在Label1中输出方程根的情况。请把下列语句补充完整。
d=b*b-4*a*c
If ____①____Then
Label1.Caption=”a不能为零,不是一元二次方程”
Else
If ____②____Then
Label1.Caption=”方程没有根”
Else
X1=(-b+Sqr(d))/(2*a)
X2=(-b-Sqr(d))/(2*a)
End If
End If
划线处代码为①___________________________________________________
②_______________________________________________________________
解析 执行语句中已经提示“a不能为零”和“方程没有根”。
答案 ①a=0 ②d<0
8.在文本框Text1中输入一个[200,500]之间的整数x,对这个整数进行一系列操作,若不在这个范围,则列表框List1中输出“输入数据有误”的提示,并清除文本框Text1中数字。请把下列语句补充完整。
If __________________ Then
′以下操作略
Else
List1.AddItem ”输入有误!”
Text1.Text=””
End If
解析 注意条件表达式的写法。
答案 x>=200 And x<=500
9.在文本框Text1中输入一个字符串s,判断当前第i个字符ch属于大写字母(dxzm)、小写字母(xxzm)、阿拉伯数字(sz)和其他字符(qt)其中的一种,并统计个数。请把下列语句补充完整。
ch=Mid(s,i,1)
If ch>=”A” And ch<=”Z” Then
dxzm=dxzm+1
____①____ Then
xxzm=xxzm+1
____②____ Then
sz=sz+1
Else
qt=____③____
End If
划线处代码①_____________________________________________________
②________________________________________________________________
③________________________________________________________________
解析 要注意多分支选择的写法,同时要写出小写字母和数字的条件。
答案 ①ElseIf ch>=”a” And ch<=”z”
②ElseIf ch>=”0” And ch<=”9” ③qt+1
10.用计算机模拟一个猜价格游戏,随机产生一个[20,60]之间的整数x,在文本框Text1中输入价格,单击“确定”按钮Command1,若猜中了,提示“猜中了”,所猜价格与x的距离在5元之内,提示“接近了”,高于5元,提示“太高了”,低于5元,提示“太低了”。程序运行界面如下图所示:
程序代码如下所示,请补充完整。
Dim x As Integer
Private Sub Form_Load()
x=____①____
End Sub
Private Sub Command1_Click()
Dim jg As Integer
jg=Val(Text1.Text)
If jg=x Then
Label4.Caption=”猜中了”
____②____Then
Label4.Caption=”接近了”
____③____Then
Label4.Caption=”太高了”
Else
Label4.Caption=”太低了”
End If
End Sub
划线处代码为①___________________________________________________
②_______________________________________________________________
③_______________________________________________________________
解析 写出一个在[20,60]之间的整数x的表达式,差价在5元内有两种表示方法。同时要注意多分支选择结构的书写。
答案 ①Int(Rnd()*41+20) ②ElseIf Abs(jg-x)<=5或jg-x>=-5 And jg-x<=5 ③ElseIf jg-x>5
11.模拟一个简单计算器,输入两个数和一个运算符(加、减、乘、除),进行算术运算,并输出运算结果。在文本框Text1中输入第一个数,在文本框Text2中输入第二个数,在文本框Text3中输入运算符,在文本框Text4中输出运算结果。当输入的运算符不是加、减、乘、除四种运算符时,则输出“运算符不正确”;当进行除法运算时,如果除数为0,提示输出“除数不能为零”。程序运行界面如图所示:
为实现上述功能,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim a As Single,b As Single,ch As String
a=Val(Text1.Text)
b=Val(Text2.Text)
____①____
If ch=”+”Then
Text4.Text=Str(a+b)
ElseIf ch=”*” Then
Text4.Text=Str(a*b)
ElseIf ch=”-” Then
Text4.Text=Str(a–b)
ElseIf ch=”/” Then
If____②____ Then Text4.Text=Str(a/b) Else Text4.Text=”除数不能是零”
Else
Text4.Text=”运算符不正确”
End If
End Sub
划线处代码为①____________________________________________________
②________________________________________________________________
答案 ①ch=Text3.Text ②b<>0或0<>b或Not(b=0)
12.某市出租车计费标准规定:出租车启动后行程不超过3千米(包含3千米)计费5元;如果行程超过3千米且不超过10千米(包含10千米),则超过3千米部分按1.5元/千米计费(3千米及以内部分计费仍为5元);若行程超过10千米,则在前面计费基础上,超出10千米部分按1.8元/千米计费。在文本框Text1中输入行驶里程数(单位:千米),单击“计算”按钮Command1后,在文本框Text2输出计费结果。程序运行界面如图所示:
为实现上述功能,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim x As Single,s As Single
x=Val(Text1.Text)
If x<=3 Then
s=5
____①____
s=5+(x-3)*1.5
Else
s=5+(10-3)*1.5+(x-10)*1.8
End If
____②____=Str(s)
End Sub
划线处代码为①___________________________________________________
②_______________________________________________________________
答案 ①ElseIf x<=10 Then ②Text2.Text
课件15张PPT。第8节 选择结构1.选择语句是根据不同的判断结果,选择执行不同的语句。
2.选择语句条件表达式结果的数据类型是_______,值只有_____和______两个。
3.行IF语句必须在_______写完,最后没有End If。
4.块IF语句的ElseIF语句部分和Else语句部分是_____的。
5.多选择结构ElseIF语句中,依次从___往___执行条件表达式,如果条件成立,就退出选择结构。
6.单分支结构语句:If ____________ Then 语句块1
7.双分支结构语句:If 条件表达式 Then 语句块1 _____语句块2逻辑型TrueFalse一行内可选上下条件表达式Else8.多分支结构语句:If 条件表达式1 Then
语句块1
___________________ Then
语句块2
…………………
ElseIf 条件表达式n Then
语句块n
Else
语句块0
End IfElseIf 条件表达式2 一个程序不论有多复杂,都是由顺序、选择和循环三种基本结构组成,整个程序可以看成一个大的顺序结构,其中的选择结构和循环结构可以简化为其中一条语句,而循环结构中可以包含选择结构,因此理解选择结构是理解整个程序的开始,是解程序填空和程序改错的开始。本章内容试着来罗列各种可能碰到的选择结构,以帮助我们来理解这些语句的功能。
一、判断是否符合条件
在程序设计中,往往要找出符合某个条件的值,如查找某个数、验证码是否正确等,此时要用到选择结构,同时输出结论。【例1】 对于正整数n,若是它平方数的尾部,则称n为同构数,判断一个两位数n是否是同构数的语句,请把下列语句补充完整。If ________________Then
Text1.Text=”是同构数”
Else
Text1.Text=”不是同构数”
End If解析 本题考核的知识点选择结构的条件和Int函数的应用。选择结构要关注他的条件,n是它平方数的尾部,n平方数的后两位数为n*n mod 100。
答案 n*n mod 100=n
[方法总结] 在解此类题目时,要紧紧抓住题目中描述的条件,并找到与条件相关的变量。【变式训练】 判断当前计算得到验证码变量yzm(整型)与商品识别条码s(文本型)第13位是否相等语句,请把下列语句补充完整。If ________________Then
Text1.Text=”验证通过”
Else
Text1.Text=”验证不通过”
End If解析 本题考核的知识点是选择结构的条件和Mid函数的应用。条件为计算结果与最后一位字符相同。但要注意类型的匹配,前者是数字,后者是数字。
答案 yzm=Val(Mid(s,13,1))二、判断数x是否能整除数y
在求是否是素数,或者是质因子分解问题时,经常要判断两者是否能整除。
【例2】 输入一个身份证号码s(文本型),如果他的第17位是奇数,表示该公民的性别为男性,否则为女性,请把下列语句补充完整。If ________________Then
Text1.Text=”男性”
Else
Text1.Text=”女性”
End If解析 本题考核的知识点是选择结构的条件和Mid函数的应用。取出身份证号码s的第17位的表达式为Mid(s,17,1),但该表达式的值为文本,不能用于算术运算。判断是否是奇数的条件是除以2后的余数是否为0。
答案 Val(Mid(s,17,1)) Mod 2<>0
[方法总结] 理解条件的含义是理解选择结构的题眼。前提还要会表示各种关系。【变式训练】 若某个在2至(n-1)之间数i能被数n整除,则判定是否是素数的标志变量flag(逻辑型)为假,请把下列语句补充完整。
If __________ Then ________
解析 本题考核的知识点是选择结构的条件和Mid函数的应用。条件是被n整除,那么n 是被除数。
答案 n Mod i=0 flag=False三、判断条件的合理性
在文本框输入某个数值时,必须要符合题目的要求,如身份证号码的长度,二进制中的数字是否只有0和1,判断输入的数是否是整数等等。【例3】 输出某个温度范围内(从低温t1到高温t2)气体的密度变化情况,在文本框Text1输入温度t1,在文本框Text2输入温度t2,要保证温度t1低于温度t2,把下列语句补充完整。
If__________________Then t=t1:t1=t2:t2=t
解析 本题考核的知识点是选择结构的条件和交换语句的应用。从三条语句t=t1:t1=t2:t2=t来看,是要交换t1和t2的值,根据题目的要求,从低温t1到高温t2,因此若t1 比 t2大时,需要交换两者。
答案 t1>t2[方法总结] 为了保证程序的可靠性和真实性,通常在程序开始部分要进行判断输入数值的有效性。关键还是有效性的条件。【变式训练】 在文本框Text1中输入密码送给变量psd,若密码的长度小于6位,需重新输入密码并退出程序,否则进行密码强度检测等操作。请把下列语句补充完整。If ________________Then
Text1.Text=""
End Sub
Else
′其他代码略
End If解析 本题考核的知识点是选择结构的条件和Len函数的应用。条件是长度小于6。
答案 Len(psd)<6