55
第第第 第第第第第第

第九章 程序设计基础

Embed Size (px)

DESCRIPTION

第九章 程序设计基础. 教学目标. 要求了解程序的概念、程序文件的建立与运行。 要求掌握程序的顺序、选择、循环三大控制结构及多模块程序。 重点:掌握 if 语句、 do case 语句、 for … endfor 语句、 scan … endscan 语句、 do while … enddo 语句的使用。 难点:三种循环语句的区别及利用循环结构编写程序、参数的传递、变量的作用域。. 授课内容. 9.1 程序文件 9.2 程序的控制结构 9.3 多模块程序. 9.1 程序文件. - PowerPoint PPT Presentation

Citation preview

Page 1: 第九章 程序设计基础

第九章 程序设计基础

Page 2: 第九章 程序设计基础

教学目标 要求了解程序的概念、程序文件的建立与运

行。 要求掌握程序的顺序、选择、循环三大控制

结构及多模块程序。 重点:掌握 if 语句、 do case 语句、 for …en

dfor 语句、 scan…endscan 语句、 do while…enddo 语句的使用。

难点:三种循环语句的区别及利用循环结构编写程序、参数的传递、变量的作用域。

Page 3: 第九章 程序设计基础

授课内容

9.1 程序文件9.2 程序的控制结构9.3 多模块程序

Page 4: 第九章 程序设计基础

9.1 程序文件 Visual FoxPro 系统提供有三种工作方式:单命令方

式、菜单方式及程序文件方式。( 1 )单命令方式 所谓单命令方式,即输入一条命令,完成一个操作

的工作方式。( 2 )菜单方式所谓菜单方式,即通过打开不同的菜单选择并完成不同

的操作。 ( 3 )程序文件方式所谓命令方式,即通过程序文件中的命令完成不同的操

作。

Page 5: 第九章 程序设计基础

9.1.1 程序的概念 程序是能够完成一定任务的命令的有序集合。

这些命令被存放在称为程序文件或命令的文本文件中。当运行此程序文件时,系统会按照一定的次序自动执行包含在程序文件中的命令。

与其他方式相比,采用程序方式有如下优点:( 1 )可以利用编辑器,方便地输入、修改和保存程序文件。( 2 )可以用多种方式、多次运行程序文件。( 3 )可以在一个程序文件中调用另一个程序。

Page 6: 第九章 程序设计基础

在编写程序文件时应注意以下几点:

( 1 )命令注释程序中可以插入注释,以提高程序的可读性。注释行以符号“ *” 或“ NO

TE” 开头,它是一条非执行命令,仅在程序中显示。命令行后也可添加注释,这种注释以符号“&&”开头。

( 2 )命令分行程序中每条命令都以回车键结尾,一行只能写一条命令。若命令需分行,

应在一行终了时输入续行符“;”,然后按回车键。( 3 ) SET TALK ON/OFF 命令许多数据处理命令在执行时都会返回一些有关执行状态的信息,这些信息

通常会显示在 Visual FoxPro 主窗口、状态栏或用户自定义窗口里。 SET TALK 命令用以设置是( ON )或否( OFF )显示这些信息。默认值为 ON 。

( 4 )求解的基本逻辑Visual FoxPro 程序大多用于数据处理,在编写程序时必须先分析清楚问

题,才能用计算机来求解。解决问题的基本逻辑是:先输入数据,按着处理数据,最后输出结果。

( 5 )程序的通用性程序的通用性指程序对多种场合的适应性,通用性好的程序应用范围较广。

Page 7: 第九章 程序设计基础

9.1.2 程序文件的建立与运行 1 、建立、编辑程序文件( 1 )命令方式[ 格式 ] MODIFY COMMAND 〈程序文件名〉[ 功能 ] 打开程序编辑窗口,建立或修改命令文件。 ( 2 )菜单方式 打开“文件”菜单,选择“新建”;在“新

建”对话框,选择“程序”,再选择“新建”;在 Visual FoxPro 用户界面打开程序编辑窗口,输入程序文件,并保存,此时建立程序文件的操作结束。

Page 8: 第九章 程序设计基础

