4.1解析法训练6(含答案)

资源下载
  1. 二一教育资源

4.1解析法训练6(含答案)

资源简介

4.1解析法训练6
学校:___________姓名:___________班级:___________考号:___________
一、操作题
1.完全平方数之和。编写 VB 程序,实现如下功能:在文本框 Text1 中输入用逗号分隔的一系列整数(每个整数的绝对值不超过 1000,个数不超过 100 个), 单击“计算”按钮 Command1,计算输入的整数中的完全平方数之和(完全平方数是指一个整数能表示成某个整数的平方的形式,例如 4 是完全平方数,可以表示成 2 的平方),并将结果显示 在标签 Label1中。 程序运行效果如图所示。
(1)文本框 Text1不具备的属性为 (单选,填字母: A.Text/B.Caption/C.Width/D.Font)。
(2)实现上述功能的 VB 程序如下,请在划线处填入合适代码。
Private Sub Command1_Click()
Dim s As String
Dim i As Integer, j As Integer, ans As Long
Dim f As Boolean
ans = 0
s = Text1.Text: j = 1:
For i = 1 To Len(s)
ch = Mid(s, i, 1)
If ch = "," Then
x = Val(Mid(s, j, i - j))
If Then ans = ans + x
f = True
j = i + 1
ElseIf ch = "-" Then
f = False
j = j + 1
End If
Next i
Label1.Caption = "完全平方数之和为: " + Str(ans)
End Sub
(3)若文本框 Text1中输入的内容为“-4,4,4”(不包括双引号),则标签Label1 中输出的内容为“完全平方数之和为: ”。
2.获取字符串中指定范围内的元素,可以通过字符编号来实现,字符编号有正向编号和反向编号。如字符串"ABCDEF",字符A的正向编号为1、反向编号为-6,如下表:
"2:4"表示获取正编号"2"到"4”的字符串,即"BCD",-5:-3、2:-3、-5:4这三种编号范围也表示的是字符串"BCD"。
小王根据上述算法设计如下程序,在文本框Textl输入字符串,在文本框Text2和Text3中输入字符编号,单击"获取"按钮,在标签Labell中显示指定范围的字符串。当Text2中的编号位置在Text3中的编号位置之前,则输出正向字符串,反之输出逆向字符串。程序运行界面如图所示。
(1)用户单击命令按钮Command1时调用的事件处理过程为 。(单选,填字母:A.Command1/
B.Caption/C.Click/D.Commandl_Click)。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim s As String, ans As String
Dim a As Integer,b As Integer, n As Integer
s=Textl.Text:n= Len(s): ans=""
a=Val(Text2.Text): b = Val(Text3.Text)
If Abs(a)>n Or Abs(b)>n Or a *b=0 Then
ans="输入范围有误"
Else
If a<0 Then a=a+n+ 1
If b<0 Then b= ①
If a<=b Then
ans= ②
Else
Fori=a To b Step-1
ans=ans+Mid(s,i,1)
Next i
End If
End If
Label1.Caption=ans
End Sub
(3)若文本框Textl中输入的内容为"123456789",文本框Text2和Text3中输入的内容分别为-3和5,单击"获取”按钮,标签框Labell中显示的内容是 。
3.【加试题】四宫数独规则:在4×4的格子中,根据已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个宫(粗线框区域)内均含1到4的数字并且不重复,每道数独有且仅有唯一答案。
例如,根据规则推理图1数独,在第一宫中4个格子已经3个格子分别是数字1到3,缺的数字为4,因此第一行第一格空缺的数字填4,以此类推,直至将所有格子都推理出来。

图1 图2
(1)根据上述规则推理,数独(图2)第一行A处应是数字 。

(2)小明编写了四宫数独推算的VB程序,单击“推算”按钮 Command1后,在列表框List1中输出数独推算过程和结果,如第17题-3题图所示。实现推算的VB程序如下,请在划线处填入合适的代码。
Dim d(1 To 16) As Integer '数组d逐行存储四宫数独
Private Sub Command1_Click()
Dim i As Integer,flag As Boolean
For i = 1 To 16
d(i) =0 ‘值0表示该位置还未填数字
Next i
‘初始化数独中已知位置的数字
d(2) =4:d(11) =3:d(14) =2:d(16) =4
List1.Clear
'在列表框List1中输出四宫数独,代码略
flag = False
Do While Not flag

