vb求素数程序

需要在窗体放置4个控件,不用设置控件任何属性:Command1,Command2,List1,Label1Dim ctExit As Boolean, ctStop As BooleanDim ctCiFind As Long, ctCiAdd As LongPrivate Sub Form_Load()Me.Caption = "查找 N 以内的所有素数"Label1.Caption = Me.Caption: Label1.AutoSize = TrueCommand1.Caption = "查找": Command2.Caption = "取消"End SubPrivate Sub Form_Resize()Dim S As LongOn Error Resume NextS = Me.TextWidth("A")Command1.Move S, S, S * 8, S * 3Command2.Move S * 10, S, S * 8, S * 3Label1.Move S, Me.ScaleHeight - S * 4, Label1.Width, S * 4List1.Move 0, S * 5, Me.ScaleWidth, Label1.Top - S * 5End SubPrivate Sub Form_Unload(Cancel As Integer)ctExit = True: ctStop = True '保证在查找未结束时能顺利结束程序End SubPrivate Sub Command2_Click()ctStop = True '取消查找End SubPrivate Sub Command1_Click()Static N As LongDim Su() As Long, S As Long, Gen As Long, I As Long, J As LongDim nStr As String, T As Single, Ci As Long'查找 N 以内的所有素数,存入数组 Su(),素数的总个数为 SIf N < 2 Then N = 10000nStr = InputBox("请输入一个大于 1 的整数:", "查找素数", N)If nStr = "" Then Exit SubN = Val(nStr)S = 0: ReDim Su(1)If N > 1 then S = 1: Su(1)=2 '■■根据冰麟轻武的建议,添加了本行ctStop = False: Command1.Enabled = FalseList1.Clear: Label1.Caption = "正在查找 " & N & " 以内的素数 ..."DoEventsT = TimerIf ctCiFind < 10000 Then ctCiFind = 10000'For I = 2 To NFor I = 3 To N Step 2 '■■根据冰麟轻武的建议,将上一行语句改成了本行Gen = Sqr(I) '记忆 I 的平方根For J = 1 To S'进度显示Ci = Ci + 1If Ci > ctCiFind ThenCi = 0: DoEventsIf ctStop Then GoTo Show1Label1.Caption = N & " 以内的素数:" & S & " 个," & Format(I / N * 100, "0.0") & "%"End If'用 I 除以已经找到的素数■■交换下面两行代码,似乎能减少一次Mod 运算If I Mod Su(J) = 0 Then GoTo NextI '能整除,不是素数,检查下一个If Su(J) > Gen Then Exit For '检测到大于 I 的平方根就不用查了。

删除此语句,结果一样,但速度慢得多NextS = S + 1: ReDim Preserve Su(S): Su(S) = INextI:NextI = N'将找到的素数显示到列表框中Show1:If ctExit Then Exit SubT = Timer - TCi = I / T * 0.3 '调整为查找过程中每 0.3 秒刷新一次进度If ctCiFind < Ci Then ctCiFind = CinStr = I & " 以内的素数共 " & S & " 个" & vbCrLf & "查找用时 " & Format(T, "0.00") & " 秒"Label1.Caption = "添加到到文本框 0%"ctStop = FalseIf S > 65535 Then I = 65534 Else I = SList1.Visible = FalseIf ctCiAdd < 1000 Then ctCiAdd = 1000T = TimerCi = 0For J = 1 To IList1.AddItem Su(J)Ci = Ci + 1If Ci > ctCiAdd ThenCi = 0: DoEventsIf ctStop Then Exit ForLabel1.Caption = "添加到到列表框 " & Format(J / S * 100, "0.0") & "%"End IfNextT = Timer - TCi = J / T * 0.3 '调整为添加过程中每 0.3 秒刷新一次进度If ctCiAdd < Ci Then ctCiAdd = CiIf List1.ListCount < S Then List1.AddItem "显示 " & J & "/" & S & " 个"Label1.Caption = nStrList1.Visible = TrueCommand1.Enabled = TrueEnd SubPrivate Sub Form_Load()Me.Caption = "雪花飘飘"Me.BackColor = RGB(100, 100, 255)Label1(0).AutoSize = True: Label1(0).BackStyle = 0Label1(0).Caption = "*": Label1(0).ForeColor = &HFFFFFFRandomizeFor I = 0 To 40If I > 0 Then Load Label1(I): Label1(I).Visible = TrueLabel1(I).Move Me.ScaleWidth * Rnd, Me.ScaleHeight * RndLabel1(I).Tag = Rnd * 7 - 3 & "|" & Rnd * 5 + 1Label1(I).Font.Size = 5 + Rnd * 9NextLabel1(0).Font.Size = 9Timer1.Enabled = True: Timer1.Interval = 50End SubPrivate Sub Timer1_Timer()Dim I As Long, S As Long, T As Single, L As SingleDim nTag As String, X As Single, y As Single, W As SingleRandomizeW = Label1(0).Height * 0.05For I = 0 To Label1.Count - 1nTag = Label1(I).TagS = InStr(nTag, "|")X = Left(nTag, S - 1): y = Mid(nTag, S + 1)S = Int(Rnd * 10)If S = 0 Then X = Rnd * 11 - 5: Label1(I).Tag = X & "|" & yL = Label1(I).Left + X * W: T = Label1(I).Top + y * WIf L < -Label1(I).Width Then L = Me.ScaleWidthIf T < -Label1(I).Height Then T = Me.ScaleHeightIf L > Me.ScaleWidth Then L = -Label1(I).WidthIf T > Me.ScaleHeight ThenT = -Label1(I).HeightLabel1(I).Tag = Rnd * 11 - 5 & "|" & Rnd * 5 + 1End IfLabel1(I).Move L, TNextEnd Sub。