2、运行程序文件 程序在执行之前,必须经过编译操作,未经过编译的程序称为源程序。可以通过下面三种方式来运行程序。

( 1 )命令方式 在命令窗口中,输入如下命令,则程序文件被调用。 DO 〈程序文件名〉  ( 2 )菜单方式下的“边编译边运行”方式在 Visual FoxPro 系统主菜单下,打开“程序”菜单,选择“运

行”;在弹出的“运行”对话框,输入或选择要执行的程序文件名,单击“运行”按钮即可。或先打开源程序文件,然后单击工具栏上的按钮来运行程序。

( 3 )菜单方式下的“先编译后运行”方式打开源程序,选择菜单栏“程序”菜单中的“编译”命令,系统

开始编译源程序并进行语法检查。如果有错误将给出错误信息,用户根据错误提示进行修改,直到编译没有错误后,生成 .FXP文件,然后执行该文件。

Page 9: 第九章 程序设计基础

3 、程序中的常用命令  ( 1 )清屏命令[ 格式 ] CLEAR[ 功能 ] 清除屏幕上或窗口中显示的内容。  ( 2 )注释命令[ 格式 ] *|NOTE[ 功能 ] 在程序中插入注释行,以提高程序的可读性。  ( 3 )字符串输入命令[ 格式 ] ACCEPT  [< 提示信息 >] TO <内存变量

>[ 功能 ] 执行该语句时,在屏幕上显示由 < 提示信息

> 所规定的提示信息,然后等待用户从键盘上输入数据,并将其赋予内存变量。

Page 10: 第九章 程序设计基础

[例 9-1] 编写程序,在“学生情况表”中按姓名查找某一指定学生的基本情况。

程序如下:*EX9-2.PRGCLEARUSE 学生情况表ACCEPT “请输入学生姓名: ” TO XMLOCATE FOR 姓名= XMDISPLAYUSE

Page 11: 第九章 程序设计基础

( 4 )表达式输入命令[ 格式 ] INPUT  [< 提示信息 >] TO <内

存变量 >[ 功能 ] 将从键盘输入的数据赋给内存变

量。说明:① INPUT命令可以接受任何类型的数据,

若是字符型数据,必须使用单引号、双引号或方括号括起来。② 内存变量的类型取决于输入数据的类型。

Page 12: 第九章 程序设计基础

[例 9-2] 编写程序显示“学生情况表”中所有入学成绩大于某一给定值的学生基本情况。

程序如下:*EX9-3.PRGCLEARUSE 学生情况表INPUT “请输入入学成绩:” TO GRADELIST FOR 入学成绩 >GRADEUSE

Page 13: 第九章 程序设计基础

( 5 )单字符输入命令[ 格式 ] WAIT  [< 提示信息 >] [TO <内存变量 >]

[WINDOWS][ 功能 ] 执行该命令时等待用户输入,只要用户按

下键盘上的任一个键,立即执行下一条命令。( 6 )定位输入输出命令[ 格式 ] @ < 行,列 >  [SAY<表达式1 >]  [G

ET< 变量名 >] [DEFAULT <表达式2 >][ 功能 ] 在屏幕的指定行、列输出 SAY子句的表达式值,并可修改 GET子句的变量值。

( 7 )返回命令[ 格式 ] RETURN[ 功能 ] 结束一个程序的执行,并使控制返回调用

程序或交互状态。

Page 14: 第九章 程序设计基础

( 8 )终止程序运行命令[ 格式 ] CANCEL

[ 功能 ] 终止命令文件的运行,并关闭所有打开的文件(清除内存变量),返回命令窗口。

( 9 )打开 / 关闭对话功能命令[ 格式 ] SET TALK ON/ OFF

[ 功能 ] 执行程序时,系统是否将每条命令的运行结果提供给用户。

Page 15: 第九章 程序设计基础

( 10 )设置打印机状态命令[ 格式 ] SET PRINT ON/OFF[ 功能 ] 屏幕显示的结果是否送打印机输出。( 11 )设置屏幕状态命令[ 格式 ] SET CONSOLE ON/OFF[ 功能 ] 打开或关闭屏幕显示状态。( 12 )退出 Visual FoxPro 命令[ 格式 ] QUIT[ 功能 ] 终止程序的运行并退出 Visual FoxPro 。

