学业水平测试信息技术第二部分 专题三.docx
《学业水平测试信息技术第二部分 专题三.docx》由会员分享,可在线阅读,更多相关《学业水平测试信息技术第二部分 专题三.docx(27页珍藏版)》请在冰点文库上搜索。
学业水平测试信息技术第二部分专题三
专题三 解析算法、枚举算法及程序实现
【考纲标准】
考试内容
考试要求
考试属性
选考规律
1.枚举算法及程序实现
c
必考+加试
每次选考1个非选择题
2.解析算法及程序实现
c
1.(2018·6浙江学考)素数只能被1和它本身整除,不能被其他自然数整除。
编写VB程序实现如下功能:
单击“产生奇数并判断”按钮Command1,随机产生一个三位正奇数显示在文本框Text1中,并在文本框Text2中显示其是否为素数的判断结果。
例如,当随机产生的三位正奇数为953时,程序运行界面如图a所示。
(1)在设计程序界面时,应使用图b所示“控件工具箱”中的________(填写相应编号)添加文本框Text1。
(2)实现上述功能的VB程序如下,请在划线处填写合适的代码。
PrivateSubCommand1_Click()
DimnAsInteger,iAsInteger
DimflagAsBoolean ′用于标记是否为素数
Randomize
n=Int(____①____)*2+1
Text1.Text=Str(n)
flag=True ′标记为素数
i=3
DoWhilei<=n-1Andflag=True
If nModi=0 Then
flag=False
EndIf
i=i+2
Loop
If____②____Then
Text2.Text=Str(n)+″是素数″
Else
Text2.Text=Str(n)+″不是素数″
EndIf
EndSub
(3)以下选项中,与加框处表达式“nModi=0”等价的是________(单选,填字母)。
A.n\'i=Int(n/i) B.n\'i=n/i
C.nModi=n\'i
解析
(1)掌握常见的控件。
(2)三位正奇数的范围在[100,999]之间,等效于[0,899]+100,等效于([0,449]+50)*2。
先仔细阅读题目要求,再整体通览程序,分析各模块程序功能,n表示产生的随机数,同时也肯定是奇数。
用[3,n-1]之间的数去除,如果除通了,flag的值为False,flag用于标记是否为素数,值为True时为素数。
(3)整除即除以后是整数。
答案
(1)2
(2)①Rnd()*450+50 ②flag=True (3)B
2.(2018·11浙江选考)在平面坐标系中,给定一组有序的点。
从原点出发,依次用线段连接这些点,构成一条折线。
要求编写一个“计算折线长度”的程序,功能如下:
在文本框Text1中依次输入这些点的坐标值(数据都用逗号分隔并以逗号结尾),单击“计算”按钮Cmd后,程序计算这条折线的长度,结果显示在Label1中。
例如,三个点的坐标(5,10)、(8,12)、(6,17)输入格式如图所示。
(1)Cmd对象属于________类。
(单选,填字母:
A.Form/B.Label/C.TextBox/D.CommandButton)
(2)实现上述功能的VB程序如下,请在划线处填入合适代码。
PrivateSubCmd_Click()
DimiAsInteger,jAsInteger,kAsInteger
Dimx1AsSingle,y1AsSingle,x2AsSingle,y2AsSingle
DimdAsSingle,TotaldAsSingle,vAsSingle,sAsString
s=____①____
x1=0∶y1=0 ′出发点为坐标原点
k=1∶j=1∶Totald=0
Fori=1ToLen(s)
IfMid(s,i,1)=”,”Then
v=Val(Mid(s,j,i-j)) ′提取坐标值,保存在变量v中
j=i+1
If____②____Then
x2=v
Else
y2=v
d=Sqr((x2-x1)^2+(y2-y1)^2)
Totald=Totald+d
x1=x2∶y1=y2
EndIf
k=k+1
EndIf
Nexti
Label1.Caption=Str(Totald)
EndSub
(3)运行该程序,输入数据如上图所示,程序执行到循环结束时,变量k的值为________。
答案
(1)D
(2)①Text1.Text ②kMod2=1
(3)7
枚举法的基本思想是一一列举出该问题所有可能的解,并挑选出符合条件的解。
在列举的过程中,既不能遗漏也不能重复。
【例】鸡和兔在一个笼里,共有腿100条,头40个,问鸡有几只,兔有几只?
以下求解程序,请在划线处填写恰当的数值。
PrivateSubCommand1_Click()
DimJiAsInteger ′鸡
DimTuAsInteger ′兔
DimLeg AsInteger′腿数
DimHead AsInteger′头数
ForJi=1To____①____
ForTu=1To____②____
Leg=Ji*2+Tu*4 ′计算腿
Head=Ji+Tu ′计算头
IfLeg=100AndHead=40Then
List1.Aditem ″鸡=″+Str(Ji)+″只,兔=″+Str(Tu)+″只″
EndIf
NextTu
NextJi
EndSub
解析 此程序为枚举算法,枚举算法(又称“穷举法”)的基本思想是根据问题的本身性质,一一列举出该问题所有可能的情况,并根据题目的条件逐个作出判断,从中挑选出符合条件的解答。
枚举算法适用于那些解变量确定的连续值域的问题。
枚举算法要列举出所有可能的情况,不能遗漏,也不能重复。
通常采用循环来处理穷举问题。
本题将鸡和兔所有可能的组合测试一遍,鸡最多50只,外循环是鸡依次从1到50循环;兔最多25只,内循环是兔依次从1到25循环。
答案 ①50 ②25
考点1 解析算法
【训练1】在文本框Text1中输入一个正整数N,单击“计算”按钮Command1,输出该数的各个位数之和s。
程序运行的界面如下图所示:
为实现上述功能,请在划线处填入合适的代码。
PrivateSubCommand2_Click()
DimnAsSingle,iAsInteger,tAsInteger,sAsInteger
n=Val(Text1.Text)
Do Whilen<>0
t=____①____
s=____②____
List1.AddItem″个位数″+Str(t)+″,N值″+Str(n)+″,S的值″+Str(s)
____③____
Loop
Text2.Text=Str(s)
EndSub
解析 n是输入的数,t是n的个位数,s是各个个位数相加的和。
把数n的个数求出来,把n的个位数去除后,重复执行,直到n为0,再把各个个位数相加。
答案 ①nMod10 ②s+t ③n=n\10
【训练2】查找ASCII码值最小的字符。
程序功能如下:
在文本框Text1中输入一个字符串,单击命令按钮Command1,在文本框Text2中输出该字符串中ASCII码值最小的字符,运行界面如图所示。
解决该问题的VB程序如下:
PrivateSubCommand1_Click()
Dimstr1AsString ′存储输入的字符串
DimnAsInteger ′存储输入字符串的长度
DimiAsInteger,jAsInteger
str1=____①____
n=Len(str1)
s=____②____
Fori=2Ton
IfMid(str1,i,1)<sThens=Mid(str1,i,1)
Nexti
Text2.Text=s
EndSub
(1)将命令按钮Command1中显示的文本“Command1”修改为“查找”,可在其属性窗口中将________属性的属性值改为“查找”。
(2)为实现上述功能,请在划线处填入合适的代码。
程序中划线处①应填入________________,程序中划线处②应填入________________。
(3)如图所示,在文本框Text2中输出的字符“M”是输入字符串中的第________个“M”。
解析
(1)修改按钮上显示的文本应修改其Caption属性。
(2)变量str1用于存储文本框Text1中输入字符串的内容,所以str1=text1.text。
变量s用于存储字符串中的ASC码值较小字符,初值为字符串中的第一个字符,所以初值s=left(str1,1)或s=mid(str1,1,1)。
(3)因为在if语句比较过程中,ifmid(str1,i,1)<sthens=mid(str1,i,1),只有小于s才重新赋值;第二个M值时,mid(str1,i,1)等于s,s不再重新赋值,仍然是第一个M的值。
答案
(1)caption
(2)①text1.text ②s=left(str1,1)或s=mid(strl,1,1) (3)1
【训练3】小林想用VB实现以下功能:
输入一个十进制正整数(10000以内),输出其二进制形式。
效果图如图1所示,完成以下填空。
图1
PrivateSubCommand1_Click()
DimaAsLong
DimbAsString
DimcAsString
a=Val(Text1.Text)
b=″ ″
DoWhilea>0
c=Str(aMod2)
____①______
a=____②____
Loop
Text2.Text=b
EndSub
(1)完善代码,划线①部分应填入________________,划线②部分应填入________________。
(2)小林为了使得代码功能更强大,希望修改代码,添加一个文本框输入整数k(范围在2到9之间),使得程序能实现十进制到k进制的转化。
得到的界面和代码如图2所示:
图2
PrivateSubCommand1_Click()
DimaAsLong
DimbAsString
DimcAsString
DimkAsLong
a=Val(Text1.Text)
k=Val(Text3.Text)
b=″ ″
DoWhilea>0
c=Str(____③____)
b=c+b
a=____④____
Loop
Text2.Text=b
EndSub
其中划线③部分应填入______________,划线④部分应填入_________________。
解析 十进制转二进制采用除2取余法。
①处需要将每次取余运算得到的结果c连接到需要得到的二进制数串b上,即b=c+b。
需注意“除2取余法”结果是余数后得到的需排在前面,所以b=b+c错误,b=c+b才正确。
②处是十进制数除以2后得到的整数部分。
③、④处为十进制转k进制,采用除k取余法,同十进制转二进制相似。
答案
(1)①b=c+b或者b=c&b ②a\2
(2)③amodk ④a\k
【训练4】在文本框Text1中输入一个加法的算式,形式为a+b,a和b均为整数。
单击计算显示结果:
请在划线处填入合适的代码。
PrivateSubCommand1_Click()
DimkeyAsString,aAsInteger,bAsInteger,iAsInteger,chAsString
key=Text1.Text
i=1
DoWhilei<=Len(key)
ch=Mid(key,i,1)
Ifch>=″0″Andch<=″9″Then i=i+1Else ExitDo
Loop
a=____①____
b=____②____
Label1.Caption=″计算结果为:
″+Str(a+b)
EndSub
解析 i表示字符串中位置,当该位置不是数字时,退出循环,即i就是加号的位置。
a表示加号前的值,b表示加号后的值。
答案 ①Mid(key,1,i-1) ②Mid(key,i+1,Len(key)-i)
考点2 枚举算法
【训练5】完全数:
所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
如果一个数恰好等于它的因子之和,则称该数为“完全数”。
枚举的范围是1~1000,枚举的条件是nmodi=0。
请在划线处填入合适的代码。
PrivateSubCommand1_Click()′找出1000以内的完全数
DimiAsInteger,jAsInteger
Forn=1To1000
s=0 ′每次要初始化
Fori=____①____
IfnModi=0Thens=____②____
Nexti
If____③____ThenList2.AddItemStr(n)
Nextn
EndSub
解析 变量n表示1000以内的正整数,i表示小于他的数,如果能除通,表示是因子。
S是因子的和,如果s与他本身相等。
答案 ①1Ton-1 ②s+i ③s=n
【训练6】有一张单据上有一个5位数的编号,如图所示,其百位数和十位数处已经变得模糊不清,但是知道这个5位数是37或67的倍数。
现要设计一个算法,找出所有满足这些条件的5位数,并统计这些5位数的个数。
请在程序划线处填入合适的代码。
PrivateSubCommand1_Click()
DimiAsInteger,jAsInteger,nAsInteger
Fori=0To99
j=____①____′构造出一个五位数
If____②____Then
List1.AddItemj
n=n+1
EndIf
Text1.Text=Str(n)
Next
EndSub
答案 ①14000+7+i*10
②(jMod37=0)or(jMod67=0)
一、选择题
1.用VB程序查找能被10整除,且包含3的三位数,部分程序段如下所示:
n=0∶i=100
DoWhilei<=999
a=i\100
b=____①____
c=iMod10
If____②____Then
____③____
List1.AddItemStr(i)
EndIf
____④____
Loop
Label2.Caption=″符合条件的数共有:
″+Str(n)
下列关于实现该算法,说法不正确的是( )
A.①中求n的十位数
B.②中应填入a=3Andb=3 Andc=3
C.③中应填入计数语句
D.④中将改变循环变量的值
答案 B
二、非选择题
2.编写VB程序,实现如下功能:
在文本框Text1中输入发放红包的总金额s,在文本框Text2中输入发放红包的个数n,单击“分配”按钮(Command1),为n个红包随机分配金额,并在列表框List1中显示分配后的这些金额。
界面如图1所示。
图1 图2
(1)在设计应用程序界面时,应使用图2所示“控件工具箱”中的________(填写相应编号)添加列表框List1;并设置文本框Text1和Text2的________属性的值为空。
(2)为实现上述功能,请在划线①②③处填入合适代码。
PrivateSubCommand1_Click()
DimsAsSingle,xAsSingle,nAsInteger,iAsInteger
Randomize
List1.Clear
s=____①____
n=Val(Text2.Text)
Fori=1Ton-1 ′通过循环语句产生n-1个红包的随机值
x=Int((Rnd()*s/(____②____)+0.005)*100)/100
List1.AddItemStr(x)
s=______③______
Nexti
x=Int((s+0.005)*100)/100 ′产生最后一个红包
List1.AddItemStr(x)
EndSub
答案
(1)4 或④ Text
(2)①val(Text1.text) ②n-i ③s-x
3.(2016·8温州模拟)编写VB程序代码,实现如下功能:
在文本框Text1中输入金额(整数)后,点击“转换”按钮Command1,则在文本框Text2中显示该金额的大写,程序运行界面如图所示:
(1)要使窗体标题上显示的文本改为“人民币大小写”,可在其属性窗口中将________属性的属性值改为“人民币大小写”。
(2)为了实现以上程序功能,使程序正常运行,请完善以下两处代码。
PrivateSubCommand1_Click()
DimdxAsString,dwAsString
DimsAsString,cAsString
DimchAsString
DimiAsInteger
dx=″零壹贰叁肆伍陆柒捌玖拾″
dw=″亿仟佰拾萬仟佰拾元″
s=Text1.Text
IfLen(s)>9____①____
Text2.Text=″输入的数据超出所能转换的范围″
Else
Fori=1ToLen(s)
ch=____②____
c=c+Mid(dx,Val(ch)+1,1)+Mid(dw,9-Len(s)+i,1)
Nexti
Text2.Text=c+″整″
EndIf
EndSub
(3)由上述算法可知,若在文本框Text1中输入“20”,则文本框Text2显示的结果为________。
解析
(1)窗体标题上显示的文本是窗体的“Caption”的属性值。
(2)①处考查IF语句的格式,IF必须有THEN、ENDIF与之对应。
②处是截取输入的数值串的第i个字符,由下一句转化为第i个数的金额大写,所以②处应是″mid(s,i,1)″。
(3)Text1中输入20,模拟程序运行过程:
s=20,les(“20”)=2,
i=1时,ch=mid(s,i,1)=2,c=贰+拾=贰拾;
i=2时,ch=mid(s,i,1)=0,c=贰拾+零+元=贰拾零元;
Text2.Text=c+“整”=贰拾零元整
结果为:
贰拾零元整
答案
(1)Caption
(2)①then ②mid(s,i,1) (3)贰拾零元整
4.如果一个正整数从高位到低位上的数字依次递减,则称其为降序数(如9752、9772是降序数,而7524不是降序数)。
现编写VB程序实现如下功能:
在文本框Text1种输入一个正整数,单击“判断”按钮Commmand1,在标签Label2中显示出该数是不是降序数。
程序运行界面如图所示。
(1)代码“Command1_Click()”中的Click是________(选填字母:
A.对象名/B.属性名/C.事件名/D.方法名)。
(2)请完善下列程序代码:
PrivateSubCommand1_Click()
DimiAsInteger,sAsString,flagAsBoolean
____①____
flag=True:
i=2
DoWhilei<=Len(s)Andflag
If____②______Then____③____
i=i+1
Loop
IfflagThen
Label2.Caption=s+″是降序数!
″
Else
Label2.Caption=s+″不是降序数!
″
EndIf
EndSub
解析 程序往往有输入、中间处理和输出三部分组成,在程序中,变量s需输入,i表示在字符中位置,降序数的条件是该数大于或等于他前面的数。
Flag表示是降序数的标志。
如果不是降序数,将不再循环。
答案
(1)C
(2)①s=Text1.text ②Mid(s,I,1)5.王敏的E-Mail邮箱密码忘记了,但她需要收一封很重要的来信,请你帮她尽可能找出密码。
她零星记得自己密码信息:
①密码是六位数字,前面两位为31; ②最后两位数字相同; ③能被16和46整除。
程序界面如图所示,单击“帮助找回密码”按钮(Command1)后,可能的密码显示在列表框List1中。
解决此问题的相应程序如下:
PrivateSubCommand1_Click()
DimaAsInteger,sAslong,bAsInteger,iAsInteger
Fori=0To9999
s=____①____
IfsMod46=0andsmod16=0Then
a=smod10
b=____②____
Ifa=bThen
List1.AddItemStr(s)
EndIf
EndIf
Nexti
EndSub
(1)解决此问题的主要算法是________________(选填:
枚举算法或解析算法)。
(2)窗口上的“找密码”是对Form1对象的______________属性设置的。
在程序①和②划线处,填入适当的语句或表达式,把程序补充完整:
(3)程序中①划线处应填入________________。
(4)程序中②划线处应填入________________。
答案
(1)枚举算法
(2)Caption (3)310000+i (4)s\10mod10
6.如果一个正整数是另一个整数的立方,那么称该数是“立方数”。
如:
1、8、27等是立方数。
现要求编写VB程序实现如下功能:
在文本框Text1中输入正整数n,单击命令按钮Command1后,在标签Lab上显示相关信息。
(1)在VB中,文本框Text1所属的类名是________(单选,填字母:
A.Text/ B.Text1/ C.TextBox)。
(2)为实现上述功能,请在划线处填入合适的代码。
PrivateSubCommand1_Click()
DimnAsLong,iAsLong
DimkAsLong,sAsString
n=Val