VB程序设计典型算法(重点难点).pdf

上传人:无*** 文档编号:90863263 上传时间:2023-05-18 格式:PDF 页数:20 大小:3.12MB
返回 下载 相关 举报
VB程序设计典型算法(重点难点).pdf_第1页
第1页 / 共20页
VB程序设计典型算法(重点难点).pdf_第2页
第2页 / 共20页
点击查看更多>>
资源描述

《VB程序设计典型算法(重点难点).pdf》由会员分享,可在线阅读,更多相关《VB程序设计典型算法(重点难点).pdf(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、V i s u a l B a s i c 的基本控制结构顺序结构 分支结构 循环结构L顺 序 结 构 各语句依次顺序执行/I、此前所学的语句的存在方式都是顺序结构(不1令关于赋值语句:沙变量名=表达式 对象名.编性名=表达式先计算右边表达式的值,然后赋值给左边的变量。也 如果表达式的精度不同于左边变量的精度,则强制将表达式结果的数据类型更改为变量的精度。字符型数据 赋值给数值型变量时系统先自动将字符串转换为数值,再赋值;但是字符不可以赋侑给数值变量。A 非字符数据赋值给字符变量时将被转换为字符类型。a=a+2 实现值的自增。赋值符号=的左边必须是变量。整体格式固定不能更改。例:实现两个变量值

2、的交换 temp=a:a=b:b=temp工 分 支 结 构 一 单分支、双分支、多分支 单分支结构(简单分支结构)第一种形式if 条件then 语句 第三种形式if v条件then语句语句end ifa=inputbox(请问 1+3=?问题 1*)if a=4 then print nYou are smart!”a=inputbox(请问 l+3=?,问题 1)if a=4 thenprint nGood!*b=msgbox(还要继续做题吗?”,4+32+256)if b=6 then print HSorry no more question*end if练习:让用户输入两个(或3个)

3、变量,设计程序,计算并输出最大的变量。双分支结构(选择分支语句)Q语句格式:if 条件 then语句组1else语句组2end ifPage 59练习如上例也 多分支结构(四种形式)Page 60 形式一:(if语句的嵌套形式)见上例Q 形式二:(if then elseif 语句)语句格式:if then语句组2else语句组end ifQ 形式三:(select case语句)格式:select case(条件case v 条件的可能结果1语句纠case 条柞的可能结果2语句组2Page 60 61case 条件的可能结果n语句组n case else语句组1 end select其中:/

4、条件的可能结果可以是表达式/条件的可能结果可以是t o表达式,如:case 20 to 30/条件的可能结果可以是i s比较式,如:case is 30 形式四:(iff函数)语句格式:/X变 量=i i f(条 宿 语 句 1,语 句 2)ma x =i i f(3 6 ,不 可 能 ,y e s )P a ge练 习:如 教 材page 46下,实现成绩等级评价。L循 环 结 构(五种形式)形式一(fo r ne x t 循 环)P a ge 6 3-6 4语法格式:fo r 循环变量=初 始 值 t o 终 止 值 s t e p 步 长 语句 组 1=e x i t fo r i 语句

5、 组 2 ne x t 循环变量强制退出循环体练习及分析:1.求1100之间所有整 数的和。2.求数n的 阶 乘n!cisn=val(inputbox(”请 输 入 一 个 整 数(=0.000001e=e+l/fenmufenmu=fenmu*nn=n+lwendprint”自然对数底e近似值为:”&eprint”累加了“&n&“次”1.改造上述各例Q形式四(do loop循环 后测型)语法格式:强制退出Page 66do 语句组1一Texit dol 语句组21loop while I until 条件练习及分析:1.计算1-2 0 0之间所有偶数之和cisk=2sum=0dosum=su

6、m+kk=k+2loop until k200print 结果为:&sum2.判断是否素数page 68cism=Val(InputBox(”请输入一个整数(2)”,“输入整数”)n=Sqr(m)k=2Do While k Sqr(m)ThenPrint m&”是素数”ElsePrint m&不是素数”End If 形式五(多重循环一循环结构的嵌套)采用各个循环结构互相嵌套的形式,可以完成更复杂的计算。练习分析:P a a(1.利用*输出平行四边形;P a g,cisprintfor i=5 to 1 step-1print tab(10);print spc(10-2*i);for j=l

7、to 2*i-lprintnext jfor k=l to ll-2*iprintnext kprintnext i2.输 出 100200之间的素数(质数只能分解成1 和它自身两个因式相乘)cisfor n=101 to 200 step 2m=int(sqr(n)k=2do while km thenprint tab(x mod 7)*7+(7-len(str$(n);n;x=x+lend ifnext n3.打印乘法表cisFor i=1 To 9Forj=IT oiPrint tab(j-l)*8+2)i&j&n=&i*j;Next jPrintNext i4.打印 az 字母金字塔

8、(&H61&H7A)hex(number)(1)简单测试Cisk=li=&H61Do While i&H7A Then Exit DoNext jPrintk=k+1Loop(2)共7行,开始编制Cisk=1i=&H61Forj=lT o7Print Spc(17-j);For p=1 To jPrint Chr(i)i=i+lIfi&H7A Then Exit ForNext pPrintk=k+1Next j5.打印数字金字塔n=lfor j=l to 9print spc(8-2*i);for i=1 to jprint I;next ifor i=j to 1 step-1print

9、I;next Iprintnext j正确:CisPrint n(1 5)数字金字塔”PrintPrintPrint Tab(19);CStr(l)Forj=2To9PrintTab(19-j+1);For i=1 TojPrint CStr(i);Next iF o ri=j-1 Tol Step-1Print CStr(i);Next iPrintNext j6.见课本page67例3.8”设置标志变量,用于判断相关条件”dim check as boolean,counter as integer Page 67check=true:counter=0dodo while counter

10、10 then goto 100i=p*rP=P+it=t+lgoto again100print”10后本利合计为:”;p;元采用各个循环结构互相嵌套的形式,可以完成更复杂的计算。Page 682.end(终止运行)语句附加:(1)1100内,能同时被3 和 5 整除的自然数,及其个数”CisFor i=1 To 100If(i Mod 3=0)And(i Mod 5=0)ThenPrint Tab(n Mod 7)*7);i;,整齐输出字符n=n+1End IfNextiPrint Tab(7);“n=;n(2)输出倒三角形、菱 形(由*组 成)三 角形的代码:CisFor i=1 To

11、5Print Spc(8+i);Forj=1 To 11-2*iPrint,*H;Next jPrintNext i 菱形的代码:,上半部分For i=1 To 5Print Spc(18-i);Forj=lT o 2*i-lPrint H*H;Next jPrintNext i 下半部分For i=4 To 1 Step-1Print Spc(18-i);Forj=1 To 2*i-1Print*”;Next jPrintNext i(3)不被3整除的自然数”CisFor i=100 To 200IfiM od3oO T henn=n+1 这是用于统计输出个数,与下面的分支搭配格式化输出数字

12、。If n Mod 8=0 ThenPrint Chr(13);i;hr(i3)的结果是“换行”操作的下川码值,执行到此处,系统换行ElsePrint i;End IfEnd IfNext i(4)一元二次方程CisPrint”求一元二次方程a*xA2+b*x+c=0的解,考虑虚根的情况。”a=Val(InputBox(a=?,输入方程系数,4)b=VaI(InputBox(”b=?,输入方程系数”,6)c=VaI(InputBox(c=?,输入方程系数”,2)If a=0 ThenIfb=0ThenPrint”方程不成立”ElseXl=c/(-b)X2=X1End IfElsed=bA2-4

13、*a*cIfd=0ThenXl=(-b+Sqr(d)/2/aX2=(-b-Sqr(d)/2/aElseXI=Format(-b7 2/a,0.000)&+&Format(Sqr(-d)/2 /a,0.000)&iX2=Format(-b7 2/a,0.000)&Format(Sqr(-d)/2/a,0.000)&iEnd IfEnd IfIfd0ThenPrint”虚根为:”Print nXl=n;XI,已经是字符串类型Print nx2=n;X2ElsePrint”实根为:”Print nXl=n;Format(Xl,n0.000n),是数值型,所以用 format()函数格式化Print

14、nx2=H;Format(X2,n0.000n),使得可以输出小数点前面的oEnd If(5)s=l+3+5+.+(2*n-l)+.+99CisFor i=1 To 99 Step 2s=s+iNext iPrint“s=l+3+5+.+(2*n-l)+.+99”Print n=n;s(6)s=l-l/2+l/3-l/4+.-l/100CisFor i=1 To 100s=s+(-l)A(i-l)/iNext iPrint,s=l-l/2+l/3-l/4+.-l/100HPrintForm aU s,“0.00000”),格式化,使得输出小数点前面的o(7)求 s=l!+2!+3!+.+n!C

15、isn=Val(InputBox(n=?,求 s=l!+2!+3!+.+n!H,5)For i=1 To nt=1Forj=lToit=t*jNext js=s+1Next iPrint s=l!+2+3#+n!”Print n=H;s(8)计算三角形面积!CisPrint”计算三角形面积!”a=Val(InputBox(”第一条边“,“输入方程系数”,3)b=Val(InputBox(第二条边“,“输入方程系数”,4)c=Val(InputBox(第三条边“,“输入方程系数”,5)p=(a+b+c)/2s=Sqr(p*(p-a)*(p-b)*(p-c)MsgBox s=&s(9)鸡兔同笼Ci

16、sheads=val(textl.text),要求用户输入整数legs=val(text2.text)tu=(legs-2*heads)/2ji=heads-tuPrint tu;rabbits,ji;cocks”(1 0)自由落体路径问题CisPrint n(1 2)自由落体路径问题”h=10s=h 第一次落体是单程,所以单独计算For i=1 To 7,剩 余7次都是双程hh=h*(1-0.4)s=s+h*2Next iPrint”第8次落地时,总共路程为“;s;“米”(1 1)求两个正整数的最大公约数和最小公倍数求解最大公药数.(方 法:):以大数m作为被除数,力、点的数n作为除数,相除

17、后取余数r;若r示为零,把n的值给m,r给n;m与n继续相除得到新的r,若r仍不为零,则重复此步骤;最后r=0时的n就是最大公约数;最小公倍数最小公倍数=(n*m)/最大公约数;代码:Function hef(byval m as long,byval n as long)as longDim r as long,t as longIf mnT=m:m=n:n=tEnd ifr=m mod n 初 始r的计算Do while r0,进入循环,注意条件M=nN=rR=m mod nLoopHef=nEnd functionDim a,b,c,d as longA=val(textl.text)B

18、=val(text2.text)C=h ef(a,b)得出最大公约数Text3=str(c)D=a*b/c 得出最小公倍数Text4=str(d)(函数str()功能是将数值转化为字符串类型I最大公约数算法(方法二):IDim m As Integer,n As Integerm=V a l(T ex tl)将文本框的值赋给变量mn=VaI(Text2)If m n Then 这 个if语句目的是要保证m b ThenIf a c ThenPrint a;ElsePrint a;End IfElseIfb c ThenPrint b;ElsePrint cEnd IfEnd IfIfPrint

19、Hf(ab,Hf(ac,a,c),nf(bc,b,c)iif语句的应用,上面的if语句也可以改成用此语句实现|(1 3)输出1000之内的所有完数完数:完数是指个数的值恰好等于它的因子之和(1除外).例如,6的因子为1,2,3,而6=1+2+3,因此6是完数方法一:CisPrint n(l l)输出1000之内的所有完数”Fori=1 To 1000s=0n=0For j=1 To i-1,逐个比较直到i-iIfiM od j=0Thens=s+j 这里要把整除成立的两个因子都加进来,但是要注意到,把它自身也加了进来,下面的判断语句要减去自身End IfNext jIf s=i Thenn=n

20、+1Print i;If n Mod 9=0 Then PrintEnd IfNext iCisPrint H(H)输出1000之内的所有完数”Fori=lT ol000s=0n=0For j=1 To S q r(i),比较次数少于上述方法一If i Mod j=0 Thens=s+j+(i/j)这里要把整除成立的两个因子都加进来,但是要注意到,把它自身也加了进来,下面的判断语句要减去自身End IfNext jIf(s-i=i)and(io l)Then,从s里面减去自身,并且排除1 (不是完数)n=n+1Print i;If n Mod 9=0 Then PrintEnd IfNext

21、i(1 4)求出100内的自然数对自然数对是指两个自然数的和与差都是平方数,如 8 与 17的和8+17=25与其差17-8=9都是平方数,则 8 与 17称为自然数对。Cisn=0For i=1 To 100,该层循环产生第一个1ioo之间的整数Forj=lT ol00,该层循环是要产生第二个i-ioo之间的整数If Int(Sqr(i+j)=Sqr(i+j)And Int(Sqr(Abs(i-j)=Sqr(Abs(i-j)Thenn=n+1 1计数器,计算符合条件的输出项个数If n Mod 5 0 ThenPrintHElsePrint n*&End IfEnd IfNext jNext

22、 i(15)100-999之间的水仙花数水仙花数,就是指一个三位数,其各个数的立方和等于该数。例如153就是一个水仙花数,因为153=1八 3+5八 3+3八 3CIsFor i=100 To 999 1该层循环逐个产生符合条件的数字m=i 100)获取百位上的数n=(i Mod 100)10 1获取十位上的数k=(i Mod 10),获取个位上的数Ifi=mA3+n A3+kA3ThenPrint iEnd IfNext i(1 6)数字矩阵CisDim a(l To 10,1 To 10)As IntegerFori=1 To 10Forj=lT o l0Ifi=j Thena(i,j)=

23、0Elsea(i,j)=Rnd()*100End IfPrint Tabd*5);CStr(a(i,j)&输出后不换行Next jPrint Chr(13)输出两个空行内层循环结束换行Next i(1 7)要求用户输入正整数Cisa=Textl.Text 不能用vai()函数转换,否则a 就一定是数值For i=1 To Len(a)b=Mid(a,i,1)If(Asc(b)Asc(9)ThenMsgBox”输入不符合要求,请在文本框中输入正整数”Exit ForEnd IfNext i(1 8)打 印 杨 辉 三 角 形 ;1dim a()as long 1dim n as integer

24、1do|n=inputbox(请输入一个小于10的正整数:”)loop while(n10)redim a(n,n)for i=l to na(i,l)=la(i,i)=lnext ifor i=3 to nfor j=2 to i-1a(ij)=a(i-lj-l)+a(i-lj)next jnext iprintfor i=l to nprint tab(5);for j=l toiprint format(a(ij)J!);next jprintnext i(19)输出随机产生的10个数中最大、最小数及其平均值051oo00514123551513111621dim a(1 to 10)a

25、s integerdim max as integer,min as integerdim s as singlerandomizefor i=l to 10a(i)=int(rnd*99)+lprint a(i)next imax=0:min=100for i=l to 10if a(i)max then max=a(i)if a(i)min then min=a(i)s=s+a(i)next iprint”最大数是:”;maxprint”最小数是:H;minprint”平均值是:”;s/10(20)数组相关dim a as variant,b as varianta=array(l,35,

26、7,9)b=array(,monday,TuesdayH,Wednesday)for i=Lbound(a)to Ubound(a)print a;next iprintfor i=0 to Ubound(b)print b(i);,n;next i(2 1)模拟计算器1.使用控件数组,09数字按钮使用一个控件数组,+-*/运算使用一个控件数组,=为普通控件Dim b As Integer,aPrivate Sub Cmd_Click(Index As Integer)Select Case Index 由于本控件数组中的所有控件都执行当前的代码,所以这个select语句的功能可以用label

27、Lcaption=labdl.caption&cmd(index).caption代替,其中cmd是本控件数组的名称Case 0Labell.Caption=CStr(Labell.Caption&0)Case Labell.Caption=CStr(LabeIl.Caption&1)Case 2Labell.Caption=CStr(Label 1.Caption&2)Case 3Labell.Caption=CStr(Labell.Caption&3)Case 4Labell.Caption=CStr(Label 1.Caption&4)Case 5Labell.Caption=CStr(

28、Labell.Caption&5)Case 6Labell.Caption=CStr(Label 1.Caption&6)Case 7Labell.Caption=CStr(Labeil.Caption&7)Case 8Labell.Caption=CStr(Label 1.Caption&8)Case 9Labell.Caption=CStr(Label 1.Caption&9)End SelectEnd SubPrivate Sub Commandl_Click()Select Case bCase 0Labell.Caption=a+Val(Trim(LabeI 1.C aption)C

29、ase 1Labell.Caption=a-Val(Trim(Labell.Caption)Case 2Labell.Caption=a*Val(Trim(Labell.Caption)Case 3If Val(Trim(Labell.Caption)=0 ThenLabell.Caption=除数为零”ElseLabell.Caption=a/Val(Trim(Labell.Caption)End IfEnd SelectEnd SubPrivate Sub opt_Click(Index As Integer)a=Val(Labell.Caption)Select Case IndexCa

30、seOb=0Case 1b=lCase 2b=2Case 3b=3End SelectLabell.Caption=End Sub2.非控件数组实现方法(所有按钮都是标准按钮)Dim dot As Boolean,a As Variant,op As String 1全局变量a 为变体数据类型,避免计算过大数据时出错Private Sub Commandl_Click()Textl.ltext=Text 1.Text&1End SubPrivate Sub Command 10_Click()Textl.Text=Textl.Text&0End SubPrivate Sub Commandll

31、_Click()If dot=FaIse Then dot变量用于标识当前输入的数字是否已经使用过小数点Dot=tme 一 二 当前薮字已经使用过小数点,标识为已经使用过End IfEnd SubPrivate Sub Command 12_Click()a=V al(lfextL lbxt),保存运算前输入的数字(第一个因式)Textl.Text=.清空文本框,为输入下一个数字(因式)作准备dot=False 小数点使用标志改成未使用状态,保证下一个数可以使用小数点op=n+n,也 可 以 把 数 字 1放 入 op变量,用来在“二 过程区别这里所执行的操作End SubPrivate Su

32、b Command 13_Click()a=Val(rIfextl.lext)Textl.Text=n ndot=Falseop=-也 可 以 把 数 字 2 放 入 o p 变 量,用 来 在“=过 程 区 别 这 里 所 执 行 的 操 作End SubPrivate Sub Commandl4_Click()a=Val(Textl.lfext)Textl.Text=dot=Falseop二 八”也可以把数字3 放 入 op变量,用来在“二”过程区别这里所执行的操作End SubPrivate Sub Commandl5_Click()a=Val(Textl.Text)Textl.Text

33、=,ndot=Falseop=也可以把数字4 放入op变量,用来在“=过程区别这里所执行的操作End SubPrivate Sub Commandl6_Click()=按钮(计算)Select Case op 根据o p 的内容来判断到底执行那种运算CaseTextl.Text=a+Val(Textl.Text)Case”Textl.Text=a-Val(Textl.Text)CaseTextl.Text=a*Val(Textl.Text)Case 7IfVal(TtextLTbxt)=OThen,这 个 if语句用于判断除数是否为零,并警告Textl.Text=a/Val(lextl.Tex

34、t)ElseTextl.Text 除法运算除数不能为零!”End IfEnd SelectEnd SubPrivate Sub Commandl7_Click()1 恢复为初始状态a=0Textl.Text=HMdot=Falseop=End SubPrivate Sub Command2_Click()Textl.Text=Textl.Text&2End SubPrivate Sub Command3_Click()Textl.Text=Textl.Text&3End SubPrivate Sub Command4_Cllck()Textl.Text=Textl.Text&4End SubP

35、rivate Sub Command5_Click()Textl.Text=Textl.Text&5End SubPrivate Sub Command6_Click()Textl.Itext=Textl.Text&6End SubPrivate Sub Command7_Click()Textl.Text=Textl.Text&7End SubPrivate Sub Command8_Click()Textl.ltext=Textl.Text&8End SubPrivate Sub Command9_Click()Textl.Text=Textl.Text&9End Sub(2 2)选择排序

36、法option base 1Dim ia(l To 6)As Integer,imin As Integer n As IntegerDim i As Integer,j As Integer,t As Integer,k As Integern=6ia(l)=8:ia(2)=6:ia(3)=9:ia(4)=3:ia(5)=2:ia(6)=7For i=1 To n-1imin=iFor j=i+1 To nIf ia(j)ia(imin)Then imin=jNext jt=ia(i)ia(i)=ia(imin)ia(imin)=tFor k=1 To nPrint ia(k);Next k

37、Print(2 3)冒 泡 排 序 法(降 序 方 式)CisDim a(l To 10)As IntegerFori=1 To 10Dox=Int(Rnd*20)yes=0Forj=lT o i-lIfx=a(j)Then yes=1:Exit F o r卜保证数字大小不重复Next jLoop While yes=1a(i)=xNext iPrint”排 序 前10个数的次序:”Fori=1 To 10Print a(i);Next i 双重循环进行“冒百丁For i=1 To 10Forj=lT o lO-iIfag)high Thenindex=-1Exit SubEnd IfIf key lT hen 卜这 个if语句用于将a中已经替换过了的数字位去掉,额|于加上正确的单位,也可去掉这个语句,使用循环变量来作单位判断a=Mid(a,2,Len(CStr(a)-1)End IfNext iEnd Sub

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