合集下载

VB常用算法

VB常用算法

常用算法1.判断素数素数是指只能被1与自己整除的数是素数,最小的素数是2,如3,5,7等都是素数判断方法一:Private Function Prime(N As Integer)As BooleanDim i As IntegerFor i=2 To N-1(或sqr(N)或N\2)If N Mod i=0 Then Exit ForNext i (或N/i=Int(N/i))If i=N Then Prime=TrueEnd Function判断方法二:Private Function Prime(N As Integer)As BooleanDim i As IntegerFor i=2 To N-1If N Mod i=0 Then Exit FunctionNext iPrime=TrueEnd Function(2)求最大公约数(欧几里德算法,辗转相除法)最大公约数是指两个数最大的公约数Private Function Gcd(byval m As Integer,ByVal n As Integer)As Integer Dim r As Integerr=m Mod nDo while r<>0m=nn=rr=m Mod nLoopGcd=nEnd Function利用递归实现判断最大公约数Private Function Gcd(ByVal m As Integer,ByVal n As Integer)As IntegerDim r As Integerr=m Mod nIf r=0 ThenGcd=nELseM=nn=rGcd=Gcd(m,n)End IfEnd Function(3)求因子算法与求完全数算法Private Sub factor(x As Integer,fn()As Integer)'动态数组fn用以存放所有的因子Dim i As Integer,n As IntegerFor i=1 To XIf x Mod i=0 Thenn=n+1Redim Preserve fn(n)fn(n)=iEnd IfNext iEnd Sub求完全数:完全数:整数N的因子和(其中因子包括1,不包括自身)等于NPrirate Function wanshu(N As Integer)As Boolean 'N为原数,sum为N的因子之和Dim i As Integer,sum As IntegerFor i=1 To N-1If N Mod i=0 Thensum=sum+iEnd IfNext iIf sum=N Then wanshu=TrueEnd Function(4)进制转换N进制--十进制如二进制转换为十进制采用从右向左每个数乘以其对应的幂值,如二进制10111=1×2^0+1×2^1+1×2^2+0×2^3+1×2^4=23,八进制转换为十进制采用从右向左每个数乘以其对应的幂值,如八进制25=5×8^0+2×8^1=21,十六进制转换为十进制采用从右向左每个数乘以其对应的幂值, 如十六进制A7=7×16^0+10×16^1=167(十六进制的范围是从0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个数,其中A表示10,B表示11,依次类推,F表示15)private sub zh1(a as string, N as integer,b as integer)'a为N进制数,b为转换后的十进制数,N 代表某种进制dim p as integer,i as integer,s1 as stringp=0for i=Len(a) to 1 step -1s1=Ucase(Mid(a,i,1))if s1>="A" And s1<="F" Then s1=Asc(s1)-55b=b+val(s1)*N^pp=p+1Next IEnd Sub十进制---- N进制:方法是除N逆序取余法,注意逆序如将十进制188转换为十六进制的方法是,除以16逆序取余法, 所以是274余数188/8 4(余数)23/8 7(余数)2/8 2(余数)Private Sub zh(a as integer,N as integer,b as integer)‘a为十进制数,b为转换后的N进制数,N代表某种进制dim r as integer, s as stringdo until a=0r=a mod n ‘r取余if r>9 then s=Chr(55+r) else s=Cstr(r)b=s & ba=a\NLoopEnd Sub(5)互质数:两个数的最大公约数为1Private Function reprime(a as integer, b as integer) as boolean dim i as integerfor i=2 to aif a mod i=0 and b mod i=0 then exit functionnext ireprime=trueEnd Function(6)回文数:左右对称的数为回文数(如121,13231)方法一:折半判断法Private Function compare(n as long) as booleanDim I as integer, s as string , slen as integers=Cstr(n): slen=Len(s)For i=1 to slen\2if mid(s,I,1)<>Mid(s,slen-i+1,1) Then Exit Function nextcompare=trueEnd Function方法二:根据定义:其逆序数(反序数)和原数相等的数为回文数Private Function compare(n as integer) as Booleandim I as integer, s1 as string,s2 as strings1=cstr(n)For i=1 to len(s1)s2=Mid(s1,I,1) & s2Next Iif s2=s1 then compare=trueEnd Function(7)最小公倍数方法一:最小公倍数=两数乘积/最大公约数private Function gcd(byval m as integer, byval n as integer) as integerdim r as integerdor=m mod nm=nn=rloop until r=0gcd=mFunctionprivate Function lcm(x as integer,y as integer) as integerlcm=(x*y/gcd(x,y))End Function方法二:穷举法,利用计算机运算速度快不易出错的特点,将所有的可能性一一尝试,直到得出结果private Function lcm(x as integer, y as integer) as integerdim i as longfor i=1 to x*yif I mod x=0 and I mod y=0 thenlcm=IExit ForEnd Ifnext IEnd Function(8)判断最大数、最小数Private Sub value(a() as integer, max as integer,min as integer)dim i as integermax=a(1) : min=a(1)for i=2 to ubound(a)if a(i)>max then max=a(i)if a(i)<min then min=a(i)next iEnd Sub(9)阶乘方法一: 方法二:利用递归方式private Function Fact(byval N as integer) as Long private Function fact(n as integer) as longFact=1 if n=1 or n=0 thendo while N>0 fact=1fact=fact*N elseN=n-1 fact=n*fact(n-1) loop end ifEnd Function End Function(10)裴波拉挈数列(递推算法)Fab(n)=fab(n-1)+fab(n-2)private Function Fab(n as integer) as integerif n=1 or n=2 thenfab=1elseFab=Fab(n-1)+fab(n-2) ‘函数名=表达式End ifEnd Function(11)排序—从小到大方法一:使用选择排序法private sub sort(a() as integer)dim I as integer, j as integerdim n as integer, t as integern=Ubond(a)for i=1 to n-1for j=i+1 to nif a(i)>a(j) thent=a(i) : a(i)=a(j): a(j)=tend ifnext jnext iEnd Sub方法二:冒泡排序法private sub sort2(a() as integer)dim I as integer,j as integerdim n as integer, t as integern=ubound(a)for i=1 to n-1for j=1 to n-iif a(j)>a(j+1) thent=a(j): a(j)=a(j+1): a(j+1)=tEnd IfNext jNext IEnd Sub(12)分解质因子:如:120=2*2*2*3*5private sub zhiyinzi(n as integer, a() as integer)dim k as integer, i as integeri=2doif n mod i=0 thenk=k+1 : Redim Preserve a(k) : a(k)=i: n=n\i elsei=i+1End Ifloop until n=1End Sub(13)各位数分离Private Sub command1_click() dim i as integer,j as integer i=inputbox("请输入数值") do while i<>0j=i mod 10print ji=i\10loopEnd Sub。

