VISUALBASIC(VB)学案二十一、经典应用:【练5】求斐波那契(Fibonacci)数列的第n个数据项,n由键盘输入。引进递推法。分析问题:从兔子实例中总结归纳规律。规律:每个月的兔子数等于上个月的兔子数加上两个月前的兔子数。规律的数学表达:如果用用Fi表示斐波那契数列的第i项,则该数列的各项间的关系为:Fn=Fn-1+Fn-2这里,n≥3,F1=1,F2=1。Fn=Fn-1+Fn-2一般称为递推公式。处理:第一项和第二项分别为1。第三项起,用递推公式计算各项的值,直至第n项为止。由于中间各项只是为了计算后面的项,因此可以轮换赋值。输出:第n项的值。流程图:编写程序上机调试和运行PrivateSubCommand1_Click()Dimn,a,b,c,kAsSinglen=InputBox(请输入斐波那契数列的数据项项数:)n=val(n)Ifn=3Then’n项为2的情况a=1’第1项的斐值为1b=1’第2项的斐值为1k=3’从第3项起开始计算DoWhilek=n’循环结构K=3计算到第N项c=a+b’前两项累加的和赋值给ca=b’最新的前两项中的a值b=c’最新的前两项中的b值k=k+1LoopPrint结果为:;c’第n项为第3项且以上斐值为CElsePrint结果为:;1’第n项为1或2时斐值为1EndIfEndSub【练4】键盘输入任意10个数,然后用选择排序法将10个数降序排序并输出。分析问题:输入:逐个输入各个数。处理:采用“选择法”排序。排序的数用数组变量处理。出现双重循环。输出:排序后的各个数。流程图:见右图编写程序:上级调试和运行注意:上述选择排序法程序思想的核心程序与我们上课时讲解的排序思想不同。考试时求某一次排列顺序,都是以我们上课时讲解的选择排序思路为准,每次先找到最值,然后和待排序位最多进行一次交换。考纲上没有对选择法做程序设计上的要求,一般同学需要知道上课讲的选择排序法思想即可。PrivateSubCommand1_Click()Dima(1To10)AsSingleDimi,j,tAsSinglei=1DoWhilei=10a(i)=InputBox(请输入一个数)a(i)=Val(a(i))i=i+1Loopi=1DoWhilei=9j=i+1DoWhilej=10Ifa(i)a(j)Thent=a(i)a(i)=a(j)a(j)=tEndIfj=j+1Loopi=i+1Loopi=1DoWhilei=10Printa(i)i=i+1LoopEndSub【练7】键盘输入任意10个数,然后用冒泡排序法将10个数升序排序并输出。【练8】键盘输入任意10个数,然后用折半(对分)查找键盘输入的KEY。复习建议:1、学业水平考考试手册、学科教学基本要求。为复习根本。2、必修模块,以第一学期教材为主。选修模块,以学案为主。并参看在VB学案提到的第二册书部分内容。3、建议三种结构的流程图一定要会画,会写对应基本结构的程序代码。4、经典例子搞不懂,就记和背核心代码。VB的学习看这两份学案。5、除了编写程序外(毕竟分值很少),多花时间在基础知识上。PrivateSubCommand1_Click()Dimbobo(1To10)AsSingleDimi,j,tAsSinglei=1DoWhilei=10bobo(i)=InputBox(请输入一个数)bobo(i)=Val(bobo(i))i=i+1LoopFori=1To10Forj=1To10-iIf(bobo(j)bobo(j+1))Thent=bobo(j)bobo(j)=bobo(j+1)bobo(j+1)=tEndIfNextjNextii=1DoWhilei=10Printbobo(i)i=i+1LoopEndSubPrivateSubCommand1_Click()Dima(1To10)AsSingleDimi,n,r,m,flag,keyAsSingleFori=1To10a(i)=InputBox(请输入数组元素的值:)a(i)=Val(a(i))Nextikey=InputBox(请输入要查找的Key:)key=Val(key)n=1:r=10:flag=0DoWhilen=rAndflage=0m=Int((n+r)/2)Ifa(m)=keyThenflag=1PrintmEndIfIfkeya(m)Thenn=m+1Elser=m-1EndIfLoopIfflag=0ThenPrint没有找到!EndIfEndSub【练6】键盘输入任意10个数,然后在10个数中顺序查找键盘输入的KEY。注意:1、x=Inputbox(“请输入一个数”)题目中如事先没有定义X,则上述X为字符型。所以如果X要用来做数值型计算,则一定要前加定义为数值型,如后加VAL转换函数则更保证不会出错。即:2、VB中标点符号一定要用英文的标点符号。PrivateSubCommand1_Click()Dima(1To10)AsSingle’定义数组Dimi,r,keyAsSingle’定义几个变量Fori=1To10’输入10个数赋值给数组a(i)=InputBox(请输入数组元素的值:)a(i)=Val(a(i))Nextikey=InputBox(请输入要查找的Key:)’输入要查找的关键字key=Val(key)i=1:r=0DoWhilei=10Andr=0’没有到查找到最后一个数或没有找到(r=0)继续循环Ifa(i)=keyThen’如果找到,r=ir=iElse’如果没有找到,下标加一准备调用下一个数组元素值i=i+1EndIfLoopPrintr’输出日r的值,即如找到输出该数组元素下标,没有找到输出0EndSubDimxAsSinglex=Inputbox(“请输入一个数”)x=Val(x)Printx+x如输入3,则屏幕显示6x=Inputbox(“请输入一个数”)Printx+x如输入3,则屏幕显示33