第五章习题与思考题和答案一、判断题1.要实现同样的循环控制,在DoWhile-Loop和Do-LoopWhile循环结构中给定的循环条件是一样的。2.Do-LoopWhile语句实现循环时,不管条件真假,首先无条件地执行一次循环。3.Do-LoopUntil语句实现循环时,只要条件是假,循环将一直进行下去。4.一个Do循环只能使用一个Loop关键字,但是可以使用多个Exit语句。5.For循环语句正常结束(即不是通过ExitFor语句或强制中断)其循环控制变量的值一定大于“终值”,并等于“终值”+“步长”。6.如果有多重Do循环嵌套,位于最里层循环体语句中的ExitDo语句可以退出所有的循环。7.For-Next循环结构的默认步长为1。8.Do-Loop语句是循环结构的一种特殊形式,如果循环体中没有ExitDo语句,程序运行就一定会进入死循环。二、选择题1.循环结构Fori!=1to10step1.5共执行几次。A.6B.7C.9D.102.下列循环正常结束的是。A.i=0B.i=0DoDoWhilei0i=i-1i=i-1LoopWhilei0LoopC.i=10D.i=6DoDoi=i+1i=i-2LoopUntili0LoopUntili=13.下列哪组语句可以将变量A、B值互换。A.A=B:B=AB.A=A+B:B=A–B:A=A–BC.A=C:C=B:B=AD.A=(A+B)/2:B=(A–B)/24.下段程序执行的输出结果是。S=0:T=0:U=0Fori=1To3Forj=1ToiForK=jTo3S=S+1NextKT=T+1NextjU=U+1NextiPrintS;T;UA.3614B.1463C.1436D.16435.下程序段循环结构执行后,输出i的值是:A.25B.10C.11D.因为y的初值不知道,所以不确定Fori=1to10step2y=y+iNextiPrinti;6.下列程序段的循环结构执行过程中共循环了次。Fori%=1To10Step2y=y+iNextiA.3B.4C.5D.67.以下程序循环的执行次数是。a=0Dowhilea=10a=a+2loopA.4B.5C.6D.7三、填空题1.由下列循环语句控制的循环次数是。Fork=25to0step-2k=k-2Nextk2.循环结构的三种语句是:、、。3.写出Fori=-12To–33Step–4所进行的循环后,i的值是。四、程序阅读题1.写出以下程序在单击窗体后的输出结果。PrivateSubForm_click()mun=4whilemun=3mun=mun+1PrintmunWendPrintmunEndSub2.程序运行时单击Command1后,输入12345678,写出窗体上的输出结果。PrivateSubCommand1_Click()DimxAsLong,yAsStringx=InputBox(输入一个数)DoWhilex0y=y&xMod10y=xMod10&yx=x\100PrintyLoopEndSub3.写出程序运行后,单击窗体Form1上显示的内容。PrivateSubForm_Click()DimiAsInteger,jAsInteger,yAsDoublei=0y=1DoWhilei=3Forj=1To(i+1)y=y*jNextjPrinty=;yi=i+1LoopEndSub4.写出以下程序在单击窗体后的输出结果。PrivateSubForm_click()Dimk,a,basintegera=20b=2k=2DoWhilek=ab=b*2k=k+5LoopPrintbEndSub5.写出以下程序在单击命令按钮后的输出结果。PrivateSubForm_click()k=0fori=1to5forj=1to3ifjmod20thenk=k+1endifk=k+1nextjnextiPrintkEndSub6.PrivateSubForm_Click()DimiAsInteger,jAsIntegerDimstarAsStringstar=#Fori=1To6Forj=iTo6Form1.Printstar;NextjForm1.PrintNextiEndSub写出程序运行后,单击窗体后,Form1上输出结果为。五、程序填空题1.下面程序的功能是:计算f=1-1/(2*3)+1/(3*4)-1/(4*5)+……+1/(19*20)。PrivateSubForm_Click()DimfAsSingle,iAsInteger,signAsInteger⑴f=1⑵⑶f=f+sign/(i*(i+1))NextiPrintf=;fEndSub2.下面的程序是在一个字符串变量中查找at,并用消息框给出查找结果的报告:没有找到或找到的个数,程序如下:PrivateSubForm_Click()Dimstr1AsString'在字符串str1中查找atDimlengthAsInteger'字符串长度DimsumAsInteger'查到的个数DimiAsIntegerstr1=InputBox(请输入一个字符串)length=⑴i=1sum=0DoWhilei=⑵If⑶=atThensum=sum+1EndIfi=i+1LoopIf⑷ThenMsgBox没有找到!ElseMsgBox找到了&Str(sum)&个EndIfEndSub3.找出1个在1~1000中被7除余5、被5除余3、被3除余2的数(用ExitFor)。PrivateSubForm_Click()DimiAsIntegerFori=5To1000Step7If⑴ThenExitForNextiIf⑵ThenPrintiEndSub4.以下程序的功能是:从键盘输入若干个学生的考试成绩,统计并输出最高分和最低分,当输入负数时结束输入,输出结果。请填空。PrivateSubform_Click()Dimx,amax,aminassingleX=inputbox(”enterascore”)amax=xamin=xdowhile⑴ifxamaxthenamax=xendifif⑵thenamin=xendifx=inputbox(“enterascore”)loopprint“max=”;amax;”min=”;aminEndSub5.现面的程序功能是:求Fabonia数列的第17个数是多少?第几个数起每个数都超过1E+8?PublicSubForm_Click()'Fabonia数列的前三个数是0,1,2,从第四个数起,每个数都是它前面的两个数之和Dimlast_oneAsLong,last_twoAsLong,this_oneAsLong,iAsIntegerlast_one=1'数列的第二个数last_two=2'数列的第三个数i=4'从数列的第四个数求起Dothis_one=last_one+last_two⑴⑵Ifi=17ThenPrintNo:17=;this_oneEndIf⑶LoopWhilethis_one=100000000#PrintNo:;⑷;is1E+8EndSub6.以下程序是验证100至200之间的所有偶数都能分解为两个素数之和。PrivateSubForm_click()DimnAsInteger,mAsIntegerDimiAsInteger,jAsIntegerForn=100to200Step2Form=2To(n/2)Fori=2ToInt(Sqr(m))IfmModi=0ThenExitForNextiIf⑴ThenForj=2To⑵If(n-m)Modj=0ThenExitForNextjIfjInt(Sqr(n-m))ThenPrintn,m,n-mEndIfNextmNextnEndSub六.编程题(1)编程序计算:1!+3!+5!+….+11!(2)输入两个正整数m和n,求其最大公约数a和最小公倍数b,计算最大公约数a的方法如下:先算出m/n余数r,若r等于0,则n为最大公约数;若r不为0,则把原来的n值作为新的m值,把原来的r值作为新的n值,继续运算。这样辗转相除,直到r为0,此时的n值为最大公约数a,最小公倍数则可用原始m与n值的积除以最大公约数求得。(3)打印由数字组成的如下所示金字塔图案12223333344444445555555556666666777778889(4)试编程序解决百钱买百鸡问题。公元前5世纪,我国数学家张丘建在《算经》中提出“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?(5)编程序求表达式s=1+x+x2/2!+x3/3!+…+xn/n!+…的值和直至末项小于10-5为止,并在窗体上输出。答案一.判断题×√√√××√×二.选择题BBBDCCC三.填空题(1)7(2)Do/LoopFor/NextWhile/Wend(3)-36四.程序阅读题1、42、3、y=1y=2y=12y=2884、325、256、五.程序填空题1.①sign=1②Fori=2to19(3)sign=-sign2.①Len(str1)②length③Mid(str1,i,2)④Sum=03.①imod7=5andiMod5=3AndiMod3=2②i10004.(1)x=0(2)xamin5.①last_one=laat_two②last_two=this_one③i=i+1④i-26.①iint(sqr(m))②Int(Sqr(n-m))六.编程题(1)PrivateSubForm_Click()DimiAsInteger,jAsIntegerDimsAsDouble,SumAsDoubles=1Sum=0Fori=1To11Step2Forj=1Tois=s*jNextj8868864688642468852#####################Sum=Sum+sNextiPrintSumEndSub(2)PrivateSubForm_Click()Dimm%,n%,mn%,r%,t%m=Val(InputBox(m=))n=Val(InputBox(n=))Ifn=0Orm=0ThenMsgBox数据有误EndEndIfmn=m*nIfmnThent=m:m=n:n=tEndIfDoWhile(n0)r=mModn:m=n:n=rLoopForm1.Print最大公约数=;mForm1.Print最小公倍数=;mn/mEndSub(3)PrivateSubForm_Click()Dimi%,j%Fori=1To5PrintSpc(20-i);Forj=1To2*i-1PrintTrim(Str(i));NextjPrintNextiFori=4To1Step-1PrintSpc(20-i);Forj=1To2*i-1PrintTrim(Str(10-i));NextjPrintNextiEndSub(4)PrivateSubForm_Click()DimxAsIntegerDimyAsIntegerDimzAsIntegerForx=0To100Fory=0To100-xz=100-x-yIf5*x+3*y+z/3=100ThenPrintx,y,zNextyNextxEndSub(5)PrivateSubForm_Click()DimxAsSingle,yAsSingle,aAsSingle,iAsIntegerx=Val(InputBox(输入x:))a=1:y=a:i=0Whilea=0.00001i=i+1:a=a*x/i:y=y+aWendPrinty=;yEndSub