vb求素数程序

vb求素数程序

需要在窗体放置4个控件,不用设置控件任何属性:Command1,Command2,List1,Label1Dim ctExit As Boolean, ctStop As BooleanDim ctCiFind As Long, ctCiAdd As LongPrivate Sub Form_Load()Me.Caption = "查找 N 以内的所有素数"Label1.Caption = Me.Caption: Label1.AutoSize = TrueCommand1.Caption = "查找": Command2.Caption = "取消"End SubPrivate Sub Form_Resize()Dim S As LongOn Error Resume NextS = Me.TextWidth("A")Command1.Move S, S, S * 8, S * 3Command2.Move S * 10, S, S * 8, S * 3Label1.Move S, Me.ScaleHeight - S * 4, Label1.Width, S * 4List1.Move 0, S * 5, Me.ScaleWidth, Label1.Top - S * 5End SubPrivate Sub Form_Unload(Cancel As Integer)ctExit = True: ctStop = True '保证在查找未结束时能顺利结束程序End SubPrivate Sub Command2_Click()ctStop = True '取消查找End SubPrivate Sub Command1_Click()Static N As LongDim Su() As Long, S As Long, Gen As Long, I As Long, J As LongDim nStr As String, T As Single, Ci As Long'查找 N 以内的所有素数,存入数组 Su(),素数的总个数为 SIf N < 2 Then N = 10000nStr = InputBox("请输入一个大于 1 的整数:", "查找素数", N)If nStr = "" Then Exit SubN = Val(nStr)S = 0: ReDim Su(1)If N > 1 then S = 1: Su(1)=2 '■■根据冰麟轻武的建议,添加了本行ctStop = False: Command1.Enabled = FalseList1.Clear: Label1.Caption = "正在查找 " & N & " 以内的素数 ..."DoEventsT = TimerIf ctCiFind < 10000 Then ctCiFind = 10000'For I = 2 To NFor I = 3 To N Step 2 '■■根据冰麟轻武的建议,将上一行语句改成了本行Gen = Sqr(I) '记忆 I 的平方根For J = 1 To S'进度显示Ci = Ci + 1If Ci > ctCiFind ThenCi = 0: DoEventsIf ctStop Then GoTo Show1Label1.Caption = N & " 以内的素数:" & S & " 个," & Format(I / N * 100, "0.0") & "%"End If'用 I 除以已经找到的素数■■交换下面两行代码,似乎能减少一次Mod 运算If I Mod Su(J) = 0 Then GoTo NextI '能整除,不是素数,检查下一个If Su(J) > Gen Then Exit For '检测到大于 I 的平方根就不用查了。