Page 16: 第九章 程序设计基础

9.2 程序的控制结构 常见的控制结构如下: 1 、顺序结构 顺序结构是在程序执行时,根据程序中语句的书

写顺序依次执行的命令序列。 Visual FoxPro 系统中的大多数命令都可以作为顺序结构中的语句。

2 、选择结构 选择结构是在程序执行时,根据不同的条件,选

择执行不同的程序语句,用来解决有选择、有转移的诸多问题。

Page 17: 第九章 程序设计基础

3 、循环结构 循环结构则能够使某些语句或程序段重复执

行若干次。如果某些语句或程序段需要在一个固定的位置上重复操作,使用循环是最好的选择。

4 、过程结构 在许多应用程序中,有一些程序段需要反复

执行多次,这些程序段不在一个固定的位置上,而是分散在程序的许多位置上重复执行,可将其与嵌入它的程序分开,形成独立的程序序列,待使用时再调入程序中,以实现不同位置上的重复操作。这样做增强了程序的可读性和模块化。我们称这种具有独立功能而且可以被其它程序调用的程序序列为过程。

Page 18: 第九章 程序设计基础

9.2.1 顺序结构[例 9-3] 根据输入的学生姓名,显示“学生情况表”中学生的基本信息。程序如下:*EX9-4.PRGSET TALK OFFCLEARUSE 学生情况表ACCEPT "请输入查找学生的姓名:  "TO XMLOCATE FOR 姓名 =XM@6,10 SAY "学生姓名: "+姓名@7,10 SAY " 性别: "+ 性别@8,10 SAY "学院: "+学院@9,10 SAY " 入学成绩: "+STR( 入学成绩 ,3)USESET TALK ONRETURN

Page 19: 第九章 程序设计基础

9.2.2 选择结构 1、单向选择 [ 格式 ] IF 〈条件表达式〉 〈命令序列〉 ENDIF

[ 功能 ]该语句首先计算〈条件表达式〉的值,当〈条件表达式〉的值为真时,执行〈命令序列〉;否则,执行 ENDIF后面的第一条命令。

Page 20: 第九章 程序设计基础

[例 9-4] 从键盘输入两个数 A 、 B ,要求输出两个数中的大者。程序如下:*EX9-5.PRGSET TALK OFFCLEAR@3,8 SAY "请输入变量 A 的数值 " GET A DEFAULT 0@4,8 SAY "请输入变量 B 的数值 " GET B DEFAULT 0READIF A<B    C=A    A=B    B=CENDIF@6,8 SAY "两者中大者是 " GET ARETURN

Page 21: 第九章 程序设计基础

2 、双向选择 [ 格式 ] IF 〈条件表达式〉 〈命令序列 1 〉 ELSE

〈命令序列 2 〉 ENDIF

[ 功能 ] 该语句首先计算〈条件表达式〉的值,当〈条件表达式〉的值为真时,执行〈命令序列1 〉中的命令;否则,执行〈命令序列 2 〉中的命令;执行完〈命令序列 1 〉或〈命令序列2 〉后都将执行 ENDIF 后面的第一条命令。

Page 22: 第九章 程序设计基础

[例 9-5] 由铁路托运行李,假设每张车票可按每公斤 0.5元托运 50公斤以内的行李,如果超过 50公斤时,超过的部分每公斤加价 0.3元,编写计算运费的程序。

设 W 为行李重量, X 为托运行李的运费,计算公式如下:X=0.5×W     当 X≤50公斤X=0.5×50+0.8×(W-50)   当 W>50公斤程序如下:*EX9-6.PRGCLEARINPUT "请输入行李的重量为: " TO WIF W<=50X=0.5*WELSEX=0.5*50+0.8*(W-50)ENDIF? " 行李的重量为 "+STR(W,6,2)+"公斤,其运费为: "+STR(X,6,2)

+"元 "RETURN

Page 23: 第九章 程序设计基础

3 、 IF 语句的嵌套   [ 格式 ] IF 〈条件表达式 1 〉 〈命令序列 1 〉 ELSE IF 〈条件表达式 2 〉 〈命令序列 2 〉 ELSE IF 〈条件表达式 3 〉 〈命令序列 3 〉 …… ENDIF ENDIF ENDIF 该嵌套结构的执行过程是:依次判断条件表达式的取值,

