第6章程序控制结构6.1典型考题分析与解答1.在窗体上有两个文本框和一个命令按钮(Name属性分别为Text1、Text2和Command1),其中任意一个文本框用来输入一个正实数,单击命令按钮后,在另一个文本框输出该数的平方根。下面事件过程中的第一个If/EndIf结构的作用是:判断如果没有在某一个文本框中输入实数就单击命令按钮,则给出错误信息,然后结束程序的运行。第二个If/EndIf的作用是:判断在哪一个文本框中输入实数,以便在另一个文本框中输出结果。PrivateSubCommand1_CliCk()If[1]ThenMsgBox(PleaseInputData)ExitSubEndIfIf[2]ThenText1.Text=Str(Sqr(Val(Text2.Text)))ElseText2.Text=Str(Sqr(Val(Text1.Text)))EndIfEndSub【分析】如果文本框的Text属性值为空,说明在文本框中没有输入数据,所以第一个空应填写语句:Text1.Text=AndText2.Text=或:Text1=AndText2=如果文本框的Text属性的长度为0,说明该文本框的Text为空串。从第二个If_Else_EndIf结构看出,如果条件为真,要将Text2中的内容放入Text1中。这个条件应是第一个文本框为空,所以第二个空应填写语句:Len(Text1.Text)=0。注意不能写成Len(Text2.Text)=0,这样写虽然没有语法错误,程序运行时也不会出错,但不能实现题目所要求的功能。【解答】Text1.Text=AndText2.Text=或:Text1=AndText2=;Len(Text1.Text)=02.下列语句中,语法正确的是。A.R^2=9B.ab=3C.a=b3D.Leta=5,b=10【分析】本题主要是考核学习者掌握赋值语句的书写格式。赋值语句的命令动词是Let,Let可以省略,其格式为[Let]变量名=表达式赋值语句功能是:先计算表达式的值,然后把表达式的值赋给赋值号左边变量。选项A错误。赋值号左边是一个算术表达式,不符合赋值语句的格式要求。选项B错误。赋值号左边是一个关系表达式,不符合赋值语句的格式要求。选项C正确。赋值号右边是一个关系表达式“b3”,将b3的逻辑值赋给变量a。选项D错误。一条Let语句只能给一个变量赋值,该语句试图用一个赋值语句给两个变量赋值是错误的。若将该语句改为Leta=5:b=10就正确了,实际上是用冒号把它分开而成为两条赋值语句。【解答】C3.在窗体上画一个命令按钮,然后编写如下事件过程:PrivateSubCommand1_Click()Fori=1To10x=3Forj=1To3x=x+3NextjNextiPrintxEndSub程序运行后,单击命令按钮,输出结果是。A.9B.12C.90D.93【分析】本题主要是考核学习者掌握“For语句”的编写。题目中给出的是一个两层For循环的程序。语句“x=3”要执行10次。语句“x=x+3”要执行30次。但不管外循环执行几次,每开始一个内循环时,x总是被重新赋初值3。所以内循环最后一次执行时,x从初值3开始,执行3次加3的操作,最后x的值是12。【解答】B4.下列程序的功能为输出如下的图形。程序不完整,请在[1]、[2]处填入所需内容。********************************PrivateSubCommand1_Click()Fori=1To4PrintTab(10+i);Forj=[1]Print*;[2]PrintNextiEndSub【分析】本题主要是考核学习者掌握“双重循环结构”语句的编写。题目中给出这类测试的程序通常有一个双重循环结构,外循环决定打印输出行的数量,内循环决定每行输出的字符和字符个数,通常在Print语句中用一个Tab函数确定每行第一个字符的打印位置。程序的外循环变量i从1增加到4,步长为1,循环4次,因此打印输出4行。内循环的循环变量j,其初值和终值均不知道。我们从各行打印输出的字符均为8个“*”号,而内循环的Print语句每次打印输出1个“*”号,因此可以肯定,内循环的循环次数为8次。如果我们将循环变量j的初值定为1,终值定为8,即可满足本题的要求。我们给出的【解答】为1To8。在进入内循环以前的Print语句的Tab函数是用来确定每行的打印的起始位置的,Print语句的Tab函数的实际变量为10+i,每次内循环,每行的打印随外循环变量i的增大而从第10列逐行右移一列。【解答】[1]1To8;[2]Nextj5.下面程序执行后,x的值为。a=10:b=0DoWhilea-ba=a−1b=b+1x=x+a+bloopA.30B.40C.50D.60【分析】本题主要是考核学习者掌握“DoWhile-loop控件结构”编程。题目中给出的程序用DoWhile-loop控件结构编程。DoWhile语句的条件表达式是数字表达式a−b,当a−b为0时,结束循环。程序中的While循环执行5次,注意不是执行6次。每执行一次循环体,将a+b的值累加到x中,a+b的值总是10,所以最后x的值为50。【解答】C6.假定有下面的程序段:Fori=1To3Forj=1ToiFork=jTo3Printi=;i,j=;,j,k=;kNextkNextjNexti这是一个三重循环程序,在这个程序中,外层、中层和内层循环的循环次数是。A.3、6和14B.3、8和16C.3、4和12D.3、9和18【分析】本题主要是考核学习者掌握“多重特环结构语句”的使用。在多重循环中,外层循环变化一次,内层循环从头到尾执行一遍。该题是一个三重循环,而且中层循环变量的终值和内层循环变量的初值是随上一层循环的循环变量的变化而变化的,因此需要逐层加上计算后累加出各层的循环次数。模拟计算机的计算过程,计算各层的循环次数如下:(1)外层循环:i=1To3,循环次数为3(2)中层循环:当i=1时,j=1To1,循环1次当i=2时,j=1To2,循环2次当i=3时,j=1To3,循环3次中层循环的循环次数为6(3)内层循环:当j=1时,k=1To3,循环3次当j=1时,k=1To3,循环3次当j=2时,k=2To3,循环2次当j=1时,k=1To3,循环3次当j=2时,k=2To3,循环2次当j=3时,k=3To3,循环1次内层循环的循环次数为14【解答】A7.在窗体上画一个命令按钮,然后编写如下事件过程:PrivateSubCommand1_Click()b=0DoUntilb0a=Val(InputBox(输入a的值))b=Val(InputBox(输入b的值))a=a+bLoopPrintaEndSub程序运行后,依次输入5、4、3、2、1、0、−1、−2,则输出结果是。A.15B.12C.1D.−3【分析】程序运行后,共输入4组数据,a依次取值为5、3、1、−1,b依次取值为4、2、0、−2。注意到循环条件是“b0”,所以当“a=1,b=0”时,还要再输入第4组数据,这时“a=−1,b=2”,计算出a的值为−3,然后判断出b0为真,结束循环。还要注意到,a=a+b从形式上看是将b累加到变量a中,但实际上并不会起到累加的作用,因为变量a不断被赋予新值。这样,不管输入多少组数据,a的值仅仅是最后一组输入的数据之和。【解答】D8.在窗体中添加命令按钮,编写如下程序:PrivateSubCommand1_Click()a=0Form=1To10a=a+1b=0Forj=1To10a=a+1b=b+2NextjNextmPrinta,bEndSub单击命令按钮,程序的执行结果为。A.10,20B.20,110C.110,20D.200,110【分析】每执行一次外循环,a的值增加11,执行10次外层循环后a的值为11×10=110,B在每次执行外层循环后的值都是相同的,b=10×2=20。【解答】C9.阅读下面程序段:DimLnAsSingle,mAsSingleDimkAsInteger,tAsSinglek=0.0:Ln=0.0:m=1.0:t=1.0x!=Val(InputBox(输入x的值))Dok=k+1:t=t*xs=m*t/k:Ln=Ln+sm=−mLoopWhilek10PrintLn程序段所计算的表达式是。A.x+x^2/2+x^3/3+x^4/4+…+x^10/10B.x−x^2/2+x^3/3−x^4/4+…−x^10/10C.x+x^2+x/3+x/4+…+x/10D.x−x^2+x/3−x/4+…−x/10【分析】这里的Do…Loop循环的条件是k10,While关键字放在Loop语句中,这样要先执行循环体,再进行条件判断,这与第12例的Do…Loop循环有区别。第12题的Until关键字放在Do语句中,要先进行条件判断,再决定是否执行循环体。这一点是While(Until)关键字放在Do语句中或放在Loop语句中的区别所在。另外,使用While关键字是当其后的条件为真时执行循环体,使用Until关键字是当其后的条件为假时才执行循环体。这一点是使用While与Until关键字的区别。注意到重复执行t=t*x的结果是t取值为x的某次方。比如重复执行5次,则t为x^5;s=m*t/k的结果是s为代数式的每一个累加项;Ln=Ln+s的结果是累加m=−m的结果,m交替取值+1和−1。【解答】B10.有如下程序PrivateSubForm_Click()c=4:d=Val(InputBox(请输入一个数))DoWhiled0IfdcThenc=c+1d=Val(InputBox(请输入一个数))LoopPrintc+dEndSub运行时输入9,8,7,6,5,4,3,2,1,0,输出的结果是。A.5B.6C.7D.8【分析】在进入循环前,程序为c赋了初值4,以后每次循环输入一个数,若输入的数大于c,则c增1,根据输入的数可以看出,输入9时大于c,c增1变成5,输入8时大于c,c增l变成6,输入7时大于c,c增1变成7,以后所有输入的数都不大于c,c保持7不变,直到输入是0时,退出循环,退出循环时,d的值是0,因此c+d的值仍然为7。【解答】C11.阅读下面的程序段:Fori=1To2Forj=iTo3Fork=jTo4Printi*j*kNextkNextjNexti执行上面的程序段后,输出的数的个数是个。A.24B.14C.12D.8【分析】循环体只有一条输出语句,每次输出一个数,循环体被执行几次,输出的数就有几个,所以解这个题实际上是看3层For循环执行的次数。多层For循环的执行规则是:外循环控制变量每取一个值,内循环控制变量要取遍所有的值。倘若每一个循环的循环控制变量初值都是从1开始,显然,循环体会执行24次。现在的问题是,内循环控制变量的初值不仅不是从1开始,而且初值还是变化的。可以这样分析题目:当i=1时,j的取值是1、2、3,循环体共执行9次。即j=1时,k取值从1到4,循环体执行4次;j=2时,k取值从2到4,循环体执行3次;i=3时,k取值从3到4,循环体执行2次。当i=2时,j的取值是2、3,循环体共执行5次。即j=2时,k取值从2到4,循环体执行3次;j=3时,k取值从3到4,循环体执行2次。当i=3时,结束循环。所以循环体总共执行14次。【解答】B12.阅读下面的程序:PrivateSubForm_Click()Dimm,nAsIntegerm=InputBox(请输入m的值)m=Val(m)m1=mn=InputBox(请输入n的值)n=Val(n)n1=nDoWhilen0remin=mModnm=nn=reminLoopPrintm1,n1,mEndSub程序运行后,单击窗体,在输入对话框中分别输入16和24,则程序在窗体上的输出结果为。A.16244B.16248C.24166D.24168【分析】本题提供