2020版算法与程序设计 专项测试八 数学中的有趣数

文档属性

名称 2020版算法与程序设计 专项测试八 数学中的有趣数
格式 zip
文件大小 4.7MB
资源类型 教案
版本资源 通用版
科目 通用技术
更新时间 2019-12-01 20:29:40

文档简介

专项测试八 数学中的有趣数
1.下列VB程序的功能是素数判断。程序运行时,在文本框Text1中输入一个数,单击“判断”按钮Command1,若该数是素数,则在文本框Text2中输出“Yes”,否则输出“No”。程序运行效果如下图所示。
(1)要使程序运行时,文本框Text2的Height属性值为2000,可在Form_Load事件过程中添加语句________(单选,填字母:A. Height=2000 / B.Text2. Height=2000 / C. Height.Text2=2000)。
(2)实现上述功能的VB程序如下,请在划线处填入合适的语句。
Function test(x As Integer)As Boolean
 Dim i As Integer
 test=True
 i=2
 Do While i<=x-1 And test=True
If x Mod i=0 Then
  ________①________
Else
  i = i+1
End If
 Loop
End Function
Private Sub Command1_Click()
 Dim n As Integer, ans As String
 n=Val(Text1.Text)
 If ________②________ Then
  ans = “Yes”
 Else
  ans = “No”
 End If
 Text2.Text =________③________
End Sub
解析 (1)本小题主要考查的是对象、属性及属性值。(2)本题主要考查的是自定义函数及相关知识。函数test(x)的功能是判断整数x是否为素数,若是素数则返回函数值True,否则返回函数值False,函数值是通过函数名来返回的,因此①处代码为test=False,②处代码为test(n)=True;最后将判断结果ans显示在标签Label3中,变量ans的数据类型为String,因此不能加Str函数,③处应填入ans。
答案 (1)B (2)①test=False ②test(n)=True或test(n) ③ans
2.最大公约数和最小公倍数。更相减损之术求最大公约数的基本思想是:用两数中较大的数减去较小的数,获得的差与原先较小的数构成新的一对数,再用大的数减去小的数……如此循环,用同样的方法操作,直至产生一对相等的数,该数即为最大公约数。以求12、16 这两个数的最大公约数为例,具体操作如下:(12,16)→(12,4)→(8,4)→(4,4), 即4是12和16的最大公约数。具体功能如下:在文本框Text1中输入整数一,在文本框Text2中输入整数二,单击“求最大公约数和最小公倍数”按钮Command1,两数的最大公约数显示在文本框Text3中,最小公倍数显示在文本框Text4中。程序运行界面如下图所示。
(1)要使按钮Command1上显示文字“求最大公约数与最小公约数”,应修改按钮Command1的________属性的属性值。
(2)实现上述功能的VB程序如下,请在划线处填入合适的语句。
Private Sub Command1_Click()
 Dim m As Long, n As Long, r As Long, t As Long
 m = Val(Text1.Text)
 n = Val(Text2.Text)
 t = m * n
 If m < n Then r = m: m = n: n = r
 r = m - n
 Do While ________①________
If r < n Then
m = n
n = r
Else
  ________②________
End If
________③________
 Loop
 Text3.Text = Str(n)
 Text4.Text = ________④________
End Sub
解析 (1)本小题主要考查的是对象的属性。要设置窗体的标题,应修改其Caption属性的属性值。(2)本题主要考查的是根据算法思想完成程序实现。根据更相减损之术的思想可知,不断地构造数对(m,n)且m>=n,刚开始时,数对(m,n)为整数一和整数二,然后用两数之差r和n组成一对新的数,当r答案 (1)Caption (2)①r< >0或r< >n或m< >n ②m = r ③r = m - n ④Str(t / n)
3.数学中的“自守数”:如果一个数的平方的末几位等于该数本身,这个数就是自守数。例如:
5*5=2
6*6=3
25*25=6
76*76=57
……
那么,5、6、25、76等数被称为自守数。小李编写VB程序,实现如下功能:找出10000以内所有可能的自守数,单击“统计”按钮Command1,将符合要求的自守数显示在列表框List1中,统计个数显示在标签Label1中,运行界面如下图所示。
(1)程序运行时要在按钮上显示“统计”,应设置按钮的________属性。
(2)为实现上述功能,请在划线处填入合适的代码。
Private Sub Command1_Click()
 Dim n As Single, k As Integer, t As Integer, c As Integer
 List1.Clear
 c=0
 For n = 5 To 10000
  k = Len(Trim(n)) ′Trim()函数用于删除字符串前的空格
  t = (n * n) Mod ______①______
  If t = n Then
   List1.AddItem Str(n)
    ______②______
  End If
 Next n
 Label1.Caption = “自守个数为:” + Str(c)