VB程序设计-素数判断

VB程序设计-素数判断

VB程序设计-素数判断(布局)(运行界面1)(运行界面2)(运行界面3)以下为实测运行通过源代码:Private Sub CommandButton1_Click()Rem 素数判断,算法一Dim n, m As IntegerDim k As Integerm = 0n = Val(Text1.Text) '目标数字If n <= 1 ThenMsgBox "请输入大于1的整数!", vbOKOnly + vbExclamation, "输入错误"Text1.SetFocusText1.Text = "2"Exit SubEnd IfRem 以下是素数判断的算法,适合单个素数的判断For k = 2 To Int(Sqr(n))If n Mod k = 0 Thenm = 1 '标记End IfNext kIf m = 1 ThenText2.Text = n & "不是素数"ElseText2.Text = n & "是素数"End IfEnd SubPrivate Sub CommandButton2_Click()Rem 清空Text1.Text = ""Text2.Text = ""End SubPrivate Sub Commandbutton3_Click()Rem 素数判断,算法二Dim n, k As Integern = Val(Text1.Text)If n <= 1 ThenMsgBox "请输入大于1的整数!", vbOKOnly + vbExclamation, "输入错误"Text1.SetFocusText1.Text = ""Exit SubEnd IfRem 以下是素数判断的算法,也是常用算法,实用性强For k = 2 To Int(Sqr(n))If n Mod k = 0 ThenExit For '可减少不必要的循环End IfNext kIf k > Int(Sqr(n)) ThenText2.Text = n & "是素数" 'k=int(sqr(n))+1ElseText2.Text = n & "不是素数"End IfEnd SubPrivate Sub userForm_Load()Rem 初始化With Label1.FontName = "隶书".FontSize = 30.FontBold = True.ForeColor = vbRedEnd WithLabel1.Caption = "素数判断"Text1.Text = 2Text1.ForeColor = &H80FF&Text2.ForeColor = &H80FF&End SubPrivate Sub Text1_Change()Rem text1的change事件Text2.Text = "请单击判断按钮"End Sub显示窗体按钮代码:Private Sub CommandButton1_Click() UserForm.ShowEnd Sub。

vb常用程序代码

vb常用程序代码

1、求半径为r的圆的面积,要求用户从键盘输入半r。

程序代码:Private Sub Form_click()Const PI = 3.14Dim r%Dim s!r = InputBox("请输入半径r的值:", "求圆的面积") s = PI * r * rForm1.FontSize = 16Print "半径是" + Str(r) + "的圆的面积是" + Str(s) End Sub2、输入三个整数,从小到大顺序输出。

程序代码:Private Sub Form_click()a = InputBox("a")b = InputBox("b")c = InputBox("c")Print "排序前:"; a, b, cIf a > b Then t = a: a = b: b = tIf a > c Then t = a: a = c: c = tIf b > c Then t = b: b = c: c = tPrint "排序后:"; a, b, cEnd Sub3、输入三个整数,从大到小顺序输出。

程序代码:Private Sub Form_click()a = InputBox("a")b = InputBox("b")c = InputBox("c")Print "排序前:"; a, b, cIf a <b Then t = a: a = b: b = tIf a < c Then t = a: a = c: c = tIf b < c Then t = b: b = c: c = tPrint "排序后:"; a, b, cEnd Sub4、输入x的值,输出对应的值。

浙江省中职学校计算机单招单考VB算法素数

浙江省中职学校计算机单招单考VB算法素数

四、素数
练习:输出10~100能被7整除的数,且每行输出5个。

四、素数
素数(质数):就是一个大于等于2的整数,并且只能被1和本身整除,而不能被其他整除的数。

判别某数M是否是素数的经典算法是:对于M,从I=2,3,4……,M-1依次判别能否被I整除,只要有一个能整除,M就不是素数,否则M是素数。

例1.编写命令按钮单击事件,从键盘输入一个整数,判断它是否是素数。

例2.编写命令按钮单击事件,输出3~500之间所有素数,并求和。

