江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
2.1程序与程序文件

程序与程序文件

考点1 程序的概念、建立与执行

  1程序的概念
  程序是能够完成一定任务的命令集合。这组命令被存放在称为程序文件或命令文件的文本文件中。当运行程序时,系统会按照一定的次序自动执行包含在程序文件中的命令。
  2程序文件的建立与修改
  程序文件的建立与修改一般是通过调用系统内置的文本编辑器来进行的。其建立步骤如下。
  (l)打开文本编辑窗口。
  (2)在文本编辑窗口中输入程序内容,此处所输入的程序命令不会马上被执行。
  (3)编辑完成后,从“文件”菜单中选择“保存”命令或按快捷键Ctrl+W保存程序文件。
  3打开或修改程序文件的方法
  (1)从“文件”菜单中选择“打开”命令,弹出“打开”对话框。
  (2)在“文件类型”列表框中选择“程序”。
  (3)在文件列表框中选定要修改的文件,并单击“确定”按钮。
  (4)编辑修改后,从“文件”菜单中选择“保存”命令或按快捷键Ctrl+W保存程序文件,若要放弃修改,可直接按Esc键,或从“文件”菜单中选择“还原”命令。
  4程序文件的执行
  程序文件建立后,可使用多种方式、多次执行它,常用的以下有两种方式。
  (l)菜单方式。
  (2)命令方式。

考点2 简单的输入输出命令

  程序一般都包含数据输入、数据处理和数据输出3个部分。
  1 INPUT命令
  格式:INPUT[<字符表达式>]TO<内存变量>
  功能:该命令等待用户从键盘输入数据,当用户回车后,系统将表达式的值存入指定的内存变量。
  注释:输入的数据可以是常量、变量,也可以是更为一般的表达式。但不能不输入任何内容直接按回车键输入字符串时必须加定界符,输入逻辑型常量时要用圆点定界(如.T. ,.F.),则输入日期时间型常量时要用大括号(如{^2001-03-01})。
  2 ACCEPT命令
  格式:ACCEPT[<字符表达式>]TO<内存变量>
  功能:该命令等待用户从键盘输入字符串,当用户回车后,系统将表达式的值存入指定的内存变量。
  注释:该命令只能接收字符串。用户在输入字符串时不需要加定界符;否则,系统会把定界符作为字符串本身的一部分。如果不输入任何内容而直接按回车键,系统会把空串赋给指定的内存变量。
  3 WAIT命令
  格式:WAIT[<字符表达式>][TO<内存变量>][WINDOW[AT<行>,<列>]]
          [NOWAIT][CLEARINOCLEAR][TIMEOUT<数值表达式>]
  功能:该命令显示字符表达式的值作为提示信息,暂停程序的执行,直到用户按任意键或单击鼠标时继续程序运行。
  注释:<内存变量>用来保存用户输入的字符,其类型为字符型。若用户按的是Enter键或单击了鼠标,那么<内存变量>中保存的将是空串若不选TO <内存变量>短语,则输入的单字符不保留。

小提示:
  如果用DO命令执行查询文件、菜单文件,在文件名中必须要包括扩展名(QPR、MPR)。

7.2 程序的基本结构

  程序结构是指程序中命令或语句执行的流程结构,包括3种基本结构:顺序结构、选择结构和循环结构。

考点3 顺序结构

  顺序结构是最简单的程序结构,它是按命令在程序中出现的先后次序依次执行。

考点4 选择结构

  支持选择结构的语句包括条件语句和分支语句。
  1条件语句
  格式:
      IF<条件>
          <语句序列1>
      [ELSE>
        <语句序列2>]
        ENDIF
  功能:该语句根据<条件>是否成立从两组代码中选择一组执行。
  语句的执行流程图如图7-1和图7-2所示。
 
   图7-1有ELSE的选择语句                   图7-2无ELSE的选择语句
  2分支语句
  格式:DO CASE
      CASE<条件1>
          <语句序列1>
        CASE<条件2>
          <语句序列2>
   ……
        CASE<条件n>
          <语句序列n>
        [OTHERWISE
          <语句序列>]
        ENDCASE
   功能:语句执行时,依次判断CASE后面的条件是否成立。分支语句实现的是一种扩展的选择结构,可以根据条件从多组代码中选择一组执行。分支语句的流程如图7-3所示。


 
             图7-3 多分支语句