End Sub
(3)解决该问题采用了________(选填:枚举/解析)算法。
答案 (1)Caption (2)①10^k ②c=c+1
(3)枚举
4.欧几里德算法求最大公约数。欧几里德算法又称辗转相除法,用于计算两个整数的最大公约数。欧几里德算法:对于给定的两个整数,用较大的数除以较小的数。若余数不为零,则将余数和较小的数构成一对新的数,继续上面的除法,直到大数被小数除尽,则这时较小的整数就是原来两个数的最大公约数。
设计一个VB程序,实现如下功能:输入三个整数,求这三个整数的最大公约数。程序运行时,在文本框Text1、Text2、Text3中分别输入三个整数,单击“求最大公约数”按钮Command1,在标签Label5中显示这三个整数的最大公约数。程序运行效果如图所示。
实现上述功能的VB程序如下,请程序划线处填入合适的代码。
′自定义函数gcd(x,y)的功能是求整数x、y的最大公约数
Function gcd(x As Integer, y As Integer) As Integer
 Dim r As Integer
 Do While x Mod y < > 0
______①______
x = y
y = r
 Loop
 gcd = y
End Function
′swap(m,n)自定义过程,其功能是交换变量m、n的值
Sub swap(m As Integer, n As Integer)
 Dim temp As Integer
 temp = m
 m = n
 n = temp
End Sub
Private Sub Command1_Click()
 Dim a As Integer, b As Integer, c As Integer, ans As Integer
 a = Val(Text1.Text)
 b = Val(Text2.Text)
 c = Val(Text3.Text)
 If ______②______Then Call swap(a, b) ′Call swap(a, b)表示调用过程swap
 ans = gcd(a, b)
 If ans > c Then Call swap(ans, c)
 ________③________
 Label5.Caption = Str(ans)
End Sub
解析 ①处代码为自定义函数gcd(x,y),表示求整数x、y的最大公约数,每次将x、y的余数r与较小数y重新构成一对新的数再求最大公约数,因此①处代码为r = x Mod y;为了保证a>b,因此当a答案 ①r = x Mod y ②a < b ③ans = gcd(c, ans)
5.完全数。完全数又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身。如果一个数恰好等于它的真因子之和,则称该数为“完全数”。例如:第一个完全数是6,它的真因子为1、2、3,1+2+3=6。
现要求前n个完全数,具体功能如下:在文本框Text1中输入n,单击“求完全数”按钮Command1,前n个完全数显示在列表框List1中。程序运行界面如图所示。
实现上述功能的VB程序如下,请在程序划线处填入合适的代码。
Private Sub Command1_Click()
 Dim n As Integer, t As Integer, sum As Long, i As Long, j As Long
  n = Val(Text1.Text)
  t = 1
  i = 2
  Do While t <= n
  ________①________
  For j = 2 To Int(Sqr(i))
   If i Mod j = 0 Then
     If j = i j Then
      sum = sum + j
     Else
      ________②________
     End If
   End If
 Next j
 If i = sum Then
   t = t + 1
   List1.AddItem Str(i)
 End If
 ________③________
  Loop
End Sub
解析 变量sum表示i的真因子之和,它的初值为1,因此①处语句为sum = 1;根据除数i的范围可知,求i的因子分两种情况进行:(1)当i为完全平方数时,真因子之和sum = sum + j;(2)当i不是完全平方数时,如果j为i的因子,则ij也是i的因子,因此将i的两个因子(j和ij)同时累加在变量sum中,即sum = sum + j + i j;从2开始寻找完全数,直到找到n个完全数为止,因此③处语句为i = i + 1。
答案 ①sum = 1 ②sum = sum + j + i j
③i = i + 1
6.亲密数。小明编写了一个求亲密数的VB程序。所谓亲密数是指如果整数x的全部因子(包括1,不包括x本身)之和等于y,且整数y的全部因子之和等于x,则将整数x和y称为亲密数,现在统计100~20000间的所有亲密数。例如整数220和284为一对亲密数。
约定:
(1)如整数(x,y)为一对亲密数,则整数(y,x)与整数(x,y)认为是同一对亲密数;
(2)整数(x,y)为一对亲密数,当且仅当x不等于y。
程序运行时,单击“开始”按钮Command1,则在列表框List1中显示100~20000间所有亲密数,在标签Label2中显示亲密数的对数。程序运行界面如图所示。
实现上述功能的VB程序如下,请程序划线处填入合适的代码。
Private Sub Command1_Click()
 Dim x As Long, y As Long, i As Long, j As Long,m As Long
 Dim b As Long, ans As Long
 ans = 0
 For x = 100 To 20000
  y = 0
  ______①______
  For i = 1 To x 2
   If x Mod i = 0 Then y = y + i
  Next i
  For j = 1 To y 2
   If y Mod j = 0 Then b = b + j
  Next j
  If b = x And ______②______ Then
   List1.AddItem Str(x) + Str(y)
   ans = ans + 1
   m = x
  End If
 Next x
 Label2.Caption = “共有亲密数对:” + ____③____