若某个条件表达式的取值为真,则执行相应的命令序列,然后退出其嵌套结构。

Page 24: 第九章 程序设计基础

[ 例 9-6] 从键盘输入三个数,输出其中最大的数。程序如下:*EX9-7.PRGSET TALK OFFCLEARINPUT “ 请输入第一个数 X =” TO XINPUT “ 请输入第二个数 X =” TO YINPUT “ 请输入第三个数 X =” TO ZIF X>=Y .AND. X>=Z MAX=XELSE IF Y>=X .AND. Y>=Z MAX=Y ELSE MAX=Z ENDIFENDIF? “MAX=”,MAXSET TALK ONRETURN

Page 25: 第九章 程序设计基础

4 、多向选择 如果分支过多,使用 IF 语句嵌套容易出错,对此 Visual FoxPro 提供

了多向选择语句,最适宜解决这类问题。 [ 格式 ] DO CASE CASE 〈条件表达式 1 〉 〈命令序列 1 〉 [ CASE 〈条件表达式 2 〉 〈命令序列 2 〉 … … CASE 〈条件表达式 n 〉 〈命令序列 n 〉] [ OTHERWISE 〈命令序列 n+1 〉] ENDCASE[ 功能 ] 该语句根据给出的 n 个〈条件表达式〉的值,选择 n+1 个〈命令

序列〉中的一个执行。当所有 CASE 中〈条件表达式〉的值都是假时,如果有 OTHERWISE 项,则执行〈命令序列 n+1 〉,再执行 ENDCASE 后面的第一条命令;否则,直接执行 ENDCASE 后面的第一条命令。

Page 26: 第九章 程序设计基础

[ 例 9-7] 百货公司为了促销,采用购物打折的优惠办法。若每位顾客一次性购物:- 1000 元以上者,九五者折优惠- 2000 元以上者,九者折优惠- 3000 元以上者,八五者折优惠- 5000 元以上者,八者折优惠编写程序,输入购物款数,计算并输出优惠价。程序如下:*EX9-8.PRGSET TALK OFFCLEARINPUT “ 请输入购物款数  ” TO XDO CASE CASE X<1000 Y=X CASE X<2000 Y=X*0.95 CASE X<3000 Y=X*0.9 CASE X<5000 Y=X*0.85 OTHERWISE Y=X*0.8 ENDCASE? “ 应付款数” ,YRETURN

Page 27: 第九章 程序设计基础

9.3.3 循环结构 1 、“当”型循环控制语句 [ 格式 ] DO WHILE 〈条件表达式〉 〈命令序列〉 ENDDO[ 功能 ] 该语句通过〈条件表达式〉的值来控制

循环。执行语句时,反复判断〈条件表达式〉的值,当〈条件表达式〉的值为“真”时,执行〈命令序列〉;否则,结束循环,并执行 ENDDO 后面的第一条命令。

Page 28: 第九章 程序设计基础

[例 9-8] 以显示方式输出 1到 10 的数字。程序如下:*EX9-9.PRGSET TALK OFFCLEAR? "   数字 "I =1DO WHILE I<=10? II = I +1ENDDO

Page 29: 第九章 程序设计基础

[例 9-9] 鸡兔同笼问题。设鸡和兔共有头 38 个,脚 138 个,问鸡和兔各为多少只?

*EX9-10.PRGSET TALK OFFCLEARCLEARcocks=0foots=0DO WHILE foots<>138 cocks=cocks+1 rabbits=38-cocks foots=2*cocks+4*rabbitsENDDO? "鸡的数量为: ",cocks? "兔的数量为: ",rabbits

Page 30: 第九章 程序设计基础

[ 例 9-10] 分别统计“学生情况表”中入学成绩大于 600 分的男女同学的人数。程序如下:*EX9-11.PRGSET TALK OFFCLEARSTORE 0 TO M,FUSE 学生情况表DO WHILE .NOT.EOF() DO CASE CASE ( 入学成绩 >600) .AND. 性别 =" 男 " M=M+1 CASE ( 入学成绩 >600) .AND. 性别 =" 女 " F=F+1 ENDCASE SKIPENDDO? " 男同学人数为: ",M? " 女同学人数为: ",FUSESET TALK ON

