第 6章:结构化程序设计
1 程序设计常用命令
2
3
4
5
顺序结构分支结构循环结构过程与过程文件结构化程序设计
输入命令 命令窗口?人机交互的工作方式
建立程序文件?程序执行方式
编程思想 面向过程 (结构化程序设计 )
面向对象
1赋初始值,或打开文件等
程序的组成,2数据输入
3数据处理
4数据输出程序文件的建立
1文件?新建?程序
在建立程序文件之前,一定要检查默认目录的设置,目录在哪里,程序文件就保存到哪里 。
2项目管理器?代码?程序
3命令方式,modify command <程序文件名 >
(新建和修改程序文件都是相同的命令,如果文件名不存在,新建文件;否则,打开已经存在的程序文件 )
程序文件的保存,执行
直接关闭程序文件,自动保存
或按 Ctrl+W键
程序文件的执行
和交互方式不同,一行书写完回车之后,命令不会执行 。 必须等整个程序文件建好,按工具栏上面的 ! 执行程序 。
命令,Do <程序文件名 > [with <参数表 >]
子句 [with <参数表 >]用在子程序或过程调用中第 6.1节
1
程序设计常用命令掌握常见的赋值语句:
直接赋值,x=9
store命令,store 9 to x,y
键盘赋值命令,input,accept和 wait
Input可以接受各种类型的输入,但要加相应的定界符 。
Accept只可以接受 字符型 数据的输入,不需要输入定界符 。
Wait 只能接受单字符的输入 。
input 和 accept的区别:
– Input?please input an integer:? to x
– &&若输入 9,则 x是数值型 。
– Input?please input u name:? to y &&?mary?
– Accept?please input u name:? to z &&mary
– Accept?please input an integer:? to x
– &&若输入 9,则 x是字符型 。
– Input?please input a date:? to m
– Input?please input a logical value:? to n
小经验
在程序中,如果我们将变量当作字符来处理,用 accept最方便;
若要用 input接受字符输入,一定要在运行的时候输入引号 。
类比,find和 seek (P89);
键盘赋值命令,wait
wait?按任意键继续 ’
wait?按任意键继续 ’ windows
Wait?按任意键继续 ’ timeout 6 &&6秒超时
wait?继续吗? (y/n)? to x?C型
带下划线的子句可以自由搭配 。
注意:在等待键盘输入的过程中,系统不能响应其他的操作 (不是死机 );若要终止键盘输入,
按 ‘ Esc?键 (键盘左上角第一个键 )。
程序设计常用命令
2 建立和修改程序的命令,
modify command <program name>
3 运行程序命令,do <program name>
4 注释语句的写法,* &&
注释语句不执行,增强程序的可读性 。
文本显示命令
5 文本显示命令,
text
<text>
endtext
将 text和 endtext之间的内容原样输出 。 注意,text和 endtext各占一行,其中 endtext
不能有空格 。
环境设置命令
Set talk on/off?有数据处理时,影响输出格式 。
例如:新建程序 test?在命令窗口输入 modi
comm test
在 test中输入以下命令:
Use 图书 &&默认设置是 set talk on
Sum 单价 to 总价
‘ 总价 =’,总价 &&观察输出结果
在程序开始处加上 set talk off,观察输出结果设置默认路径
Set default to <路径 >
设置默认路径,当次有效,在 VFP关闭后自动失效。
清除命令
Clear?清屏,使输出更整齐漂亮
Clear all?关闭文件,释放内存变量
例如,x=5
x
Clear all
x &&找不到变量 x。
程序的结构
顺序结构
选择 (分支 )结构
循环结构 (P156)
顺序结构,按程序中语句的书写顺序 逐条执行 。
程序文件扩展名 (.prg)
必须一条命令语句占一行
一行写不下时,在行尾加续行符( ;),换行后接着书写该命令语句。
程序执行过程
整体上都是顺序执行,从第一条语句开始,直到最后一条语句完毕。
当遇到分支或循环时候,会改变执行路线,跳过部分语句行。
顺序结构?流水账 。
例如:“我的一天”?流程图运行中断和结束语句
Cancel,结束程序的运行,关闭所有打开的文件,返回命令窗口。
Quit,退出 VFP系统,回到操作系统环境
Exit,只能在循环语句中使用:用于退出 本次循环 。 使用 Exit命令从循环中退出 。
程序的返回
Return,结束当前程序的执行,返回到上一级程序 (对于子程序调用而 不是嵌套程序 )。 若无程序调用,则返回命令窗口 。
Return to master,返回到最高一级的主程序 。
格式输入输出命令
(1) @ <行号,列号 > say <表达式 >
功能:在主窗口指定的位置处显示表达式的值
(2) @ <行号,列号 > say <表达式 > get <变量 >
(3) @ <行号,列号 > say <表达式 > get <变量 >
Read
功能:在窗口指定位置处分别显示表达式和变量的值。若使用 Read语句,则可以对变量进行修改,按回车键结束修改。
第 6.2节
2
顺序结构理解
1计算两个数的和,差
X=5
Y=12
x+y,x-y &&数据处理 &输出
问:将 input改为 accept会怎样?
Accept,不管键盘输入什么,都当作字符处理 。
用 accept输入,修改原程序使之正确。
任意的 两个数呢?
赋值改为键盘 输入 语句:
Input,请输入 x:,to x
Input,请输入 y:,to y
2查找“夏天”同学的信息
流程图,( 假设路径已经设好 )
①打开学生表
② 查找
③ 显示
④关闭表类比 到 A205拿一支笔① 打开门
② 找到放笔的地方
③ 拿笔
④ 关门转换成程序
Use 学生
Locate for 姓名 =’ 夏天 ’
Display
Use
若要查找任意同学的信息,怎么改?
加上键盘输入命令,accept或 input
Accept默认接受字符,不用加引号,但是 input
在接受输入的时候,一定要加英文引号。
完整程序如下
Accept,请输入姓名:,to xm
Use 学生
Locate for 姓名 =xm
Display && *
use
若输入的姓名不存在呢? display则没有显示 。
*可修改为:
Iif(found(),?&xm的信息如下,’,’ 查无此人 ! ’ )
采用了分支函数,最好改为分支程序。
重难点:数据处理
前面例题的数据处理都很简单,下面专门讲数据处理。
例 3:
输入一个 3位数的整数,要求求出它的各位数值之和 。
如:
输入,123,输出,1+2+3=6
input,256,output,2+5+6=13
分析
首先:从 x中分离出各位数。
思路 1:当数值输入,分别取出百位数,十位数和个位数。
思路 2:当字符输入,取出第一,第二,第三位,再分别转换成数值型相加。
其次:求各位数之和 h。
数据处理完毕,加上输入输出语句。
分离各位:数学处理方法
取百位数,?x1
取十位数,?x2
取个位数,?x3
开阔思路,还可以怎么计算?
X1=int(x/100)
X2=int((x-x1*100)/10)
X3=x-x1*100-x2*10
分离各位:字符串方法
若 x是字符,取各位数用什么方法?
取左边一个字符,?x1
取中间一个字符,?x2
取右边一个字符,?x3
X1=left(x,1)
X2=subs(x,2,1)
X3=right(x,1)
求各位之和
对于 (1)?h=x1+x2+x3
对于 (2)?h=x1+x2+x3得到什么结果?
由于 x1,x2,x3是字符,故字符串连接,又还原为原来的值 。
对于 (2)的正确处理方法:进行数据类型转换 (方法? )
整合
数据处理完毕,加上输入输出语句 。
输入:
对于 (1)?input,请输入 x:,to x
对于 (2)?accept,请输入 x:,to x
输出,? H
例 4:
输入 A,B,将 AB的值互换 。
例如:若 A=3,B=5
则? A,B的结果显示 5,3
通过给变量赋值,达到数据交换的目的。
程序如下
Input?a=? to a
Input?b=? to b
c=a
a=b
b=c
a,b
思考题:
帮银行设计一个取款程序:输入取款金额,计算应输出 100,50,20,10,5,2,
1元的人民币各多少张,要求张数最少。
首先计算一百的张数,不够一百再计算
50的张数,以此类推。
第 6.3节
3
分支结构理解分支结构情景设计
怎么回家?
正常情况:买火车票
如果买不到怎么办?
I)足够有钱:飞机
II)汽车
算法一:分三种情况,多分支。
算法二:嵌套,分两种情况,双分支。
分支结构(选择结构)
根据逻辑条件的结果执行不同的命令序列 。
( 1) 单分支结构,IF...ENDIF
( 2) 双分支结构,IF...ELSE...ENDIF
( 3) 多分支结构,DOCASE...ENDCASE
*分支结构语句要一一对应,互相匹配
Case:只执行最先满足的 case条件所对应的语句
else要单独占一行单分支
格式,IF <条件表达式 >
<命令语句序列 >
Endif
例 6.2:如果找到记录则显示,否则不做任何操作。
双分支
格式,IF <条件表达式 >
<命令语句序列 1>
Else
<命令语句序列 2>
Endif
修改上例:否则显示“查无此人!”。
>>>
注意事项
if~endif语句要一一对应 (像左右括号一样成对 )。 注意条理清晰 。
嵌套要完全 >>> 不能交叉 >>>
else语句或 endif语句都需要单独占一行。
设计彩票游戏
假设一张彩票有 2个号码,在 0~9之间由系统随机产生 。 买家可以自选 2个号码,当场开奖 。
如果两位数字和顺序都正确,则显示,恭喜您中奖了 !,字样,否则显示,多谢惠顾,。
提示:随机函数 rand()的作用是产生一个 0~1之间的随机数。
彩票游戏参考程序
Input?请输入第一个号码:’ to x1
Input?请输入第二个号码,? to y1
x=int(10*rand())
y=int(10*rand())
If x1=x and y1=y
恭喜您中奖了!?
Else
多谢惠顾?
endif
例 2:
从键盘输入任意两个数,求最大值 。
1 用双分支语句 if…,.else…,,endif 实现
2用单分支语句 if….,endif 实现
3用函数实现输入与输出
输入,input?a=? to a
Input?b=? to b
若用变量 m表示最大值,则
输出,? ‘ 最大值是,’,m
数据处理部分
法一:双分支
If a>=b
M=a
Else
M=b
Endif
数据处理部分
法二:单分支
M=a
If m<b
M=b
Endif
法三:函数
M=max(a,b)
课堂作业 1
计算银行存款本息并输出 。
要求存款金额,存期由键盘赋值 。
先写出框架,再根据存期的不同,用不同的年利率计算 。 先写出分段函数,再用程序实现课堂作业 2
用分支程序计算个人所得税:
要求:先写出分段函数,再用程序实现
个税起征点,税率;高于 ~,税率 ……
输入:工资;输出:所得税。
多分支结构
嵌套 >>>可改写为多分支结构:
格式,Do case
Case <条件表达式 1>
<命令序列 1>
Case<条件表达式 2>
<命令序列 2>
……
[otherwise] &&否则 (可缺省 )。
<命令序列 >
Endcase
多分支注意事项
>>>若一个条件同时满足多条 case语句 的 <条件表达式 >,
只执行最先满足的 case语句 。
>>>若一个条件不满足所有 case语句 的 <条件表达式 >,
则执行 otherwise后面的语句 。 若此时没有 otherwise语句,
则不做任何操作 。
>>>Do Case(有空格 )与 endcase(没有空格 )必须成对出现,
且都单独占一行 。
嵌套:自我嵌套或嵌套 if语句,注意嵌套不能交叉。
判断输入成绩的等级
规则 >>>[0~59]不及格; [60~84]中等;
[85~100]优秀;其他?输入错误,成绩应该在 [0~100]之间 !
用 Do case多分支语句:
*输入部分,Input?成绩 =’ to cj
*输出部分,? cj,?分,’ +dj
用变量 dj表示等级数据处理部分
Do case
Case cj<0 or cj>100
Dj=?输入错误’
Case cj<60
Dj=?不及格 ’
Case cj<85
Dj=?中等 ’
otherwise
Dj=?优秀 ’
Endcase
修改与完善
*当输入出错时提示,并直接退出程序 。 用 if语句和 messagebox函数完成 。
去掉第一种情况,在多分支之前加上如下语句:
If cj<0 or cj>100
messagebox(?输入错误 ! ’ +chr(13)+?按任意键退出 。 ’,16,’ 警告 ’ )
Cancel &&或 return
endif
填空:按职工号查询工资
use employee
accept?请输入职工号,’ to num
locate for 职工号 =num
if ______________
display 姓名,工资
else
职工号输入错误 ! ’
__________
use
填空:按准考证查询成绩
*按准考证号已建立好索引,索引标签为 zkzh
use student
accept?请输入准考证号,’ to x
_______________
find _______ &&准考证号 (C)
if found()
姓名 +’ 的成绩是,’ +str(成绩,5,1)
_________
‘ 无此考生 ! ’
endif
use
填空:追加,删除记录
accept?请输入数据表的名称,’ to n
use _____
1 追加记录 2 删除记录 ’
wait?choice(1~2),?to m
if ______
append
else
input?请输入要删除的记录号,’ to n
________
delete
pack
________
use
第 6.4节
4
循环结构难点循环结构:
按规定的条件重复执行一段命令序列
重点:
确定循环的两端?开始与结束
有限次 重复 (反之,死循环,无法正常结束 )
循环结构注意事项
1) 要有使循环结束的语句 (循环结束条件 )
2) 每执行一次循环,要有使循环变量改变的语句
3) 循环变量要朝着使循环结束的方向变化
4) 如果出现死循环,运行程序不能终止时,按
ESC键?取消程序的执行,强行退出。
循环结构
有如下三种循环结构。
当型循环:
Do while …… enddo
步长型循环:
For ………… Endfor 或者 For ………… Next
表扫描循环:
scan……endscan
循环开始语句:
当 …… 时候判断 〈 条件 〉 (Y/N)
循环体循环结束语句
N
Y
循环流程图
1 Do while~enddo?当 …… 的时候,循环
use 学生
locate for 学号 =’ 00’
do while !eof()
display
continue
enddo
use
查找所有 00级的学生
当学号为 00
开头的时候循环 。
累加求和
计算 1+2+…… +100
分析 >>>输入已知?用什么来表示输入呢?
用变量表示:输入?需要多少个变量? 100个?
输出?只有一个输出,用变量 s表示 。
数据处理:加法,从 1加到 100(变量 j表示 )
累加过程分析
当 加数在 1到 100之间 的时候,执行循环 (加法 )。
>>>循环的两端?j=1~j=100
>>>确定循环变量?可控制,和循环次数有关 。
如果一个数都没加,s=?
此时的 s已经是上一次改变后的 s,即 s=s+1。
第一次加法 j=1,s=s+1; 第二次加法 j=2,s=s+2;
第三次加法 j=3,s=s+3……?s=s+j
此时的 s已经是上一次改变后的 s,即 s=s+1。
程序代码如下,(未包含输出 )
*首先,给变量 s,j赋初值
S=0
j=1
do while j<=100
s=s+j
j=j+1 &&循环变量朝着循环
Enddo 结束的方向变化
S=0
J=100
Do while j>=1
S=s+j
J=j-1
enddo
思考
如果没有 j=j+1(或 j=j-1)会怎么样? 能不能反过来写,即左边程序用 j=j-1,右边用
j=j+1?
小结:初始值不是固定的,可自由选择,
但是必须能满足题目要求。
例 2:计算 1*2*3*…… *20
例 3:计算使 1+2+3+…… +n<1000的最大的 n值 。
n未知,不可控制循环次数?能不能作为循环变量?
加数和 s的范围已知?s<1000
Do while,T,~enddo
无条件循环
Do while,T,~enddo(永真循环 )
重点:需要有正确终止循环的语句 exit。
循环中的 Loop/exit命令
回到循环结束处,回到循环开始处
If <条件 > if <条件 >
Exit loop
Endif endif
Loop/exit适合任何循环语句 do while/for/scan:
只能在循环语句中使用 。
exit用于退出 本次 循环 / Loop返回到 本次 循环开始处 。 使用 Exit命令从循环中退出,或者使用
Loop命令来跳过循环中的后续处理 。
Exit也可以用到有条件循环中,这时候表示有两重条件:
在 do while 大条件下循环 (不满足 do while
条件时退出 )
同时,当满足 if条件时退出 (exit),跳过
endif和 enddo之间的语句,继续执行本重循环 (最近的一个 enddo)后面的语句 。
计算使 1+2+3+……+ n<1000的最大的 n值
S=0
N=1
Do while,T.
S=s+n
If s>=1000
Exit
Endif
N=n+1 &&放到 if之前会怎样?
Enddo
n
例题 6.8
程序功能:可以供用户反复输入学生姓名进行查询,
直到用户不再查询为止 。
询问用户是否继续查找?是 Y(或不是 N)。
可用单字符输入命令 wait。 用一个变量存储用户输入 。
当 if条件成立时,loop到 do while开始的地方,即跳过
endif和 enddo之间的语句。
阅读并理解书上的 程序。理解 loop命令。
思考
思考:能否把 accept和 locate 命令放到 do
while之前?
是不是所有语句都是必须的? 如果不是,
去掉程序中多余的命令行 。
给 cName赋初值与不赋初值的区别。
当 if条件成立时,loop到 do while开始的地方,即跳过 endif和 enddo之间的语句 。
小结
不管是 do while<条件 >,loop,exit,都需要能够正确的终止循环,即 有限次 重复 。
注意,loop(或 exit)可以包含在分支结构中,但必须放到 循环的大框架里,表示回到循环的开始处 (或退出到循环结束语句的 下一条 语句 )。
如果没有循环语句,则不能使用这两种命令。
For循环语句 (1)
和 Do while不同,for循环不需要在循环体中改变循环变量的值,他可以直接在 for结构中完成。
步长,默认 =1。 Step可调节步长:每次循环变量增加多少。
格式,
For x=n1 to n2 step n3
…<语句序列 >…
Endfor (或者 Next)
For循环语句 (2)
例 1,For I=1 To 100 Step 2
I
next
*输出 2,4,6,8……100
例 3,For I=100 to 1 step –5
I
endfor
*输出 100,95,90……5
例 2,For I=1 to 100
I
endfor
*输出 1,2,3……100
求和 1+2+3+……100
For循环实现:
S=0
For j=1 to 100 step 1
* step 1可省,默认 。
*表示 j从 1直到 100,每循环一次加 1。
S=s+j
Endfor
s
Scan ….,endscan
Scan~endscan表扫描循环
Scan [范围 ][for<条件 >]?循环开始
<命令序列 >
Endscan?循环结束
特点,只能够用在扫描表的循环中 。
每循环一次,自动的执行 skip操作 。
读程序写结果 1
store 0 to x,y
use 图书
scan
if 单价 >20 and ;
单价 <25
loop
endif
if 单价 <=20
x=x+1
endif
y=y+1
endscan
x,y
use
*x,y的功能是 ___
多重循环结构
多重循环结构?循环的嵌套 。
嵌套必须完全,不允许交叉 。
即内层循环必须完全嵌入到外层循环之内。如:
正确的嵌套
Do while<条件 >
For i=n to m
<语句 >
Endfor
<语句 >
Enddo
错误的嵌套方法 (交叉 )
Do while <>
……
For……
……
Enddo
……
endfor
For……
……
scan……
……
Endfor
……
endscan
如果需要嵌套,写法上注意 内层缩进,
增强程序的 可读性 。
函数 Replicate(s,n)
Replicate(字符串表达式 s,数值 N),在当前光标处显示连续 N个指定的字符串表达式 s。
例,? Repl('(^_^) ',10)
*在屏幕上输出 10个笑脸图案 。
编程举例 1:
在屏幕上显示 如下 倒三角形图案 。
*******
*****
***
*
For I=1 to 4
Space(I-1);
+repl(?*?,9-2*I)
endfor
输出规则图形
*
***
*****
*******
分析:输出图形一共有多少行,多少列?
如果用 i表示行,那么对于每一行,应该分别输出什么图形,即分别有多少个空格和 *号?
行数,1,2,3,4?i=1 to 4
输出,1,3,5,7个 *号?将每一行输出的 *个数用 I表示
,…… 还需要用一个变量来控制列数 j。
程序
for I=1 to 4 &&输出行数
for j=1 to 2*I-1 &&对于每一行,应输出 j个 *号
‘ *’ &&*是常量,加引号
endfor &&第二重循环结束
&&一行输出结束后换行
endfor &&第一重循环结束输出规则图形
*
***
*****
*******
行数 1 2 3 4
输出空格个数 6 4 2 0
输出 *个数 1(第 7个 ) 3(5) 5(3) 7(1)
程序
由于确定的空格数可以用 space()函数连续输出,
则输出 8-2*I个空格可以简写为space(8-2*i)
for I=1 to 4
space(8-2*i)
for j=1 to 2*I-1
*?
endfor