End Sub
解析 本题主要考查的是程序的综合能力。划线①处语句表示将变量b初始化为0;划线②处语句为约定的2个条件,即x< >y、(x,y)与(y,x)为同一对亲密数;划线③处语句表示输出亲密数对。
答案 ①b = 0 ②x < > y And m < > y ③Str(ans)
7.回文数。如果一个正整数从左往右读与从右往左读是一样的,就称它为回文数,如1234321。“回数猜想”的主要思想是对任意正整数,若它不是回文数,则按下列算法即可获得一个回数:
(1)把该整数的数字顺序颠倒,求得该数的逆序数;
(2)将该整数和其对应的逆序数相加;
(3)若相加结果不是回文数,则将结果作为新的整数,返回步骤(1)。
小林按照上述算法设计了验证回文数猜想的VB程序(猜想次数不超过10次),程序功能如下:在文本框Text1中输入一个正整数,单击“验证”按钮(Command1),获取文本框Text1中的数,当该数不是回文数时,采用回数猜想的方法进行验证,并在列表框List1中输出每次验证的过程,若验证成功或验证次数超过10次,则停止验证,最后在列表框List1中输出验证结果。程序运行效果如下图所示。
实现上述功能的VB程序如下:
Private Sub Command1_Click()
 Dim t As String,a As Long,b As Long
 Dim count As Integer ′用于存储回数猜想的验证次数
 t=Text1.Text
 count=1
 Do While check(t)=False And count<=10
a=Val(t)
________①________
c=a+b
List1.AddItem Str(a)&“+”& Str(b)&“=”& Str(c)
count=count+1
t=Trim(str(c)) “函数Trim()的功能是删除字符串首部和尾部的空格
 Loop
 If check(t)Then
List1.AddItem“验证成功!”
 Else
List1.AddItem“10次内未验证成功!”
 End If
End Sub
Function turn(x As String)As Long
 Dim s As String,i As Integer
 s=“ ”
 For i=Len(x)To 1 Step-1
 s=s & Mid(x,i,1)
 Next i
 turn=Val(s)
End Function
′自定义函数Check,检查x是否为回文数
Function check(x As String)As Boolean
 Dim i As Integer
 check=True
 For i=1 To Len(x)2
If Mid(x,i,1)< >______②______Then check=False
 Next i
End Function
(1)程序代码中,自定义函数Turn(x)的功能是__________________。
(2)请在划线处填入合适代码。
解析 本题主要考查的是算法的综合运用。(1)根据自定义函数中的语句s=s & Mid(x,i,1)可知,自定义函数turn(x)的功能是求字符串x的逆序(反序);(2)根据语句c=a+b可知,b表示将数字串t的反序转化为数值,因此①处代码为b=turn(t);自定义函数Check的功能是检查x是否为回文数,即将字符串x中第i个字符与第len(x)-i+1个字符进行比较,若相等,则进行下一对字符的比较,否则x就不是回文数,因此②处代码为 Mid(x,(Len(x)-i+1),1)。
答案 (1)求字符串x的逆序 (2)①b=turn(t)
②Mid(x,(Len(x)-i+1),1)
专项测试八 数学中的有趣数
1.下列VB程序的功能是素数判断。程序运行时,在文本框Text1中输入一个数,单击“判断”按钮Command1,若该数是素数,则在文本框Text2中输出“Yes”,否则输出“No”。程序运行效果如下图所示。
(1)要使程序运行时,文本框Text2的Height属性值为2000,可在Form_Load事件过程中添加语句________(单选,填字母:A. Height=2000 / B.Text2. Height=2000 / C. Height.Text2=2000)。
(2)实现上述功能的VB程序如下,请在划线处填入合适的语句。
Function test(x As Integer)As Boolean
 Dim i As Integer
 test=True
 i=2
 Do While i<=x-1 And test=True
If x Mod i=0 Then
  ________①________
Else
  i = i+1
End If
 Loop
End Function
Private Sub Command1_Click()
 Dim n As Integer, ans As String
 n=Val(Text1.Text)
 If ________②________ Then
  ans = “Yes”
 Else
  ans = “No”
 End If
 Text2.Text =________③________