考点5 循环结构

  循环结构也称为重复结构,是指程序在执行的过程中,其中的某段代码被重复执行若一干珠。被重复执行的代码段,通常称为循环体。Visual FoxPro支持循环结构的语句包括:DO WHILE-ENDDO、FOR-ENDFOR和SCAN-ENDSCAN。
  1 DO WHILE - ENDDO语句
    格式:
        DO WHILE<条件>
            <语句序列1>
          [LOOP]
            <语句序列2>
          [EXIT]
            <语句序列3>
            ENDDO
  功能:首先判断循环条件是否为真,如果成立则执行DO WHILE和ENDDO之间的命令序列,如果遇到LOOP语句,则回到DO WHILE处继续执行,遇到EXIT语句,则退出循环体;当执行到ENDDO时,再次返回DO WHILE处判断循环条件,一直到条件为假时,退出循环体,执行ENDDO之后的语句。
  DO WHILE循环语句的控制流程如图7-4和图7-5所示。


 
   图7-4基本循环结构图           7-5含有LOOP或EXIT的循环
  2 FOR - ENDFOR语句
    格式:
        FOR<循环变量>=<初值>TO<终值>[STEP<步长>]
              <循环体>
            ENDFOR
  功能:首先将初值赋给循环变量,然后判断循环条件是否成立(若步长为正值,则循环条件为<循环变量><=<终值>;若步长为负值,则循环条件为<循环变量>>=<终值>)。如果成立,则执行循环体,然后循环变量增加一个步长值,并再次判断循环条件,一直到条件为假时,退出循环体。该语句通常用于实现循环次数已知情况下的循环结构〕
  3 SCAN - ENDSCAN语句
  格式:
        SCAN[<范围>][FOR<条件1>][WHERE<条件2>]
              <循环体>
            ENDSCAN
   功能:该循环语句一般用于处理表中记录,语句可指明需要处理的记录范围及应满足的条件。执行该语句时,记录指针自动、依次地在当前表的指定范围内满足条件的记录上移动,对每一条记录执行循环体内的命令。

  7.3 多模块程序
  模块是一个相对独立的程序段,它可以被其他模块调用,也可以调用其他模块。通常,把被其他模块调用的模块称为子程序,把调用其他模块而没有被其他模块调用的模块称为主程序。应用程序一般都是多模块程序,包含多个程序模块。