endfor
连续输出字符串可用函数实现:
格式 replicate(?字符串 ’,个数 )。
可以进一步简化为:
for I=1 to 4
space(8-2*i)+repli(?*?,2*I-1)
endfor
思考题
输出如下组合图形,
*
***
*****
*******
*****
***
*
*******
*****
***
*
***
*****
*******
九九乘法表,
1)九九乘法表
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
……
行数,9?i=1 to 9
每一行的表达式个数,j
分析
用 I表示行,j表示每一行的某一个表达式
I=1?j=1
I=2?j=1,2
I=3?j=1,2,3……
对于每一行,j=1 to i(内层循环 )
分析
对于每一个表达式,输出:
例如:第三行 (i=3)第二个 (j=2)表达式:
2*3=6
写成通项式:显示 ’ j*i=?,再显示结果。
分析
‘ j*i=?,j*I?会显示 j*i=6,不对 。
>>>? Str(j,1)+?*?+str(I,1)+?=?+str(j*I,2)
两个表达式之间要用空格隔开,否则就连在一起了 。
>>>再加上一个空格?+’ ’ 或 +space(1)
表达式通项为:
Str(j,1)+?*?+str(I,1)+?=?+str(j*I,2) +
内层循环
内层循环如下:
For j=1 to i
Str(j,1)+?*?+str(I,1)+?=?+str(j*I,2)+
Endfor
可以调试,在前面加上一句 i=1,看输出 。
修改 i=2,看输出 …… 直到 i=9。
外层循环
一行输出完毕,需要换行,加?换行 。
外层循环如下:
For i=1 to 9
内层循环

