欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    程序的三种基本控制结构分析.doc

    • 资源ID:2787506       资源大小:173KB        全文页数:36页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    程序的三种基本控制结构分析.doc

    #+ 程序的三种基本控制结构顺序结构 选择结构 循环结构一、 顺序结构:顺序语句由语句序列组成,程序执行时,按照语句的顺序,从上而下,一条一条地顺序执行如:store Visual FoxPro to nameAge = 4? My name is + name + , I am ;+ str(Age) + years old一、二、选择结构:分支语句根据一定的条件决定执行哪一部分的语句序列。二、1、 单分支结构 格式: if<条件> <语句序列> endif 例程1:clear use sb wait 是否打印?(y/n) to a if upper(a)=Y wait 请接好打印机!按任意键后打印 list to print endif2、 双分支选择格式: if<条件> <语句序列1> else <语句序列2> endif例程2: clearset talk offaccept 请输入密码: to mmif mm<>abc?你无权使用本系统quitelse?欢迎使用本系统endifset talk onif语句的嵌套:在一个if语句中包含另一个语句的程序结构例程3:根据输入的x值,计算下面分段函数的值,并显示结果。 2x-5 (x<1) Y= 2x (1<=x<10) 2x+5 (x>=10) input 请输入x的值: to x if x<1 y=2*x-5 else if x<10 y=2*x else y=2*x+5 endif endif ?分段函数的值为+str(y)3、 多分支结构格式:DO CASECASE 逻辑表达式1语句组1CASE 逻辑表达式2语句组2CASE 逻辑表达式n语句组nOTHERWISE语句组ENDCASE例程4:输入某学生成绩,并判断其成绩等级:100-90分为优秀,89-80分为良好,79-70分为中等,69-60分为差,60分以下为不及格。 Set talk off Clear Input 请输入成绩: to nscore Do case Case nscore>=90 ?成绩优秀 case nscore>=80 ?成绩良好 case nscore>=70 ?成绩中等 case nscore>=60 ?成绩较差 case nscore>=0 ?成绩不及格 otherwise ?成绩应大于0,数据有错 endcase ?程序执行完毕 set talk on三、循环结构:循环语句使同一个语句组根据一定的条件执行若干次。l有三种循环语句:DO WHILEFOR语句组表达式假.f.真.t.SCAN1、do while 循环语句1. do while 循环l语句格式1DO WHILE 逻辑表达式<语句组>ENDDO例程1:计算1+2+3100set talk offclears=0I=1Do while I<=100s=s+II=I+1Enddo?1100的和为:,s return语句格式2:DO WHILE 逻辑表达式 命令序列1loop<命令序列2>exit<命令序列3>ENDDOLoop语句是循环短路语句,当程序执行到loop语句时,被迫结束本次循环,不再执行loop后面至enddo之间的语句序列,而是返回do while处重新判断条件 Exit语句是循环断路语句。当程序执行到exit语句时,被迫中断循环,转去执行enddo语句后的语句。例程2:循环输入学生姓名,查找并显示该学生的情况,直到用户停止输入。Set talk offClearStore y to ynUse 学生Do while .t.Accept 请输入学生姓名:to nameLocate for 姓名=nameIf found()?学号+学号?姓名+姓名else?没有+name+这个学生endifwait 是否继续查找(y/n)?to ynif upper(yn)=Y?loopelseexitendifenddo?程序结束useset talk onreturn读程练习:1、set talk offuse 学生name=space(8)10,5 say 请输入学生姓名get namereadlocate for 姓名=nameif found()dispelse12,5 say 该单位无此人endifset talk onusereturn2、统计学生表中男女学生人数set talk offclearuse 学生store 0 to nman,nwomando while !eof()if 性别=男nman=nman+1elsenowman=nwoman+1endifskipenddo?男生人数为:+str(nman)?女生人数为:+str(nwoman)useset talk onreturn3、逐条输出学生表中1984年出生的学生记录clearuse 学生index on year(出生日期) tag csrqseek 1984do while year(出生日期)=1984dispskipenddousereturn4 1100之间全部奇数之和set talk offstore 0 to x,ydo while .t.x=x+1do casecase int(x/2)=x/2loopcase x>=100exitotherwisey=y+xendcaseenddo?0100之间的奇数之和为:,yset talk onreturn作业:1、使用do while语句逐条显示学生表中的每一条记录 2、算出1100之间的所有偶数的和 3、从键盘输入一个整数,求出此整数的阶乘2、for循环语句 do while语句适用于循环次数未知的循环 for语句适用于循环次数已知的循环 l语句格式FOR 循环变量 = 初值 TO 终值 STEP 步长 语句组ENDFOR/NEXT能循环结构的执行过程是:先为循环变量设置初值(该变量一般为数值型内存变量),然后判断其值是否超过终值。若没超过,执行循环体,遇到endfor时使循环变量增加一个步长值(步长省略,则默认为1),然后返回到for语句处,将循环变量的当前值与循环终值比较,没有超过,继续执行循环体,直至循环变量的当前值超过终值或执行到exit语句,程序才退出循环,执行enddo后面的语句。说明:1、FOR语句适用于循环次数已知的情况2、如果没有给出步长,步长缺省为13、步长可以是正数、负数当STEP>0,变量<=终值时,语句组执行当STEP<0,变量>=终值时,语句组执行例程1:for I=1 to 10?Iendfor结果为:1 2 3 4 5 6 7 8 9 10例程2:for I=10 to 1 step 4?Iendfor结果为:10 6 2例程3:计算1+2+3100s=0for I=1 to 100s=s+Iendfor?s例程4:求所有的水仙花数(153=13+53+33)clearfor m=100 to 999a=int(m/100)b=int(mod(m,100)/10)c=m%10if m=a3+b3+c3?mendifendforreturn例程5 从键盘输入10个数,编程找出其中的最大值和最小值set talk offclearinput “请输入一个数:” to astore a to max,min for I=2 to 10 input “请输入一个数:” to a if max<a max=a endif if min>a min=a endifendfor?”最大值为:”,max?”最小值为:”,minset talk on程序练习:1、设有如下程序set talk offclearuse gzdo while !eof() if 基本工资>=800 skip loop endif disp skipenddouse return该程序实现的功能是:2、执行下列程序:set talk offstore 0 to x,ydo while x<20x=x+yy=y+2endd?x,yset talk onreturn在屏幕上显示的输出结果是:20 103、下面程序的运行结果为:18 15 12set talk offdimension a(6)for k=1 to 6a(k)=30-3*kendfork=5do while k>=1a(k)=a(k)-a(k+1)k=k-1enddo?a(2),a(4),a(6)set talk on return4、程序如下s=0I=1Do while I<4 Accept “请输入字符串:” to x If A$x s=s+1 endif I=I+1enddo?s运行时输入:”abcd”,”ABCD”,”aBcD”,输出s的值是15、设表文件cj.dbf中有两条记录,内容如下: record# xm zf 1 王燕 300 2 李明 500此时运行以下程序的结果应当是( )use cjm->zf=0do while not eof()m->zf=m->zf+zfskipenddo?m->zfreturn6、执行如下程序:store “ ” to ansdo while .t.clear3,10 say “1.添加 2.删除 3.修改 4.退出”5,15 say “请输入选择:” get ansreadif val(ans)<=3 .and. val(ans)>=1prog=”prog”+ans+”.prg”do &progendifquitenddo如果在屏幕显示“请输入选择:”时,输入4,则系统将()7、在下列程序中,如果要使程序继续循环,变量m的输入值应为()do while .t. wait m=to m if upper(m)$yn exit endifenddo8、下列程序执行时,在键盘上输入9,则屏幕上的显示结果是()input “x=”to xdo casecase x>10?”ok1”case x>20?”ok2”otherwise?”ok3”endcase3、scan循环语句语句格式:SCAN 范围FOR 逻辑表达式WHILE 逻辑表达式语句组ENDSCAN说明:范围省略时,默认是all格式1:scan 范围 FOR 逻辑表达式从范围内的第一条记录开始,计算逻辑表达式,对逻辑表达式结果为.t.的记录进行操作。如果没有FOR子句,相当于FOR .t.格式2:scan 范围 WHILE 逻辑表达式从指定范围内第一条记录开始,计算逻辑表达式,如果结果为.t.,继续循环,如果结果为.f.时,立即结束循环。如果没有指定WHILE部分,相当于:WHILE .t.例1use 学生scan dispendscanuse这里的SCAN部分与下面的语句等价:go topdo while not eof()dispskipenddo例2:use 学生scan rest for 学号>3 dispendscanuse与下面的语句等价:use 学生DO WHILE not eof()IF 学号>3DISPENDIFSKIPENDDO例3、对学生表,分别统计少数民族男、女学生的人数。clearstore 0 to x,yuse 学生scan for 少数民族否 if 性别=男 x=x+1 else y=y+1 endifendscan?”少数民族男生有”+str(x,2)+人?”少数民族女生有”+str(y,2)+人use return循环嵌套:当在一个循环程序段的循环体内完整的包含另一个循环程序段时称为循环嵌套。形式如下:1、do while<条件表达式> do while<条件表达式> enddoenddo2、FOR 循环变量 = 初值 TO 终值 STEP 步长FOR 循环变量 = 初值 TO 终值 STEP 步长 语句组ENDFOR/NEXTENDFOR3、 do while <条件表达式>FOR 循环变量 = 初值 TO 终值 STEP 步长 语句组ENDFOR/NEXT能 enddo4、 FOR 循环变量 = 初值 TO 终值 STEP 步长 do while<条件表达式> enddoENDFOR/NEXT能5、do while<条件表达式> scan endscan enddo等等例程1、写出程序的运行结果clearfor I=1 to 9?str(I,3)next?replicate(=,30)?for I=1 to 9 for j=1 to 9 ?str(I*j,3) next?next程序结果为:例程2、打印九九乘法口诀表for x=1 to 9y=1 do while y<=x z=x*y ?str(y,1)+*+str(x,1)+=+str(z,2)+ y=y+1 enddo? endfor程序的执行结果:1*1=11*2=2 2*2=41*3=3 2*3=6 3*3=91*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81例程3:输入10个数,并将它们按由大到小的顺序输出。 ClearDimen data10Store 0 to dataFor I=1 to 10I,5 say 请输入第+str(I,2)+”个数” get dataIendforreadfor I=1 to 9 for j=I+1 to 10 if dataI<dataj temp=dataI dataI=dataj dataj=temp endif endforendfor12,5 say 10个数由大到小的排列顺序为:14,5 say for I=1 to 10?dataIendfor三种语句结构总结:1、都是单入口、单出口2、IF/ELSE/ENDIF、DO CASE/ENDCASE、DO WHILE/ENDDO、FOR/ENDFOR、SCAN/ENDSCAN必须配对使用,都不能在交互方式下使用(命令窗口方式)3、可以相互嵌套使用,语句结构中的语句组中可以包含任何语句结构。如果省略 RETURN 命令,在程序结束处自动隐含执行 RETURN 命令。 9.5程序的模块化子程序:可以完成一个特定功能的小程序,特点是总是被其他程序调用一般不单独执行(编一次,重复用) 子程序的建立、修改和存盘与一般的程序文件一样,其扩展名也为.prg 过程 无返回值子程序 自定义函数 有返回值?这是子程序waitreturnSet talk offClear?这是主程序do bb?主程序执行完毕主程序aa 子程序bb子程序b 主程序 子程序a.returnDo bdo creturndo a子程序c.return to master一、过程过程的一般格式:procedure <过程名>parameters <参数表><命令组>returnendproc说明:1、当一个过程单独保存在一个命令文件中,proc <过程名>和endproc可以省略,该过程的名称就是命令文件名。 2、parameters <参数表>写在proceduer<过程名>下面的第一行。如省略则该过程为无参过程。 调用无参过程的格式为:do 过程名 调用有参过程的格式为:do 过程名 with 参数表参数按传递的方式分为:值传递方式:当一个值在被调用过程中更改时,新值不传回,调用程序中相关的变量或数组的值不变引用传递方式(地址传递方式)当一个值在被调用过程中更改时,新值传递回调用程序中相关的变量或数组默认情况下,调用过程时实参以引用传递方式向过程传递。在 DO . WITH 语句的参数列表中用括号把变量或数组括起来,将按值方式传递。例程1: area=0store .t. to repdo while rep clearinput 请输入第一边大小: to xinput 请输入第二边大小: to yinput 请输入第三边大小: to zif x=0.or.y=0.or.z=0.or.x+y<=z.or.y+z<=x.or.x+z<=y?不能构成一个三角形,请重新输入!loopendifrep=.f.enddodo sub with x,y,z,area (实参)?area=+str(area,6,2)return proc subpara a,b,c,s (形参)p=(a+b+c)/2s=sqrt(p*(p-a)*(p-b)*(p-c)return例程2:利用带参调用方法求3项阶乘之和:x!+y!+z!clearstore 0 to tinput x= to xinput y= to yinput z= to zdo sub with x,tnsum1=tdo sub with y,tnsum2=tdo sub with z,tnsum3=tnsum=nsum1+ nsum2+ nsum3?str(x)+”!+”+ str(x)+”!+”+str(x)+”!=”+str(nsum)cancelproc subpara n,kk=1for I=1 to nk=k*Iendforreturnendproc运行程序结果为:x=2y=3z=42!+3!+4!=32过程文件:将多个过程存放在一个程序文件中,此程序文件就是一个过程文件。扩展名为.prg过程文件的建立: modi comm. <过程文件名>过程文件的基本结构如下: proc <过程名1>endprocproc <过程名2>endprocproc <过程名n>endproc过程文件的打开和关闭:过程文件中只包含过程,这些过程能被其他程序调用。但在调用过程文件中的过程之前,必须先打开过程文件。命令格式:set proc to <过程文件名>过程文件使用之后,应将其关闭,关闭过程文件的命令是:格式1:close proc格式2:set proc to 例程: 程序14.prg 内容如下 set proc to subclear?-过程调用-wait 现在调用过程1do sub1wait 现在调用过程2do sub2?-过程调用结束close proccancel过程文件sub.prg内容如下proc sub1wait 现在运行过程1returnendprocproc sub2wait 现在运行过程2returnendproc二、自定义函数:用户除了可以使用vfp提供的内部函数外,还可根据自己的需要定义进行某种运算或操作的函数,这些函数被称为自定义函数。定义格式:FUNCTION 函数名PARAMETERS 参数列表<语句组>RETURN 表达式 (指出函数的返回值)endfunc说明:1、当函数单独存放在一个命令文件中时,语句func 函数名和endfunc可以省略。2、如果return后的表达式省略,则返回.t.3、默认情况下,以值传递方式向用户自定义函数传递参数。用 SET UDFPARMS TO REFERENCE 命令以引用传递方式向用户自定义函数传递变量。强制指定:(变量):值方式传递变量:引用方式传递自定义函数的调用格式: 函数名(参数表)例程:定义一个判断n是否是一个素数的函数,然后调用该函数求2100内的全部素数。 素数是大于1的整数,且除了1和它本身以外,不能被其他任何整数整除。为了判断某数n是否为素数。一个简单的办法是用2,3n-1这些数逐个去除n,看能否除尽,如果全部都除不尽,则n是一个素数,否则,只要其中一个数除尽了,则n不是素数。为了减少除的次数,可以使用另外一种算法,除到即可。Prime.prg程序内容如下 (判断n是否是素数的函数)Para nFlag=.t.K=int(sqrt(n)J=2Do while j<=k.and.flagIf mod(n,j)=0Flag=.f.Endifj=j+1enddoreturn flagmain.prg 调用该函数求2100内的全部素数for m=2 to 1000if prime(m)?mendifendfor作业:1、利自定义函数的方法求3项阶乘之和:x!+y!+z! 2、 1222333334444444555555555变量的作用域:(内存变量在什么范围内是有效的)按作用域的不同将内存变量分为3种1、全局变量格式:public <内存变量表> public <数组名>(<上标1>,<下标1>说明:(1)全局变量定义后,系统自动赋初值为.f. (2)全局变量产生后,在任何模块中都可以使用,并在程序运行期间始终有效,程序运行完毕也不会从内存中自动释放,必须用clear memory或release等命令予以消除或者执行quit命令退出vfp应用系统 (3)在vfp命令窗口中建立的内存变量为全局变量2、局部变量格式:local <内存变量表> local <数组名>(<上标1>,<下标1>说明:(1)局部变量定义后,初始值为.f. (2)只在定义它的程序中有效,一旦该程序运行完毕,局部变量自动清除3、私有变量没有通过public和local定义而在程序中直接使用的变量私有变量在定义它的程序以及该程序的下属子程序中有效,一旦建立它的程序运行结束,这些私有变量自动清除。局部变量和私有变量的比较:r=100 r=100p=0 local pdo sub p=0return do subproc sub return?p proc subreturn ?p结果:0 return 结果:出现错误提示-找不到p变量

    注意事项

    本文(程序的三种基本控制结构分析.doc)为本站会员(小**)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开