Page 31: 第九章 程序设计基础

2 、“指针”型循环控制语句 [ 格式 ] SCAN[〈范围〉][ FOR 〈条件表达式〉]

〈命令序列〉 ENDSCAN [ 功能 ] 该语句在指定的范围内,用数据记录

指针来控制循环次数。执行语句时,首先判断函数 EOF ()的值,若其值为“真”,则结束循环,否则,结合〈条件表达式〉,执行〈命令序列〉,记录指针移到指定的范围和条件内的下一条记录,重新判断函数 EOF ()的值,直到函数 EOF ()的值为真时结束循环。

Page 32: 第九章 程序设计基础

[例 9-11] 分别统计“学生情况表”中入学成绩大于600 分的男同学人数。

程序如下:*EX9-12.PRGSET TALK OFFCLEARUSE 学生情况表S=0SCAN FOR 入学成绩 >600 .AND. 性别 ="男 " S=S+1ENDSCAN? "男同学人数为: " , SUSESET TALK ON

Page 33: 第九章 程序设计基础

3 、“计数”型循环控制语句[ 格式 ] FOR 〈循环变量〉=〈循环变量初值〉 TO 〈循

环变量终值〉[ STEP 〈循环变量步长〉] 〈命令序列〉 ENDFOR [ 功能 ] 该语句用〈循环变量〉来控制〈命令序列〉

的执行次数。执行语句时,首先将〈循环变量初值〉赋给〈循环变量〉,然后判断〈循环变量〉是否大于或小于〈循环变量终值〉,若结果为“真”,则结束循环,执行 ENDFOR 后面的第一条命令;否则,执行〈命令序列〉,〈循环变量〉自动按〈循环变量步长〉增加或减少,再重新判断〈循环变量〉当前的值是否大于或小于〈循环变量终值〉,直到其结果为真。 当步长值为1时, STEP子句可以省略。

Page 34: 第九章 程序设计基础

[例 9-12] 求 1!+2!+3!+…+10! 的值。程序如下:*EX9-13.PRGSET TALK OFFCLEARS=0P=1FOR I=1 TO 10 P=P*I S=S+PENDFOR? “S=”,SSET TALK ONRETURN

Page 35: 第九章 程序设计基础

4 、使用循环语句时应注意的几点 ( 1 ) DO WHILE 和 ENDDO 、 FOR 和 ENDFOR 、

SCAN 和 ENDSCAN 必须配对使用。 ( 2 )〈命令序列〉可以是任何 Visual FoxPro 命令

或语句,也可以是循环语句,即可以为多重循环。 ( 3 )〈循环变量〉应是数值型的内存变量或数组元素。

( 4 ) EXIT 和 LOOP 命令嵌入在循环体内,可以改变循环次数,但是不能单独使用。 EXIT 的功能是跳出循环,转去执行 ENDDO 、 ENDFOR 、 ENDSCAN后面的第一条命令; LOOP 的功能是转回到循环的开始处,重新对“条件”进行判断,相当于执行了一次 ENDDO 、 ENDFOR 、 ENDSCAN 命令,它可以改变〈命令序列〉中部分命令的执行次数。 EXIT 、LOOP 可以出现在〈命令序列〉的任意位置,但一般包含有选择语句中使用。

Page 36: 第九章 程序设计基础

[例 9-13] 求 0~ 100 之间奇数之和。程序如下:*EX9-14.PRGSET TALK OFF CLEARX=0 Y=0 DO WHILE X<100 X=X+1 IF INT(X/2)=X/2 LOOP ELSE Y=Y+X ENDIF ENDDO ? "0~ 100 之间的奇数之和为: ", Y SET TALK ON

Page 37: 第九章 程序设计基础

[例 9-14] 计算 1+ 2+ 3+…+ 100 的和。程序如下:*EX9-15.PRGSET TALK OFFCLEARN= 1S= 0DO WHILE .T. IF N>100 EXIT ENDIFS=S+NN=N+1ENDDO? “0~ 100 之间的之和为:” ,S SET TALK ON