For i = 1 To 16
‘函数check(i)实现对第i位置进行推算
If d(i) = 0 Then
d(i) = check(i)
If d(i) >0 Then
flag = False
'Forniat(i,"00")函数实现将变量i的值按2个字符宽度输出
List1.Addltem"第"& Format(i,”00” & "位置填” & d(i) )
End If
End If
Next i
Loop
'在列表框Listl中输出四宫数独,代码略
End Sub
根据每一行、第一列、每一个宫的已有数字进行推算
Function check(x As Integer) As Integer
Dim t(0 To 4) As Integer,m As Integer
Dim row As Integer,col As Integer,n As Integer,k As Integer
For m=0 To 4
t(m) =0
Next m
'对当前所在行列进行推算
row = (x-l)\4+l
col = ( x - l) Mod 4 + l
For m= 1 To 4
t(d( row - l) *4+m)) = l
t(② )=1
Next m
'进行宫内推算
If row < =2 And col <= 2 Then t(d(7 -x) ) = l
If row< = 2 And col > 2 Then t(d(11 - x) )= l
If row > 2 And col < = 2 Then t(d(23-x)) = l
If row > 2 And col > 2 Then t(d(27-x)) = l
k =0
For m= l To 4
If t (m) = 0 Then n = m Else k = k + l
Next m
If ③ Then check = n Else check = 0
End Function
4.王老师采用星级制对本班学生的平时表现进行评价,每位同学的评分数据储存在数据库中。学生的得分和星级对照如下表:
成绩 1-20 21-40 41-60 61-80 81-100
星级 一星 二星 三星 四星 五星
要求依据上表统计出各星级学生人数占总人数的比例。小王编写了一个VB程序实现该功能:程序运行时,每位学生的得分存储到数组a中,并在列表框listl中显示,单击命令按钮后,在列表框list2中显示各星级的人数占总人数的百分比例。程序运行界面如图所示:
(1)观察代码,实现统计功能的按钮对象名为: 。
(2)当前读取的数据表名为:
(3)实现上述功能的VB代码如下,划线①、②处请填空。
Const n = 50
Dim a(1 To n) As Integer
Dim b(0 To 4) As Integer
Private Sub Form_Load( )
Dim adocn As New ADODB.Connection
Dim adors As New AD0DB.Recordset
Dim strl,str2 As String
adocn. ConnectionString =”provider= microsoft. ace. oledb.12.0;data source=” +
App. Path + ”school. accdb”
adocn.Open
str2 = ”select * from student”
adors.0pen str2,adocn
’以下将每个学生的得分读入组数a中,并在列表框list1中显示,代码略
End Sub
Private Sub Coml_Click()
Dim dd As String
Dim cou As Single
Dim t as integer
dd=“一星二星三星四星五星”
For i = 1 To n
t=
b(t)=b(t)+1
Next i
For i = 0 To 4
cou = Int(b(i)/n * 100 + 0.5)
1ist2. AddItem, + Str(cou) + “%”
Next i
End Sub
5.小张编写了一个查询汉字区位码的程序,程序具体功能:在文本框Text1中输入一个汉字的内码(处理码),单击“查询”按钮Command1后,在Text2中输出汉字的区码和位码。例如:汉字“啊”的内码和区位码的关系如下:
“啊”的区位码 区码 位码
十进制 16 01
十六进制 10 01
区位码分别转成十六进制后,将区码和位码分别加上十六进制数A0即得到内码。
“啊”的内码的十六进制形式即为B0A1H
程序运行界面如图所示:
Private Sub Command1_Click()
Dim i As Integer, q As Integer, w As Integer, s As String, s1 As String, c As String
s = Text1.Text
For i = 1 To 4 '如果输入的处理码包含小写字母,则转成大写字母
c = Mid(s, i, 1)
If ① Then
s = Mid(s, 1, i - 1) + Chr(Asc(c) - 32) + Mid(s, i + 1, Len(s) - i)
End If
Next i
For i = 1 To 4 '两个字节分别减去 A0H
c = Mid(s, i, 1)
If i Mod 2 = 1 Then
s1 = s1 & CStr((Asc(c) - Asc("A"))) 'CStr( ):将括号内表达式的值转换为字符串型
Else