例3.编写命令按钮单击事件,随机产生20个10~200的随机整数,并输出其中的所有素数,每行5个,并输出共有多少个。

练习1:编写命令按钮单击事件,输出200~400之间所有素数。

练习2:编写命令按钮单击事件,输入40个100~200的整数,输出其中的所有素数及个数。

VB程序

VB程序

1,编程输入10名短跑运动员的姓名及其100米跑成绩,输出最好成绩的运动员姓名及其成绩,再显示低于平均成绩的所有运动员姓名及其成绩。

Private Sub Form_click()Dim a(10) As String, b(10) As SingleDim I As Integer, avg As Single, max As Single, first As StringFor I = 1 To 10a(I) = InputBox("请输入第" & I & "名运动员的姓名:")b(I) = InputBox("请输入第" & I & "名运动员的成绩:")Print "第" & I & "号选手" & a(I) & "的成绩为:" & b(I)Next Ifirst = a(1)max = b(1)PrintFor I = 2 To 10If b(I) > max Thenmax = b(I)first = a(I)End IfNext IPrint "成绩最好的运动员是" & first & ",成绩为:"; maxPrintFor I = 1 To 10s = s + b(I)Next Iavg = s / 10Print "所有运动员的平均成绩为:" & avgPrintFor I = 1 To 10If b(I) < avg ThenPrint a(I) & "运动员的成绩低于平均成绩,他的成绩为:" & b(I)End IfNext IEnd Sub2、素数(质数)是一个正整数,除了1和它本身之外,不能被其它任何正整数整除。

vb程序改错和程序设计

【程序改错】'题目:该程序的功能是求出100到200之间的全部素数,并且按每行4个、每个数据之间有10个空格的格式输出。

'注意:不可增加或删除程序行,也不可以更改程序结构' Private Sub Form_Click()dim k as integer,i as integer,j as integerk = 0For i = 100 To 200'**********FOUND**********For j = 1 To i - 1If i Mod j = 0 Then Exit ForNext jIf j = i Then'**********FOUND**********Print i; Tab(10);k = k + 1'**********FOUND**********If k Mod 5 = 0 Then Print;End IfNext iEnd Sub答案:1). For j = 2 To i - 1 或For j = 2 To -1 + i2). Print i; Space(10);3). If k Mod 4 = 0 Then Print━━━━━━━━━━━━━━━━'【程序设计】' '题目:(事件)单击窗体。

(响应)求100以内偶数的和,并将结果输出在窗体上。

将结果存入变量SUM中答案:26__________________________________Dim i As IntegerFor i = 1 To 100If i Mod 2 = 0 Thensum = sum + iEnd IfNextPrint sum'【程序改错】'------------------------------------------------'题目:在下面的程序段中过程pd可以判断任意三个数能' 否构成三角形的三边,利用该过程的判定结果,对能构成三角形的计算其面积,构不成的显示"不能构成三角形Option ExplicitPrivate Sub Form_Click()'**********FOUND**********Dim x%, y%, z%, s%, b As Boolean,h as Singlex = InputBox("请输入三角形的边长")y = InputBox("请输入三角形的边长")z = InputBox("请输入三角形的边长")= InputBox("请输入三角形的边长")b = pd(x, y, z)h = (x + y + z) / 2'**********FOUND**********If not b Thens = Sqr(h * (h - x) * (h - y) * (h - z))Print "三角形面积是"; sElsePrint "不能构成三角形"End IfEnd Sub'**********FOUND**********Public Function pd( ) As BooleanIf x > 0 And y > 0 And z > 0 And x + y > 0 And x + z > y And y + z > x Thenpd = TrueElsepd = FalseEnd IfEnd Function答案:1). Dim ★x%★, ★y%★,★z%★, ★s!★, ★b★As Boolean★, ★h As Single2). If b Then3). Public Function pd(x%, y%, z%) As Boolean━━━━━━━━━━━━━━━━三、程序设计共1题(共计15分)'题目:(事件)双击窗体。

vb程序设计模板 精心整理 很多程序设计都可以套此模板


Next j
Picture1.Print
Next i
End Sub
Private Sub Command2_Click()
Dim sign(4, 5) As String * 1, i As Integer, j As Integer
Dim av As Single
Private Sub Command3_Click()
Picture1.Cls
Text1.Text = ""
End Sub
Private Sub Command4_Click()
End
End Sub
Vb程序结构控制(四)
这个是生成数组并求最大数所在行和列
List1.AddItem "本区间无幻影数"
End If
End Sub
Private Function prime(x As Integer) As Boolean
Dim i As Integer
For i = 2 To x
If x Mod i = 0 Then Exit For
Exit For
End If
Next i
If i = n Then
Label2.Caption = Str(n) + " 是一个素数"
Else
Label2.Caption = Str(n) + " 不是一个素数"
End Function
文件
Private Sub Dir1_Change()
File1.Path = Dir1.Path
End Sub

