6.2程序6.2.1程序的概念6.2.2程序文件的建立6.2.3程序中的输入、输出命令6.2.1程序的概念定义:完成一定任务的命令的有序集合例:通过编程查看student表的信息一、在数据库中运行opendatabasestscusestudentbrowsuseclosedatabase二、在程序文件1、建立程序文件2、在文件中输入所有命令。3、运行程序三、程序和命令窗口的区别1、在程序窗口中,输入完命令,按回车键该条命令就会被执行。2、在程序中,所以的命令输入完形成程序文件,通过运行程序才能按照程序文件中命令的顺序依次执行。四、vfp中程序命令的说明1、程序命令的注释格式一:note注释内容格式二:*注释内容格式三:&&注释内容2、区别格式一和格式二可以在程序文件中单独一行出现,称为格式行;格式三只能出现程序文件中某跳语句的后面。四、对话开关语句格式一:settalkon|off功能:打开或关闭程序执行过程中的一些信息,这些信息显示在状态栏上。格式一:setsafetyon|off功能:打开或关闭程序执行过程中的一些信息,这些信息显示在主窗口上。例:求student表学生的平均年龄;selectavg(年龄)as平均年龄fromstudent执行时在状态栏会显示,可以使用settalkoff关闭提示,提高执行速度例:清空数据库中某一表格的内容,会弹出安全提示,若不要安全提示则可以使用setsafetyoff关闭由于在程序执行的时候为了提高程序的执行效率,并且在程序执行过程中让程序顺利的执行通常在编程开始和结束的地方写如下语句:SettalkoffSetsafetyoff………….SettalkonSetsafetyon5、命令的分行在程序中编写命令语句时,如果语句过长则可以在该行的结束使用”;”换行。6.2.1程序文件的建立与执行一、程序文件的建立1、菜单方式2、命令方式:modifycommand文件名(1)若文件名存在,该命令表示修改(2)若文件名不存在,该命令表示新建二、程序文件的保存1、菜单/工具栏2、快捷键:ctrl+w三、程序的运行1、菜单方式2、工具栏运行按钮3、命令:do文件名四、程序执行常用的命令1、cancel终止程序运行,返回命令窗口2、do转向执行另外一个程序3、return结束程序执行,返回调用它的上级程序,若无上级程序则返回命令窗口4、quit退出vf返回操作系统6.2.3简单的输入、输出命令输入命令:input、accept、wait输出命令:?和??一、input命令格式:input[提示信息]to内存变量例:input“请输入一个数”toaa例:编程完成,从键盘输入两个数,求他们的和并输出clearinput请输入一个数toa?a=??ainput请输入一个数tob?b=??b?a+b=??a+b说明:1、可以输入字符型、数值型、逻辑型、日期型、日期时间型等类型常量、变量、表达式。2、输入完成后按回车键结束输入,系统自动将输入的内容赋给内存变量3、输入字符型要使用定界符””,逻辑性使用圆点定界,日期型使用大括号定界二、accept命令格式:accept[提示信息]to内存变量例:accept“请输入一串字符串”toc说明:1、只接受字符型数据,输入的字符串不需要加定界符2、如果不输人任何字符直接按回车,则将空串赋给变量三、wait命令格式:wait[提示信息]to内存变量例:wait“请输入一串字符串”toc说明:1、以窗口的形式显示提示信息,并暂停程序的执行,直到按任意键或单击鼠标后继续执行程序。2、wait用于接收单个字符且不用按回车键6.3程序的结构6.3.1顺序结构6.3.2选择结构6.3.3循环结构6.3.1顺序结构程序结构:程序中命令或语句执行的顺序。顺序结构:(最基本的)按照程序命令、语句的书写顺序依次执行的结构语句1语句2语句n总结:在顺序结构中,程序执行按照语句顺序进行,无任何的分支或重复例:从键盘输入两个数,交换它们的值6.3.2选择结构当程序执行到某一步时,有多条道路可以选择,但是只能选择期中一条道路,该道路只能执行一次。选择结构语句:条件语句+分支语句一、简单的选择结构条件语句:If条件语句序列Endif二、一般的选择结构条件语句:If条件语句序列1Else语句序列2endif例:从键盘输入一个数给a,判断若该数大于0,则显示“a是正数”,否则显示“a是非正数”1、clearinput请输入一个数:toaifa0?a是正数endififa0?a是负数Endif2、clearinput请输入一个数:toaifa0?a是正数else?a是负数endifreturn三、分支语句语句格式:DocaseCase条件1语句序列1Case条件2语句序列2……Case条件n语句序列n[otherwise语句序列]Endcase后继语句例:根据学生的成绩显示相应的等级,等级划分如下:优秀:90~100(大于等于90小于100);良好:80~90;中等:70~80;及格:60~70;不及格:60分以下clearinput请输入成绩:tocjdocasecasecj=90?优秀casecj=80?良好casecj=70?中等casecj=60?及格otherwise?不及格endcase例:计算分段函数F(x)=2x-1x03x+50=x3X+13=x55x-35=x107x+2x=10clearInput“输入x值:toxDocaseCasex0f=2*x-1casex3f=3*x+5casex5f=x+1casex10f=5*x-3otherwisef=7*x+2Endcase?f(,x,)=,f9/96.2.3循环结构也称重复结构,是指程序在执行过程中,某段代码被重复执行若干次。被重复的代码段称之为循环体。语句结构形式:条件循环、步长型循环和扫描型循环一、条件循环语句格式:Dowhile条件循环体enddo例:逐条显示student表中性别为男的所有记录方法一clearsettalkoffsetsafetyoffopendatabasestscusestudentgotopdowhilenoteof()&&循环条件if性别=男displayendifskipEnddosettalkonsetsafetyon该方法不仅要判断性别为男的记录,也要判断性别为女的记录,算法不好,程序执行效率慢方法二:依次访问性别为男的记录,并显示出来,直到访问完(遇到eof()处)为止clearsettalkoffsetsafetyoffopendatabasestscusestudentgotoplocatfor性别=男dowhilenoteof()&&循环条件displaycontinueenddosettalkonsetsafetyon二、步长型循环根据给定的次数重复执行循环体语句:For循环变量=初值to终值[step步长]循环体Endfor|next用于循环次数已知的情况•省略step默认步长为1•若初值终值,步长为正数否则为负数例:显示1~100之间的整数clearfori=1to100step1?iEndfor例:逆序显示50~1之间的偶数clearfori=50to2step-2?iendfor思考题:1、找出100~999间的“水仙花数”“水仙花数”即各位数字的立方和等于本身的三位数。2、某竞赛有10个评委打分,去掉一个最高分,去掉一个最低分,平均后得出最后得分。编一个求最后得分的程序。三、扫描型循环语句格式:scan[范围][for条件1][while条件2]循环体Endscan注:1.该命令是将locate和continue结合一起来,执行该语句时,记录指针依次在当前指定范围内满足条件的记录上移动,并对每一条记录执行循环体内的命令,范围默认值是all2.Scan循环是为操作数据库中表的的记录设计的循环3.记录指针自动依次按条件移动例:逐条显示student表中性别为男的所有记录方法三clearopendatabasestscusestudentscanfor性别=男displayendscan6.4多模块化程序把一个大而复杂的程序划分成若干个模块来完成,每个模块完成一个特定的功能,这种方式称为模块化结构。模块是一个相对独立的程序段,它可以被其他模块所调用,也可去调用其他模块。通常,把被其他模块调用的模块称为子模块,把调用其他模块而没有被其他模块调用的模块称为主程序。应用程序一般包含多个程序模块,所以一般都是多模块程序。将一个应用程序分解成多个功能相对简单、单一的程序模块,不仅便于程序开发,而且利于程序的阅读和维护。6.4.1模块的定义和调用6.4.2参数传递6.4.3变量的作用域6.4.1模块的定义和调用1、过程的定义2、返回语句3、模块的调用格式1、模块的定义命令格式:Proceture|function过程名|文件名命令序列[return[表达式]][Endproc|endfunc]注:Proceture是过程的入口语句,标识了过程段的开始Endproc是过程的出口语句,标识了本过程段的结束2、返回语句格式:return表达式return后没有表达式,则返回.t.,否则返回表达式的值3、模块的调用格式1:do过程名格式2:过程名()注:调用模块文件中的模块时,需要它所在的文件必须处于打开状态。例:clear?调用过程dop1?调用完毕procp1?这是第一个过程endproc6.4.2参数的传递1、参数的定义2、调用有参数的模块3、参数的传递规则1、参数的定义:格式一:parameters参数列表格式二:lparameters参数列表注:该语句必须是过程的第一条语句,定义多个参数时,用逗号隔开例:在过程s1定义参数procedures1parametersx,yreturnx+yendproc2、调用有参数的模块格式一:模块名(实参1,实参2,…….)格式二:do模块名with实参1,实参2,…..例:clearinput输入一个数:toainput输入另一个数:tobc=s1(a,b)?c说明:1、形参的数目不能少于实参的数目,否则系统会产生运行时的错误。2、如果形参的数码多于实参的数目,则多余的形参取初值逻辑假.F.参数的传递规则:两种规则:值传递和地址传递格式一:do模块名with实参1说明:若实参为常量或者表达式,则为值传递。若实参为变量,则为地址传递。若给实参变量加上()则强制转化为值传递值传递:形参、实参相互独立,形参值的改变不会影响实参的值。地址传递:形参、实参相互统一,形参变量值的改变会影响原来实参的值。例:procedures1parametersx,yx=x+1y=y+1Endproccleara=2b=3dos1with2,3?a?b格式二:模块名(参数列表)总结:不论实参是值、变量、表达式,均是按值传递6.4.3变量的作用域1、全局变量2、局部变量3、私有变量1、全局变量(公共变量):是在任何模块中都可使用的变量,要先建立后使用。建立命令:Public内存变量表注:(1)其初值为.f.,赋值后改变。一旦建立就一直有效,即使程序运行结束返回到命令窗口也不会消失。只有执行clearmemory、release、quit等命令后,才被释放。(2)在命令窗口中直接使用而由系统自动隐含建立的变量也是公共变量例:procedures1a=a+1b=b+1Endprocclearpublica,ba=4b=5dos1?a?b2、局部变量只能在建立它的模块中使用,而不能在其上层或下层模块中使用的变量。当建立它的模块程序运行结束时,局部变量自动释放。必须先建立后使用:建立格式:Local内存变量表说明:建立时赋初值.f.。因为与locate前四个字母相