End Sub
2.最大公约数和最小公倍数。更相减损之术求最大公约数的基本思想是:用两数中较大的数减去较小的数,获得的差与原先较小的数构成新的一对数,再用大的数减去小的数……如此循环,用同样的方法操作,直至产生一对相等的数,该数即为最大公约数。以求12、16 这两个数的最大公约数为例,具体操作如下:(12,16)→(12,4)→(8,4)→(4,4), 即4是12和16的最大公约数。具体功能如下:在文本框Text1中输入整数一,在文本框Text2中输入整数二,单击“求最大公约数和最小公倍数”按钮Command1,两数的最大公约数显示在文本框Text3中,最小公倍数显示在文本框Text4中。程序运行界面如下图所示。
(1)要使按钮Command1上显示文字“求最大公约数与最小公约数”,应修改按钮Command1的________属性的属性值。
(2)实现上述功能的VB程序如下,请在划线处填入合适的语句。
Private Sub Command1_Click()
 Dim m As Long, n As Long, r As Long, t As Long
 m = Val(Text1.Text)
 n = Val(Text2.Text)
 t = m * n
 If m < n Then r = m: m = n: n = r
 r = m - n
 Do While ________①________
If r < n Then
m = n
n = r
Else
  ________②________
End If
________③________
 Loop
 Text3.Text = Str(n)
 Text4.Text = ________④________
End Sub
3.数学中的“自守数”:如果一个数的平方的末几位等于该数本身,这个数就是自守数。例如:
5*5=2
6*6=3
25*25=6
76*76=57
……
那么,5、6、25、76等数被称为自守数。小李编写VB程序,实现如下功能:找出10000以内所有可能的自守数,单击“统计”按钮Command1,将符合要求的自守数显示在列表框List1中,统计个数显示在标签Label1中,运行界面如下图所示。
(1)程序运行时要在按钮上显示“统计”,应设置按钮的________属性。
(2)为实现上述功能,请在划线处填入合适的代码。
Private Sub Command1_Click()
 Dim n As Single, k As Integer, t As Integer, c As Integer
 List1.Clear
 c=0
 For n = 5 To 10000
  k = Len(Trim(n)) ′Trim()函数用于删除字符串前的空格
  t = (n * n) Mod ______①______
  If t = n Then
   List1.AddItem Str(n)
    ______②______
  End If
 Next n
 Label1.Caption = “自守个数为:” + Str(c)
End Sub
(3)解决该问题采用了________(选填:枚举/解析)算法。
4.欧几里德算法求最大公约数。欧几里德算法又称辗转相除法,用于计算两个整数的最大公约数。欧几里德算法:对于给定的两个整数,用较大的数除以较小的数。若余数不为零,则将余数和较小的数构成一对新的数,继续上面的除法,直到大数被小数除尽,则这时较小的整数就是原来两个数的最大公约数。
设计一个VB程序,实现如下功能:输入三个整数,求这三个整数的最大公约数。程序运行时,在文本框Text1、Text2、Text3中分别输入三个整数,单击“求最大公约数”按钮Command1,在标签Label5中显示这三个整数的最大公约数。程序运行效果如图所示。
实现上述功能的VB程序如下,请程序划线处填入合适的代码。
′自定义函数gcd(x,y)的功能是求整数x、y的最大公约数
Function gcd(x As Integer, y As Integer) As Integer
 Dim r As Integer
 Do While x Mod y < > 0
______①______
x = y
y = r
 Loop
 gcd = y
End Function
′swap(m,n)自定义过程,其功能是交换变量m、n的值
Sub swap(m As Integer, n As Integer)
 Dim temp As Integer
 temp = m
 m = n
 n = temp
End Sub
Private Sub Command1_Click()
 Dim a As Integer, b As Integer, c As Integer, ans As Integer
 a = Val(Text1.Text)
 b = Val(Text2.Text)
 c = Val(Text3.Text)
 If ______②______Then Call swap(a, b) ′Call swap(a, b)表示调用过程swap
 ans = gcd(a, b)
 If ans > c Then Call swap(ans, c)
 ________③________
 Label5.Caption = Str(ans)