VB图示素数分布 设计报告

图示素数分布设计报告学院班级学号姓名成绩一、设计思路1.要达到的目的①培养综合利用VB语言进行程序设计的能力②培养综合利用VB的标准控件进行设计。

2.关键问题的解决①筛选法求素数的算法。

②图形方块的绘制: 在图片框上用Line方法,且使用BF参数即可画出色块。

二、模块之间的调用关系,或程序流程图三、部分程序关键源代码及注释包括事件处理过程和功能函数,还有必要的声明。

变量声明部分声明本程序所需要的变量和数组。

要添加必要的程序说明语句。

事件处理包括下面的主要事件:Form_Load()作一些初始化的工作。

设定初值大小并描绘初始界面,记录当前窗口的大小。

Private Sub HScroll1_Change()Private Sub HScroll1_Scroll()Private Sub VScroll1_Change()Private Sub VScroll1_Scroll()水平滚动条变化事件和垂直滚动条变化事件,将筛选区间初值设置为10000倍的水平值加垂直滚动条的值。

同时依据显示个数修改区间终值。

Private Sub Update()根据初值和区间,对指定范围内的数进行筛选,并以图形显示出来。

Private Sub Form_Resize()调整窗口大小的事件处理。

如果目标大小大于原始大小,则对滚动条和图片框进行大小和位置的调整(位置调整只适用于垂直滚动条)。

四、主要技术问题的描述1. 筛选法求素数的算法。

这个方法教材中有例题,为了方便设计,提供一个用筛选法求100以内素数的程序片断供分析原理。

Private Sub Command1_Click()Dim a(100) As BooleanDim n As Integer, m As Integer‘先假设都是For n = 2 To 100a(n) = TrueNext‘把不是的去掉For n = 2 To 10For m = n + 1 To 100If m Mod n = 0 Then a(m) = FalseNextNext‘输出是的For n = 2 To 100If a(n) Then Print n;NextEnd Sub四、设计方案的完善及目前存在的问题1.设计方案要完善的地方①点击方框,数字颜色显示需要更明晰一些,除素数、非素数需要用不同颜色显示外,可以再用第三种颜色显示已经出现过的素数。

纯原创~Visual Basic 编程精选

