内容发布更新时间 : 2024/11/20 1:32:11星期一 下面是文章的全部内容请认真阅读。
绍兴鲁迅中学程序阅读编辑:沈云良 经典算法程序实现2018 (综合练习) 班级:__________姓名:__________ 1.用随机函数产生100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数并打印出来。 Public Sub GetTJput() Dim a(1 To 100) As Integer Dim x(1 To 10) As Integer Dim i As Integer, p As Integer '产生100个[0,99]范围内的随机整数 For i = 1 To 100 a(i) = Int(Rnd * 100) If a(i) < 10 Then Lab1.Caption= Lab1.Caption& \Else Lab1.Caption= Lab1.Caption& Str(a(i)) End If '每行10个在标签Lab1显示出来 If ______________ Then ' 字符串常量VbCrLf的作用:换行 Lab1.Caption= Lab1.Caption& VbCrLf End If Next i '统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0 '的数的个数,并将统计结果保存在数组x(1),x(2),...,x(10) '中,将统计结果在标签Lab2显示出来 For i = 1 To 100 p =______________ '求个位上的数字 If p = 0 Then p = 10 x(p) =______________ Next i Lab2.Caption=\统计结果\For i = 1 To 10 p = i If i = 10 Then _____________ Lab2.Caption= Lab2.Caption & \个位数为\Str(p) + \共\个\Next i End Sub 2. 哥德巴赫猜想:任意一个大于等于6的偶数都可以分解为两个素数之和。 基本思想:n为大于等于6的任一偶数,可分解为n1和n2两个数,分别检查n1和n2是否为素数,如都是,则为一组解。如n1不是素数,就不必再检查n2是否素数。先从n1=3开始,检验n1和n2(n2=N-n1)是否素数。然后使n1+2 再检验n1、n2是否1 / 2
素数,? 直到n1=n/2为止。 ’ Prime函数功能:若为素数返回True,不是则返回False Function Prime( m as Integer) As _____________ Dim i As Integer _____________ For i=2 To int(sqr(m)) If m Mod i = 0 Then Prime=False: Exit For Next i End Function ’利用上面的Prime函数,验证哥德巴赫猜想 Dim n As Integer,n1 As Integer,n2 As Integer n=Val(InputBox(\输入大于6的正整数\For n1=3 to n\\2 step 2 n2=n-n1 If prime(n1) Then If _____________ then Print n & \Exit For '结束循环 End if End if Next n1 3.合并法排序(将两个有序数组A、B合并成另一个有序的数组C,升序) 基本思想: 1)先在A、B数组中各取第一个元素进行比较,将小的元素放入C数组; 2)取小的元素所在数组的下一个元素与另一数组中上次比较后较大的元素比较,重复上述比较过程,直到某个数组被先排完; 3)将另一个数组剩余元素抄入C数组,合并排序完成。 程序段如下: '当A和B数组均未比较完 Private Sub Cmd_Click() Dim A(1 To 200) As Integer Dim B(1 To 200) As Integer Dim ia As Integer,ib As Integer Dim na As Integer,nb As Integer 'A、B数组数据从外部文件读入,分别存储在A(1)、B(1)开始的元素中,数据个数存储在na、nb中 ia=1: ib=1: ic=_______ Do While _______________________ If A(ia) < B(ib) Then C(ic) = A(ia): ia = ia + 1 Else C(ic) = B(ib): ib = ib + 1 End If _____________ Loop 'A数组中的剩余元素抄入C数组 绍兴鲁迅中学程序阅读编辑:沈云良 Do While ia <= na C(ic) = A(ia) ia = ia + 1: ic = ic + 1 Loop 'B数组中的剩余元素抄入C数组 Do While ib <= nb C(ic) = B(ib) __________: ic = ic + 1 Loop End Sub 4.顺序查找法(在一列数中查找某数key) Private Command1_Click() Dim a(1 To 100) As Integer Dim n As Integer,p As Integer,i As Integer Dom key As Integer key =Val(Text1.Text) For i=1 To 100 A(i)=Int(Rnd()*100)+1 例如:You are good→ Dtz fwj ltti 解密为加密的逆过程 将每个字母C减(或加)一序数K,即 c=chr(Asc(c)-k), 例如序数k为5,这时 \→\, \→\,\→\? 当加序数后的字母小于\或\则 c=Chr(Asc(c)-k +26) 下段程序是加密处理: i = 1: strp = \nL = Len(strI) Do While (i <= nL) strT = _____________ '取第i个字符 If (strT >= \iA = Asc(strT) + 5 If iA > Asc(\strp = strp + Chr(iA) ElseIf (strT >= \iA = Asc(strT) + 5 If _____________ Then iA = iA - 26 strp = strp + Chr(iA) Else strp = strp + strT End If i = i + 1 Loop Print strp 7.统计文本单词的个数 (1)从文本(字符串)的左边开始,取出一个字符;设逻辑量WT表示所取字符是否是单词内的字符,初值设为False; (2)若所取字符不是“空格”,“逗号”,“分号”或“感叹号”等单词的分隔符,再判断WT是否为True,若WT不为True则表是新单词的开始,让单词数Nw=Nw+1,让WT=True; (3)若所取字符是“空格”,“逗号”,“分号”或“感叹号”等单词的分隔符, 则表示字符不是单词内字符,让WT=False; (4)再依次取下一个字符,重得(2)(3)直到文本结束。 下面程序段是字符串strI中包含的单词数 Nw = 0: Wt = _____________ nL = Len(strI) For i = 1 To nL strT = Mid(strI, i, 1) '取第i个字符 If strT=\Wt = False Else If Not Wt Then Nw = Nw + 1 _____________ End If End If Next i Print \单词数为:\2 / 2
Next i p = 1 Do While __________________________ p = p + 1 Loop If p>100 then Text1.Text= \找不到:\Else Text1.Text= \找到:\位置:\End Sub 5.把一个数插到有序数列中,插入后数列仍然有序 基本思想:n个有序数(从小到大)存放在数组a(1)—a(n)中,要插入的数x。首先确定x插在数组中的位置p;(可由以下语句实现) p=1 Do While _____________ and p<=n p=p+1 Loop ’a(p)—a(n)元素向后顺移一个位置以空出a(p)元素放入x,可由以下语句实现: For i=n To p Step-1 __________________________ Next i a(p)=x 6.简单加密和解密 加密的思想是: 将每个字母C加(或减)一序数K,即用它后的第K个字母代替,变换式公式: c=chr(Asc(c)+k) 例如序数k为5,这时 \→ \, \→?\,\→?\? 当加序数后的字母超过\或\则 c=Chr(Asc(c)+k -26)