欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    《程序设计初步 》PPT课件.ppt

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

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

    《程序设计初步 》PPT课件.ppt

    第六章,程序设计初步,本章教学计划,教学目的:了解程序设计的概念和程序设计的方法,掌握程序文件的创建与运行方法和与程序设计相关的辅助命令,掌握三大结构的程序设计方法,掌握过程与自定义函数的定义和调用方法。重点:输入输出命令、三种基本结构程序设计 难点:双层循环程序设计、程序的模块化 课时:课堂讲授8课时、上机实验8 课时 方式:课堂讲授、上机实验,本章纲要,顺序结构设计,分支结构设计,循环结构设计,程序设计基础,模块化设计,程序设计基础,2.程序设计的控制结构(3种结构),3.结构化程序设计(4个步骤),4.程序文件中的专用命令(5类),5.程序文件的建立与运行,1.程序设计及算法的概念(2个概念),1.程序设计及算法的概念,程序,算法:解决问题的方法和步骤,程序设计基础,数据结构,算法,对数据的描述:在程序中指定数据的类型和数据的组织形式,对操作的描述,类比理解:菜谱原料操作步骤,一系列计算机指令的集合,算法的概念,在员工表中,按员工编号查询员工的姓名和职称。算法1.打开员工表。2.输入待查员工的员工号3.查找员工在表中对应的位置。4.显示该记录的员工号、姓名和职称。5.关闭表。,将酒瓶和油瓶中的液体互换。解决方法 1.拿来一个空瓶 2.酒瓶的酒倒入空瓶 3.油瓶的油倒入酒瓶 4.空瓶的酒倒入油瓶思考 如何将变量A、B中存放的值互换?写出算法,程序设计基础,2.程序设计的控制结构,三种基本的控制结构,顺序结构,分支结构,循环结构,流程图的基本知识,流程图的基本知识,顺序结构,特点:依照程序书写顺序执行程序,use sb&打开表 list fields 名称,价格 for 主要设备&显示相关记录 replace all 价格 with 价格*0.9 for 主要设备&数据替换,分支结构(选择结构),特点:根据条件的 满足与否而 分别执行与 其相对应的 操作,思考:分支结构与顺序结构的不同之处,循环结构(重复结构),特点:反复执行某些操作,反复执行的部分称为循环体。,思考:两种循环结构的区别在于?(提示:循环条件),答案:1.当型是当循环条件成立时执行循环体,条件不成立时退出循环;直到型是执行循环体,直到条件成立才退出循环。2.当型是先判断后执行,可能一次都不能执行;直到型是先执行后判断,至少执行一次。,小结,所有程序从整体上看其执行流程肯定是从上而下顺序执行的,是一种顺序结构。而在其内部的结构中,三种结构是互相嵌套存在。例如,对于循环结构,其内部肯定包含有判断条件成立与否的结构,单独来看是一种选择结构,但从整体上是属于循环结构的一部分,而循环体内部的语句自然是一种依次执行的顺序结构。,如何设计结构化程序?,3.结构化程序设计,程序设计基础,什么是结构化程序?答1:用高级语言(如vfp)表示的结构化算法。答2:用三种基本控制结构组成的程序。,算法设计,4.程序文件中的专用命令,程序设计基础,2、置会话状态命令,3、交互式命令,4、等待命令,5、程序结束专用命令,1、程序注释命令,1、程序注释命令,格 式:NOTE*或&功 能:NOTE*多用于对一个程序模块的 功能进行说明。&是用于在命令语 句末尾加上注释信息。都不被执行.例 子:a=mod(sqrt(9),3)&对9求平方根,然后对3求模。,格 式:SET TALK ONOFF 功 能:控制Visual FoxPro编辑环境中会话状态的 打开与关闭。说 明:在会话状态开通(on)时,VFP在执行命令的时候会向用户提供大量的中间结果及反馈信息,一般用于程序调试时。开通不仅会减慢程序的运行速度,而且还会与程序本身的输出相互夹杂,引起混淆。所以在执行程序时,则通常置“会话”于关闭状态(off),2、置会话状态命令,3、交互式命令,(1)字符串接收命令,(2)任意数据输入命令,(3)定位输入输出命令,(1)字符串接收命令,格 式:ACCEPT TO 功 能:此命令是专门用于字符串的输入。说 明:(1)提示信息是用来在输入时,显示提示性文字。(2)输入的字符串保存在TO所指向的内存变量中。(3)在使用此命令来输入字符串时,不需要加上定界符,否则,定界符会被当做字符串本身被存入内存变量中。例 子:ACCEPT“请输入一个数字”TO a 输入:21(则a”21”),(2)任意数据输入命令,格 式:INPUT TO 功 能:从键盘输入数据保存在指定的内存变量中。说 明:(1)此命令能够接收各种类型数据的输入。(2)在输入数据时对于有定界符的数据类型一定要带上定界符输入。例 如:INPUT“请输入出生日期”TO d 输入:1985-09-01 INPUT“请输入入学成绩”TO d 输入:560.5(数值型数据没有定界符),(3)定位输入输出命令,屏幕格式 系统将整个屏幕划分为:25行 80列 XY平面坐标系。命令格式 SAY GET DEFAULT READ,说明:(1)子句用来表示数据在窗口中显示的位置,行与列都是数值表达式或是数值型常量。(2)SAY子句用来输出提示信息,GET子句用来输入及编辑数据。若缺省SAY子句,GET变量值从指定位置开始显示。(3)GET子句中的变量必须具有初值,可用DEFAULT子句的指定初值。(4)通过GET子句从外界输入的变量的值,必须通过READ命令来激活。在一个程序中如果有多个GET子句,只需在最后GET子句后面加上一个READ子句。一个READ子句可以激活它前面所有的未被激活的GET子句中的变量。,根据员工的编号来修改员工的基本工资和水电费。,CLEAR USE 工资表 yg=0001 2,10 SAY 请输入员工的编号 GET yg READ LOCATE FOR 员工编号=yg 4,10 SAY“请修改基本工资”GET 基本工资 6,10 SAY“请修改水电费”GET 水电费 READ USE,【例6.1】,格 式:WAIT TO WINDOW AT,NOWAIT CLEAR|NOCLEAR TIMEOUT功 能:暂停程序运行,直到用户输入任意的一个字符才重新开始执行程序,也可以用于输出一条提示信息。说 明:1)to:将用户键入的字符保存到内存变量。2)Window at,:在VFP主屏幕 的指定位置出现一个Wait提示窗口。3)Timeout:用来设定等待时间。,4、等待命令,例 子:WAIT 请检查输入内容 WINDOW AT 9,9,RETURN&终止程序执行,并返回到调用它 的上级程序继续执行,如无上级 程序则返回命令窗口。CANCEL&终止程序执行,清除程序的私有 变量,并返回命令窗口。QUIT&退出VFP系统,返回WINDOWS,与文件菜单的退出功能相同。,5、程序结束专用命令,5.程序文件的建立与运行,程序文件又称为命令文件,其扩展名为.PRG。,建立或修改程序文件(1)命令方式 格 式:MODIFY COMMAND?功 能:建立或修改一个程序文件。说 明:命令中的文件名是指定要生成的程序文件的名称,缺省的扩展名为.PRG;文件名前也可以指明路径。,(2)菜单方式(2个步骤)选择”文件”菜单中的”新建”命令,并在弹出的”新建”对话框中,选择”程序”按钮,再单击”新建文件”命令按钮,弹出文本编辑窗口。在文本编辑窗口中,输入程序内容即可。,2.程序的运行(1)命令方式 格 式:DO 功 能:依次执行程序中的各条命令。说 明:DO命令默认运行.PRG程序,只需取文件主名。当需要使用DO命令执行其他文件时,则必须包括扩展名。例如,通过DO命令来执行某个查询文件,文件名为ele.qpr,则命令必须写为:DO ele.qpr。,(2)菜单方式(2种方式)选择”程序”菜单中”运行”命令,在弹出的”运行”对话框中,输入文件名即可。当程序处在编辑状态下时,右击文本编辑区,在其弹出快捷菜单中选择“执行程序”菜单项即可。,顺序结构设计,顺序结构程序设计是三种基本结构中最简单也是最常用的一种结构。顺序结构的程序在运行时按照语句排列的先后顺序,自顶向下依次执行。,【例6.2】,从键盘输入一个小写字母,要求改用大写字母输出。,SET TALK OFF CLEARACCEPT 请输入一个小写字母 TO aa=UPPER(a)?“转换结果为:,aSET TALK ONRETURN,如果输入的字母为非小写字母,例如,误操作输入了大写字母或是数字字符,那么在此程序运行中仍然将继续执行并显示结果,这显然与题意不符,要解决这个问题,需要用到选择结构程序。,顺序结构程序特点:依照程序书写顺序执行程序,例2:求长方形的面积。clear set talk off input“请输入长方形的长:”to L input“请输入长方形的宽:”to W s=L*W?“长方形的面积为:”,s set talk on return,分支结构,程序应具有判断功能,而判断是通过程序中的分支结构(选择结构)来实现的。,分支结构是程序中一种常用结构,按照分支结构执行路径的多少,可分为单分支、双分支和多分支结构。实现分支结构的语句有 IF语句和DO CASE语句。,无论哪种类型的分支结构,都是依据所给条件为真或为假,来选择执行某一分支的相应操作。,1、单分支结构 格式:IF ENDIF,执行流程:首先计算条件表达式的值,若其值为真,则执行IF与ENDIF之间的命令 序列,然后执行ENDIF后面的命令;若其值为假,则直接执行ENDIF后面的命令。,分支结构特点:根据条件成立与否,分别执行与其相对应的操作。,单分支结构流程图:,思考:分支结构与顺序结构的不同之处,例1:求长方形面积。(判断:当输入的边长值为正数时,求面积。),clearset talk offinput“请输入长方形的长:”to linput“请输入长方形的宽:”to wif l0 and w0 s=l*w?”长方形的面积为:”,sendifreturn,在设计程序时,对于有数据输入的程序,一定要对输入数据的有效性做相应的检查,避免由于数据的错误输入而导致程序的出错。这是一个程序员必须养成的良好习惯。,例2,从键盘输入一个小写字母,要求改用大写字母输出。,2、双分支结构 格式:IF ELSE ENDIF,执行流程:首先计算条件表达式的值,若其值为真,则执行命令序列1,然后 再执行ENDIF后面的命令;若其为假,执行命令序列2,然后再执 行ENDIF后面的命令。,双分支结构流程图,例3:,从键盘输入一个数,判断其为奇数还是偶数。,分析:(1)首先是输入一个数,然后判断输入的数奇偶性。(2)应输入数值型数据,可以用INPUT或是GET语句来输入。(3)如何判断奇偶性呢?可使用MOD函数或求余运算符“%”。对于一个偶数x,MOD(x,2)应该为0,否则为1。,例4:在工资表中,需要按照员工编号查询员工的基本信息。,分析:1.打开工资表;2.输入员工号;3.用LOCATE命令查找该员工;4.用FOUND()函数来判断是否存在该记录。5.若FOUND()函数为真,表示存在此员工记录,否则,不存在此员工记录,给出“查无此人”的提示信息。5.关闭表。,SET TALK OFFUSE 工资表ACCEPT“请输入员工编号”TO aLOCATE FOR 员工编号=aIF FOUND()&条件FOUND()为真表示存在此员工 DISP 员工号,基本工资,水电费ELSE&条件FOUND()为假表示不存在此员工?“查无此人!”ENDIFUSE SET TALK ONRETURN,程序采用“缩进制”格式书写,最外层顶格写,属于其内层语句则往后退一定距离,这样便于阅读和调试。,注意:1、IF与ENDIF必须成对出现,且各占一行。2、可以为关系表达式、逻辑表达式或其他逻辑量。,课堂练习:1、在员工表中,按姓名查询员工信息。2、从键盘输入一个数,输出其绝对值。3、输入a、b两个数,按由小到大的顺序输出。,思考题:输入a、b、c三个数,按由小到大的顺序输出。,clearset talk offinput“请输入a的值:”to a input“请输入b的值:”to b input“请输入c的值:”to c if ab&a和b比较大小,若a大,则a、b 交换 s=a a=b b=sendifif ac&a和c比较大小,若a大,则a、c 交换 s=a a=c c=sendifIf bc&b和c比较大小,若b大,则b、c 交换 s=b b=c c=sendif?a,b,creturn,思考题答案,3.IF语句的嵌套,实际生活中,很多问题不仅仅只有两种可能,而是要求对多种情况进行不同的处理,则需要用到IF语句嵌套。嵌套是指在某种结构中含有其它结构。,一般格式:IF IF ENDIF ELSE IF ENDIF ENDIF,注意:1、IF一定要与ENDIF配对。2、在IF结构之间可以嵌套,但不能交叉。,例5:输入一个学生成绩,判断学生成绩的等级。假设成绩等级划分为5等:0,60 为不及格,60,70为及格,70,80为良,80,90为好,90,100为优。,4、多分支DO CASE语句,格式:DO CASE CASE CASE CASE OTHERWISE ENDCASE,例6:,使用DO CASE语句转换例5。,SET TALK OFFINPUT“请输入成绩”TO pIF(P100)OR(P0)?输入的成绩有误,请重新输入ELSE DO CASE CASE P60?不及格 CASE P70?及格 CASE P80?良 CASE P90?好 OTHERWISE?优 ENDCASEENDIFRETURN,课堂练习:,编一缴税程序,以800元为基数,超出部分的缴税比例如下:800-1500(含800)5%1500-2500(含1500)10%2500-5000(含2500)20%5000以上(含5000)25%,注意事项:,1、在DO CASE语句中,当有几个CASE的条件同时成立时,自上而下只执行最先满足条件的CASE后面的语句组,然后退出DO CASE语句。2、DO CASE和ENDCASE必须配对出现。3、IF语句和DO CASE语句都可用于多分支结构,但当分支较多,IF嵌套的层次就越多,程序结构也会变得复杂,不利于程序的调试和修改,所以,当嵌套层次超过34层时,一般不使用IF结构,而使用DO CASE语句。,小结,分支结构使得程序功能得到完善,分支结构的目的在于对不同情况做出不同处理,这种结构的出现使得计算机在一定程度上具有了判断的功能,是计算机走向智能化的重要结构。,循环结构设计,1.条 件 循 环,2.步 长 循 环,3.扫 描 循 环,1、条件循环,格式:DO WHILE LOOP EXIT ENDDO,注意事项:,(1)此循环为当型循环。对于当型循环,如果条件第一次就不成立,那么循环一次也不做。(2)循环体内应有修改循环条件的语句或EXIT。(3)LOOP,EXIT可在适当时候控制循环,一般用在IF或DO CASE语句中。,求1+2+3+100之和。分析:,0+1=1 1+2=3 3+3=6 6+4=10 4950+100=5050,S I S,S=0I=1,S=S+II=I+1,【例6.12】,S=S+II=I+1,S=S+II=I+1,SET TALK OFFCLEARI=1S=0,I=100,S=S+I,I=I+1,ENDDO,?”S=”,SRETURN,DO WHILE,说明:,(1)对于条件循环,最重要的在于循环条件的建立,特别是对于循环变量临界值的确定。(2)循环变量要赋初值。(3)循环体内要有能使得循环条件逐渐趋近于假的语句,否则会造成死循环。(4)要考虑循环体内的语句顺序。如果顺序不同,可能程序的结果就不同了。,思考题:,我们应修改例6.12中哪些语句来实现以下功能需求呢?1、编程求1+3+5+99。,2、编程求2+4+6+1000。,3、编程求1到100所有自然数的平方和。,4、编程求1*2+2*3+3*4+100*101。,【例6.14】,已知表达式s=1+1/2+1/3+1/n,直到s5为止,求此时n的值。,分析:(1)此题为一个多项式累加求结果。但是显然具体多项式有多少项并不清楚所以不知循环次数。(2)采用循环结构,循环体中每次是对s累加前一项式的值,而且多项式之间存在着每次分母都比上一次增加1规律。(3)由题目给出条件得知,只有当s小于5时循环才能继续。因此得出循环的条件应该为s=5。,CLEARSET TALK OFFs=0n=1,DO WHILE s=5 s=s+1/n n=n+1ENDDO,?“n的值应该为”,n-1SET TALK ONRETURN,【例6.14】的另一种参考答案,用永真循环实现,程序代码如下:,CLEARSET TALK OFFSTORE 0 TO S,I,DO WHILE.T.N=N+1 S=S+1/N IF S5 EXIT ENDIFENDDO,?“n的值应该为”,nSET TALK ONRETURN,分析:(1)此题要求判断100到200之间的所有数,那么是一个循环判断的过程。(2)设一个变量i初值为100,循环条件为i=200。(3)循环体中,对每次的i先利用MOD函数判断奇偶性。若i为奇数则累加到变量s中,否则,通过LOOP语句退出本次循环,进入下一次循环判断。,【例6.15】,求100到200之间所有奇数之和。,SET TALK OFFCLEARs=0i=100DO WHILE i=200 i=i+1&必须放在IF语句前 IF MOD(i,2)=0 LOOP&若i被2除后余数为0,则i为偶数,否则退出本次循环。ELSE s=s+i ENDIFENDDO?100到200之间奇数累加之和为:+sSET TALK ON RETURN,2、步长循环,条件循环可以实现已知和未知循环次数的循环。对于循环次数已知的循环还可采用步长循环。,格式:FOR=TO STEP ENDFORNEXT,数值表达式,默认值为1。,说明:(1)循环变量按步长值增加或减小。(2)当循环变量的值不在初值与终值范围内时,结束循环。,几种步长循环形式:,1.省略步长 FOR i=1 TO 100 n=n+1 ENDFOR 没有给出步长,默认为1,退出循环后n的值为100。,假设n的初值为0,4.初值与终值相等 FOR i=1 TO 1 STEP 10 n=n+1 ENDFOR 循环只做一次,退出循环后n的值为1。,求1+2+3+100之和。,【例6.12】,SET TALK OFF CLEAR S=0 FOR i=1 TO 100 STEP 1 S=S+i ENDFOR?1-100之和为,S SET TALK ON RETURN,举一反三:求123100之积。,S1,S=S*i,积,求所有的3位数中能同时被5和12整除的数有多少个?其和是多少?并按照每行输出5个,输出这些数。,分析:1.所有的三位数,也就确定了范围是从100999,使用步长循环,初值为100,终值为999,步长为1。2.用循环到的数对5和12求余,若其余数为0,则是一个需要的数,那么存放统计个数的变量加1,用于求和的变量累加上该数值。3.对于每个满足条件的数都使用“?”来保证同行输出,一旦输出了5个,则使用“?”换行。即,如果统计的个数能被5整除,就输出一个“?”,用来换行。,【例6.13】,STORE 0 TO s,t&s保存累加和,t保存满足条件的数的个数FOR i=100 TO 999 IF(i%5=0)AND(i%12=0)s=s+i t=t+1?i,IF t%5=0?&已经输出5个数,则换行输出。ENDIF ENDIF ENDFOR?满足条件的数的个数为:,t?满足条件的数之和为:,s,思考:输出所有的四位数中能同时被9和11整除的数,每行输出6个。,分析:1.在表中添加新的空记录可以使用APPEND BLANK命令。2.用步长循环来控制添加记录的数量。3.内部数据的输入可以用定位输入命令来完成。代码:SET TALK OFF CLEAR USE 员工表 FOR i=1 TO 10 APPEND BLANK?请输入添加的第,i,个员工的资料,【例6.14】,在员工表中添加10条新记录。,2,5 SAY“请输入员工编号”GET 员工编号 4,5 SAY“请输入员工姓名”GET 姓名 6,5 SAY“请输入员工性别”GET 性别 8,5 SAY“请输入员工婚否”GET 婚否 10,5 SAY“请输入员工职称”GET 职称 12,5 SAY“请输入员工工作日期”GET 工作日期 14,5 SAY“请输入员工部门编号”GET 部门编号 16,5 SAY“请输入员工工资级别”GET 工资级别 18,5 SAY“请输入员工联系电话”GET 联系电话 READ CLEAR ENDFOR USESET TALK ON RETURN,小 结,a)循环变量、和(或积或个数)变量要赋初值。b)DO WHILE循环体内要有修改循环变量的语句(即为了避免程序成为死循环)。c)尽可能不要在FOR循环内部使用改变循环变量的语句。,3、扫描循环,格 式:SCAN FORWHILE ENDSCAN,说 明:(1)针对当前工作区中被打开的表的记录进行扫描。(2)子句确定扫描记录的范围,缺省则为ALL。(3)对子句内满足FOR或WHILE的记录执行循环体中的规定操作。(4)记录指针可自动往下移。,USE 员工表STORE 0 TO n1,n2,j1,j2SCAN IF 性别=“男”n1=n1+1 ELSE n2=n2+1 ENDIF DO CASE CASE 职称=“教授”j1=j1+1 CASE 职称=“副教授”j2=j2+1 ENDDOENDSCAN,【例6.15】,统计员工表中男女人数,以及教授和副教授的人数。,?“总共有”,n1,“个男员工”?“总共有”,n2,“个女员工”?“总共有”,j1,“个教授”?“总共有”,j2,“个副教授”USE,总结,a)条件循环命令适用于各种类型的循环程序。b)计数循环适用于已知循环次数的循环程序。c)扫描循环命令适用于对数据库操作的循环程序。d)事实上,ForEndfor和ScanEndscan是 Do WhileEnddo的特殊形式。,作 业,1.用扫描循环依次修改学生表中第10-40条记录中女生的总分。2.编写一个密码输入程序,密码为“ABC”,若用户输入正确,显示“欢迎使用”,若不正确,允许输入三次,三次输入不正确,显示“无权使用本系统”,并退出程序执行。3.在屏幕上打印如下图形:*4.实现输入任意一个15以内的数求其阶乘。,5、设S=1+1/2+1/3+1/N,求使S不超过10的最大的N值。6、求1-1000之间能被3整除的偶数的个数及其和。7、打印如下图形:*附加题:1、任意输入10个数,能求出它们中的最大值和最小值。2、打印九九乘法表。,模块化设计,1.子 程 序,2.过程与过程文件,3.自定义函数,4.内存变量的作用域,5.数据传递,1、子程序,一、定义:子程序实际上是一个程序,其是一个相对的概念,通常称调用的程序为主程序,被调用的程序为子程序。,二、调用与返回 DO WITH 1、主程序执行时遇到DO命令,执行就转向子程序。子程序执行完后就会返回到主程序。2、参数表可以是表达式,若为内存变量,必须具有初值。3、调用子程序时,参数表中的参数要传送给子程序。,三、子程序参数的定义:PARAMETERS 功能:接受主程序发送的参数值,调用返回主程序时把变 量的值回送给主程序相应的变量。说明:a)PARAMETERS必须是被调用程序的第一个语句。b)程序返回主程序后,该命令定义的参数即被清除。c)DO 命令传送参数的个数不能多于PARAMETERS参数 表中所列参数的个数。d)DO命令所带的参数叫实际参数,PARAMETERS所对 应的叫形式参数。,求一个半径等于边长的圆与正方形面积之差。,主程序:STORE 0 TO S1,S2INPUT“输入半径或边长的值:TO ADO YUAN.PRG WITH A,S1DO ZHEN.PRG WITH A,S2?S1-S2,YUAN.PRGPARAMETERS R,SS=3.14*R2RETURN,ZHEN.PRGPARAMETERS L,SS=L2RETURN,【例6.15】,注 意 1、只有当DO命令中参数为内存变量时,子程序的参数才能返回给主程序,若参数为常量或表达式时,子程序的参数值不能够返回给主程序。2、若子程序不需要参数时,DO命令也可以不带参数。,四、子程序的返回 RETURN TO MASTER|TO 说明:TO MASTER 直接返回到最外层主程序;TO 强制返回到指定的程序文件。,2、过程与过程文件,如果将多模块程序中的每个模块(主程序,子程序或自定义函数)分别保存为一个独立的.PRG文件,则每执行一个模块就要打开一个文件,势必会增加运行时间。为此VFP允许在一个.PRG文件中设置多个程序模块,并将主程序以外的每个模块定义为一个过程,即“过程文件”,仍以.PRG为扩展名。,一、过程的定义 PROCEDURE PARAMETERS RETURN,说 明:a)每个过程均以PROCEDURE开始,以RETURN结束。每个过程实际上是一个独立的子程序或一个用户定义函数。b)PROCEDURE 用于过程的第一条语句,它标识了每个过程的开始,同时定义了过程名。c)过程如果以RETURN 作为结束语句,则该过程既可用DO 的形式执行,又可当做一个合法的自定义函数,可供随时调用。,1,2,【例6.16】,【例6.17】,写出下列程序的运行结果。,结果为:820 28,二、过程文件 一个过程可以以文件形式单独存在,也可以将多个过程合并到一个过程文件。过程文件是把多个过程集中起来用一个文件的形式存储在磁盘上,要调用其中的过程,必须先打开该过程文件。,格 式:SET PROCEDURE TO 功 能:打开过程文件。,【例6.18】,用过程文件实现求一个半径等于边长的圆与正方形面积之差的问题。,*Main.prgCLEARSET TALK OFFSET PROCEDURE TO sub&打开过程文件sub.prgSTORE 0 TO s1,s2INPUT“输入半径或边长的值:TO aDO yuan WITH a,s1&调用过程文件中的过程yuanDO zhen WITH a,s2&调用过程文件中的过程zhen?s1-s2SET TALK ONRETURN,*过程文件sub.prgPROCEDURE yuan&过程yuan PARAMETERS r,s s=3.14*r2RETURNPROCEDURE zhen&过程zhen PARAMETERS i,s s=i2RETURN,3、自定义函数,一、自定义函数的定义 FUNCTION PARAMETERS RETURN,自定义函数与系统函数调用方法相同:函数名(),【例6.19】,将子程序中的例题改为自定义函数。,CLEARS=0INPUT“输入半径或边长的值:”TO A?YUAN(A)-ZHEN(A)FUNCTION YUAN PARAMETERS R S=3.14*R2RETURN SFUNCTION ZHEN PARAMETERS L S=L2RETURN S,【例6.20】,定义一个判断n是否是素数的函数,然后调用该函数求21000内的全部素数。,分析:a)素数也叫质数,它是大于1且除了1和它本身之外,不能被其他任何整数所整除的整数。b)为了判断某数n是否是素数,一个最简单的方法是用2345n-1这些数逐个去除n,看能否除尽,如果全都除不尽,则n是素数,否则,只要其中一个数除尽了,则n不是素数。为了减少除的次数,提高运行效率,除到n开方即可。,程序:,*此子程序判断n是否是素数FUNCTION PRIMEPARAMETERS NFLAG=.T.K=INT(SQRT(N)J=2DO WHILE J=K AND FLAG IF MOD(N,J)=0 FLAG=.F.ENIF J=J+1ENDDORETURN FLAG,*main.prg调用该函数求21000内的全部素数。CLEARFOR M=2 TO 1000 IF PRIME(M)?M ENDIFENDFOR,4、内存变量的作用域,一、全局变量 PUBLIC 功能:声明并建立全局变量。说明:a)一旦定义可供所有的程序,模块使用。b)在命令窗口定义的变量是全局变量。c)程序执行完后不会自动清除。,若以内存变量的作用域分类,可分为下列三种:全局变量、局部变量、隐藏局部变量,结果:执行TEMP1前的I:2 TEMP1中的I:6 执行TEMP1后的I:6,【例6.21】,二、局部变量 在程序中定义的变量,若没带PUBLIC声明,它只能在定义它的程序及其下级程序中使用,一旦定义它的程序运行结束,它便自动被清除。,结果:由于P是在子程序中的局部变量,退出子程序后自动被清除,则在主程序中输出P的值时出现变量P未定义的错误。,三、隐藏内存变量 PRIVATE 功能:声明并隐藏上级模块中的同名变量。,说明:a)对PRIVATE中内存变量的修改并不影响上级程序中与之同名的内存变量的值。此命令只对本级程序及以下各级子程序有效,当返回到上级程序时,被PRIVETE隐藏的当前程序中的内存变量自动删除。b)在它们被隐藏期间,程序就不能再调用这些被隐藏的上级内存变量,但实际上它们仍然存在,一旦含有PRIVATE内存变量的程序结束后,被PRIVATE隐藏起来的那些以前建立的同名的上级内存变量自动恢复以前的内容和状态。,结果:在过程SUB中用PRIVATE命令隐藏了主程序中定义的全局变量P,并重新对P赋值,返回主程序时,P恢复以前的值,即输出10。,优点:使得在开发大型应用程序时,在不同层次的程序中可以使用同名内存变量而不致发生混乱。,【例6.22】,5、数据传递,调用子程序时,调用程序要把数据传递给子程序,子程序也可能把数据传回到调用程序,因此在调用子程序过程中,必然要考虑调用程序和被调用程序之间的数据是如何传递的。调用子程序时的数据传递可以通过两种方式解决:,a)利用变量的作用域实现数据传递,结果为:48,b)利用参数实现数据传递,利用这种方式传递数据,子程序具有更大的独立性。编写子程序时,用PARAMETERS命令来说明将要输入、输出的变量;用DO命令来提供输入值和接受输出结果。参数传递有两种方式:值传递和地址传递。,值传递:子程序中参数变化后的值不回传各上级调用程序。常量和表达式只能使用值传递方式。使用值传递方式的变量要用括号括起来。,地址传递:子程序中参数变化后的值要回传各上级调用程序。内存变量既可使用值传递方式,又可用地址传递。使用地址传递方式的变量不加括号。,写出下列程序的输出。,分析:程序将3个参数传递给过程SUB,第一个参数X采用地址传递方式,变量A的变化将引起X的变化;第二个参数Y采用值传递方式,B的变化不引起Y的变化;第三个参数是常数,最后输出为9 3。,【例6.23】,【例6.24】,写出下列程序的输出。,分析:程序将两个表达式传递给过程PP,它们都采用值传递方式,X,Y的变化不引起A,B的变化,则输出结果为,思考:将其改为B,结果是否一样?,

    注意事项

    本文(《程序设计初步 》PPT课件.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开