Endfor
将内外层加在一起,验证 。
其中两层均可以换成 do while循环来做。
编程举例:
从键盘输入一串任意的字符串,要求能分别统计字符串中英文字母,数字,空格和其他字符的个数 。
e.g.
input,abc123SDF Vfp6.0 程序设计 _*%¥ !
Output,字母,数字,空格,其他:
9 5 3 14
参考程序
Accept?请输入字符串,’ ;
to s
Store 0 to zm,sz,kg,qt
For I=1 to len(s)
C=substr(s,I,1)
Do case
case lower(c)>=?a?;
and lower(c)<=?z?
zm=zm+1
case c>=?0? and c<=?9?
sz=sz+1
case c=
kg=kg+1
otherwise
qt=qt+1
Endcase
Endfor
‘ 字母,数字,空格,其他’
zm,sz,kg,qt
读程序写结果 2
clear
m=1
do while m<5
n=1
m
do while n<=m
t=n+m
t
n=n+1
enddo

m=m+1
Enddo
*执行后的结果是 ___
循环语句常见错误 1
Accept?是否要执行循环语句 (y/n)to x
Do while upper(x)=?y?
<语句序列 >
Enddo
for I=1 to 5 &&在屏幕上显示 1~5
I
I=I+1
endfor
循环语句常见错误 2:
H=0
Do while h<>0
<语句序列 >
enddo
Use student
Do while eof()
<语句序列 >
enddo
第 6.5节
5
过程与过程文件理解过程与过程文件
过程 (子程序 )是一个相对独立的程序段,可以被其他程序调用 。 调用子程序的程序称为主程序 。
过程文件的建立:
命令,MODIFY COMMAND 过程文件名
基本结构:
PROCEDURE 过程名
<命令序列 >
[RETURN [TO MASTER]]
ENDPROC
过程文件的打开与关闭
打开:
SET PROCEDURE TO 过程文件名
与程序不同,一个过程文件里面可以存放多个过程。
关闭:
SET PROCEDURE TO
CLOSE PROCEDURE
一个过程中至少要有一条 RETURN返回语句 。
过程调用
若过程放在程序中,
DO 过程名 &&(在上级程序中设置 )
若过程放在过程文件里,则要先打开再调用:
例:过程文件名为 guocheng,要调用此文件中的过程 1:
set proc to guocheng
do 过程 1
定义带参数的过程
将不同的参数分别传递给同一过程,执行同一功能的操作后返回不同的结果,可以大大提高程序模块的灵活性。
PROCEDURE 过程名
PARAMETERS 参数表 &&形式参数
<命令序列 >
RETURN
ENDPROC
调用带参数的过程
命令,DO 过程名 WITH 参数表
&&实际参数
调用时是用实参来代替子程序中的形参
带参数的过程调用有返回值 ---将形参的值返回给实参 (变量 )。
自定义函数
1,定义函数
FUNC f(x1,x2… )
或 func f
Para x1,x2……
<命令序列 >
[RETURN <>]
ENDFUNC
2,调用函数
格式,f(x)
自定义函数的建立和使用方法与过程相同 。
函数:
完成某种特定操作
返回一个值 。
变量的作用域
1.全局变量,使用 PUBLIC关键字定义的变量(也称公共变量),可以是全局内存变量或数组。
格式,PUBLIC 内存变量表 |数组
2,局部变量,使用 LOCAL 关键字定义的变量 。
格式,LOCAL内存变量表 |数组
3,私有变量:
格式,PRIVATE 内存变量表
或直接赋值 (如 x=9)的变量 。
变量的作用域小结
全局变量在所有子程序中有效 。
局部变量只在定义它的模块内有效 。
私有变量在定义它的程序以及该程序的子程序中有效 。