End Sub
5.完全数。完全数又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身。如果一个数恰好等于它的真因子之和,则称该数为“完全数”。例如:第一个完全数是6,它的真因子为1、2、3,1+2+3=6。
现要求前n个完全数,具体功能如下:在文本框Text1中输入n,单击“求完全数”按钮Command1,前n个完全数显示在列表框List1中。程序运行界面如图所示。
实现上述功能的VB程序如下,请在程序划线处填入合适的代码。
Private Sub Command1_Click()
 Dim n As Integer, t As Integer, sum As Long, i As Long, j As Long
  n = Val(Text1.Text)
  t = 1
  i = 2
  Do While t <= n
  ________①________
  For j = 2 To Int(Sqr(i))
   If i Mod j = 0 Then
     If j = i j Then
      sum = sum + j
     Else
      ________②________
     End If
   End If
 Next j
 If i = sum Then
   t = t + 1
   List1.AddItem Str(i)
 End If
 ________③________
  Loop
End Sub
6.亲密数。小明编写了一个求亲密数的VB程序。所谓亲密数是指如果整数x的全部因子(包括1,不包括x本身)之和等于y,且整数y的全部因子之和等于x,则将整数x和y称为亲密数,现在统计100~20000间的所有亲密数。例如整数220和284为一对亲密数。
约定:
(1)如整数(x,y)为一对亲密数,则整数(y,x)与整数(x,y)认为是同一对亲密数;
(2)整数(x,y)为一对亲密数,当且仅当x不等于y。
程序运行时,单击“开始”按钮Command1,则在列表框List1中显示100~20000间所有亲密数,在标签Label2中显示亲密数的对数。程序运行界面如图所示。
实现上述功能的VB程序如下,请程序划线处填入合适的代码。
Private Sub Command1_Click()
 Dim x As Long, y As Long, i As Long, j As Long,m As Long
 Dim b As Long, ans As Long
 ans = 0
 For x = 100 To 20000
  y = 0
  ______①______
  For i = 1 To x 2
   If x Mod i = 0 Then y = y + i
  Next i
  For j = 1 To y 2
   If y Mod j = 0 Then b = b + j
  Next j
  If b = x And ______②______ Then
   List1.AddItem Str(x) + Str(y)
   ans = ans + 1
   m = x
  End If
 Next x
 Label2.Caption = “共有亲密数对:” + ____③____
End Sub
7.回文数。如果一个正整数从左往右读与从右往左读是一样的,就称它为回文数,如1234321。“回数猜想”的主要思想是对任意正整数,若它不是回文数,则按下列算法即可获得一个回数:
(1)把该整数的数字顺序颠倒,求得该数的逆序数;
(2)将该整数和其对应的逆序数相加;
(3)若相加结果不是回文数,则将结果作为新的整数,返回步骤(1)。
小林按照上述算法设计了验证回文数猜想的VB程序(猜想次数不超过10次),程序功能如下:在文本框Text1中输入一个正整数,单击“验证”按钮(Command1),获取文本框Text1中的数,当该数不是回文数时,采用回数猜想的方法进行验证,并在列表框List1中输出每次验证的过程,若验证成功或验证次数超过10次,则停止验证,最后在列表框List1中输出验证结果。程序运行效果如下图所示。
实现上述功能的VB程序如下:
Private Sub Command1_Click()
 Dim t As String,a As Long,b As Long
 Dim count As Integer ′用于存储回数猜想的验证次数
 t=Text1.Text
 count=1
 Do While check(t)=False And count<=10
a=Val(t)
________①________
c=a+b
List1.AddItem Str(a)&“+”& Str(b)&“=”& Str(c)
count=count+1
t=Trim(str(c)) “函数Trim()的功能是删除字符串首部和尾部的空格
 Loop
 If check(t)Then
List1.AddItem“验证成功!”
 Else
List1.AddItem“10次内未验证成功!”
 End If
End Sub
Function turn(x As String)As Long
 Dim s As String,i As Integer
 s=“ ”
 For i=Len(x)To 1 Step-1
 s=s & Mid(x,i,1)
 Next i
 turn=Val(s)
End Function
′自定义函数Check,检查x是否为回文数
Function check(x As String)As Boolean
 Dim i As Integer
 check=True
 For i=1 To Len(x)2
If Mid(x,i,1)< >______②______Then check=False
 Next i
End Function
(1)程序代码中,自定义函数Turn(x)的功能是__________________。
(2)请在划线处填入合适代码。
解析 本题主要考查的是算法的综合运用。(1)根据自定义函数中的语句s=s & Mid(x,i,1)可知,自定义函数turn(x)的功能是求字符串x的逆序(反序);(2)根据语句c=a+b可知,b表示将数字串t的反序转化为数值,因此①处代码为b=turn(t);自定义函数Check的功能是检查x是否为回文数,即将字符串x中第i个字符与第len(x)-i+1个字符进行比较,若相等,则进行下一对字符的比较,否则x就不是回文数,因此②处代码为 Mid(x,(Len(x)-i+1),1)。
同课章节目录