Page 38: 第九章 程序设计基础

9.3 多模块程序 9.3.1 子程序1 、无参数子程序的调用与返回对于两个具有调用关系的程序文件,通常称调用程序为

主程序,被调用程序为子程序。( 1 )调用子程序命令[ 格式 ] DO 〈子程序名〉[ 功能 ] 主程序执行时遇到 DO 命令,就转向执行以

〈子程序名〉为名的子程序。( 2 )返回主程序命令[ 格式 ] [RETURN][ 功能 ]子程序执行到 RETURN 语句(或缺省该语句),就会返回到主程序,执行调用命令的下一个语句。

Page 39: 第九章 程序设计基础

2 、参数子程序的调用( 1 )调用参数子程序命令[ 格式 ] DO 〈子程序名〉 [WITH  <实参表 >][ 功能 ] 调用子程序时参数表中的参数要传给子程

序,子程序中必须设置相应的参数接受语句。<实参表 > 中的参数可以是常量、变量和表达式,其值将成为子程序中对应 <形参表 > 的值。

( 2 )接受参数和回送参数值的命令[ 格式 ] PARAMETERS  <形参表 >[ 功能 ] 接受调用命令中的实参值,并在调用后返

回对应参数的计算值。

Page 40: 第九章 程序设计基础

3 、返回主程序语句主程序和子程序的概念是相对的。子程序还可以调用其他的子程序,即子程序的嵌套调用。

[ 格式 ] RETURN  [TO MASTER|TO <程序文件名 >]

[ 功能 ] 返回调用子程序的主程序。

Page 41: 第九章 程序设计基础

