第五章 结构化程序设计基础.doc
第五章 结构化程序设计基础例题1、用于建立、修改与运行VFP程序文件的命令依次是( )。A、CREATE、MODIFY、DOB、MODIFY COMMAND、MODIFY COMMAND、DOC、MODIFY COMMAND、MODIFY COMMAND、RUND、CREATE、MODIFY COMMAND、DO2、在VFP中,用于建立过程文件PROG1的命令是( )。A、CREATE PROG1 B、MODFY COMMAND PROG1C、MODIFY PROG1 D、EDIT PROG13、执行命令ACCEPT“请输入出生日期:”TO MDATE时,如果用户从键盘输入CTOD(“07/11/04”),则MDATE的值应当是( )。A、CTOD(“07/11/04”) B、“07/11/04”C、07/11/04 D、系统拒绝接受用户输入,不过MDAT4赋值4、可以终止程序执行并返回到VFP命令窗口的命令是( )。A、EXIT B、QUIT C、BYE D、CANCEL5、在永真条件循环中,退出循环并继续执行程序的语句是( )。A、LOOP B、EXIT C、CLOSE D、QUIT6、有如下VFP程序:*主程序ZCX.PRG *子程序ZCX1.PRGSet talk off k1=k1+200k1=“12” return?k1Do ZCX1?k1Return执行命令DO ZCX运行程序后,屏幕显示的结果为( )。A、12 B、12 C、12 D、12 200 212 12200 127、下列关于带参调用过程的叙述中,不正确的是( )。A、实际参数必须都是内存变量 B、形式参数必须都是内存变量C、实际参数可以是常量、变量或表达式 D、形式参数与实际参数的个数必须相等8、在程序中用PUBLIC语句定义的内存变量具有的特性是( )。A、可以在所有过程中使用 B、只能在定义该变量的过程中使用C、只能在定义该变量的过程及本过程所嵌套的过程中使用D、只能在当前过程中使用A类基础训练题一、填空题1、VFP系统提供三种工作方式:_、_和程序文件方式。2、VFP程序是命令行的序列,每个命令都以_结束,一行可以写_条命令;也可分行书写,并在分行处加上续行符_,再按回车键。3、VFP命令文件的扩展名为_,执行命令文件应使用_命令;要编译VFP的命令文件,应使用_命令,编译后目标文件的扩展名为_。4、结构化程序设计的三种基本结构是顺序、_和_。5、在多路分支语句中,如果每一个分支条件均不成立,则应执行_后的那部分语句;在循环语句中,要使整个循环中止,可使用语句_。6、在VFP中,定义内存变量值的作用范围时,用PUBLIC说明的是公共变量,用PRIVATE说明的是_内存变量,用LOCAL说明的是_内存变量,在命令窗口中执行了命令X=5后,则默认该变量的作用域是_。7、在过程调用的过程中,进行参数传递的方式有_和_两种,其中带括号的变量的传递方式是_。8、在VFP的程序设计中,自定义函数的关键字为_,要使用过程文件,必须使用_命令。9、下面程序求长方形的面积,试将程序填充完整。Set talk offClearS=0Input “长方形一边的长为:” to aInput “长方形另一边的长为:” to b_?“长方形的面积为:”, sSet talk on _二、单项选择题(在备选答案中选择一个正确答案)1、在VFP中,用于建立或修改过程文件的命令是( )。A、MODIFY <文件名>B、MODIFY COMMAND <文件名>C、MODIFY PROCEDURE <文件名>D、MODIFY STRUCTURE <文件名>2、下列扩展名中,属于程序文件扩展名的是( )。A、.DBF B、.DBC C、PRG D、QPR3、在input,accept,wait三条命令中,可以接受字符的是( )。A、只有ACCEPT B、只有WAITC、只有ACCEPT和WAIT D、都可以4、执行ACCEPT “考试日期” TO KSRQ后,变量KSRQ的数据类型是( )。A、字符型 C、日期型 C、数值型 D、无法确定5、专门用于数据库浏览的循环语句是( )。A、FOR B、WHILE C、SCAN D、DO6、在DO WHILEENDDO循环结构中,EXIT命令的作用是( )。A、退出过程,返回程序开始处B、转移到DO WHILE语句行,开始下一行判断和循环C、终止循环,将控制转移到本循环结构ENDDO后面的第一条语句继续执行D、终止程序执行7、有关嵌套的叙述正确的是( )。A、循环体内不能含有条件语句 B、循环语句不能嵌套在条件语句中C、嵌套只能一层,否则会导致错误 D、正确的嵌套中不能交叉8、在下面的程序代码中调用了过程P1,执行结果( )。ClearStore 10 to x1,x2P1(x1,x2)?”x1=”,x1,”x2=”,x2P1(x1,x2)?”x1=”,x1,”x2=”,x2Return*过程文件p1.prg*Procedure p1Parameters x,yX=x+1Y=y-1EndproA、x1=10 x2=10 B、x1=11 x2=9 X1=11 x2=9 x1=12 x2=8C、X1=10 x2=10 D、x1=11 x2=9 X1=10 x2=10 x1=10 x2=109、一个过程文件最多可以包含128个过程,每个过程的第一条语句是( )。A、parameter<参数表> B、do<过程名>C、procedure<过程名> D、<过程名>10、在模块化程序设计中,要使调用过程中的某内存变量不受被调用程序中变量的影响,可以使用关键字( )声明私有变量。A、public B、private C、procedure D、functionB类训练题一、填空题1、在VFP程序中,命令CANCEL的作用是终止程序运行,清除所有的私有变量,返回_;RETURN命令结束程序执行,返回_;QUIT命令结束程序执行并退出VFP系统,返回_。2、在程序设计中,如果要设置某内存变量为全局变量,应使用关键字_加以说明,要设置某内存变量只能在当前模块内使用,其上层及下层模块中均不可见,则应将其设置为_变量,并使用关键字_说明。3、以下程序是求100以内能被3整除但不能被7整除的数字之和,请补充完整。Set talk offClearStore 0 to s,nDo while n<=100 _ S=s+nEndif _Enddo?”s=”+str(s)Set talk on4、现有学生表XS.DBF,试将程序填写完整,用SCAN循环显示学生表中男生的姓名。Clear_Scan If _ Loop Endif _Endscan5、有一分支程序为:If s>100 Do p1.prgElse If s>10 Do p2.prg Else If s>1 Do p3.prg Else Do p4.prg Endif EndifEndif分别写出执行P2,P3,P4子程序的条件表达式:Do p1.prg 条件为:s>100 do p2.prg条件为:_Do p3.prg 条件为:_ do p4.prg条件为_二、单项选择题(在备选答案中选择一个正确答案)1、不能出现loop和exit语句的程序结构是( )。A、if endif B、scanendscanC、do enddo D、for endfor2、有关LOOP语句和EXIT语句的叙述正确的是( )。A、LOOP和EXIT语句可以写在循环体的外面B、LOOP语句的作用是把控制转到ENDDO语句之后C、EXIT语句的作用是把控制转到ENDDO语句D、LOOP和EXIT语句一般写在循环结构里面嵌套的分支结构中3、下面关于SCANENDSCAN语句的叙述,正确的是( )。A、在SCANENDSCAN循环语句的循环体中,不应该有EXIT命令或LOOP命令B、作为循环语句,就象FOR语句或DO语句一样,在该循环语句中一定要包含循环变量,用来控制循环的次数C、SCANENDSCAN循环语句,主要用来处理表中的记录,记录指针会自动地在当前表中满足指定条件的记录上移动,对于每一个满足要求的记录执行循环体中的语句序列D、该循环语句所实现的功能不可以用DO WHILE循环语句进行等价代替4、下面关于过程调用的陈述中,正确的是( )。A、实参与形参数量必须相等B、当实参的数量多于形参的数量时,出现运行时错误C、当形参的数量多于实参的数量时,多余的实参被赋予逻辑假D、上面的B项和C项都对5、下面有关VFP过程文件的叙述,正确的是( )。A、先用set procedure to 命令关闭已打开的过程文件,然后用do <过程名>执行B、可直接用DO<过程名>执行C、先用set procedure to <过程文件名>打开过程文件,然后用use <过程名>执行D、先用set procedure to <过程文件名>打开过程文件,然后用do <过程名>执行6、有如下的子程序调用语句:do sub1 with a,b+c,(d),exp(e),则属于按地址传送的是( )。A、a B、b+c C、(d) D、exp(e)7、在VFP中,执行如下程序,如果输入的值为5,则输出为( )。S=0I=1Input “n=?” to nDo while s<=n S=s+i I=i+1Enddo?sA、4 B、5 C、6 D、78、有如下循环语句,其中有()标识的语句执行的次数是( )。For i=1 to 10 step 2 If i=5 Loop Endif K=k+1 ()EndforA、1 B、4 C、10 D、59、有如下程序段,其中调用了子程序p1.prg执行结果为( )。*主程序*Dimension s(3)For i=1 to 6 step 2 S(i+1)/2)=i*10EndforDo p1 with s(1),s(2),s(3)?s(1),s(2),s(3)Cancel*子程序p1.prg*Para x1,x2,x3X1=x1/10X2=x2/10X3=x3/10EndproA、1 2 5 B、10 20 30 C、1 2 3 D、10 30 50三、分析题1、输出以下VFP程序,求它的运行结果。(1)Input to xIf x>10 If x>15 Y=x*x+1 Else Y=5*x+4 EndifElse If x<5 Y=abs(x*x-30) EndifEndif?x,yCancel运行时输12运行结果为:_(2)X=1Y=20Do while x<=y If int(x/2)<>x/2 X=1+x*2 Y=y+1 Loop Else X=x+1 EndifEnddo?x,yReturn运行结果为:_(3)Store 0 to x,s1,s2,s3Do while x<=10 X=x+1 Do case Case int(x/2)=x/2 S1=s1+x/2 Case x%3=0 S2=s2+x/3 Case int(x/2)<>x/2 S3=s3+1 EndcaseEnddo?s1,s2,s3Return运行结果为:_(4)*MAIN.PRG*Store 0 to s,1,tDo while i<=4 I=i+1 Do sub1 with I,t S=s+tEnddo?s,I,tReturn*SUB1.PRG*Parameters x,yZ=1Do while z<=x Y=y+z Z=z+1Enddoreturn运行结果为:_(5)*MAIN.PRG*Store 0 to a,b,cDo while a<3 Do sub1 with a,b C=c+a*bEnddoC=c+a*b?a,b,cReturn*sub1.prg*Paramters x,yI=0X=x+1Do while i<=x I=i+1 Y=y+1EnddoReturn运行结果为:_2、填空完成下面的程序:(1)下面程序的运行结果是7,21,35,请填空将程序补充完整。Set talk offI=0M=0ClearDo while .t. I=i+1 _ If mod(I,2)_ Loop Else ?mEndifIf _ ExitEndifEnddo(2)下面程序的功能是判断一个自然数是否为质数,试将程序填充完整(K的值为0表示所输入的自然数是质数,为1表示不是质数)。Set talk offInput “请输入一个大于1的自然数:” to nK=0J=2Do while j _ J=j+1 If mod(n,j) _ Loop Else K=1 Exit EndifEnddoIf k=0 ? _EndifReturn四、综合应用题1、已知工资数据表GZ.DBF,对GZ表中的记录进行加工资,若基本工资(字段JBGZ)小于420则增加56,再统计个数并显示。有两处错误,请改正。Set talk offUse k2Do while eof() If jbgz<420 Replace jbgz=jbgz+56 S=s+1 Endif SkipEnddo?”所加工资的人数是:”+str(s,3)UseReturn2、当前盘当前文件夹下有数据库“成绩”,其中“语文成绩”表的内容如下:学号姓名平时109王小阳85.5111李明78.5115赵健80.0117李丽76.5128孙锐平68.5129徐玲玲88.0134周伟99.0Open database 成绩A=0Use 语文成绩Go topDo while .not.eof() If substr(学号,2,1)<>0 .and. 平时>80.0 A=a+1 Endif SkipEnddo?aReturn执行如上程序段之后,结果是:_3、阅读分析以下程序,写出该程序的功能:Open database 成绩管理Do while .t. Clear Accept “请输入学号” to mxh Select 学生.学号,学生.姓名,选修.课程号,选修.成绩 from 学号,选修;Where 学生.学号=选修.学号 and 学生.学号=mxh nowaitWait “继续查询吗?(Y/N)” to pIf upper(p)<>”Y” ExitEndifEnddoClose databaseReturn