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常用算法介绍编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(vb常用算法介绍)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为vb常用算法介绍的全部内容。
一、累加算法如果在设计过程中遇到求1+2+3+……+100等连加问题时,就可以用累加算法来解决.累加算法的一般做法是设一个变量 s,作为累加器使用,初值为0,设一个变量用来保存加数.一般在累加算法中的加数都是有规律可循,可结合循环程序来实现。
一个循环程序的设计,如果以下三方面确定下来:变量的赋初值、循环体的内容、循环结束条件,那么根据循环语句的格式,就很容易写出相应的循环程序。
例:求1+2+3++100的累加和,并打印输出分析:设累加器S,初值为0,加数用变量I表示当I=1时,累加器S= S+I = 0+1=1当I=2时,累加器S= S+I =1+2= 3当I=3时,累加器S=S+I =3+3 =6当I=4时,累加器S=S+I =6+4 =10……当I=100时,累加器S=S+100=1+2+3+……+99+100=5050不难看出,I的值从1变化到100的过程中,累加器均执行同一个操作:S=S+I,S=S+I的操作执行了100次,所以该程序段可写成:Dim I As Integer, S As IntegerS = 0 ‘给累加器s赋初值For S = 1 To 100S= S + I ‘I既作为循环变量,又作为加数Next IPrint "1+2+……100="; S考虑一下:语句Print ”1+2+……100="; S可以放在循环体中吗?延伸一下:上述算法对数值型数据,执行的是累加操作,如果对字符串型数据,完成的是字符串的连接。
VB基本算法
VB基本算法1、判断一个数是不是素数PrivateSubForm_Click()num=Val(InputBo某(\请输入整数num\Fori=2Tonum-1 IfnumModi=0ThenPrint\整数\不是素数\E某itForEndIfNe某tiIfi>num-1ThenPrint\整数\是素数\EndSub2、1~100内素数之和PrivateSubForm_Click()Dimum%um=1Fori=2To100Forj=2Toi-1IfiModj=0ThenE某itForEndIfNe某tjIfj>i-1Thenum=um+i:PrintiNe某tiPrint\以内的素数之和为:\EndSub3、杨辉三角OptionBae1PrivateSubForm_Click()Dima(10,10)Fori=1To10a(i,1)=1a(i,i)=1Ne某tiFori=3To10Forj=2Toi-1a(i,j)=a(i-1,j-1)+a(i-1,j)Ne某tjNe某tiFori=1To10Forj=1ToiPrinta(i,j);\Ne某tjPrintNe某tiEndSub1111...3574、求数列4精确到最后一项的绝对值小于0.0001PrivateSubForm_Click()Dima!,n!n%=1Doa=1/(2某n-1)a=a某(-1)^(n-1)n=n+an=n+1LoopUntilAb(a)<0.0001n=n某4PrintnEndSub5、数组输入输出OptionBae1Dima()PrivateSubForm_Click()n%=Val(InputBo某(\请输入第一维的上界\m%=Val(InputBo某(\请输入第二维的上界\ReDima(n,m)RandomizeFori=1TonForj=1Toma(i,j)=Int(Rnd某100)'或者a(i,j)=Val(InputBo某(\请输入数组元素\Ne某tjNe某tiFori=1TonForj=1TomPrinta(i,j);\\Ne某tjPrintNe某tiEndSub6、数组的转置PrivateSubForm_Click()Dima%(3,4),b%(4,3)Print\转置前:\Fori=1To3Forj=1To4a(i,j)=Int(Rnd某100)Printa(i,j);\\Ne某tjPrintNe某tiFori=1To4Forj=1To3b(i,j)=a(j,i)Ne某tjNe某tiPrintPrint\转置后:\Fori=1To4Forj=1To3Printb(i,j);\\Ne某tjPrintNe某tiEndSub7、数组的插入OptionBae1Dima()'或者a(i,j)=Val(InputBo某(\请输入数组元素\PrivateSubForm_Click()n%=Val(InputBo某(\请输入第一维的上界\ReDima(n)Print\插入前:\Fori=1Tona(i)=Int(Rnd某100)'或者a(i,j)=Val(InputBo某(\请输入数组元素\Printa(i);\\Ne某ticol%=Val(InputBo某(\请输入要插入的位置\num=Val(InputBo某(\请输入要插入的数\ReDimPreervea(n+1)Fori=n+1Tocol+1Step-1a(i)=a(i-1)Ne某tia(col)=numPrintPrint\插入后:\Fori=1Ton+1Printa(i);\\Ne某tiEndSub8、数组元素的删除OptionBae1Dima()PrivateSubForm_Click()n%=Val(InputBo某(\请输入第一维的上界\ReDima(n)Print\删除前:\Fori=1Tona(i)=Int(Rnd某100)'或者a(i,j)=Val(InputBo某(\请输入数组元素\Printa(i);\\Ne某ticol%=Val(InputBo某(\请输入要删除的位置\num=a(col)Fori=colTon-1a(i)=a(i+1)Ne某tia(i)=0PrintPrint\删除后:\Fori=1TonPrinta(i);\\Ne某tiEndSub9、找一列数中最大(最小)的一个数及其下标OptionBae1Dima()PrivateSubForm_Click()n%=Val(InputBo某(\请输入第一维的上界\ReDima(n)Print\原数列:\Fori=1Tona(i)=Int(Rnd某100)'或者a(i,j)=Val(InputBo某(\请输入数组元素\Printa(i);\\Ne某tiMa某=a(1)col=1Fori=2TonIfMa某<a(i)ThenMa某=a(i)col=iEndIfNe某tiPrintPrint\最大的数是:\下标为:\EndSub10冒泡排序对数组a()进行冒泡排序OptionBae1PrivateSubForm_Click()Dima%(10)RandomizeFori=1To10a(i)=Int(Rnd某100)Ne某tiPrint\排序前:\PrintFori=1To10Printa(i);\Ne某tiPrintFori=1To9'冒泡排序Forj=1To10-iIfa(j)>a(j+1)Thent=a(j)a(j)=a(j+1)a(j+1)=tEndIfNe某tjNe某tiPrint\排序后\PrintFori=1To10Printa(i);\Ne某tiEndSub11、数列的逆置OptionBae1PrivateSubForm_Click()Dima%(10)RandomizeFori=1To10a(i)=Int(Rnd某100)Ne某tiPrint\逆置前:\PrintFori=1To10Printa(i);\Ne某tiPrintFori=1To10/2'逆置t=a(i)a(i)=a(10-i+1)a(10-i+1)=tNe某tiPrint\逆置后\PrintFori=1To10Printa(i);\Ne某tiEndSub12、用数组以及传递至的方式进行参数传递编写过程,实现查找一个数列中最大的元素和它所在的位置OptionBae1Dima()PrivateSubf(b%(),ma某%,col%)ma某=b(1)col=1Fori=2ToUBound(b,1)Ifma某<b(i)Thenma某=b(i)col=iEndIfNe某tiEndSubPrivateSubForm_Click()Dimcolumn%,ma某%Dima%(10)Randomize Print\原数列:\Fori=1To10a(i)=Int(Rnd某100)'或者a(i,j)=Val(InputBo某(\请输入数组元素\Printa(i);\\Ne某tiCallf(a(),ma某,column)PrintPrint\最大的数是:\\下标为:\EndSub13、拆分一个整数PrivateSubForm_Click()num%=Val(InputBo某(\请输入待拆分的整数\Print\待拆分的数是\PrintWhilenum<>0某=numMod10Print某;\num=num/10WendEndSub14、拆分一个整数(递归)PrivateSubf(某%)If某<10ThenPrint某;\\ElePrint某Mod10;\\'a%=Int(某/10)f(某\\10)'或者f(a)EndIfEndSubPrivateSubForm_Click()num%=Val(InputBo某(\请输入待拆分的整数\Print\待拆分的数是\PrintfnumEndSub15、阶乘循环法:Fori=1ton=某ne某ti递归法Functionf(n%)ifn=1thenf=1elef=n某f(n-1)EndifEndFunction16、求最大公约数1、循环法PrivateFunctionf(ByVal某%,ByValy%)Dimr%If某<yThent=某某=yy=tEndIfWhiley<>0r=某Mody某=yy=rWendf=某EndFunctionPrivateSubForm_Click()m%=Val(InputBo某(\第一个数是\n%=Val(InputBo某(\第二个数是\Print\输入的两个数是\Printr=f(m,n)Print\最大公约数是\\最小公倍数是\EndSub2、递归法PrivateFunctionf(ByVal某%,ByValy%)Dimr%r=某ModyIfr=0Thenf=yEle某=yy=rf=f(某,y)EndIfEndFunctionPrivateSubForm_Click()m%=Val(InputBo某(\第一个数是\n%=Val(InputBo某(\第二个数是\Print\输入的两个数是\Printr=f(m,n)Print\最大公约数是\\最小公倍数是\EndSub。
vb程序设计教程参考答案
1、B2、A3、B4、答:属性:红色、充满氢气;事件:松手、针刺;方法:飞走、爆破。
5、答:事件是指对象能够识别并作出反映的外部刺激。
事件驱动又称消息驱动,事件驱动程序设计是指每个事件对应有相应的程序代码,仅在该事件发生时,该段代码才会被执行。
事件发生的顺序决定了代码执行的顺序,因此每次执行应用程序时,程序代码并不是按照程序编写的顺序来执行的。
6、答:VB是一个包括界面设计、程序编码、调试、编译并创建可执行程序的集成开发环境。
VB的集成开发环境的主界面中包含:标题栏、菜单栏、工具栏、控件箱、工程资源管理器、属性窗口、“窗体布局”窗口、窗体设计器、代码编辑器等元素组成。
7、答: VB菜单条通常情况下有:文件、编辑、视图、工程、格式、调试、运行、查询、图表、工具、外接程序、窗口、帮助等13项菜单项组成。
8、答:工具栏可自行定义。
标准工具栏中通常情况下有:添加标准exe工程、添加窗体、菜单编辑器、打开工程、保存工程、剪切、复制、粘贴、查找、撤消、重复、启动、中断、结束、工程资源管理器、属性窗口、窗体布局窗口、对象浏览器、工具箱、数据视图窗口、可视化元件管理器等按钮组成。
9、答:创建VB应用程序的一般步骤为:创建界面;设置窗体和控件属性;编写代码;保存工程;运行并调试程序;检查并排除错误;创建可执行文件。
10、Private Sub Command1_Click()Label1.Caption = "I love vb,I hate vb"End Sub1、2、3、S1 输入待判断自然数: N(N>=2);S2 i=2;S3 判断i是否小于N-1,若不是转S5S4 判断N除以i的余数是否为0,如果不是则i=i+1转S3;S5 判断i是否等于N,若是输出“是素数”,否则输出“不是素数”。
4、S1 输入待判断自然数: N;S2 将N转换成字符S,计算S的长度K;S3 i=1;S4 判断i是否小于K-1,若不是转S6;S5 判断S中的第i位和第K-i+1位是否相等,如果是则i=i+1转S4,如果不是则转S6;S6 判断i是否是中间位数,若是输出“是回文数”,否则输出“不是回文数”。
VB代码
1、判断素数Option ExplicitPrivate Sub Command1_Click()Dim i As IntegerFor i = 100 To 300If prime(i) Then List1.AddItem iNext iEnd SubPrivate Function prime(ByVal n As Integer) As Boolean Dim i As Integerprime = FalseFor i = 2 To n - 1If n Mod i = 0 Then Exit ForNext iIf i > n - 1 Then prime = TrueEnd Function2、求因子和Option ExplicitPrivate Sub Command1_Click()Dim n As Integern = Val(Text1.Text)Text2.Text = CStr(yzh(n))End SubPrivate Function yzh(ByVal n As Integer) As Integer Dim i As IntegerFor i = 2 To n - 1If n Mod i = 0 Then yzh = yzh + iNext iEnd Function3、阶乘Private Sub Command1_Click()Dim i As Integer, n As Integer, s As Longn = Val(Text1.Text)For i = 2 To 2 * n Step 2s = s + fact(i)Next iText2.Text = CStr(s)End SubPrivate Function fact(ByVal k As Integer) As LongDim i As Integerfact = 1Dofact = fact * kk = k - 1Loop Until k = 1End Function4、升/降序数升序数Option ExplicitPrivate Sub Command1_Click()Dim n As Integer, i As IntegerRandomizeFor i = 1 To 20n = Int(Rnd * 900) + 100Text1.Text = Text1.Text & CStr(n) & " "If i Mod 5 = 0 Then Text1.Text = Text1.Text & vbCrLf If judge(n) Then List1.AddItem nNext iEnd SubPrivate Function judge(ByVal n As Integer) As BooleanDim i As Integer, s As Strings = CStr(n)judge = FalseFor i = 1 To Len(s) - 1If Mid(s, i, 1) >= Mid(s, i + 1, 1) Then Exit Function Next ijudge = TrueEnd Function降序数Option ExplicitPrivate Sub Command1_Click()Dim n As Integer, i As IntegerRandomizeFor i = 1 To 20n = Int(Rnd * 900) + 100Text1.Text = Text1.Text & CStr(n) & " "If i Mod 5 = 0 Then Text1.Text = Text1.Text & vbCrLf If judge(n) Then List1.AddItem nNext iEnd SubPrivate Function judge(ByVal n As Integer) As BooleanDim i As Integer, s As Strings = CStr(n)judge = FalseFor i = 1 To Len(s) - 1If Mid(s, i, 1) <= Mid(s, i + 1, 1) Then Exit Function Next ijudge = TrueEnd Function5、求数组元素之和Option ExplicitOption Base 1Private Sub Command1_Click()Dim a(10) As Integer, i As Integer, k As IntegerFor i = 1 To 10a(i) = Int(Rnd * 90) + 10Picture1.Print a(i);Next iCall total(a, k)Text1.Text = CStr(k)End SubPrivate Sub total(a() As Integer, sum As Integer)Dim i As IntegerFor i = 1 To UBound(a)sum = sum + a(i)Next iEnd Sub6、最大公约数Option ExplicitPrivate Sub Command1_Click()Dim m As Integer, n As Integerm = Val(Text1.Text)n = Val(Text2.Text)Text3.Text = CStr(gcd(m, n))End SubPrivate Function gcd(ByVal m As Integer, ByVal n As Integer) As Integer Dim r As IntegerDor = m Mod nm = nn = rLoop Until r = 0gcd = mEnd Function7、最小公倍数法一Option ExplicitPrivate Sub Command1_Click()Dim m As Integer, n As Integerm = Val(Text1.Text)n = Val(Text2.Text)Text3.Text = CStr(m * n / gcd(m, n))End SubPrivate Function gcd(ByVal m As Integer, ByVal n As Integer) As Integer Dim r As IntegerDor = m Mod nm = nn = rLoop Until r = 0gcd = m法二Option ExplicitPrivate Sub Command1_Click()Dim m As Integer, n As Integerm = Val(Text1.Text)n = Val(Text2.Text)Text3.Text = CStr(lcd(m, n))End SubPrivate Function lcd(ByVal m As Integer, ByVal n As Integer) As Integer Dim r As Integer, a As Integera = m * nDor = m Mod nm = nn = rLoop Until r = 0lcd = a / mEnd Function8、逆序法一、书P137法二Private Sub Command1_Click()Dim i As IntegerFor i = 1000 To 9999If i = nx(i) Then List1.AddItem CStr(i)Next iEnd SubPrivate Function nx(ByVal n As Integer) As IntegerDim st As String, i As IntegerDim s As Strings = CStr(n)For i = 1 To Len(s)st = Mid(s, i, 1) & stNext inx = Val(st)法三Option ExplicitPrivate Sub Command1_Click()Dim i As IntegerFor i = 1000 To 9999If judge(i) Then List1.AddItem CStr(i)Next iEnd SubPrivate Function judge(ByVal n As Integer) As Boolean Dim st As String, i As IntegerDim s As Stringjudge = Falses = CStr(n)For i = 1 To Len(s)st = Mid(s, i, 1) & stNext iIf s = st Then judge = TrueEnd Function。
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常用程序代码
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算法(Algorithm):计算机解题的基本思想方法和步骤。
算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。
通常使用自然语言、结构化流程图、伪代码等来描述算法。
一、计数、求和、求阶乘等简单算法此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意用来表示计数、和、阶乘的变量的初值。
例:用随机函数产生100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数并打印出来。
本题使用数组来处理,用数组a(1 to 100)存放产生的确100个随机整数,数组x(1 to 10)来存放个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数。
即个位是1的个数存放在x(1)中,个位是2的个数存放在x(2)中,……个位是0的个数存放在x(10)。
将程序编写在一个GetTJput过程中,代码如下:Public Sub GetTJput()Dim a(1 To 100) As IntegerDim x(1 To 10) As IntegerDim i As Integer, p As Integer'产生100个[0,99]范围内的随机整数,每行10个打印出来For i = 1 To 100a(i) = Int(Rnd * 100)If a(i) < 10 ThenForm1.Print Space(2); a(i);ElseForm1.Print Space(1); a(i);End IfIf i Mod 10 = 0 Then Form1.PrintNext i'统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数,并将统计结果保存在数组x(1),x(2),...,x(10)中,将统计结果打印出来 For i = 1 To 100p = a(i) Mod 10 ' 求个位上的数字If p = 0 Then p = 10x(p) = x(p) + 1Next iForm1.Print "统计结果"For i = 1 To 10p = iIf i = 10 Then p = 0Form1.Print "个位数为" + Str(p) + "共" + Str(x(i)) + "个"Next iEnd Sub二、求两个整数的最大公约数、最小公倍数分析:求最大公约数的算法思想:(最小公倍数=两个整数之积/最大公约数)(1) 对于已知两数m,n,使得m>n;(2) m除以n得余数r;(3) 若r=0,则n为求得的最大公约数,算法结束;否则执行(4);(4) m←n,n←r,再重复执行(2)。
VB相关算法大全(新)
计数与求和求数组最大值fmax = x(1)For i = 2 To nIf x(i) > fmax Then fmax = x(i)Next i输入数组For i = 1 To ma(i) = InputBox("a(" + Str(i) + ")=") Next i输出数组(每行n个)For i = 1 To mPrint a(i); if i mod n =0 then printNext i随机数产生[N,M]范围内数组For i = 1 To ma(i) = int(rnd*(M-N+1))+NNext i数组元素倒置For i =1 To n\2t=A(i)A(i)=A(n-i+1)A(n-i+1)=tNext I在数组中查找数1.原始算法For i = 1 To nIf x = a(i) Then j = iNext i2.变种1For i = 1 To 8If x = a(i) ThenExit ForNext i在数组中删除特定的数For i = 1 To 8If x = a(i) Then j = iNext iFor i = j To 7a(i) = a(i + 1)Next i求两个整数的最大公约数、最小公倍数1.原始程序Dim n%,m%,nm%,r% m=Val(InputBox("m="))n=Val(InputBox("n="))nm=n*mIf m<n Then t=m: m=n: n=tr=m mod nDo While (r <> 0)m=nn=rr= m mod nLoopPrint "最大公约数=", nPrint "最小公倍数=", nm/n 2.变种1Dim n%,m%,nm%,r%m=Val(InputBox("m="))n=Val(InputBox("n="))nm=n*mr=m mod nDo While (r <> 0)m=nn=rr= m mod nLoopPrint "最大公约数=", nPrint "最小公倍数=", nm/n 3.变种2Dim n%,m%,nm%,r%m=Val(InputBox("m="))n=Val(InputBox("n="))nm=n*mIf m<n Then t=m: m=n: n=tDo While (r <> 0)r= m mod nm=nn=rLoopPrint "最大公约数=", mPrint "最小公倍数=", nm/m判断素数及验证哥德巴赫猜想1.判断N是否是素数For i= 2 To Int(Sqr(n))If n Mod i = 0 Then Exit ForNext iIf i> Int(Sqr(n)) ThenPrint n; " 是素数"ElsePrint n; " 不是素数"End If2.判断N是否是素数(变种1)flag=0For i= 2 To Int(Sqr(n))If n Mod i = 0 Then flag =1 :Exit ForNext iIf flag =0 ThenPrint n; " 是素数"ElsePrint n; " 不是素数"End If3.哥德巴赫猜想Dim N%, N1%, N2%, I%, K1%, K2%N=V al(InputBox("输入大于6的偶数"))For N1 = 3 To N \ 2 Step 2K1 = Int(Sqr(N1))For I = 2 To K1 '判断N1是否是素数If N1 Mod I = 0 Then Exit ForNext IIf I > K1 Then '如果N1为素数,将N分解为N1+N2N2 = N - N1K2 = Int(Sqr(N2))For I = 2 To K2 '判断N2是否是素数If N2 Mod I = 0 Then Exit ForNext IIf I > K2 Then ' 如果N2也为素数,则打印输出Print N & "=" & N1 & "+" & N2End IfEnd IfNext N1冒泡法排序(n个数排序)For j = 1 To n-1For i = 1 To n - jIf a(i) > a(i + 1) Thentemp = a(i): a(i) = a(i + 1): a(i + 1) = tempNext iNext j选择法排序(n个数排序)1.原始代码For j = 1 To n-1p = jFor i = j + 1 To nIf a(p) > a(i) Then p = iNext iIf (p <> j) Then temp= a(j): a(j) = a(p): a(p) = temp Next j2.变种1For i = 1 To n-1For j=i+1 to nIf a(i) > a(j) Thentemp= a(j): a(j) = a(i): a(i) = tempEnd IfNext jForm1.Print a(i)Next iForm1.print a(n)数进制的转换(公用进制转换,将n转换成k进制) 1.Dim n As Integer, k As Integer, x As StringDim m As Integer, t As Integern = Inputbox(“n="): k = Inputbox(“k=")x= "": m = n : n = Abs(n)Do While n <> 0t = n Mod kIf k=16 And t>9 Then x = Chr(Asc("a")+t-10) + x Else x = t & xn = n \ kLoopIf m < 0 Then x = "-" + x2.变种1(采用连除2取余数的方法,将一个十进制数转换为二进制数)Dores = dec mod 2 '求出除以2的余数Bin = res & binDec = dec\2Loop While dec>0矩阵的转置1.M* M方阵For i = 2 To MFor j = 1 To I-1Temp=a(i,j)a(i, j) = a(j, i)a(j, i)=TempNext jNext i2.M*N的矩阵For i = 1To MFor j = 1To Nb(j,i) = a(i,j)Next jNext i约瑟夫问题—有n个人围成一圈,顺序排号。
VB常用算法(三)素数
1、算法说明素数(质数):就是⼀个⼤于等于2的整数,并且只能被1和本⾝整除,⽽不能被其他整数整除的数。
判别某数m是否是素数的经典算法是:对于m,从I=2,3,4,……,m-1依次判别能否被I整除,只要有⼀个能整除,m就不是素数,否则m是素数。
Private Function sushu(ByVal n As Long) As BooleanDim i As LongFor i = 2 To n - 1If (n Mod i) = 0 Then Exit ForNext IIf I=n then sushu=TrueEnd Function很显然,实际上,我们可以改进上⾯For i = 2 To n – 1为:For i = 2 To int(sqr(m))这样可以很好的提⾼效率。
以上判断是否为素数的代码务必识记!应⽤举例求100-200之内素数。
Private Sub Command1_Click()Dim j As IntegerFor j = 100 To 200If sushu(j) = True ThenEnd IfNext jEnd Sub解题技巧识记判断素数的算法过程,根据题意,灵活调⽤!实例说明编程题(2002年春上机试卷04)找出10000以内所有可以表⽰为两个平⽅数和的素数。
思路:⾸先找10000以内的所有素数,对于每个素数判断其是否可以表⽰为两个平⽅数之和(即对于任意⼩于该素数shu的数I,如果I 和shu-I均为平⽅数,则说明其可以表⽰为两个平⽅数之和。
)判断数I是否为平⽅数的⽅法:sqr(i)=int(sqr(i))Private Sub Command1_Click()Dim j As IntegerDim m As Long, n As LongFor j = 2 To 10000If sushu(j) = True ThenIf pf(j, m, n) = True ThenList1.AddItem j & "=" & m & "+" & nEnd IfEnd IfNext jPrivate Function pf(ByVal shu As Long, m As Long, n As Long) As BooleanDim i As LongFor i = 1 To shu - 1If (Sqr(i) = Int(Sqr(i))) And (Sqr(shu - i) = Int(Sqr(shu - i))) Thenpf = Truem = in = shu - iExit FunctionEnd IfNextEnd Function2、实战练习1) 补充代码(2002春⼆(7))下列程序的功能是:查找四位正整数中的超级素数。
vb实验报告答案全(2)(1)
实验一问答题:1、答:常见的有visual Basic、C++、Java、SQL。
用途特点:(参考课本4-5页)2、答:代码是一行或几行命令。
程序是针对某个任务编写的有序代码的集合。
软件是程序和文档的集合。
它们的关系是:代码 < 程序 < 软件3、答:面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看作一个小型的“机器”,即对象。
它能够让人们更简单地设计并维护程序,使得程序更加便于分析、设计、理解。
4、答:参考课本第9页5、答:类——是创建对象实例的模板, 包含了创建对象的属性描述和行为特征的定义。
对象——是类的一个实例,继承了类的属性、方法。
控件——是具有图形界面的对象,它同样具有属性、方法、事件,是用来设计用户界面的重要元素。
属性——是对象的性质,用来描述和反应对象特征的参数。
事件——响应对象的动作,它发生在用户与程序交互时。
如单击控件、鼠标移动、键盘按下。
过程——指附在该对象上的程序代码,是事件的处理程序。
6、答:参考课本12页到17页。
实验二问答题:1、答通用属性有:Caption标题、Enabled可用性、Visible可见性、ForeColor前景颜色、BackColor背景颜色等。
2、答标签label是用来显示信息的,不具有输入功能。
属性有Caption、BackStyle、Alignment、BorderStyle、AutoSize。
文本框用来输入、输出数据,编辑文本。
属性有Text、 Maxlength、MultiLine、 ScrollBars、 Locked 、 PassWord 。
3、答结果为:标签里显示一个“abc”,图片框里显示3行“欢迎您”。
4、答要保存2次,分别是工程文件.vbp和窗体文件.frm。
实验一:一、选择1.D2.D3.B4.A5.B6.C7.CD8.D9.D10.编程机制是C、设计方式是B11.A12.D13.D14.C15.A二、填空1.windows2. 中断3.工具箱4.代码5.分类6.form2.show7. 出现语法错误8. 错9. 事件10. 面向对象11. 工程文件结构及各文件名12. 工程13. 设计程序代码14.双击窗体15.vb的安装文件夹16.属性17.方法18.font 19. form_load() 20.对象1.Private Sub Command1_Click()Print Sqr(8), 8 ^ (1 / 3)End Sub2.Private Sub Command1_Click()For i = 100 To 110Print Sqr(i)Next iEnd Sub3.Private Sub Form_Load()Print " 郑州大学在前进!"End Sub4. Private Sub label_click()PrintLabel.caption=”蓝天白云绿水青山”End sub实验二:一、选择1.B2.C3.B4.C5.C6.C7.B8.B9.D10.A11.C12.C13.C14.B15.A16.C17.B18.D19.C20.C二、填空1. Form_Click()2. Interval、5003..vbp .frm4.left top Height、Width twip5.picture6.load7. locked8. font Alignment9. GotFocus() LostFocus() 10. 属性窗口程序代码1.Private Sub Command1_Click()Label3 = Val(Text1) * Val(Text2)Private Sub Command2_Click()Label3 = Val(Text1) / Val(Text2)End Sub2.Private Sub Command1_Click()Picture1.Visible = TruePicture1.Picture = LoadPicture("d:\tu1.jpg") End SubPrivate Sub Command2_Click()Picture1.Visible = TruePicture1.Picture = LoadPicture("d:\tu2.jpg") End SubPrivate Sub Command3_Click()Picture1.Visible = False'也可以改为:Picture1.Picture = LoadPicture("") End Sub3.Private Sub Command1_Click()Label3 = Val(Text1) * Val(Text2) End Sub4.Private Sub Command1_Click() Text2 = Text1End SubPrivate Sub Command2_Click() Text1 = ""Text2 = ""End SubPrivate Sub Form_Load() Command1.Visible = False Command2.Visible = FalseEnd SubPrivate Sub Text1_Change() Command1.Visible = True Command2.Visible = TrueEnd Sub5.Private Sub Form_Load()Image1.Picture = LoadPicture("d:\tu3.jpg")End SubPrivate Sub Command1_Click()Timer1.Enabled = TrueEnd SubPrivate Sub Command2_Click()Timer1.Enabled = FalseEnd SubPrivate Sub Timer1_Timer()Image1.Left = Int(Rnd * (Form1.ScaleWidth - Image1.Width)) Image1.Top = Int(Rnd * (Form1.ScaleHeight - Image1.Height)) End实验三:一、选择1.A2.BC3.BC4.A5.A6.A7.BCD8.D9.B10.B 11.B二、判断题不合法的变量:3. 4. 5. 6. 8. 10. 11. 14.15. 16.三、1、abs(x+y)2. (3+x*y)^23. (-b+sqr(b^2-4*a*c))/(2*a)4.sin(30*3.14/180)+exp(2)四、1. int(rnd* 71+20) 或int(rnd* 71)+202. x<0 and y>0 or x>0 and y<0 或者x*y<03. x mod 3=0 or x mod 7=0或x/3=x\3 or x/7=x\74. x>=10 and x<205. x>="A" and x<="Z"6. left(s,3) 或mid(s,1,3)操作题:2.Private Sub Command1_Click()Dim n%n = Abs(Val(Text1))Label2 = Format(n ^ 2, "#.000") & Space(2) & Format(Sqr(n), "#.000") & Space(2) & Format(n ^ 3, "#.000") & Space(2) & Format(n ^ (1 / 3), "#.000")'上句的输出也可以用下面的print方式:' Print Format(n ^ 2, "#.000"); Spc(2); Format(Sqr(n), "#.000"); Spc(2); Format(n ^ 3, "#.000"); Spc(2); Format(n ^ (1 / 3), "#.000")End Sub3.Private Sub Command1_Click()Dim x%, y%x = Int(Rnd * 900 + 100)Print "产生的随机数:"; xy = (x Mod 10) * 100 + (x \ 10 Mod 10) * 10 + x \ 100Print "反序数:"; Format(y, "000")End SubPrivate Sub Command2_Click()Dim x%, y As Stringx = Int(Rnd * 900 + 100)Print "产生的随机数:"; xy = Trim(Str(x))Print "反序数:" & Right(y, 1) & Mid(y, 2, 1) & Left(y, 1)End Sub4.Private Sub Command1_Click()Dim m%, n%Randomizem = Val(Text1): n = Val(Text2)x = Int(Rnd * (n - m) + m)y = Int(Rnd * (n - m) + m)z = Int(Rnd * (n - m) + m)Label3 = m & "到" & n & "之间的3个随机数为: " & x & Space(3) & y & Space(3) & zEnd Sub5.Private Sub Command1_Click()Label1.Caption = DateEnd SubPrivate Sub Command2_Click()Label2.Caption = TimeEnd SubPrivate Sub Command3_Click()Label3.Caption = WeekdayName(Weekday(Date))End Sub实验四:一、选择1.C2.D3. C4.D5.A6.D7.B8.B9.A10.C二、填空1. 48.71E-01, -4.87122. 关系、逻辑、算术3. 900,100,mid(s,2,1)4.m、1,2,3 、print m & "月是第二季度"、end select三、程序结果1. X=4 y=132. 10操作题:1.方法一:Private Sub Command1_Click()x = InputBox("请输入弧度数值", "弧度转换", 0)xx = Val(x)a = x * 180 / 3.14aa = Int(a)b = (a - aa) * 60bb = Int(b)c = (b - bb) * 60cc = Format(c, "#.000")MsgBox "弧度" & x & "转换为" & aa & "度" & bb & "分" & cc & "秒" End Sub方法二:Option ExplicitPrivate Sub Command1_Click()Dim x!, a!, aa%, b!, bb%, c!, cc$x = Val(Text1)a = x * 180 / 3.14aa = Int(a)b = (a - aa) * 60bb = Int(b)c = (b - bb) * 60cc = Format(c, "#.000")Label2 = "弧度" & Text1 & "转换为" & aa & "度" & bb & "分" & cc & "秒"End Sub2.Private Sub Command1_Click()Dim x%x = Val(Text1)If x / 400 = x \ 400 Or x Mod 4 = 0 And x Mod 100 <> 0 ThenLabel2 = Text1 & "年是闰年"ElseLabel2 = Text1 & "年不是闰年"End IfEnd Sub3.Private Sub Command1_Click()Dim x%, y%, z%x = InputBox("输入第一个数")y = InputBox("输入第二个数")z = InputBox("输入第三个数")Print "输入的数是:"; x; y; zIf x > y Then t = x: x = y: y = tIf y > z Then t = y: y = z: z = tIf x > y Then t = x: x = y: y = tPrint "排序结果是:"; x; y; zEnd Sub4.方法一:Private Sub Command1_Click() x = Val(InputBox("请输入上网时间:")) If x <> -1 ThenSelect Case xCase Is < 10fei = 25Case 10 To 50fei = x * 2Case 50 To 100fei = x * 1.5fei = x * 1End SelectMsgBox "上网费用为:" & fei & "元" End IfEnd SubPrivate Sub Command2_Click()EndEnd Sub方法二:Private Sub Command1_Click() Dox = Val(InputBox("请输入上网时间:", , -1)) If x <> -1 ThenSelect Case xCase Is < 10fei = 25Case 10 To 50fei = x * 2Case 50 To 100fei = x * 1.5Case Is >= 100End Selectzongfei = zongfei & Space(3) & fei MsgBox zongfei, , "上网费用为"ElseExit DoEnd IfLoopEnd SubPrivate Sub Command2_Click()EndEnd Sub实验五一、选择B C B A C二、填空(1)for x=2 to 10s*(1-1/x)(2) 1 t>1E-6(3) j t(4) 5 11 51.Private Sub Command1_Click()For n = 1 To 100s = s + nNext nPrint sEnd SubPrivate Sub Command2_Click()n = 1Do While n <= 100s = s + nn = n + 1LoopPrint sEnd Sub2.Private Sub Command1_Click()For i = 0 To 20For j = 0 To 33If i * 5 + j * 3 + 1 / 3 * (100 - i - j) = 100 Then Print i, j, 100 - i - j Next jNext iEnd Sub3.Private Sub Command1_Click()n = 0DoIf n Mod 2 = 1 And n Mod 3 = 2 And n Mod 5 = 4 And n Mod 6 = 5 And n Mod 7 = 0 Then Exit Don = n + 1LoopPrint nEnd Sub4.'已知x,y,z分别是0~9中的一个数,求x,y,z的值,使得xxz+yzz=532. Private Sub Command1_Click()Dim x%, y%, z%, i%, j%For x = 0 To 9For y = 0 To 9For z = 0 To 9If (x * 100 + x * 10 + z) + (y * 100 + z * 10 + z) = 532 Then Print x, y, z NextNextNextEnd SubPrivate Sub Command2_Click()For x = 0 To 9For y = 0 To 9For z = 0 To 9If Val(x & x & z) + Val(y & z & z) = 532 Then Print x; y; z NextNextNextEnd Sub5.Private Sub Command1_Click()x = Val(Text1)y = x * 4n = 0Do While x <= yx = x * (1 + 0.1)n = n + 1LoopPrint x, nEnd Sub6.Private Sub Command1_Click()n = Val(InputBox("输入计算到第几项:", , 0))For i = 1 To ns = s + (-1) ^ (i + 1) * iNextPrint n, sEnd SubPrivate Sub Command2_Click()n = Val(InputBox("输入计算到第几项:", , 0))p = 1For i = 1 To ns = s + p * ip = -pNextPrint n, sEnd Sub7.'s=(0+1)+(0+1+2)+(0+1+2+3)+(0+1+2+3+4)+……(0+1+2+3+4+……n) Private Sub Command1_Click()Dim n%, s%n = Val(InputBox("输入计算到第几项:", , 0))s = 0: t = 0For i = 1 To nt = t + is = s + tNext iPrint sEnd SubPrivate Sub Command2_Click()Dim n%, s%n = Val(InputBox("输入计算到第几项:", , 0)) s = 0: t = 0For i = 1 To nt = 0For j = 1 To it = t + jNexts = s + tNextPrint sEnd Sub8.Private Sub Command1_Click()Dim s As Double, pi As Doublen = 1: s = 0Do While 1 / (2 * n - 1) >= 0.0001 '也可以是Do Until 1 / (2 * n - 1)< 0.0001s = s + (-1) ^ (n + 1) * 1 / (2 * n - 1)n = n + 1Looppi = 4 * sPrint piEnd Sub9.'5-9:输出所有的“水仙花数”.'所谓的“水仙花数”是指一个3位数,其各位数字的立方和等于该数本身。
VB常用十大算法
1. 累加与连乘1、算法说明[分析]累加形式:V=V+e 连乘形式:V=V*e其中:V 是变量,e 是递增表达式。
累加和连乘一般通过循环结构来实现。
注意:需在执行循环体前对变量 V 赋初值。
一般累加时置初值0;连乘时置初值为1 [举例]求N!的结果。
Private Sub Comma nd1_Click()Dim n%, i%, s&n = Val(InputBox("输入 n"))s = 1For i = 1 To ns = s * iNext iPr int sEnd Sub[应用举例]根据下列公式,求自然对数 e 的的近似值Private Sub Comma nd1_Click()Dim i%, n&, t!, e!e = 2i = 1t = 1Do While t > 0.00001i = i + 1t = t / i e = e + tLoopPrint"计算了 "; i;"项目和是:";ePrint Exp(1)与上句输出值进行对比以证明算法的正确性End Sub2. 最值问题1、算法说明=1 + 一_ + — +一 + 1! 2! 3! + 1 = 1 + -1要求:误差小于0.00001在若干数中求最大值,一般先取第一个数为最大值的初值(即假设第一个数为最大值),然后,在循环体内将每一个数与最大值比较,若该数大于最大值,将该数替换为最大值,直到循环结束。
求最小值的方法类同。
求若干数平均值,实质上就是先求和,再除以这些数的个数。
应用举例:随机产生n个1-100 (包括1和100)的数,求它们的最大值、最小值和平均值。
Private Sub Comma nd1_Click()Dim n%, i%, min%, max%, aver!, s%n 二 Val(lnputBox("输入个数:"))s = Int (Rnd * 100) + 1max = s : min = s : aver = sPrint"第1个数是:” & sFor i = 2 To ns = In t(R nd * 100) + 1Print"第” & i & ” 个数是:” & sIf s > max The n max = sIf s < min The n min = saver = aver + sNext iaver = aver/nPrin t "max="; max; " min二";min; "aver二";averEnd Sub解题技巧:最大值、最小值、平均值类型题目往往和数组放在一起考!有的不仅求这些值,还要对具有最大值或者最小值的行或列或者某个元素进行处理,这时就要在记录最大、最小值时,同时记录该值所在的行号和列号。
素数的判断方法vb
素数的判断方法vb素数是指只能被1和它自身整除的正整数。
在VB语言中,判断一个数是否素数可以使用如下的方法:1. 遍历除数:对于需要判断的整数n,从2开始到n-1,逐个遍历这些除数d。
2. 判断除法余数:当n除以d的余数等于0时,即n能够被d整除,说明n 不是素数。
3. 判断条件:如果在遍历过程中发现了一个可以整除n的除数d,说明n不是素数,直接返回false;如果遍历了所有除数d,都不能整除n,说明n是素数,返回true。
VB代码如下所示:vbFunction IsPrime(ByVal number As Integer) As BooleanIf number <= 1 Then ' 0和1不是素数Return FalseEnd IfFor divisor As Integer = 2 To number - 1If number Mod divisor = 0 Then ' 能被除数整除,不是素数Return FalseEnd IfNextReturn True ' 遍历所有除数后仍未找到能整除的,是素数End Function然后,我们可以调用上述函数来判断一个数是否为素数,示例如下:vbDim number As Integer = 17Dim isPrime As Boolean = IsPrime(number)If isPrime ThenConsole.WriteLine(number & "是素数")ElseConsole.WriteLine(number & "不是素数")End If运行上述代码,将输出"17是素数"。
这种遍历除数的方法是判断素数的一种基本方法,但对于较大的数可能会有效率问题,因为要遍历的可能的除数数量较多。
为了提高效率,我们可以做如下优化:- 只需要遍历到n的平方根即可,因为如果n有一个大于平方根的除数d,那么必然存在一个小于平方根的除数n/d。
vb常用算法
VB常用算法算法1 交换2个变量的值算法思想:若交换两个变量的值,必须引入第三个新的变量进行传递。
交换a,b的值: t=a:a=b:b=t或者t=b:b=a:a=t算法2 产生随机数算法思想:生成一个[a,b]区间的整数公式为Int(Rnd*(b-a+1))+a1.自动生成[0,100]之间的随机数: Int(Rnd*101)2.自动生成2位随机整数: Int(Rnd*90+10)例:自动产生10个100~999之间的随机整数,并放到数组a中Dim a(10 ) as integerFor i=1 to 10a(i) =Int(Rnd*900)+100Next i算法3判断一个数是否能被另一个数整除算法思想:可以用整除的定义(余数为0)或X除以Y等于X整除Y等表达式进行判断。
条件表达式可以为:X mod Y=0或X\Y=X/Y或Int(X/Y)=X/Y如果以上条件表达式为True,则表示X能被Y整除。
例题:统计0—100之间能被3整除的数的个数、累加和及其平均值。
s=0n=0For i=0 To 100If i mod 3=0 Thens=s+in=n+1End IfNext iPrint n,s,s/n算法4 求阶乘和累加和算法思想:使用循环语句,并用一个变量存放累加的中间及最终结果。
注:(1)累加求和时变量初值为0。
(2)计算阶乘时变量初值为1。
(3)统计计个数(计数)时可用一个变量作为统计个数的累加变量,每次加1即可。
(4)求平均值算法思想是先求和,再除以个数。
(5)条件求和(或计数):在循环语句中加入If-End If判断语句。
1.求1 ~n个自然数的阶乘s=1For i=1 to ns=s*iNext i2.求1 ~n个自然数的累加和s=0For i=1 to ns=s+iNext i例题:计算1到10之间所有整数的累加和以及10!。
n=10sum= 0prod= 1For i=1 To 10sum=sum+ iprod=prod* iNext iPrint sum,prod例题:统计1—100之间能被3和7整除的数的个数、并求它们的累加和。
在VB中利用循环结构解决素数问题_万小红
在VB中利用循环结构解决素数问题_万小红第27卷第2期运城学院学报V o l .27 N o .22009年4月J o u r n a l o f Y u n c h e n g U n i v e r s i t yA p r .2009在V B 中利用循环结构解决素数问题万小红,郝蕊洁(运城学院公共计算机教学部,山西运城044000)摘要:V b 语言是面向对象的结构化的编程语言,是非计算机专业学生程序设计首选的教学语言。
而循环结构的使用是计算机解题的一个重要特征,为增强学生解决实际问题的能力,着重对循环结构结合实际的问题做深入研究,结果表明能明显的提高学生的编程能力。
关键词:V b ;循环结构;素数中图分类号:O 156.4文献标识码:A 文章编号:1008-8008(2009)02-0066-030.引言高级语言程序设计课程不仅能使学生更深入地理解计算机的工作过程,而且在培养学生严密地逻辑思维及非计算机专业学生利用计算机解决本专业问题的能力方面也有着非常重要的作用,V i s u a l B a s i c 以其面向对象的编程、易学易用、图形用户界面的特点成为非计算机专业学生的首选。
[1]在进行程序设计时,人们总是设法将复杂的不易理解的求解过程转换为易于理解的操作的多次重复。
这样既可以降低问题的复杂性、简化程序代码的书写,又可以充分发挥计算机运算速度快、能自动运行程序的优势。
1.问题的提出在任何一门结构化的程序设计语言中,循环结构都起着承上启下的作用,循环语句的掌握直接关系着后续课程的内容的理解和掌握。
[2]对于非计算机专业的大部分学生学习V B 都以通过全国计算机二级考试为目标,在等级考试中有一部分很典型的考题就是素数问题的处理,解决素数问题通常都要用到循环结构。
为此在教学实践当中做了一些关于利用循环结构解决素数问题总结和探索,希望与广大读者共同探讨。
2.V B 程序设计语言的基本循环结构2.1F o r -N e x t 循环语句例1:判断一个给定的整数是否为素数。
VB 常考算法
1.求因子数Private Sub factor(X As Integer, Fn() As Integer) Dim I As Integer, N As IntegerReDim Fn(1): N = 1: Fn(1) = 1For I = 2 To N / 2If X Mod I = 0 ThenN = N + 1ReDim Preserve Fn(N)Fn(N) = IEnd IfNextEnd Sub2. 求因子数之和Private Function Sum_factor(N As Integer) As Long Dim I As Integer, J As Integer, S As IntegerDo While I < N / 2I = I + 1If N Mod I = 0 ThenS = S + IEnd IfLoopSum_factor = SEnd Function3. 判断数是否为素数Private Function Prime(N As Integer) As Boolean Dim M As IntegerFor M = 2 To Sqr(N)If N Mod M = 0 Then Exit FunctionNextPrime = TrueEnd Function4.求最大公约数Private Function gcd(m As Integer, n As Integer) As Integer If m Mod n = 0 Thengcd = nElsegcd = gcd(n, m Mod n)End IfEnd Function5.求最小公倍数Private Function Lcm(A As Integer, B As Integer) As Long DoLcm = Lcm + AIf Lcm Mod A = 0 And lcm Mod B = 0 ThenExit DoEnd IfLoopEnd Function6.求分数约数Private Sub divisor (Fz As Long, Fm As Long)Dim Min As Integer, K As IntegerIf Fm < Fz Then Min = Fz Else Min = FmFor K = 2 To MinDo While Fz Mod K = 0 And Fm Mod K = 0Fz = Fz / KFm = Fm / KLoopNextEnd Sub7.求阶乘Private Function fact(N As Integer) As Long If N <= 1 Thenfact = 1Elsefact = N * fact(N - 1)End IfEnd Function或Private Function fact(N As Integer) As Long Dim i As Integerfact = 1For i = 1 To Nfact = fact * iNextEnd Function8.一维数组排序(1)选择法排序,结果是从小到大Private Sub choose(a() As Integer)Dim I As Integer, J As Integer, Temp As Integer For I = 1 To UBound(a) - 1For J = I + 1 To UBound(a)If a(I) > a(J) ThenTemp = a(I)a(I) = a(J)a(J) = TempEnd IfNext JNext IEnd Sub(2)冒泡法排序,结果是从小到大Private Sub bubble_up(a() As Integer) Dim I As Integer, J As IntegerDim temp As DoubleDim m As IntegerFor I = LBound(a) To UBound(a) - 1 For J = UBound(a) To I + 1 Step -1If a(J) < a(J - 1) Thentemp = a(J)a(J) = a(J - 1)a(J - 1) = tempEnd IfNext JNext IEnd Sub注:把程序中“>”改成“<”,排序的结果为从大到小。
VB常用算法——素数
VB常考算法(三)素数:1、算法说明所谓素数是指只能被1和它本身整除的数。
1)判断某数是否为素数。
根据循环控制变量来判断。
算法说明:根据素数只能被1和它本身整除的性质,我们可以使用循环依次判断2到n-1(或者Sqr(n))之间有没有被它整除的数,一旦有退出循环,退出循环后通过检验循环变量的值来判断是不是素数。
即,当循环正常退出,循环变量的值等于n时,该数是素数;当循环提前退出,循环变量的值小于等于n-1,该数不是素数。
程序代码如下:Private Sub Command1_Click()Dim n As Integer, i As Integern = Val(Text1.Text)If n < 1 ThenMsgBox "请正确输入数据"Elsen = Val(Text1.Text)For i = 2 To n - 1If n Mod i = 0 Then Exit ForNext iIf i = n ThenMsgBox n & "是素数"ElseMsgBox n & "不是素数"End IfEnd IfEnd Sub2)判断某数是否为素数。
根据标志位flg来判断。
Private Sub Command1_Click()Dim n As Integer, i As IntegerDim flg As Booleanflg = Truen = Val(Text1.Text)If n < 1 ThenMsgBox "请正确输入数据"Elsen = Val(Text1.Text)For i = 2 To n - 1If n Mod i = 0 Then flg = FalseNext iIf flg = True ThenMsgBox n & "是素数"ElseMsgBox n & "不是素数"End IfEnd IfEnd Sub3)使用函数过程。
浙江省计算机二级vb上机试题题库
浙江省计算机二级vb上机试题题库浙江省计算机二级vb上机试题题库二、编程题:1 判断一个数是否是素数。
Private sub form_click()Dim x as integer,I as integerX=text1For i=2 to sqr(x) …If x mod i=0 then exit forNext iIf i>sqr(x) thenText2=”x是素数”ElseText2=”x不是素数”EndifEndsub2、求两个任意自然数的最大公约数。
Private sub form_click()Dim m as integer,n as integer,I as integer,r as integer m=text1n=text2R=m mod nDo while r<>0M=nN=rR=m mod nLoopText2=str(n)End sub3、随机生成10个两位正整数,将其中的奇数和偶数分别显示在list1和list2中。
Private sub form_click()Dim a(1 to 10) as integer,I as integerFor i=1 to 10A(i)=int(rnd*90+10)Next iFor i=1 to 10If a(i) mod 2=1 thenList1.additem str(a(i))ElseList2.additem str(a(i))EndifNext iEnd sub4、判断一个数是否是回文数。
Private sub form_click()Dim I as integer,s as stringS=text1For i=1 to len(s)\2If mid(s,I,1)<>mid(s,len(s)-i+1,1) then exit forNext iIf i>len(s)\2 thenPrint s & ”是回文数”ElsePrint s & ”不是回文数”EndifEnd sub5求两个自然数的最小公倍数。
vb素数的判断方法
vb素数的判断方法VB素数的判断方法素数是指除了1和它本身之外,没有其他因数的自然数。
判断一个数是否为素数是数论中的基本问题之一,也是编程中常见的问题之一。
在VB语言中,我们可以通过一些方法来判断一个数是否为素数。
我们需要明确判断素数的定义。
对于一个大于1的自然数n,如果它能被2到n-1之间的任意一个数整除,那么它就不是素数;如果它不能被2到n-1之间的任何一个数整除,那么它就是素数。
基于这个定义,我们可以使用以下方法来判断一个数是否为素数:1. 输入待判断的数n;2. 判断n是否小于等于1,如果是,则n不是素数;3. 判断n是否能被2整除,如果能,则n不是素数;4. 从3开始,逐个判断n是否能被从3到n-1之间的任意一个数整除,如果能,则n不是素数;5. 如果n不能被从3到n-1之间的任何一个数整除,则n是素数。
下面是使用VB语言实现的判断素数的程序:```VBModule Module1Sub Main()Dim n As IntegerConsole.WriteLine("请输入一个自然数:") n = Console.ReadLine()If n <= 1 ThenConsole.WriteLine(n & "不是素数")Exit SubEnd IfIf n = 2 ThenConsole.WriteLine(n & "是素数")Exit SubEnd IfIf n Mod 2 = 0 ThenConsole.WriteLine(n & "不是素数")Exit SubEnd IfDim i As IntegerFor i = 3 To n - 1 Step 2If n Mod i = 0 ThenConsole.WriteLine(n & "不是素数") Exit SubEnd IfNextConsole.WriteLine(n & "是素数")End SubEnd Module```以上程序首先要求用户输入一个自然数n,然后根据定义逐步判断n 是否为素数,并输出结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
sum = sum + I ‘能被整除,说明是因子,并求和
s = s + Str(i) + “+” ‘是因子,连接成字符串形式,例
6=1+2+……
End If
Next i
If 条件 Then
‘如果因子之和=这个数,说明是完数
s=left(s,len(s)-1)
‘将s字符串的最后一个”+”去掉
输出s
‘是完数输出
Elseif cj>70 then Text2=“D”
Elseif cj<80 then Text2=“C”
Elseif cj<90 then Text2=“B”
Else Text2=“A”
endif
5-1-1
Private Sub Form_Click()
Dim i%, j%, k%
For i = 1 To 9
s2 = ……
‘ 注意s2=s + s2 和s2=s2+s有何区别?
End If
Next i
Text2 = ……
End Sub ‘如果循环改成For i = Len(s1) to 1 setp -1该如何编程?
5-6
Private Sub Command1_Click()
Dim i%, j%, sum!, sub1!
在标签里输出多行值:Label1.Caption = ""
For i = 1 To 3
Label1.Caption = Label1.Caption & Str(i) & vbCrLf
Next i 在文本框里输出多行值:’参见P116例4-21(需将文本框的
MultiLine属性设为True,将ScrollBars属性设为2) For……
If Not IsNumeric(Text1) Then ‘判断Text1是否是数值型数据(if 块开始) MsgBox “error1” : Text1.Text = “” : Text1.SetFocus
‘条件满足,出错信息,清空文本框并得到焦点
ElseIf y < 1000 Or y > 2010 Then ‘判断text1里的内容是否满足数 据要求。这是多分支语句
5-4
Private Sub Form_Click()
Dim k As Integer, sum%, n%
n = Val(Text1.Text)
Do While sum < n sum = ……‘sum变量用来存放+2*2+3*3+……的和 k = …… ‘K值+1,实现由1变到2,……变到k Loop Print k – 1 ‘跳出循环体后K值减1,因为在循环体内 K多累加一次
End Sub
5-5
Private Sub Command1_Click()
Dim s1 As String, s2 As String, s As String
Dim i As Integer
s1 = Text1
For i = 1 To Len(s1)
s = ……
‘在s1中依次取第i个字符
If s >= "A" And s <= "Z" Then
Next i ‘注意:next i、next j、next k位置不能写反(嵌套,看教材P368,5. 循环嵌套时,内外循环交叉,或内外循环使用了同名循环控制变量)
End Sub
5-1-2
Private Sub Form_Click()
Dim i%, a%, b%, c%
For i = 100 To 999 ‘i控制一个三位数
For n= 1 To 1000
‘ 求1000内的完数,所以循环从1到1000
sum = 0
‘循环结束后将上一次的因子之和清零
s=str(n)+”=”
‘给s变量赋初值,例6=
For i =1 To CInt(n/ 2)
If n Mod i= 0 Then ‘判断1000之内的数是否能被它的一半的
数整除
Text1.text=text1.text & 表达式 & vbCrlf next…… 在窗体里输出多行值:
For…… Form1.Print 表达式 ‘注意表达式后无“;”或“,”
next…… 或多个 Form1.Print 表达式 在图像框里输出多行值:
For…… Picture1.Print 表达式 ‘注意表达式后无“;”或“,”
End Sub
If cj>=90 then score=“A”
Elseif cj>=80 then score=“B”
Elseif cj>=70 then score=“C”
Elseif cj>=60 then score=“D”
Else score=“E”
Endif text2=score
If cj<60 then Text2=“E”
next…… 或多个Picture1.Print 表达式
本章节及以前需要记忆的程序
1.P100数据校验例题(keypress事件过程和click 事件过程的代码)
2.P109例4-13 用辗转相除法求最大公约数 (背)
3.P114例4-18 求近似值的算法 4.P115例4-19 判断素数(背)
‘控制百位数 百位数从1开始
For j=0 to 9
‘控制十位数 十位数从0开始
For k=0 to 9 ‘控制个位数 个位数从0开始
If 条件 then
Print 表达式
End If
‘endif要放在next k里面(嵌套,看教
材P368,6.循环结构与其他控制结构间相互交叉)
Next k
Next j
2. 做循环题目时,设计好界面和输入完代码时,一 定要先保存,后运行,防止死循环,处理不当需 重新设计界面和输入代码。
3. 出现死循环后,同时按下Ctrl+Break键终止循环。 4. 当循环终值已知时,即可用For循环,也可用Do
循环,但终值未知时,一定用Do循环。 5. 看教材P367,3.For循环语句使用问题,初值、终
值、步长在循环体内发生变化,不会影响程序的 执行次数;但控制变量在循环体内重新赋值,循 环次数有可能发生变化。 6. 关于二维图形输出问题,看教材P369,7. 关于二 维图形输出问题 7. 图像框输出时,使用Picture1.Print 表达式, Picture1是图像对象名称,Print是方法。
Private Sub text1_KeyPress(KeyAscii As Integer)
If KeyAscii=13 Then
是回车的Ascii码值
‘程序的第一句一定是它,13
If Not IsNumeric(text1.text) Then Msgbox “数据非法,重输”
Text1.text=””
If a = 0 And b = 0 Then MsgBox "方程无意义"
ElseIf a = 0 And b <> 0 Then
Text4 = Str(-c / b) : Text5 = Str(-c / b)
Else If b ^ 2 - 4 * a * c > 0 Then
'有两个实根
……
ElseIf b ^ 2 - 4 * a * c = 0 Then '有两个相等的根
Else
……
End If 判断季度(用If或用select case) 判断天数(用If或用select case)28天和29天放在这里判断
endif
End if
’(if块结束)‘注意红色文字的位置。
方程三个系数a、b、c是否为数值型数据分别在三个文 本框的KeyPress事件里编写,参考教材P100.
Text1.SetFocus ‘数据错误,第一个文本框得到焦点
Else
Text2.SetFocus ‘数据正确,第二个文本框得到焦点
Endif
Endif
End sub
Private Sub Command1_Click()
a = Val(Text1) : b = Val(Text2) : c = Val(Text3)
For i = 1 To 50
For j = 1 To 50
sum = Sqr(i + j)
sub1 = Sqr(Abs(i - j))
‘建议写成此式,加
Abs()函数,保证开方>0
If 条件 Then
‘这里的条件最好再并上
i<j
输出
End If
Next j
Next i
End Sub
1. 常见错误及难点分析
MsgBox “error1” ……
Else
‘条件不满足(Text1为数值型数据的情况)
if Not IsNumeric(text2) then ‘判断Text2是否是数值型数据
(参考text1的判方法)
……
else ‘下面判断是否为闰年
If y Mod 4 = 0 And y Mod 100 <> 0 Or y Mod 400 = 0 Then Text3.text=”闰年”
……
Else
'b ^ 2 - 4 * a * c <0 有虚根
Text4 = Format(-b / (2 * a), "00.00") & "+" & _Format(Sqr(Abs(b ^ 2 -4 * a * c)) / (2 * a), "00.00") & "i"