考点6 模块的定义和调用

  1模块的定义
  在Visual FoxPro中,模块可以是命令文件,也可以是过程。过程定义的语句格式为:
        PROCEDURE|FUNCTION<过程名>
            <命令序列>
          [RETURN[<表达式>]]
        [ENDPROCIENDFUNC]
  功能说明如下。
  (1) PROCEDURE|FUNCTION命令表示一个过程的开始,并命名过程。过程名必须以字母或下划线开头,可以包含数字、字母和下划线。
  (2)当程序执行到RETURN命令时,控制将转回到调用处(或命令窗口),并返回表达式的值。若默认RETURN命令,系统将在过程结束处自动调用一条隐含的RETURN命令。
  (3)ENDPROC|ENDFUNC命令表示一个过程的结束。如果默认此语句,那么过程结束于下一条PROCEDURE|FUNCTION命令或文件尾。
  2模块的调用
  模块调用的格式有两种。
  (1)使用DO命令,格式如下。
        DO<文件名>|<过程名>
  (2)在名字后加一对小括号,格式如下。
        <文件名>|<过程名>()
  3打开过程文件
  命令格式如下。
        SET PROCEDURE TO[<过程文件1>[,<过程文件2>,…][ADDITIVE]
  4关闭过程文件
  命令格式如下。
        RELEASE PROCEDURE<过程文件1>[,<过程文件2>,…]

考点7 参数传递

  模块程序可以接收调用程序传递过来的参数。
  (1)PARAMETERS<形参变量1>[,<形参变量2>,…]。
  (2) LPARAMETERS<形参变量1>[,<形参变量2>,…]。
  说明PARAMETERS声明的形参被看做是模块程序中建立的私有变量,LPARAMETERS声明的形参被看做是模块程序中建立的局部变量。除此之外,两条命令无其他区别。
  不管是PARAMETERS或LPARAMETERS,都应该是模块程序的第一条可执行命令。
  (1)调用参数调用模块程序参数的格式如下。
        DO<文件名>|<过程名>WITH<实参1>[,<实参2>,…]
        <文件名>|<过程名>(<实参1>[,<实参2>,…])
  说明:实参可以是常量、变量或一般表达式,调用模块程序时,形参的数目不能少于实参的数目,当形参数目多于实参数目时,多余的形参取初值逻辑假.F.。
  (2)参数的传递。模块中参数的传递分为两种:按值传递(实参一般为常量和表达式)和引用传递(实参一般为变量)。参数的传递方式可以重新设置,格式如下。
            SET UDFPARMS TO VALUE|REFERENCE

考点8 变量的作用域

  变量的一个重要属性是作用域。变量的作用域指的是变量在什么范围内是有效或能够被访问的。在Visual FoxPro中,可分为公共变量、私有变量和局部变量3类。
  1.公共变量
  在任何模块中都可使用的变量称为公共变量,公共变量必须先定义后使用,格式如下。
        PUBLIC<内存变量表>
  说明:该命令是建立公共的内存变量,并赋以初值逻辑假.F.。建立好的公共变量一直有效,即使程序结束返回命令窗口也不会消失,只有执行CLEAR MEMORY,RELEASE或QUIT等命令后,才能被释放。
  2私有变量
  在程序中直接使用(没有预先声明),而由系统自动隐含建立的变量都是私有变量。
  私有变量的作用域是建立它的模块及其下属的各层模块。
  3局部变量
  局部变量只能在建立它的模块中使用,不能在上层或下层模块中使用。程序结束时,自动释放局部变量。格式如下
    LOCAL<内存变量表>
  说明:该变量同样给建立的内存变量赋以初值逻辑假.F.,也必须先定义后使用。当子程序中定义的变量名与主程序中同名时,为避免子程序中的变量值改变主程序中的变量值,可在子程序中使用PRIVATE命令隐藏主程序中可能存在的变量,使这些变量在子程序中暂时无效。格式如下。
  (1)PRIVATE<内存变量表>。
  (2)PRIVATE ALL[LIKE<通配符>|EXCEPT<通配符>]。
  说明:该命令并不建立内存变量,它只是隐藏指定的在上层模块中可能已经存在的内存变量,但是当模块程序返回到上层模块时,被隐藏的变量就自动恢复有效性,保持原值。

7.4 程序调试

考点9 调试器环境

  程序调试是指在发现程序有错误的情况下,确定出错位置并纠正错误。计算机一般能够发现程序的出错位置,但对于计算机不能发现的错误,只能由用户自己来查错。Visual FoxPro提供的功能强大的调试工具—调试器,可帮助我们进行这项工作。
  调用调试器的方法一般有两种。
  (l)选择“工具”菜单中的“调试器”命令。
  (2)在命令窗口中输入DEBUG命令。

考点10 设置断点

  可以设置以下4种类型的断点。
  (1)在定位处中断:可指定一行代码,当程序调试执行到该行时,中断程序运行。
  (2)如果表达式值为真,则在定位处中断:指定一行代码及一个表达式,当程序调试执行到该行代码时,如果表达式值为真,就中断程序运行。
  (3)当表达式值为真时中断:可以指定一个表达式,在程序调试执行过程中,当该表达式值为逻辑真.T.时,中断程序运行。
  (4)当表达式值改变时中断:可以指定一个表达式,在程序调试执行过程中,当该表达式值改变时,中断程序运行。

考点11 “调试”菜单

  “调试”菜单包含执行程序、选择执行方式、终止程序执行、修改程序,以及调整程序执行速度等命令。各命令具体功能如下。
  (1)运行:执行在跟踪窗口中打开的程序:
  (2)继续执行:当程序被中断时,该命令可使程序在中断处继续往下执行。
  (3)取消:终止程序的调试执行,并关闭程序。
  (4)定位修改:终止程序的调试执行,然后在文本编辑窗口中打开调试程序。
  (5)跳出:以连续方式而非单步方式继续执行被调用模块程序中的代码,然后在调用程序的调用语句的下一行处中断。
  (6)单步:单步执行下一行代码。如果下一行代码调用了过程或者方法程序,那么该过程或者方法程序在后台执行。
  (7)单步跟踪:单步执行下一行代码。
  (8)运行到光标处:从当前位置执行代码直至光标处中断。
  (9)调速:打开“调整运行速度”对话框,设置两代码行执行之间的延迟秒数。
  (10)设置下一条语句:程序中断时选择该命令,可使光标所在行成为恢复执行后要执行的语句。