End If
Next i
For i = 1 To 2 '将十六进制转换成十进制
q = q * 16 + Val(Mid(s1, i, 1))

Next i
Text2.Text = "区号:" + Str(q) + " 位号:" + Str(w)
End Sub
(1)请在划线处填入合适的代码。
(2)如果输入的内码为 D1A7,则 Text2 中输出的内容是:
6.问题:在“1390773”号段的 11 位手机号码中,统计出最后两位数字相同的号码个数。如 13907735200、13907738366 是符合条件的两个号码。
算法描述如下图所示。请将程序补充完整。
Private Sub Form_Click()
Dim a As Integer, b As Integer
Dim i As Integer, s As Integer
s=0
For i=10000 To 19999
a=①
b=(i Mod 100)\10
If a=b Then
s=②
End If
Next i
Print "最后两位数字相同的号码个数有:" ;③
End Sub
二、填空题
7.【加试题】某种字符加密方法描述如:
①将待加密的字符分成若干个字符串组,每组n个字符,剩余字符(个数小于n)自成一组。
②将每组字符按以下方法重新组合,得到新的字符串。
重新组合规则:取每组第1个字符依次连接生成第i个新的字符串,共n组。
③将底组后的n组字符串依次进行字符交换,得到加密字符(加密前后字符均为大写)。
字符变换规则:按字母顺序后移i个位置后输出。
④依次合并变换后的字符串,即为密文。
例如:明文=“ABCDEFGHIJK”,n=4的字符加密过程如下:
(1)已知n=3,则待加密数据“ABCDEFG”加密后的密文为 。
(2)小张根据上述加密算法,设计了一个对应的加密程序,其VB代码如下,请在划线处填入合适的代码。
下面进行重新组合:重组后数据保存到s1中
下面进行字符变换:字符变换后数据保存到ans中
划线处应填入的代码分别为:(1) (2) (3)
8.编写VB程序,实现如下功能:单击“计算”按钮,在列表框List1中产生10个[1,99]随机数,文本框Text1显示相邻两个数字之间相差最大的差值。运行界面如图所示。
(1)窗体上,“计算”按钮的对象名是 。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
Private sub cmd1_click( )
Dim b(1 to 10) as integer
Dim I as integer,max as integer ,a as integer, c as integer
Max=0
For i=1 to 10
Randomize
A=int(rnd*99)+1