Visual Basic 编程精选1、素数判断方法一:Dim n As Integer, i As Integer, c As Integer n = Val(Text1)For i = 1 To nIf n Mod i = 0 Then c = c + 1NextIf c = 2 ThenText2 = n & "是素数"ElseText2 = n & "不是素数"End If方法二:Dim n As Integer, i As Integern = Val(Text1)For i = 2 To n - 1If n Mod i = 0 Then Exit ForNextIf i > n - 1 ThenText2 = n & "是素数"ElseText2 = n & "不是素数"End If2、求1000以内同构数(一个数出现在它平方数的右端,如5和25、25和625)Dim n As Single, t As Single, k As Integer For n = 1 To 1000t = n * nk = Len(CStr(n))If Right(CStr(t), k) = CStr(n) Then List1.AddItem nNext3、求一个正整数的所有因子Dim n As Integer, i As Integern = Val(Text1)For i = 1 To nIf n Mod i = 0 Then List1.AddItem i Next 4、统计一个字符串中大小写字母和数字个数Dim s As String, c As String * 1Dim n1 As IntegerDim n2 As IntegerDim n3 As IntegerDim i As Integers = Text1.TextFor i = 1 To Len(s)c = Mid(s, i, 1)If c >= "A" And c <= "Z" Thenn1 = n1 + 1ElseIf c >= "a" And c <= "z" Thenn2 = n2 + 1ElseIf c >= "0" And c <= "9" Thenn3 = n3 + 1End IfNext iText2.Text = n1Text3.Text = n2Text4.Text = n35、求两个数的最大公约数最小公倍数Dim m As Integer, n As Integer, r As Integer m = Val(Text1)n = Val(Text2)Dor = m Mod nm = nn = rLoop While r <> 0Text3 = mText4 = V al(Text1) * Val(Text2) / Val(Text3)6、牛顿迭代求x^5-3*x^2+2*x+1=0在0附近的根Dim x1 As Double, x2 As Double, eps As DoubleDim f As Double, d As Doubleeps = Val(Text1) ‘误差范围x2 = 0Dox1 = x2f = x1 ^ 5 - 3 * x1 ^ 2 + 2 * x1 + 1d = 5 * x1 ^ 4 - 6 * x1 + 2x2 = x1 - f / dLoop Until Abs(x2 - x1) < epsText2 = x27查找100~200内素数,五个换行Dim n As Integer, k As Integer, count As Integercount = 0For n = 100 To 200For k = 2 To n - 1If n Mod k = 0 Then Exit ForNext kIf k = n ThenPrint n;count = count + 1If count Mod 5 = 0 Then PrintEnd IfNext n8、求1000以内完全数(因子(不包括自身)之和等于其本身的数)Dim n As Integer, i As Integer, sum As Integer For n = 1 To 1000sum = 0For i = 1 To n - 1If n Mod i = 0 Thensum = sum + iEnd IfNext iIf sum = n Then List1.AddItem n Next n 9、随机产生20个奇数Dim n As Integer, a As IntegerRandomizeFor n = 1 To 20Doa = Int(90 * Rnd) + 10Loop Until a Mod 2 <> 0Picture1.Print a;If n Mod 5 = 0 Then Picture1.Print Next n10、判断升序数、降序数Dim n As Integer, k As Integer, s As String n = Val(Text1.Text)s = CStr(n)For k = 1 To Len(s) - 1If Mid(s, k, 1) >= Mid(s, k + 1, 1) Then Exit ForNext kIf k > Len(s) - 1 ThenMsgBox n & "是升序数"ElseMsgBox n & "不是升序数"End IfDim n As Integer, k As Integer, s As Stringn = Val(Text1.Text)s = CStr(n)For k = 1 To Len(s) - 1If Mid(s, k, 1) <= Mid(s, k + 1, 1) Then Exit ForNext kIf k > Len(s) - 1 ThenMsgBox n & "是降序数"ElseMsgBox n & "不是降序数"End If11、判断回文数方法一:Dim k As Integer, s As Strings = Text1.TextFor k = 1 To Len(s) / 2If Mid(s, k, 1) <> Mid(s, Len(s) - k + 1, 1) Then Exit ForNext kIf k > Len(s) / 2 ThenMsgBox s & "是回文数"ElseMsgBox s & "不是回文数"End If方法二:Dim k As Integer, s As String, s1 As String s = Text1.TextFor k = 1 To Len(s)s1 = s1 & Mid(s, Len(s) - k + 1, 1) Next kIf s = s1 ThenMsgBox s & "是回文数"ElseMsgBox s & "不是回文数"End If12、产生10个互不相同且个位数为5的数Dim t As IntegerDim i As IntegerDim n As IntegerDim a(10) As IntegerRandomizeDoDot = Int(Rnd * 990) + 10Loop Until Right(CStr(t), 1) = "5"For i = 1 To nIf t = a(i) Then Exit ForNext iIf i = n + 1 Thenn = n + 1a(n) = tEnd IfLoop Until n = 10For i = 1 To 10Print a(i);If i Mod 5 = 0 Then PrintNext iPrint13、数组排序产生数据:Dim n As IntegerRandomizeFor n = 1 To 10a(n) = Int(Rnd * 90) + 10Text1.Text = Text1 & a(n) & " "Next n选择排序:Dim i As Integer, j As Integer, t As Integer For i = 1 To 9For j = i + 1 To 10If a(j) < a(i) Thent = a(i)a(i) = a(j)a(j) = tEnd IfNext jNext iFor i = 1 To 10Text2 = Text2 & a(i) & " "Next i冒泡排序:Dim i As Integer, j As Integer, t As Integer For i = 1 To 9For j = 1 To 10 - iIf a(j) > a(j + 1) Thent = a(j)a(j) = a(j + 1)a(j + 1) = tEnd IfNextNextFor i = 1 To 10Text3 = Text3 & a(i) & " "Next i插入排序:Dim i As Integer, j As Integer, t As Integer, k As IntegerFor i = 2 To 10t = a(i)If a(i) < a(1) Thenk = 0ElseFor j = i - 1 To 1 Step -1If a(i) > a(j) Thenk = jExit ForEnd IfNext jEnd IfFor j = i - 1 To k + 1 Step -1a(j + 1) = a(j)Next ja(k + 1) = tNext iFor i = 1 To 10Text4 = Text4 & a(i) & " "Next i14、统计数据中各数字个数Dim a(0 To 9) As IntegerDim s As StringDim c As String * 1Dim k As Integer, m As Integers = Text1.TextIf IsNumeric(s) = False ThenText2.Text = "输入数据错误"Exit SubElseFor k = 1 To Len(s)c = Mid(s, k, 1)If IsNumeric(c) = True Thena(c) = a(c) + 1End IfNext kEnd IfText2.Text = ""m = 0For k = 0 To 9If a(k) <> 0 ThenText2 = Text2 & k & ":" & a(k) & Chr(13) & Chr(10)m = m + 1End IfNext kText2 = Text2 & "数字种类:" & m15、找出3*4数组中最大最小元素及其坐标Dim a(3, 4) As IntegerPrivate Sub Command1_Click()Dim i As Integer, j As IntegerDim i As Integer, j As IntegerDim max As Integer, maxi As Integer, maxj As IntegerDim min As Integer, mini As Integer, minj As IntegerRandomizeFor i = 1 To 3 ‘产生数组For j = 1 To 4a(i, j) = Int(Rnd * 90)Picture1.Print a(i, j);Next jPicture1.PrintNext imax = a(1, 1): maxi = 1: maxj = 1min = a(1, 1): mini = 1: minj = 1For i = 1 To 3For j = 1 To 4If a(i, j) > max Thenmax = a(i, j)maxi = imaxj = jEnd IfIf a(i, j) < min Thenmin = a(i, j)mini = iminj = jEnd IfNext jNext iPicture1.Print "最大元素A(" & maxi & "," & maxj & ")=" & maxPicture1.Print "最小元素A(" & mini & "," & minj & ")=" & minEnd Sub16、求数组各方向和 (定义略)For i = 1 To 5 For j = 1 To 5sum = sum + a(i, j) Next j Next iPicture1.Print "所有元素之和" & sum For i = 1 To 5sum2 = sum2 + a(i, i) sum3 = sum3 + a(i, 6 - i) Next iPicture1.Print "主对角线元素之和" & sum2Picture1.Print "副对角线元素之和" & sum3For i = 1 To 5sumside = sumside + a(i, 1) + a(i, 5) Next i For j = 1 To 5sumside = sumside + a(1, j) + a(5, j) Next jPicture1.Print "所有靠边元素之和" & sumside - a(1, 5) - a(5, 1)17、求一组成绩中各成绩的名次Dim a(10) As IntegerDim b(10) As IntegerDim i As Integer, j As Integer Randomize For i = 1 To 10a(i) = Int(Rnd * 51) + 50Text1.Text = Text1.Text & a(i) & " " Next iFor i = 1 To 10 b(i) = 1For j = 1 To 10If a(j) > a(i) Then b(i) = b(i) + 1 End If Next jText2.Text = Text2 & b(i) & " "Next i18、找出100至200间最大最小素数Dim a() As Integer, i As Integer, k As Integer, n As Integer, max As Integer, min As Integer, m As IntegerFor k = 100 To 200 For i = 2 To k - 1If k Mod i = 0 Then Exit For NextIf i > k - 1 Then n = n + 1ReDim Preserve a(n) a(n) = k End If Next k max = a(1) min = a(1)For m = 1 To UBound(a) If a(m) > max Then max = a(m) End IfIf a(m) < min Then min = a(m) End If Next mPrint max; min18、将大于2的偶数表示为两素数的和 Private Sub Command1_Click()Dim n As Integer, a As Integer, b As Integer n = Val(Text1) For a = 2 To n - 1 b = n - aIf prime(a) = True And prime(b) = True ThenText2 = a & Str(b) Exit Sub End IfNextEnd SubPrivate Function prime(m As Integer) As BooleanDim k As IntegerIf m <= 1 Then prime = False: Exit FunctionFor k = 2 To m - 1If m Mod k = 0 Then prime = False: Exit FunctionNextprime = TrueEnd Function19、求出介于M,N间所有包含四个因子的数(因子不包括1和本身)Private Sub Command1_Click()Dim m As Integer, n As Integer, x As Integer, a As Integerm = Val(Text1):n = Val(Text2)For x = m To nIf sum(x) = True ThenList1.AddItem xEnd IfNextEnd SubPrivate Function sum(n As Integer) As BooleanDim k As Integer, i As Integerk = 0For i = 2 To n - 1If n Mod i = 0 Thenk = k + 1ElseIf x Mod i <> 0 Then Exit Function End IfNext iIf k = 4 Thensum = TrueElsesum = FalseEnd IfEnd Function 20、魔方数Private Sub Command1_Click()Dim a() As Integer, n As Integer, i As Integer, j As IntegerDim i1 As Integer, j1 As Integern = InputBox("") '阶数需为奇数ReDim a(n, n)i = 1: j = (n + 1) / 2: a(i, j) = 1'将1放在第一行中间一列For k = 2 To n * n'依次插入其他数i1 = i - 1: j1 = j + 1 '各个数的理论插入位置(前一个数的右上方)If i1 = 0 Then i1 = n'理论行溢出,则放入最后行If j1 > n Then j1 = 1'理论列溢出,则放入第一列'If i1 = 0 And j1 > n Then i1 = i + 1: j1 = j '理论行列溢出,则放入前一个数正下方(此句与上两句重复,可注释)If a(i1, j1) <> 0 Then i1 = i + 1: j1 = j '理论位置已有数存在,则放入前一个数正下方i = i1: j = j1a(i, j) = kNext kFor i = 1 To n'依次输出到指定位置For j = 1 To nPrint a(i, j);NextPrintNextEnd Sub。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档