教师备用题库
1.将一个十进制正整数x转换成十六进制数的方法和转换成二进制类似,反复除16取余法,它的算法如下:
第一步:x被除16取余数r1,r1是所求的十六进制数的一个数(第一次就是个位数);
第二步:r1转换成十六进制数的一个基数并转换成字符,追加到十六进制数s的左边;
第三步:求出x被除16的商x1;
第四步:对x1重复第一、二、三步,直至商为0;
第五步:最后的s即为所求的十六进制数;
下列Visual Basic程序的功能是将一个十进制正整数x转换成十六进制数。界面如图所示,在文本框Text1中输入一个十进制数,单击“十进制转十六进制”按钮(Command1)后,在文本框Text2中输出转换的结果。
/
相应的Visual Basic程序如下:
Private Sub Command1_Click()
Dim s As String,r As Integer
dec=val(Text1.Text) ’dec得到一个十进制整数,例如:255
base=16 ’base表示16
s=“” ’s变量存放要转换到的十六进制整数
Do While dec <> 0
r=(1) ?
If r >=10 Then ’如果base>10,r可能>10
s=Chr(65+(r-10))+s ’Chr(65)=“A”,16进制数A对应10;
Else
s=Str(r)+s ’余数r<10时,十进制数和十六进制基数相同
End If ’Chr(65+( r-10))或str(r)在s左边,实现了反次序输出
dec=(2) ?
Loop
Text2.Text=s
End Sub
在(1)处应填入 ,在(2)处应填入 。?
A.base Mod dec B.dec/base
C.dec Mod base D.decbase
答案 C;D
解析 进制转换的算法是:除“进制”取余法,本题中将十进制转换成十六进制,因此是除16取余法。变量dec存储十进制数,变量base存储进制的值,本题中base=16,变量s存储转换成新的进制后的数,并且以字符串的形式存储。变量r存储每次的余数,因此划线(1)处为dec Mod base。取完余数后,计算除base后的商,以便下一次循环再次除“进制”取余,因此划线(2)处应该是decbase。
2.(2015浙江10月学考+选考,14,5分)编写VB程序,实现如下功能:在文本框Text1和Text2中分别输入一个整数,单击命令按钮Command1,在列表框List1中显示结果,运行效果如图1所示。结果包含两列数据,第1列为两数之间的摄氏温度值(间隔1度、升序),第2列为对应的华氏温度值。
/
图1 图2
(1)要使命令按钮Command1上显示的文本改为“转换”,可在其属性窗口(图2)中将 属性的属性值修改为“转换”。?
(2)为实现上述功能,请在划线处填入合适代码或选项。
Private Sub Command1_Click( )
Dim t1 As Integer,t2 As Integer
Dim i As Integer,t As Integer
Dim f As Single ??f存储华氏温度值
List1.Clear
t1=Val(Text1.Text)
t2=Val(Text2.Text)
If ① Then ??(选填字母,从下列A、B、C、D四个选项中选取一项)?
t=t1:t1=t2:t2=t
End If
i=t1
Do While ② ? ??(选填字母,从下列A、B、C、D四个选项中选取一项)?
f=i*9/5+32 ??摄氏温度转换为华氏温度
List1.AddItem Str(i)+“ ”+Str(f)
i= ③ ? ??(填程序代码)?
Loop
End Sub
划线①、②处的选项:
A.i<=t2 B.f<=t2 C.t1>t2 D.i答案 (1)Caption (2)①C ②A ③i+1
解析 本题综合考查VB程序开发的界面设计和代码编写能力。(1)将Command1按钮的Caption属性值改为“转换”。(2)①摄氏温度是升序排列的,当输入的第2个整数小于第1个整数时,需要交换这两个数的前后位置,因此本小题答案为C。②程序需要将这两个数之间的每一个摄氏温度转换为华氏温度,其循环变量i的取值在[t1,t2]之间,Do While后面的循环条件为i<=t2。③由题干可知,两个数之间的摄氏温度值间隔为1度,因此i=i+1。
第2节 解析算法及程序实现
模拟演练
1.“角谷猜想”规则:对任意一个大于1的正整数n,若n 是奇数,则n的值改为3n+1;若n是偶数,则n的值改为n/2,重复以上操作,n 的值最终会变为1。使用VB验证这个猜想。程序界面如图所示,在文本框Text1中输入一个大于1的正整数,单击“验证”按钮Command1,在列表框List1中输出每一步的运算过程。
/
(1)在界面设计时,没有使用到的控件为 (填字母)。?
/
(2)为实现上述功能,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim n As Integer, i As Integer
List1.Clear
① ?
If n > 1 Then
List1.AddItem “步数对应值”
i=1
Do While ② ?
If n Mod 2=1 Then
n=n * 3+1
Else
n= ③ ?
End If
List1.AddItem Str(i)+“ ”+Str(n)
i=i+1
Loop
Else
List1.AddItem “输入有误!”
End If
End Sub
答案 (1)C
(2)①n=Val(Text1.Text) ②n<>1 ③n2
解析 本题考查的是VB程序语言的基础知识。(1)观察程序界面,发现只有定时器未使用,因此答案是C。(2)①根据题意,此处n由文本框Text1输入,故答案是n=Val(Text1.Text)。②由题意可知,n=1是循环的终止条件,因此当n<>1时循环进行。③根据题意,再考虑n是整数类型,因此答案是n2。
2.用VB编写十六进制转换为十进制的程序,运行界面如图所示,程序功能如下:在文本框Text1中输入待转换的十六进制数值(字母必须大写),单击按钮Command1,进行转换,并将结果显示在文本框Text2中。
/
(1)结合运行界面,当前窗体标题文字“进制转换”是From1对象的
属性。?
(2)请根据题意将下列程序补充完整。
Private Sub Command1_Click()
Dim i As Integer, n As Integer, dec As Integer
Dim ch As String, s As String
dec=0
① ?
For i=1 To Len(s)
ch=Mid(s, i, 1)
If ② then ?
n=Asc(ch)-Asc("A")+10
Else
n=Val(Mid(s, i, 1))
End If
dec=dec+n * 16 ^ (Len(s)-i)
Next i
Text2.Text=str(dec)
End Sub
(3)若在文本框Text1中输入“31”,则文本框Text2输出的值是 。?
答案 (1)Caption (2)① s=Text1.Text ②ch>=“A” and ch<=“F” (3) 49
解析 本题考查进制转换算法及VB程序实现。
(1)窗体标题文字“进制转换”是From1对象的Caption属性。
(2)①根据分析可知,此处代码的功能是获取文本框Text1的信息,并将信息保存到字符串变量s中,所以答案是s=Text1.Text。②根据对代码的分析,可知将十六进制数转化为十进制数,必须将数字0~9和英文字符A~F这两种情况分开讨论,数字可以直接计算,而如果是英文字符,必须将其转化为相应的值(A~F分别对应10~15),因此此处的代码应该是ch>=“A” and ch<=“F”。
(3)使用“按照位权展开法”进行进制转换,算出其十进制值为31H=3×16+1=49D,因此输出的值是49。
3.将一个十进制正整数转化为二进制数可以采用“除二取余法”,主要方法就是将十进制数用2除,保存所得余数,然后将商的整数部分作为下次运算的被除数,重复上述“除二取余”操作,直到商的整数部分为零时停止。
程序界面如图所示,在文本框Text1中输入一个正整数,单击“转换”按钮(Command1)后,对应的二进制数在文本框Text2中显示出来。
/
解决此问题的Visual Basic程序如下,在程序(1)和(2)划线处,填入适当的语句或表达式,把程序补充完整。
Private Sub Command1_Click()
Dim x As Integer,s As String,r As Integer,t As Integer
x=Val(Text1.text)
s=“”
Do While (1) ?
r=x Mod 2
s=Str(r)+s
x=(2) ?
Loop
Text2.text=s
End Sub
(1)解决此问题所用的算法是 。(选填:解析算法或枚举算法)?
(2)程序中划线处(1)应填入 。?
(3)程序中划线处(2)应填入 。?
答案 (1)解析算法 (2)x<>0 (3)x2或int(x/2)或Fix(x/2)
解析 本题主要考查解析算法的基本思想及其程序实现。
(1)解析算法的基本思想是用解析的方法找出表示问题的前提条件与所求结果之间关系的数学表达式,并通过数学表达式的计算来实现问题的求解。“除二取余法”将十进制正整数转化为二进制数,符合解析算法的思想方法。虽然本题中出现了Do循环语句,但不是枚举算法。
(2)重复“除二取余”操作,直到商的整数部分为零时停止。变量r存储余数,变量x存储商的整数部分,并将x作为下次运算的被除数(r=x mod 2)。因此Do语句的循环条件是x<>0。
(3)变量x存储商的整数部分,因此x=x2(或int(x/2)或Fix(x/2))。
第2节 解析算法及程序实现
真题再现
学考题组
(2017浙江4月学考+选考,14,5分)奇偶校验是一种校验数据传输正确性的方法。其中奇校验方法:统计二进制数据的数位中“1”的个数,若个数为奇数,则校验位值为0,否则校验位值为1。小李编写了一个计算奇校验位值的VB程序,功能如下:在文本框Text1中输入1~255十进制待校验数,单击“计算”按钮Command1后,在文本框Text2中显示该数对应的二进制值,并在标签Label3中显示该数的校验位值。程序运行界面如图所示。
/
(1)在设计程序界面时,要清空文本框中的显示内容,应修改该文本框中的属性。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim a As Integer, s As String
Dim n As Integer, t As Integer, v As Integer
n=Val(Text1.Text)
t=0
s=""
Do While n > 0
a=n Mod 2
n=n 2
t= ① ?
s=Str(a)+s
Loop
v=t Mod 2
Text2.Text=s
Label3.Caption="校验位值:"+ ② ?
End Sub
(3)运行该程序,在文本框Text1中输入22,单击“计算”按钮,则显示的校验位值是 。?
答案 (1)Text (2)①t+a ②Str(1-v) (3)0
解析 (1)文本框的内容对应的属性是Text属性。
(2)DO语句的作用是用除二取余法将十进制转换成二进制,变量a存当次的余数(0或1),变量t统计余数中1的个数,因此①处这一行的代码为t=t+a。②变量v=t mod 2,如果v=0,则表示二进制数据中有偶数个1,v=1表示有奇数个1,由于要求是奇检验,如果是偶数个1,则校验位为1,如果是奇数个1,则校验位为0,因此②处填的校验位值应该是1-v。
(3)十进制22转换成二进制为10110,有奇数个1,因此校验位值是0。
课件11张PPT。
第2节 解析算法及程序实现一 解析算法的基本思想二 解析算法的程序实现教材研读一、解析算法的基本思想
解析算法的基本思想是用解析的方法找出问题的前提条件与所求结
果之间关系的数学表达式,并通过数学表达式的计算来实现问题的求解。教材研读数学计算式),关键之二是保证计算过程描述的正确性(用正确合理的VB变量、表达式来表示已经得出的数学计算式)。
解析算法的代码特征不明显,一般代码中会出现公式计算,但是有公
式计算不一定就是解析算法。出现了循环语句或条件语句等复杂的程序结构也不一定不是解析算法。分段函数解决问题一般可归为解析算法。比较复杂的比如辗转相除法求公约数、公倍数,除n取余法实现进制转换,也算解析算法。二、解析算法的程序实现
解析算法程序实现的关键之一是建立正确的数学模型(得出正确的1.将一个二进制数转化为十进制数可以采用“按位权展开法”。程序界面如图所示,在文本框Text1中输入一个二进制数,单击“开始转换”按钮后,对应的十进制数在文本框Text2中显示。程序界面如图所示。
(1)该程序窗体中共有 5 ????个对象(不包含窗体本身)。(2)为实现上述功能,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim s As String, st As Long, ch As Integer Dim i As Integer, n As Integer
s=Text1.Text ?
n=Len(s)
st=0
For i=1 To n
ch= Val(Mid(s, n-i+1, 1)) ? st=st+ch * 2 ^ (i-1)
Next i Text2.Text=Str(st)
End Sub
(3)在实现程序功能后,若输入的二进制数为“101011”,得到的十进制结果是 43 ????。解析 本题考查基础算法及VB实现。
(1)本程序一共有2个标签、2个文本框和1个命令按钮,共5个对象。
(2)①根据代码可知,此处代码的功能是实现将文本框Text1对象的内容读入变量s,故答案如上;②进制转换的法则是“按位权展开”,而且是从最低位(最右边)展开,使用Mid()取字符也要从右边开始,另外,变量需要参与后面的计算,因此需要用Val()进行转换,故答案是Val(Mid(s, n-i+1, 1))。
(3)经过计算可知,101011B=43D。2.辗转相除法,是数学史中著名的算法,用于计算两个正整数a和b的最大公约数。步骤如下:现编写程序,在文本框Text1和Text2中输出a和b,在文本框Text3中输出两数的最大公约数。代码如下:
Private Sub Command1_Click()
Dim a As Integer, b As Integer, r As Integer
a=Val(Text1.Text)
b=Val(Text2.Text)
r=a Mod b
Do While r>0 ???? a=b
b=r
r=a Mod b
Loop
Text3.Text= str(b) ????
End Sub解析 ①循环结束条件是r=0,因此循环条件是r>0 或 r<>0。②退出循环后,结果在变量b中。