List1.additem str(a)
Next i
For i=2 to 10
C=
If c>max then
Next I
End sub
参考答案:
1. B f=true f and int(sqr(x))^2=x 4
【详解】本题考查的是VB循环、分支语句相关知识。(1)Caption不是Text1控件的属性,故选B。(2)阅读程序段可知,f是判断正负数true为正数false为负数,ans是存放完全平方数之和,x是存放不带符号的数值,f默认要设置为正数,否则第一个输入为正数时,不计入ans,故②应填入f=true,③中要判断是否为正数而且是平方数,故应填入f and int(sqr(x))^2=x。(3)若文本框 Text1中输入的内容为“-4,4,4”最后一个数字不是以“,”结束,没有取出来判断是否平方数,故标签Label1 中输出的内容为“完全平方数之和为:4”。
2. D b+1+n Mid(s,a,b-a+1) 765
【详解】本题考查的是VB综合运用。(1)事件过程格式:对象名称_事件,故选项D正确。(2)当Text3里的值是反编号时即b<0要把它转换成正编号,故①填入:b+1+n;如果a<=b,则输出两者之间的正向字符串,故②为Mid(s,a,b-a+1)。(3)先“-3”转正编号:-3+9+1=7,7>5则输出两者之间的反向字符串,故为765。
3. 2 flag=True d((m-1)*4+col) k=3
【详解】本题主要考查VB程序的综合应用。①根据上述规则推理,数独(图2)第一行A处可以填数字2或者3,A处所在的列中已经包含3,因此只能填2,故第一行A处应是数字2。②设置退出循环标志flag为True,故此处填flag=True。③推算的时候,t数组,以四宫格中的数字为下标,全部置为1,分别对行、列、宫内进行推算,结合列与数组d之间的关系,故此空应为:d((m-1)*4+col);④如果数组t(1)至t(m)有三个1,表明已知3个数,可以推测出缺的数为数组t(1)至t(m)值为0的那个数组的下标,故此空为:k=3。
4. com1 student (a(i)-1)\20 mid(dd,2*i+1,2)
【详解】本题考查的是VB相关知识。(1)根据程序中的Private Sub Coml_Click()可知,实现统计功能的按钮对象名为:com1。(2)根据程序中str2 = ”select * from student”可知,当前读取的数据表名为:student。(3)根据题意及程序代码可知,a数组存放的是每个学生的得分,b数组存放的是各星级的人数。故从代码中的Dim b(0 To 4) As Integer、b(t)=b(t)+1、cou = Int(b(i)/n * 100 + 0.5)可知③应填入(a(i)-1)\20;④应填入mid(dd,2*i+1,2)。
5. c>=”a” and c<=”z” s1=s1&c w=w*16+Val(Mid(s1,i+2,1)) 区号:49,位号:07
【详解】本题主要考查VB字符串操作及进制转换。(1)①处代码需要判断提取的字符变量c是否为小写字母,因此答题空1为c>=”a” and c<=”z”;②处代码作用为若不是奇数位,则直接取其值或减去“0”,因此答题空2为s1=s1&c;③处由下面的输出代码Text2.Text = "区号:" + Str(q) + "位号:" + Str(w)知本处代码为计算w的值,因此答题空3为w=w*16+Val(Mid(s1,i+2,1));(2)输入的内码为D1A7,根据题意知,内码分别减去A0后,十六进制为:区码31,位码07;十进制为区码49,位码07,因此答题空4为区号:49,位号:07。
6. i mod 10 s=s+1 s
【详解】本题考查VB程序设计相关内容。该题功能是统计出最后两位数字相同的手机号码个数。分析流程图可知,a、b分别为i的个位数、十位数,若两者相等,计数器s+1,最后输出个数s。分析代码,①处为a赋值,由题意可知,a是手机号末位数,且要在i(10000到19999)的范围内找该数,故应取i的个位数,取值方法:i mod 10。①处应填写:i mod 10。②处,分析if结构,当a=b时,意味着手机号最后两位数字相同,计算器应+1。故此处应填写:s=s+1。③处,使用print函数输出手机号最后两位数字相同的个数,故此处应填写:s。
7. BFJCDGH j<=Len(s) i>Len(s) Mod n ASC(Mid(s1,k,1))-ASC(“A”)+j
【详解】本题考查的知识点是VB程序分析与调试。(1)根据加密规则 ,数据“ABCDEFG”加密后的密文为BFJCDGH。(2)①处循环对输入字符逐一遍历,循环的条件是j<=Len(s)。故此处代码为:j<=Len(s);②字符串s分割为n段,长度对n取余运算,同时需要满足余数小于i。故此处代码为:i>Len(s) Mod n;③字符加密时,需要求出字符的ASCII,通过ASCII值对字符进行处理,加密。此处代码为:ASC(Mid(s1,k,1))-ASC(“A”)+j。
8. Cmd1 b(i)=a abs(b(i﹣1)﹣b(i)) max=c text2.text=str(max)
【详解】(1)Cmd1_Click Cmd1表示对象名称,Click表示它是一个点击事件,“计算”按钮的对象名是Cmd1;(2)①该处获取的a是一个随机数,需要将a存储在b(i)中,所以该处为:b(i)=a; ②次数将所有的随机数逐个比较,c表示临时生成的最大差值,所以该处为:abs(b(i﹣1)﹣b(i));③ 根据条件If c>max ,可以看出如果差值比最大差值大,改变最大差值max的值为c,所以该处为max=c,④结果在文本框中输出,所有答案为text2.text=str(max),此题同等类似答案都可,不唯一。

展开更多......

收起↑

资源预览