[ 例 9-15] 用带参数传递数据的方法编写计算 M!/(N!(M-N)! 的程序。程序如下:* 主程序 EX9-16.PRGSET TALK OFFCLEARZ=0INPUT “ 请输入 M 的值( M>N ) :” TO MINPUT “ 请输入 N 的值( N>0 ) :” TO NDO SUB1 WITH M && 调用子程序 SUB1 计算 M!C=ZDO SUB1 WITH NC=C/ZDO SUB1 WITH M-NC=C/Z? ‘C=’,CRETURN* 计算阶乘的子程序 SUB1.PRGPARAMETERS KZ=1FOR I=1 TO K Z=Z*IENDFORRETURN

Page 42: 第九章 程序设计基础

9.3.2 自定义函数 1 、自定义函数格式[ 格式 ] FUNCTION < 自定义函数名 >[PARAMETERS <形参表 >]<函数体 >RETURN <表达式 >   [ 功能 ] 定义一个用户自定义函数。2 、自定义函数的调用[ 格式 ] 函数名 ( [<实参表 >] )  [ 功能 ] 调用自定义函数。

Page 43: 第九章 程序设计基础

[例 9-16] 用函数编写求 1~10 的立方数。程序如下:* 程序 EX9-17.PRGCLEAR? " 原数 "," 立方数 "FOR i=1 TO 10 ? i,cube1(i)ENDFORRETURN* 计算立方函数FUNCTION cube1PARAMETERS vRETURN v*v*v

Page 44: 第九章 程序设计基础

9.3.3 过程 1 、过程的定义[ 格式 ] PROCEDURE < 过程名 >

[PARAMETERS <形参表 >]

< 过程体 >

RETURN [TO MASTER]

   [ 功能 ] 在过程文件中标识一个过程的开始。

Page 45: 第九章 程序设计基础

2 、过程文件过程文件也是扩展名为 .prg 的命令文件,所以其创

建方法与普通的命令文件相同。[ 格式 ]PROCEDURE < 过程名1 >< 过程体1 >RETURNPROCEDURE < 过程名2 >< 过程体2 >RETURN       ……PROCEDURE < 过程名 n>< 过程体 n>RETURN

Page 46: 第九章 程序设计基础

3 、过程文件的打开在程序中若想调用过程文件中的过程时,首先必须用下列命令打开过程文件。

[ 格式 ] SET PROCEDURE TO < 过程文件名 1>[,< 过程文件名 2>,…][ADDITIVE]

   [ 功能 ] 打开过程文件。

Page 47: 第九章 程序设计基础

4、过程调用[ 格式 ] DO < 过程名 > [WITH<实参表 >]   [ 功能 ] 调用由〈过程名〉指定的过程。5、过程文件的关闭  主程序调用过程文件结束后,过程文件不

会自动关闭,任何时候都可以再次调用。若要关闭过程文件必须用以下命令。

[ 格式1 ] SET PROCEDURE TO[ 格式2 ] CLOSE PROCEDURE[ 功能 ] 关闭所有打开的过程文件。

Page 48: 第九章 程序设计基础

[ 例 9-17] 用主程序调用过程的方法编写求圆面积和球体积的程序。程序如下:* 主程序 EX9-18.PRGCLEARMJ=0TJ=0INPUT “ 请输入半径 :” TO RSET PROCEDURE TO PROFILEDO YMJ WITH MJ,RDO QTJ WITH TJ,R? “ 半径为” +STR(R,2)+ “ 的圆面积=” ,MJ? “ 半径为” +STR(R,2)+ “ 的球体积=” ,TJCLOSE PROCEDURERETURN* 过程文件 PROFILE.PRGPROCEDURE YMJPARAMETERS S,RS=PI()*R*RRETURNPROCEDURE QTJPARAMETERS S,RS=4/3*PI()*R^3RETURN

Page 49: 第九章 程序设计基础

[ 例 9-18] 用主程序调用过程的方法编写求 s=1!+2!+3!+4!+5! 的程序。程序如下:* 主程序 EX9-19PRGCLEARSET TALK OFFs=0FOR m=1 TO 5 t=1 DO fac WITH m,t s=s+tENDFOR? “s=”,sRETURNPROCEDURE fac(m,y)FOR k=1 TO m y=y*kENDFORRETURN

Page 50: 第九章 程序设计基础

9.3.4 变量的作用域1 、全局变量在任何程序或过程中都可以使用的变量叫全局变量。[ 格式 ] PUBLIC <内存变量表 >

   [ 功能 ] 定义 <内存变量表 > 中的各内存变量为全局变量。

2 、私有变量程序中未加任何说明而直接定义使用的内存变量都是私

有变量。[ 格式 ] PRIVATE <内存变量表 >

   [ 功能 ] 将 <内存变量表 > 中的各变量定义为私有变量。

Page 51: 第九章 程序设计基础

[例 9-19] 私有变量使用示例。程序如下:* 主程序 EX9-20.PRGCLEARA=100DO EX9-21? " 在主程序中的 A",ARETURN*子程序 EX9-21.PRGPRIVATE AA=200? " 在子程序中的 A",ARETURN

Page 52: 第九章 程序设计基础

3、局部变量  局部变量的作用范围限于本地,即只能在定义它的模

块中使用,该模块运行结束时自动释放,既不能在它的上层模块使用,也不能在它的下层模块中使用,因此也称之为本地变量。

[ 格式 ] LOCAL <内存变量表 >    [ 功能 ] 将指定 <内存变量表 > 中的各内存变量为局部

变量。[说明 ]① 所定义的局部变量的初值自动赋以逻辑值 .F. 。② 由于 LOCAL 与 LOCATE 前4个字母相同,故不可缩写。

Page 53: 第九章 程序设计基础

[ 例 9-20] 全局、局部、私有变量参数传递示例。程序如下:* 主程序 EX9-22.PRGCLEARA=1B=2C=3D=4? ‘ 主程序中的 A 、 B 、 C 、 D 的值为:’?? A,B,C,DDO EX9-23? ‘ 调用子程序后的 A 、 B 、 C 、 D 、 E 的值为:’?? A,B,C,D,ERETURN* 子程序 EX9-23.PRGPRIVATE ALOCAL BPUBLIC EA=4B=5C=6E=7? ‘ 子程序中的 A 、 B 、 C 、 D 、 E 的值为:’?? A,B,C,D,ERETURN

Page 54: 第九章 程序设计基础

9.3.5 程序的调试 1 、程序中常见的错误2 、调试器环境3、设置断点4、调试菜单

Page 55: 第九章 程序设计基础

作业第 184页 一、选择题二、填空题