1第4章补充资料习题解答1.计算下列循环语句的次数:(1)ForI=-3To20Step4答:循环次数为6次。循环体内I的值分别为:-3,1,5,9,13,17;出了循环体后I的值为21。(2)ForI=-3.5To5.5Step0.5答:循环次数为19次。(3)ForI=-3.5To5.5Step-0.5答:不循环,步长0,循环初值终值。(4)ForI=-3To20Step0答:无数次,步长=0。2.下列30~90为语句标号,分别标记该语句,第40号语句共执行了几次,第50号语句共执行了几次,执行第90号语句后显示的结果是多少?30Forj=1To12Step340Fork=6To2Step-250mk=k60Printj,k70Nextk80Nextj90Printj,k,mk答:第40号语句共执行了4次,是外循环的循环体;第50号语句共执行了12次,是内循环的循环体,循环次数为两重循环次数的乘积;第90号语句显示的结果是1302。3.如果实现不知道循环次数,如何用For…Next结构来实现?答:只要将循环的终值设置成一个非常大的值,然后再循环体内增加If语句,判断是否满足循环结束的条件。形式如下:For循环变量=1To非常大的数…If满足循环结束条件ThenExitFor…Next循环变量4.利用循环结构,实现如下功能:(1)101)12)(1(iiis答:s=0Fori=1To10s=s+(i+1)*(2*i+1)2Nexti(2)分别统计1~100中,满足3的倍数、7的倍数的整数各有多少?答:s3=0s7=0Fori=1to100Ifimod7=0Thens7=s7+1Ifimod3=0Thens3=s3+1Nexti(3)将输入的字符串以反序显示。如输入“ASDFGHJKL”,显示“LKJHGFDSA”。答:s=InputBox(“输入字符串”)Fori=Len(s)To1Step-1PrintMid(s,i,1);Nexti5.下面程序的运行结果是什么?该程序的功能是什么?PrivateSubCommand1_Click()Dimx$,n%n=20DoWhilen0a=nMod2n=n\2x=Chr(48+a)&xLoopPrintxEndSub答:运行后结果为10100,该程序的功能是将十进制数转换成二进制字符串。6.下面程序的运行结果是什么?该程序的功能是什么?PrintSubCommand1_Click()Dimx%,y%,z%x=242:y=44z=x*yDoUntilx=yIfxyThenx=x–yElsey=y–xLoopPrintx,z/xEndSub答:运行结果为22和484;该程序的功能是用相减法求x,y的最大公约数和最小公倍数。7.利用随机函数产生50~100范围内的20个随机数,现实其中的最大值、最小值和平均值。PrivateSubForm_Click()Dimi%,min%,max%,avg%,x%min=100‘设置最小值、最大值和平均值的初态3max=50avg=0Fori=1To20x=Int(Rnd*51+50)Printx;IfxmaxThenmax=xIfxminThenmin=xavg=avg+xNextiPrintPrint“最小值=”;min,“最大值=”;max,“平均值=”;avg/20EndSub常见错误和难点分析1.一般循环控制变量在循环体内可以引用但不要被赋值如在循环控制变量的引用和赋值将影响循环次数,引起混乱,效果如图4.1所示。PrivateSubCommand1_Click()Print“单击Command1输出:”Fori=1To20s=s+i‘循环控制变量i被引用,正确使用PrintI;NextiPrintEndSubPrivateSubCommand2_Click()Print“单击Command2输出:”Fori=1To20i=i+2‘循环控制变量i被赋值,改变了循环次数,不正确使用PrintI;NextiPrintEndSub图4.1循环控制变量引用和赋值的两种使用方式运行效果2.不循环或死循环的问题出现不循环或死循环的情况主要是循环条件、循环初值、循环终值、循环步长的设置有4问题。例如,以下循环语句不执行循环体:Fori=10To20Step-1‘步长为负,初值必须大于等于终值,才能循环Fori=20To10‘步长为正,初值必须小于等于终值,才能循环DoWhileFalse‘循环条件永远不满足,不循环例如,以下循环语句为死循环:Fori=10To20Step0‘步长为0,死循环DoWhile1‘循环条件永远满足,死循环3.循环结构中缺少配对的结束语句For···Next语句没有配对的Next语句;Do语句没有一个终结的Loop语句等。4.循环嵌套时,内外循环交叉Fori=1To4Forj=1To5···NextiNextj上述循环体的交叉,运行时显示“无效的Next控制变量引用”。外循环必须完全包含内循环,不得交叉。5.循环结构与If块结构交叉Fori=1To4If表达式Then···NextiEndIf错误同上,正确的做法应该为If结构完全包含循环结构,或者循环结构完全包含If结构。6.累加、连乘时,存放累加、连乘结果的变量赋初值的问题(1)一重循环在一重循环中,存放累加、连乘结果的变量初值设置应放在循环语句前。例如,求1~100之间的3的倍数之和,结果存入Sum变量中,如下程序段的输入结果如何?PrivateSubForm_Click()Fori=3To100Step3Sum=0Sum=Sum+iNextiPrintSumEndSub要得到正确的结果,应如何改进?(2)多重循环在多重循环中,存放累加、连乘结果的变量初值设置应放在外循环语句前,还是内循环语句前,这要视具体问题分别对待。例如,30位学生参加三门课程的期末考试,以下是用程序实现求每个学生的三门课程的平均成绩,应如何改进?5aver=0Fori=1To30Forj=1To3m=InputBox(“输入第”&j&“门课的成绩”)aver=aver+mNextjaver=aver/3PrintaverNexti测试题一、选择题1.以下是正确的For···Next结构。A.Forx=1ToStep10B.Forx=3To-3Step-3······NextxNextxC.Forx=1To10D.Forx=3To10Step3re:······NextxNextyIfi=10ThenGotore2.下列循环结构能正常结束循环的是。A.i=5B.i=1DoDoi=i+1i=i+2LoopUntili0LoopUntili=0C.i=10D.i=6DoDoi=i+1i=i-2LoopUntili0LoopUntili=13.下列程序段的运行结果为。Fori=3To1Step-1PrintSpc(5-i);Forj=1To2*i–1Print”*”NextjPrintNextiA.*B.*****C.*****D.*************************4.当在文本框中输入“ABCD”4个字符时,窗体上显示的是。PrivateSubText1_Change()PrintText1;6EndSubA.ABCDB.AC.AABABCABCDD.ABABCABCDABCD5.下列哪个程序段不能分别正确显示1!、2!、3!、4!的值。A.Fori=1To4B.Fori=1To4n=1Forj=1ToiForj=1Toin=1n=n*jn=n*jNextjNextjPrintnPrintnNextiNextiC.n=1D.n=1Forj=1To4j=1n=n*jDoWhilej=4Printnn=n*jNextjPrintnj=j+1Loop6.下列关于Do···Loop循环结构执行循环体次数的描述正确的是A.DoWhile···Loop的循环和Do···LoopUntil循环至少都执行一次B.DoWhile···Loop的循环和Do···LoopUntil循环可能都不执行C.DoWhile···Loop的循环至少执行一次和,Do···LoopUntil循环可能不执行D.DoWhile···Loop的循环可能不执行,Do···LoopUntil循环至少执行一次7.下面的程序段的运行结果为多少?PrivateSubCommand1_Click()Fori=1To5n=0Forj=iTo5n=n+1NextjNextiPrintnEndSubA.10B.5C.15D.1二、填空题1.要使下列For语句循环执行20次,循环变量的初值应是:Fork=(1)To-5Step-22.下面程序显示(2)个“*“Fori=1To5Forj=2To2Print“*”Nextj7Nexti3.下列第40号语句共执行了(3)次,第41号语句共执行了(4)次。30Forj=1To120Step340Fork=6To2Step-241MsxBox(j&””&k)42Nextk43Nextj4.输入任意长度的字符串,要求将字符顺序倒置。例如,将输入的“ABCDEFG”变换成“GEFDCBA”。PrivateSubCommand1_Click()Dima$,I%,c$,d$,s%a=InputBox$(“输入字符串”)n=(5)ForI=1To(6)c=Mid(a,I,1)Mid(a,I,1)=(7)(8)=cNextIPrintaEndSub5.找出被3、5、7除,余数均1的最小的5个正整数。PrivateSubCommand1_Click()DimCountN%,n%CountN=0n=1Don=n+1If(9)ThenPrintnCountN=CountN+1EndifLoop(10)EndSub6.有一个长阶梯,如果每步跨2阶最后剩1阶,如果每步跨3阶最后剩2阶,如果每步跨4阶最后剩3阶,如果每步跨5阶最后剩4阶,如果每步跨6阶最后剩5阶,只有当如果每步跨7阶时恰好走完,显示这个阶梯至少要有多少阶。提示:利用肯定是7的倍数这个条件,然后根据同时满足除n余m(n=2,3,4,5,6,m=1,2,3,4,5)的逻辑关系即可。SubCommand1_Click()Dimn%,m%Forn=7To10000Step7Ifn=Mod2=1And(11)ThenPrintn(12)8EndifNextnEndSub7.期末某班在一周6天内考三门分别为x,y,z的考试课程,规定一天只能考一门,课程依次按先考x后考y,最后考z,最后一门课程最早周五考。用计算机排考试,列出满足条件的方案和方案数,如图4.2。图4.2习题7运行界面PrivateSubCommand1_Click()Dimx%,y%,z%,n%n=0Forx=1To4Fory=(13)To5Forz=5To6If(14)AndyzThenPrintx&Space(9)&y&Space(9)&z(15)EndifNextzNextyNextx(16)“满足条件的方案数为:”&nEndSub8.某次大奖赛,有7个评委打分,如下程序对一名参赛者,输入7个评委的打分分数,去掉一个最高分、一个最低分后,求出平均分为该参赛者的得分。SubCommand1_Click()Dimmark%,aver%,i%,max1!,min1!aver=0Fori=1To7mark==InputBox(“请输入第”&i&“位评委的打分”)Ifi=1Thenmax1=mark:(17)9ElseIfmarkmin1Then(18)Elseifmarkmax1Then(19)EndifEndif(20)Nextiaver=(21)PrintaverEndSub9.下面程序功能是判断100以内的孪生素数,如图4.3所示,所谓“孪生素数”是指两个数相差2的素数对图4.3习题9运行界面PrivateSubCommand1_Click()DimCountp1