Visual FoxPro 6.0 应用基础与面向对象程序设计教程 (下篇)
description
Transcript of Visual FoxPro 6.0 应用基础与面向对象程序设计教程 (下篇)
Visual FoxPro 6.0 应用基础与面向对象程序应用基础与面向对象程序设计教程 (下篇)设计教程 (下篇)
第十章 程序设计基础
P P 179179
程序就是将预先编好的若干条命令若干条命令,
存放在一个文件中存放在一个文件中,然后调用执行。然后调用执行。
例如: 求园面积 例如: 求园面积 . prg. prg
10.1 Visual FoxPro10.1 Visual FoxPro 的工作方式的工作方式
Visual FoxPro 系统提供有三种工作方式:
11 、命令方式、命令方式
22 、菜单方式、菜单方式
33 、程序文件方式、程序文件方式
P17P1799
1. 1. 命令方式命令方式
在命令窗口中命令窗口中,输入一条命令,按回车,输入一条命令,按回车,
完成一个操作的工作方式。完成一个操作的工作方式。
P P 179179
例如: 在命令窗口输入例如: 在命令窗口输入
CLRAE
R = 10
S = 3.14159 * R^2
? “ 园面积 = ” , S
菜单方式——通过打开不同的菜单,完成不同的操作。
通过菜单对数据库资源进行操作管理和对系统环境通过菜单对数据库资源进行操作管理和对系统环境
进行设置;并通过菜单建立命令文件及运行命令文件。进行设置;并通过菜单建立命令文件及运行命令文件。
2.2. 菜单方式菜单方式 P P 179179
程序文件方式是:
将相关多条命令输入在一个文件中( 扩展名为 扩展名为
. . PRGPRG ),然后再运行该文件。
程序文件程序文件也叫做也叫做命令文件命令文件。
3. 3. 程序文件方式程序文件方式P P 180180
1 、先建立程序: MODIFY COMMAND 求园面积求园面积 . Prg. Prg
CLRAE
R = 10
S = 3.14159 * R^2
? “ 园面积 = ” , S
2 、然后运行程序:
DO 求园面积求园面积 . prg. prg
程序文件方式程序文件方式
10.2 10.2 程序文件的建立与编辑程序文件的建立与编辑
1. 1. 命令方式 命令方式 建立
在命令窗口命令窗口中输入:
MODIFY COMMAND 〈程序文件名〉
P P 181181
例例 11 :: 建立求园面积的程序1 、在命令窗口命令窗口中输入: MODIFY COMMAND MODIFY COMMAND 求园面积 求园面积 . prg. prg
2 、在编辑窗口编辑窗口中输入:
CLRAE
R = 10
S = 3.14159 * R^2
? “ 园面积 = ” , S
3 、关闭编辑窗口编辑窗口——即保存 .
程序编辑窗口与命令窗口不同之处:
11 、 程序编辑窗口与命令窗口不同的是,输、 程序编辑窗口与命令窗口不同的是,输
入完一条命令按回车键后,不直接执行该命令。入完一条命令按回车键后,不直接执行该命令。
22 、输入完所有命令并将命令序列保存为一、输入完所有命令并将命令序列保存为一
个程序文件后,执行该程序文件时才被执行。个程序文件后,执行该程序文件时才被执行。
注意: 程序文件的保存注意: 程序文件的保存
程序输入完毕后,则必须保存文件:程序输入完毕后,则必须保存文件:
方法一: 按程序编辑框上的 关闭按钮 : “ × × ” ,
然后按提示操作。
方法二:在 “ 文件 ” 菜单中 , 选定 “ 保存 ” 。
程序文件保存时,其扩展名为 程序文件保存时,其扩展名为 . PRG. PRG
如上述生成的程序文件为如上述生成的程序文件为
求园面积求园面积 . . PRGPRG
主文件名 扩展名
《演示实验》
程序文件的建立
上一页下一页退 出
要 点
开始实验单击右面按钮开始演示实验
目 录
程序与交互操作相比,具有程序与交互操作相比,具有 44 个特点个特点:
程序可被修改并重新运行;
程序可从菜单、表单和工具栏下启动;
一个程序可调用其它程序;
程序文件一旦编成,则可以多次运行。
程序文件的修改程序文件的修改
要重新调出 编辑 编辑 已有的程序文件
可在命令窗口命令窗口中输入:
MODI COMM 〈程序文件名〉例: MODIFY COMMAND MODIFY COMMAND 求园面积 求园面积 . . prgprg
同样会在编辑窗口编辑窗口中显示出来:
CLRAE
R = 10
S = 3.14159 * R^2
? “ 园面积 = ” , S
( 这时可以进行修改 )
2.2. 菜单方式 菜单方式 建立 (略)
打开“文件”菜单,选择“新建”;在“新
建”窗口,选择“程序程序”,再选择“新建文
件”;在“程序文件”编辑窗口,输入程序文件,
并保存。
3.3. 利用设计工具设计工具建立 (略)
10.310.3 程序文件的调用程序文件的调用
调用程序文件,即运行程序文件。
1.1. 命令方式命令方式 在命令窗口输入:
DO DO 〈程序文件名〉〈程序文件名〉
例如: 例如: DO DO 求园面积 求园面积 . prg. prg
以菜单方式调用程序文件,操作方法如下:
(1 )在系统主菜单下,打开 “程序” 菜单,选择 “运行”。
( 2 )在“运行”窗口,输入被调用的程序文件名即可。
10.3.2 10.3.2 菜单方式调用菜单方式调用
《演示实验》
程序文件的调用
上一页下一页退 出
要 点
开始实验单击右面按钮开始演示实验
目 录
10.410.4 程序的基本结构程序的基本结构
VFP 程序有两种控制模式:
一、程序控制流模式,由顺序、分支、循环三种
基本结构构成。
二、面向对象可视化的结构程序模块。
10.410.4 程序的基本结构程序的基本结构
一、常见的程序控制结构如下:
11 .顺序结构.顺序结构
22 .分支结构.分支结构
33 .循环结构.循环结构
44 .过程结构.过程结构
11 .顺序结构.顺序结构
顺序结构是在程序执行时,根据程序中语句的书写顺序依次执行的命令序列。
VFP 系统的大多数命令都可以作为顺序结构中的语句。
顺序结构示意图顺序结构示意图
要 点 第 1 条命令
第 2 条命令
第 3 条命令
·············
22 .分支结构.分支结构
分支结构是在程序执行时,根据不同的条件,
选择执行不同的程序语句。
用来解决有选择、有转移的诸多问题。
双向分支结构双向分支结构 要 点
满足条件吗?
方案一 方案二
下一步操作
循环结构是能够使某些语句或程序段重复执行
若干次。
如果某些语句或程序段需要在一个固定的位置
上重复操作,使用循环是最好的选择。
33 .循环结构.循环结构
要 点
循环结构示意图循环结构示意图
循环条件
命令语序
.F.
.T.
在程序中,有某一程序段需要反复执行多次,但又不便用循环来组织,可将其与原程序分开,形成独立的程序序列(子程序),待使用时再调入程序运行,以实现不同位置上的重复操作。
子程序 ——被其它程序调用的程序称为子程序——被其它程序调用的程序称为子程序(又称过程)。(又称过程)。
主程序 ——调用子程序的称为主程序。——调用子程序的称为主程序。
44 .过程结构.过程结构
10.510.5 常用的交互输入语句常用的交互输入语句
11 .. Input Input 语句语句
格式 : INPUT INPUT [<[< 提示符提示符 >]>] TO TO << 内存变量表内存变量表 >>
功能 : 暂停程序执行,等待用户从键盘输入数据,
赋给内存变量表中的变量。
输入的数据可以是输入的数据可以是 NN 型、型、 CC 型、型、 DD 型、型、 LL 型。型。
例例 10.610.6
Input Input [[ 〈〈提示提示〉〉 ]] TOTO 〈内存变量〉〈内存变量〉
Input Input “ “ 请输入半径请输入半径 :: ” ” TO TO RR
或 或 Input Input “ “ R =R = ” ” TO TO R R
例例 11 :: 建立求任意园面积的程序
CLRAE
INPUT “ R= ” TO R
S = 3.14159 * R^2
? “ 园面积 = ” , S
输入的内容 注意注意:
输入数值型常量,可直接输入。
输入字符型常量,需加双引号;
输入逻辑型常量,两侧需加小圆点
输入日期型常量,两端需加大括号
( 这叫做 这叫做 类型匹配类型匹配 问题 问题)
例 例 10.610.6
CLEARCLEAR
USE Rcda ExclUSE Rcda Excl
INPUT “INPUT “ 请输入日期请输入日期 : ” TO: ” TO 查找日期查找日期
DISPLAY FOR DISPLAY FOR 出生日期 出生日期 == 查找日期查找日期
USEUSE
例 例 10.610.6
CLEARCLEAR
USE Rcda ExclUSE Rcda Excl
INPUT “ INPUT “ 请输入职称请输入职称 :: ” TO ” TO ZCZC
DISPLAY DISPLAY ALL ALL FOR FOR 职称职称 = = ZCZC
USEUSE
注意注意 :: INPUT INPUT 输入输入 CC 型数据时,要用双引号括起来。型数据时,要用双引号括起来。
22 .. ACCEPT ACCEPT 命令命令 —— 字符串输入命令字符串输入命令
命令语句:
ACCEPT ACCEPT [[ << 提示提示 >> ] ] TO <TO < 内存变量内存变量 >>
功能:显示显示 << 提示提示 >> 内容,等待用户输入,并 将输内容,等待用户输入,并 将输入入
信息以字符串的形式存储在指定 信息以字符串的形式存储在指定 << 内内存变量存变量 >>
中。中。
例 例 10.610.6
CLEARCLEAR
USE Rcda ExclUSE Rcda Excl
INPUT “ INPUT “ 请输入职称请输入职称 :: ” TO ” TO ZCZC
DISPLAY DISPLAY ALL ALL FOR FOR 职称 职称 = = ZCZC
USEUSE
注意注意 :: INPUT INPUT 输入输入 CC 型数据时,要用双引号括起来。型数据时,要用双引号括起来。
例如:
CLEARCLEAR
USE Rcda ExclUSE Rcda Excl
ACCEPT ″″ 请输入姓名:″请输入姓名:″ TO Name BROWSE ALL FOR 姓名 = NAME
注意注意 :: ACCEPT 输入输入 CC 型数据时,型数据时,不用不用双引号括起来。双引号括起来。
3. 3. WAIT WAIT 命令命令—单个字符输入命令单个字符输入命令
语法:
WAIT WAIT [[ << 提示语句提示语句 >> ] [] [ TO <TO < 内存变量内存变量 >>
] ]
[[ WINDOWSWINDOWS ]]
功能:等待用户输入,只要用户从键盘按下任一键或功能:等待用户输入,只要用户从键盘按下任一键或按下鼠标的左键或右键即执行下一条命令按下鼠标的左键或右键即执行下一条命令。
例如:
WAIT
WAIT 〃是否打印( Y/N )?〃
WAIT 〃是否打印( Y/N )?〃 TO M
WAIT 〃是否打印( Y/N )?〃 TO M WINDOWS
说明 : 如果加选项 如果加选项 WINDOWSWINDOWS ,将在屏幕右上角出现,将在屏幕右上角出现 一个窗口,在其中显示提示信息。一个窗口,在其中显示提示信息。
例如:
WAIT ″ 谢谢使用 谢谢使用 !! ″ WINDOWS
该命令的功能是在屏幕上弹出一个窗口,显该命令的功能是在屏幕上弹出一个窗口,显示 “示 “ 谢谢使用!谢谢使用!”,按任意键后窗口消失。”,按任意键后窗口消失。
补充补充: 程序设计的一些程序设计的一些常用命令常用命令
一、 基本输出命令 “ ? ”
格式 ::
? ? [ “注释说明”][ “注释说明”] , <, < 表达式表达式 >>
功能:输出表达式的值。功能:输出表达式的值。
二、 格式输出命令二、 格式输出命令
@ 定位输出命令:
命令语法:
@ @ < < 行号行号 ,, 列号列号 > SAY <> SAY < 输出内容输出内容 >>
功能:在指定的行列位置处显示数据。
例如:
@ @ 5 , 10 SAY “ 5 , 10 SAY “ 工资工资 = ”= ”
@ @ 5 , 17 SAY 2000 5 , 17 SAY 2000
三、 格式输入命令三、 格式输入命令
@ 输入命令:
@ <@ < 行号行号 ,, 列号列号 > SAY <> SAY < 提示提示 > >
GET <GET < 内存变量内存变量 >/<>/< 字段名字段名 >>
READREAD
功能:用语句激活后,向指定的内存变量 或字段输入数据。
例如:
No = ″04030227 ″
@ 2,15 SAY No
@ 3,10 SAY ″ 学号 : ″ GET No
READ
例如:
USE RCDA
@ 2,15 SAY 编号
@ 3,10 SAY ″ 编号 : ″ GET 编号
READ
顺序结构顺序结构
顺序结构——是按用户输入命令语句的顺序,逐条执行。
要 点
顺序结构示意图顺序结构示意图
要 点
第 1 条命令
第 2 条命令
第 3 条命令
·············
顺序结构 例题
按命令排列顺序依次执行。按命令排列顺序依次执行。
每条命令执行完后自动开始下一条命令的执行。每条命令执行完后自动开始下一条命令的执行。
【例 5.2】 求一元二次方程的根
CLEAR
INPUT 〃 a = 〃 TO a INPUT 〃 b = 〃 TO b INPUT 〃 C = 〃 TO C
X1=(-b+sqrt(b*b-4*a*c))/(2*a) X2=(-b-sqrt(b*b-4*a*c))/(2*a) ? 〃 X1= 〃 , X1
? 〃 X2= 〃 , X2
10.4 程序的基本控制结构 ( P 183 )
程序的基本控制结构包括:
① 顺序顺序结构
② 分支分支结构
③ 循环循环结构
1. 顺序结构
按命令排列顺序依次执行。按命令排列顺序依次执行。
每条命令执行完后自动开始下一条命令的执行。每条命令执行完后自动开始下一条命令的执行。
【例】 求一元二次方程的根
CLEAR
INPUT 〃 a = 〃 TO a INPUT 〃 b = 〃 TO b INPUT 〃 C = 〃 TO C
X1=(-b+sqrt(b*b-4*a*c))/(2*a) X2=(-b-sqrt(b*b-4*a*c))/(2*a) ? 〃 X1= 〃 , X1
? 〃 X2= 〃 , X2
顺序结构
问题:设计一个程序,能够查找表 rcda.dbf 中给定出生日期的记录。
• 程序:
CLEAR
USE rcda
INPUT “ 请输入出生日期 : ” TO RQ
DISPLAY FOR 出生日期 = RQ
S3S3
S4S4
入口入口
出口出口
S1S1
S2S2
10.6 10.6 分支结构 分支结构 ( P187 )( P187 )
分支结构用于控制程序中命令组的执行与否,分支结构用于控制程序中命令组的执行与否,它根据指定的条件执行不同的操作。它根据指定的条件执行不同的操作。
分支语句有三种分支语句有三种 ::
1 1 、单向分支、单向分支 22 、双向分支、双向分支 33 、多向分支、多向分支
1 . 单向分支语句……决定某一操作是否执行决定某一操作是否执行
IF <IF < 条件条件 >> ······················
··········· ··········· && && < < 命令行 命令行 >> ······················
ENDIFENDIF
若条件为真,则执行 IF 与 ENDIF 之间的命令,
否则不执行任何操作。
例 10.9 :修改 zytc.dbf 表中的数据,把编号为“ gz05002” 的职称由“教授”该为“副教授”。
• 程序:程序:
CLEARCLEAR
USE USE zytczytc
LOCATE ALL LOCATE ALL FOR FOR 编号 编号 = "gz05002"= "gz05002"
IF IF 职称 职称 = "= " 教授教授 ""
REPLACE REPLACE 职称 职称 WITH "WITH "副副教授教授 ""
ENDIFENDIF
USEUSE
举例:修改“学生”表中的数据,把学号为“ 0103002”的出生日期由 日期由 {^1983/07/20} {^1983/07/20} 改为改为 {^1982/07/20}{^1982/07/20}
程序编写如下程序编写如下 : :
CLEAR
USE 学生LOCATE ALL FOR 学号 = 〃 0103002 〃
IF IF 出生日期出生日期 = {^1983/07/20}= {^1983/07/20}
REPLACE REPLACE 出生日期 出生日期 WITH {^1982/07/20}WITH {^1982/07/20}
ENDIFENDIF
USE
举例:输入任意两个数 , 求出较大数 , 并显示出来。
程序编写如下 :
CLEARCLEAR INPUT ″INPUT ″ 请输入第请输入第 11 个数:个数:″ ″ TO num1TO num1
INPUT ″INPUT ″ 请输入第请输入第 22 个数:个数:″ ″ TO num2TO num2
IF num1 > = num2IF num1 > = num2 ? ″? ″ 较大数为较大数为 :: ″ , num1 ″ , num1
ENDIFENDIF
IF num2 > num1IF num2 > num1 ? ″? ″ 较大数为较大数为 :: ″ , num2 ″ , num2
ENDIFENDIF
2. 双向分支语句……选择两个语句组之一执行
IF IF << 条件条件 >> ··········· ··········· && && < < 语句组语句组 1 >1 > ······················
ELSEELSE ··········· ··········· && && << 语句组语句组 2 >2 > ······················
ENDIFENDIF
若若 IFIF 语句中的条件为真,则执行语句中的条件为真,则执行 IFIF 与与 ELSEELSE之间的之间的语句组语句组 1 1 ,否,否
则执行则执行 ELSEELSE 与与 ENDIFENDIF之间的之间的语句组语句组 22 。。
举例:输入任意两个数 , 求出较大数 , 并显示出来。
方法二 :
CLEARCLEAR INPUT ″INPUT ″ 请输入第请输入第 11 个数个数 : ″ TO num1: ″ TO num1
INPUT ″INPUT ″ 请输入第请输入第 22 个数个数 : ″ TO num2: ″ TO num2
IF num1 > = num2IF num1 > = num2 ? ″? ″较大数为较大数为 : ″ , num1 : ″ , num1
ELSEELSE ? ″? ″较大数为较大数为 : ″ , num2: ″ , num2
ENDIFENDIF
改进:输入任意两个数 , 求出较大数 , 并显示出来。
方法三 :
CLEARCLEAR INPUT INPUT “ “ 请输入第请输入第 11 个数个数 : : ”” TO num1 TO num1
INPUT INPUT “ “ 请输入第请输入第 22 个数个数 : : ”” TO num2 TO num2
IF num1 > = num2IF num1 > = num2 maxmax = num1 = num1
ELSEELSE maxmax = num2 = num2
ENDIFENDIF
? ″? ″ 较大数为较大数为 : ″, : ″, maxmax
举例:输入任意三个数 , 求出最大数。
CLEARCLEAR
INPUT ″INPUT ″ 请输入第请输入第 11 个数个数 : ″ TO m1: ″ TO m1
INPUT ″INPUT ″ 请输入第请输入第 22 个数个数 : ″ TO m2: ″ TO m2
INPUT ″INPUT ″ 请输入第请输入第 33 个数个数 : ″ TO m3: ″ TO m3
IF m1 > = m2IF m1 > = m2
Max = m1Max = m1
ELSEELSE
Max = m2 Max = m2
ENDIFENDIF
IF m3 > = MIF m3 > = M
Max = m3Max = m3
ENDIFENDIF
? ″? ″ 最大数为最大数为 : ″,: ″, Max Max
例 10.10 :在学生表中,查找姓名为 “王国民” 的记录。如果找到把该记录加上删除标记,若没有找到则在第 2 行 第 30 列处显示 “ 查无此人!” 。
程序编写如下 : CLEARCLEAR
USE RCDAUSE RCDA
LOCATE ALL FOR LOCATE ALL FOR 姓名 姓名 = "= " 王国民 ""
IF . NOT. EOF()IF . NOT. EOF()
DELETE DELETE
ELSEELSE
@ 2 , 30 SAY "@ 2 , 30 SAY " 查无此人!查无此人! ""
ENDIFENDIF
USEUSE
如何判断是否查找到对象?如何判断是否查找到对象?
11 、没有找到,则指针指向文件末尾,文件结束。、没有找到,则指针指向文件末尾,文件结束。
用:用: EOFEOF( )( )———— 为真,为真,文件结束,表文件结束,表示未找到。示未找到。
22 、已经找到,指针不到文件尾,文件没有结束。、已经找到,指针不到文件尾,文件没有结束。
用: 用: . NOT.. NOT. EOF() —— EOF() —— 非文件结束,非文件结束,表示找到了。表示找到了。
举例举例 : : 22 、某地“特快专递” 的计费标准是:邮件重量、某地“特快专递” 的计费标准是:邮件重量100100 克以内, 每克为克以内, 每克为 0.050.05 元;超出元;超出 100100 克后,超出数每克后,超出数每克为克为 0.020.02元。试编写程序计算邮费。元。试编写程序计算邮费。
CLEARCLEAR
input “ input “ 请输入邮件重量请输入邮件重量 :: ” ” TO TO XX
IF IF XX < = 100 < = 100
Y Y == 0.05 * X0.05 * X
ELSEELSE
Y Y == 100 * 0.05 + 0.02 * 100 * 0.05 + 0.02 * (( X X - - 100100 ))
ENDIFENDIF
?? ““ 邮费=”,邮费=”, YY
条件 1
条件 2
条件 n
条件 n+1
···················
语句组 1
语句组 2
语句组 n
Y
Y
Y
N
N
N
N
33 .多向分支.多向分支
DO CASE
CASE < 条件 1>
··········· ··········· && && < < 语句组语句组 1 >1 >
CASE < 条件 2 >
··········· ··········· && && < < 语句组语句组 2 >2 >
……
CASE < 条件 n >
··········· ··········· && && < < 语句组语句组 n >n >
OTHERWiSE
··········· ··········· && && < < 语句组语句组 n+1 >n+1 >
ENDCASE
33 .多向分支格式.多向分支格式
多向分支语句常用格式
DO CASE
CASE < 条件 1>
··········· ··········· && && < < 语句组语句组 1 >1 >
CASE < 条件 2 >
··········· ··········· && && < < 语句组语句组 2 >2 >
CASE < 条件 3 >
··········· ··········· && && < < 语句组语句组 3 >3 >
……
ENDCASE
例 10.11 :已知有三个数据表,分别是 rcda.dbf 、 zytc.dbf 和 xscj.dbf ,编写一个程序在选择 1 、 2 、 3 时,分别使用不同表。
条件 1
条件 2
条件 n
条件 n+1
……
语句组 1
语句组 2
语句组 n
Y
Y
Y
N
N
N
CLEARCLEAR
ACCEPT “ACCEPT “ 请输入您的选择:请输入您的选择: (1-3) ” TO (1-3) ” TO YY
DO CASEDO CASE
CASE CASE Y = " 1 "Y = " 1 "
USE rcda
LISTLIST
CASECASE Y = " 2 "Y = " 2 "
USE zytc
LISTLIST
CASECASE Y = " 3 "Y = " 3 "
USE xscj
LISTLIST
ENDCASEENDCASE
44 .使用分支语句应注意的几点.使用分支语句应注意的几点
( 1 ) IF… … ENDIF 和 DO CASE… … ENDCASE 必须配对使用, DO CASE 与第一个 CASE 〈条件表达式〉之间不应有任何命令。
( 2 )〈条件表达式〉可以是各种表达式或函数的组合,其值必须是逻辑值。
( 3 )〈命令行序列〉可以由一个或多个命令组成,可以是条件控制语句组成的嵌套结构。
( 4 ) DO CASE… … ENDCASE 命令,每次最多只能执行一个〈命令行序列〉。在多个 CASE 项的〈条件表达式〉值为真时,只执行第一个〈条件表达式〉值为真的〈命令行序列〉,然后执行 ENDCASE 的后面的第一条命令。
5.3.3 循环结构 ( P ( P 190190 ) )
循环结构用于控制部分命令的反复执行,有下面三种形式。
1 当循环当循环 do while … enddo
2 计数循环计数循环 for ... endfor
3 数据表内循环数据表内循环 scan ... endscan
1 .“当当” 循环控制 循环控制 ( P191 )( P191 )
语法
do while <条件 >
< 命令语句组 >
enddo
循环条件
命令语序
.F.
.T.
循环结构之一
1 . do while...enddo
功能
通过 < 条件 > 的值来控制循环。执行该语句时,
反复判断 < 条件表过式 > 的值,当 < 条件表过式 > 的值为“真”时,执行 < 命令行序列 > ;否则,结束循
环并执行 enddo 后面的第一个命令。
例 : 求 S = 1 + 2 + 3 + … + 100
clear
s=0
i =1
do while i<=100
s = s+i
i = i+1i = i+1
enddo
? “s=” , s
i < =100 ?
S=S+i
i=i+1
.F.
.T.
求累加和的式子
ss = ss + i
S 现在的值
S 原有的值
i 的值
+
求连乘积的式子
PP = PP * i
P 现在的值
P 原有的值
i 的值*
例 : 求 S = 1 + 3 + 5 + ······ + N
clear
Input “ 请输入一个正整数 :” to n
s=0
i=1i=1
do while i<=n
s = s + i
i = i + i = i + 22
enddo
? “ s= ” , s
i < =N ?
S=S+i
i=i+2
.F.
.T.
例 10.12 :统计 rcda.dbf 数据表中工资超过 3000 元的人数。
文件结束吗?
命令语句组
.F.
.T.
USE rcdaUSE rcda
N = 0N = 0
DO WHILE .NOT. EOF()DO WHILE .NOT. EOF()
IF IF 工资现状 工资现状 > 3000> 3000
N = N + 1N = N + 1
ENDIFENDIF
SKIPSKIP
ENDDOENDDO
? “? “ 30003000 元以上的人数元以上的人数 = ” = ” ;; NN
USEUSE
循环结构之二
““ 计数”型循环语句计数”型循环语句
FOR FOR << 循变循变 > = <> = < 初值初值 >> TO TO << 终值终值 >> [ [ Step Step << 步长步长 > > ]] ·············· ······· ······· << 命令行命令行 >> ··············
ENDFORENDFOR
( 注:注: StepStep 1 1 时,可以省略。)时,可以省略。)
例 :使用 FOR 循环 求 S=1+2+3+…+100
clear
s=0
For i=1 to 100
s = s+i
endfor
? “s=” , s
i < =100 ?
S=S+i
.F.
.T.
例 : 求 S = 1 + 3 + 5 + ······ + N
clear
Input “ 请输入一个正整数 : ” to n
s=0
for i=1 to n step 2
s = s+i
endfor
? “s=” , s
i < =N ?
S=S+i
.F.
.T.
例 10.13 :统计 rcda 数据表中工资大于等于 3000 元的人数。
USE rcdaUSE rcda
COUNT TO XCOUNT TO X
GO TOPGO TOP
N = 0N = 0
FOR i = 1 TO X FOR i = 1 TO X
IF IF 工资现状 工资现状 >= 3000>= 3000
N = N + 1N = N + 1
ENDIFENDIF
SKIPSKIP
ENDFORENDFOR
? “工资? “工资 30003000 元以上的人数: ” ,元以上的人数: ” ,NN
USEUSE
i > N ?
N
Y
执行命令序列
SKIP
循环结构之三
“ 指针”型循环语句
SCAN SCAN
[ FOR < 条件 > ]
< 命令行序列 >
ENDSCANENDSCAN
例:用控制“指针”移动的循环语句,逐一移动指针,逐一移动指针, 显示 rcda.dbf 中每条记录的编号、姓名。
CLEARCLEAR
USE rcdaUSE rcda
SCAN SCAN
? 编号 ,姓名? 编号 ,姓名ENDSCANENDSCAN
USEUSE
例 10.14 :用“指针”型循环控制语句,统计 rcda.dbf
数据表中工资大于或等于 3000 元的人数。
CLEARCLEAR
USE rcdaUSE rcda
N = 0N = 0
SCAN SCAN
IF IF 工资现状 工资现状 >= 3000>= 3000
N = N + 1N = N + 1
ENDIFENDIF
ENDSCANENDSCAN
? “工资在? “工资在 30003000 元以上的人数: ”,元以上的人数: ”,NN
USEUSE
循环中两个特殊命令语句
11 、退出语句:、退出语句:
EXITEXIT
22 、重新循环语句:、重新循环语句:
LOOPLOOP
注意:这两个命令必须嵌入在循环体内,可以改变注意:这两个命令必须嵌入在循环体内,可以改变循环,但不能单独使用。循环,但不能单独使用。
循环中使用 EXITEXIT 命令
例 : 求 S=1+2+3 + ······ 当 S>1000 即停止。
s=0
For n =1 to 100
s = s + n
if if S >1000 S >1000
EXITEXIT ENDifENDif
endfor
? “n =” , n
使用循环应注意的几个问题
• do while 和 enddo , for 和 endfor , scan
和 endscan 必须配对使用;
• <命令行序列 >可以是任何命令和语句,即可以是简单命令、条件语句或循环语句;
• <循环变量 >应是数值型的内存变量或数组元素;
例 1: 使用 scan 循环 显示学生表中的内容(方法一)
clearuse D:\XSCJ && 打开表
scanscan
? 学号 ,姓名 && 使用表
EndscanEndscan
USE USE && 关闭表
例 1: 使用 scan 循环 显示学生表中的内容(方法二)
clearuse D:\XSCJ i=10ScanScan @ i+2,10 Say 学号
@ i+2,30 Say 姓名
i=i+1
ENDScanENDScan USEUSE
例 2: 显示并能修改学生表中的内容 ( ( 补充 补充 ))
clearuse D:\XSCJi=10ScanScan
@@ i+2,10 Say “ i+2,10 Say “ 学号学号 :″ get :″ get 学号学号 @ @ i+2,30 Say “i+2,30 Say “ 姓名姓名 :″ get :″ get 姓名姓名 READREAD
i=i+1i=i+1ENDScanENDScan USEUSE
一、什么叫过程 ?一、什么叫过程 ? 程序设计时常以不同的参数参与某一程序运行。如果在一个程序中重复写入这些相同的程序段,不仅会使程序变得很长,而且是一种时间和空间的浪费。因此,可以将上述重复出现的或能单独使用的程序写成可供其它程序调用的子程序子程序,又称为过程过程。
10.8 过程过程 与 过程文件 ( P194 )( P194 )
CLEAR
······· S=0 DO P1DO P1 ······· S=0 DO P2DO P2 ······· S=0DO P3DO P3 ······· ·······
CLEAR R=10 S=3.14159*R*R ? “S=”,S RETURNRETURN
主程序子程序
CLEAR R=8 S=R*R ? “S=”,S RETURNRETURN
CLEAR R=3 V= R*R*R ? “V=”, V RETURNRETURN
P1.prgP1.prg
P2.prgP2.prg
P3.prgP3.prg
MAIN.prgMAIN.prg
1 、主程序 — 程序执行过程中,调用其他程序的称为主程序。
2 、子程序 — 被主程序调用的程序称为子程序又称为过程。
3 、主程序和子程序 相同点:相同点: — 都是程序,建立方法相同。
主程序、子程序(过程)的概念
一、子程序设计 ———— 即用主程序调即用主程序调
用子程序用子程序
主程序与子程序是不同的文件。
二、“过程”设计
—— —— 即用主程序调即用主程序调用“过程”用“过程”
1 、“过程”与主程序是在同一个文件中。
2 、“过程”与主程序各自在不同的文件中。
程序调用的三种结构
1 、子程序开头有一句为接收参数语句。
[ Parameters < 参数 1,参数 2,… > ]
其中参数必须与调用语句中参数对应。
2 、子程序结束要有一条返回语句。
Return [to master] 功能:子程序运行结束,返回调用它的程序。
加上 to master 表示返回最高层。
一、 子程序的基本结构
1 、调用子程序前,要给定的参数初值。
2 、调用子程序要有一条 DO 命令:
DODO <子程序名 > [ WITH < 参数 1,参数 2,…
>]
功能:转去执行子程序。
其中参数包括传入参数、返回参数。
3 、往往主程序后面也加上 Return
二、 主程序中的结构
例:求 例:求 P =P = 1 1 ** 2 2 ** 3 3 ** …… …… * N* N
建立程序: 建立程序: Modi CommModi Comm main_1.prg main_1.prg
clearclearP=1P=1input “input “ 请输入正整数请输入正整数 NN 的值的值 :" to N:" to Nfor i=1 to Nfor i=1 to N P=P*iP=P*iendforendfor? “? “ 结果为结果为 :” :” , , PPReturnReturn
1. 不采用过程的顺序结构程序
例:求 例:求 P =P = 1 1 ** 2 2 ** 3 3 ** …… …… * N* N
建立主程序: 建立主程序: Modi CommModi Comm main_2.prgmain_2.prg
clearclear
P=1P=1
input "input "请输入正整数请输入正整数 NN的值:的值: " to N" to N
do do subsub with N , P with N , P ? “? “ 结果为结果为 :” :” , , PP
Return Return
2. 主程序调用子程序
主程序部分
建立子程序: 建立子程序: MODI COMM MODI COMM subsub.prg.prg
Parameters N , PParameters N , PP=1P=1
for i=1 to Nfor i=1 to N
PP = = PP*i*iendforendfor
ReturnReturn
子程序部分
1 、过程第一个语句:过程标识语句。
Procedure <过程名 >
2 、过程中第二个接收参数语句。
[ Parameters < 参数 1,参数 2,… > ]
其中参数必须与调用语句中参数对应。
3 、过程结束要有一条返回语句。
Return 功能:过程运行结束,返回调用它的程序。
一、 过程的基本结构
1 、调用过程前,要给定的参数初值。
2 、调用过程要有一条 DO 命令:
DODO <过程名 > [ WITH < 参数 1,参数 2,… >
]
功能:转去执行过程。
其中参数包括传入参数、返回参数。
3 、往往主程序后面也加上 Return
二、 主程序中的结构
CLEAR SET PROC to F1
S=0 DO P1DO P1 ······· S=0 DO P2DO P2 ······· S=0DO P3DO P3 ······· ·······CLOSE PROCRETURNRETURN
Procedure P1.prgProcedure P1.prg R=5 S=3.14159*R*R ? “S=”,S RETURNRETURN
主程序过程文件
Procedure P2.prgProcedure P2.prg R=5 S=R*R ? “S=”,S RETURNRETURN
Procedure P3.prgProcedure P3.prg R=5 V= R*R*R ? “V=”, V RETURNRETURN
MAIN.prgMAIN.prg
F1.prgF1.prg
CLEAR input “R=” to R S=0 DO P1 with R , SDO P1 with R , S ? “S=”,S RETURNRETURN
Procedure Procedure P1P1..prgprg Parameters R , SParameters R , S S=0 S=3.14159*R*R RETURNRETURN
建立程序:建立程序: MODI COMM Main-3.prgMODI COMM Main-3.prg
主主程程序序和和过过程程在在同同一一文文件件中中
例:求 例:求 P =P = 1 1 * * 2 2 * * 3 3 * …… * N* …… * N
建立程序: 建立程序: Modi CommModi Comm main_3.prgmain_3.prg
clearclear P=1P=1input “input “ 请输入正整数请输入正整数 NN 的值:的值: " to N" to Ndo do subsub with N,P with N,P && && 调用过程调用过程
? “P=” , P? “P=” , PReturn Return && && 主程序结束主程序结束&& && 转下页转下页
1. 在同一个文件中调用过程
程序主调用部分
&& && 在上述同一文件中输入如下内容:在上述同一文件中输入如下内容:
Procedure subsub && && 过程开始标记过程开始标记
Parameters N,S N,S && && 过程接收参数过程接收参数
P=1P=1 for i=1 to Nfor i=1 to N P = P*iP = P*i endforendforReturn && && 过程结束过程结束
程序被调用部分
把多个过程放在同一个文件中,这个文件就叫过程文件
一、过程文件建立:与建立程序一样。
MODI COMM <过程名 >
二、过程文件使用:
1 、打开: Set Procedure TO <过程名 >
2 、关闭: Close Procedure
什么叫过程文件?
CLEAR SET PROC to F1
S=0 DO P1DO P1 ······· S=0 DO P2DO P2 ······· S=0DO P3DO P3 ······· ·······CLOSE PROC RETURNRETURN
Procedure P1.prgProcedure P1.prg R=5 S=3.14159*R*R ? “S=”,S RETURNRETURN
主程序过程文件
Procedure P2.prgProcedure P2.prg R=5 S=R*R ? “S=”,S RETURNRETURN
Procedure P3.prgProcedure P3.prg R=5 V= R*R*R ? “V=”, V RETURNRETURN
MAIN.prgMAIN.prg
F1.prgF1.prg
关闭过程文件
打开过程文件
1 、第一个语句:过程标识语句
Procedure <过程名 >
2 、第二个语句:接收参数语句
[ Parameters < 参数 1,参数 2,… > ]
其中参数必须与调用语句中参数对应。
3 、最后一条语句:返回语句
Return 功能:过程运行结束,返回调用它的程序。
三、过程文件的每一个过程
CLEAR SET PROC to F1F1
input “x=” to x input “y=” to y input “z=” to z P=1 DO Sun with X, PDO Sun with X, P S1=P P=1 DO Sun with Y, PDO Sun with Y, P S2=P P=1 DO Sun with Z, PDO Sun with Z, P S3=P S=s1+s2+s3 ? “x!+y!+z!=” , SCLOSE PROCRETURNRETURN
Procedure Procedure SunSun.prg.prg Parameters N, P P=1 For i =1 to N P= P * i EndForRETURNRETURN
主程序
过程文件
MAINMAIN . prg. prg
F1F1.prg.prg
1 、调用前,打开过程文件: Set Procedure TO <过程名 >
2 、给定的参数初值。
3 、调用: DO 命令
DODO <过程名 > [ WITH < 参数 1,参数 2,…>]
4 、结束前,关闭过程文件: Close Procedure
5 、主程序后面也加上 Return
四、调用过程文件的主程序
CLEAR SET PROC to F1
S=0 DO P1DO P1 ······· S=0 DO P2DO P2 ······· S=0DO P3DO P3 ······· ·······CLOSE PROC RETURNRETURN
Procedure P1.prgProcedure P1.prg R=5 S=3.14159*R*R ? “S=”,S RETURNRETURN
主程序过程文件
Procedure P2.prgProcedure P2.prg R=5 S=R*R ? “S=”,S RETURNRETURN
Procedure P3.prgProcedure P3.prg R=5 V= R*R*R ? “V=”, V RETURNRETURN
MAIN.prgMAIN.prg
F1.prgF1.prg
关闭过程文件
打开过程文件
例:求 例:求 P =P = 1 1 ** 2 2 ** 3 3 ** …… …… * N* N
建立主程序: 建立主程序: Modi CommModi Comm main_4.prgmain_4.prgSet Procedure Set Procedure TOTO F1.prg F1.prg && && 打开过程文件打开过程文件
input “input “ 请输入正整数请输入正整数 NN 的值的值 :” to N:” to N P=1P=1
dodo subsub with N , P with N , P && && 调用其中过程调用其中过程
? “P=” , P? “P=” , PClose Procedure Close Procedure && && 关闭过程文件关闭过程文件
ReturnReturn
主程序调用过程文件中的过程
11 、、
建立过程文件:建立过程文件: Modi CommModi Comm F1.prg F1.prg
Procedure subsub && && subsub 为过程名为过程名
Parameters N,P N,P && && 过程接收参数过程接收参数
P=1P=1 for i=1 to Nfor i=1 to N P = P*iP = P*i endforendforReturn && && 过程结束过程结束
程序被调用部分
22 、、
注意问题
1.注意在调用子程序或过程时的参数传递方式;
2.注意过程与过程文件的区别,过程可以包含在主文件中;而过程文件不能包含在另一个文件中,而是自成一个文件;
3.在主程序调用子程序时,参数的传递与过程中的参数传递一样,但子程序与主程序是独立的;
4.过程根据具体情况的不同,可以没有参数。
在 FoxPro 中,函数与过程相似,但函数除
了执行一组操作进行计算外,还返回一个值。函
数有两大类:内部函数和用户自定义函数。内部
函数已在第 2章讲解,这里将介绍如何自己编写
一些所需要的函数并调用它们。
补充: 用户自定义函数
与过程语法差不多与过程语法差不多
Function < 函数名 >
Parameters [ < 参数 1,参数 2,… >]
<语句序列 >
Return [ < 参数 >]
一、 用户自定义函数
与过程语法差不多,不同点:与过程语法差不多,不同点:
1 、命令动词不同:
过程: Procedure
函数: Function
2 、调用语句不同,使用参数形式不同。
2、返回语句不同:函数带返回参数
Return [ <[ < 参数参数 >>]]
用户自定义函数与过程比较
语法
变量 = 自定义函数名( < 参数 1,参数 2,… >) 例: P = fac(N)
&& && 调用自定义函数:调用自定义函数: fac(N)
二、调用自定义函数的方法
例:求 例:求 P =P = 1*2*3*……1*2*3*…… * N* N 程序如下:
clear P=1 input “请输入 N= " to N P=fac(N) && && 调用自定义函数调用自定义函数 ? “ P= ” , P return && && 主程序结束语句主程序结束语句
&& && 转下页转下页
三、 用户自定义函数实例
&& && 在上述同一文件中输入如下内容:在上述同一文件中输入如下内容:
Function fac && && 自定义函数名自定义函数名 parameters N && && 接收参数 接收参数 N N 值值 P=1 for i=1 to N P = P *i endforReturn P && && 送回参数 送回参数 S S 的值的值 && && 结束语句结束语句
1 、主程序调用子程序(过程) 主程序与子程序是不同的文件。
2 、在同一个文件中调用过程 过程与主程序是在同一个文件中。
3 、主程序调用过程文件中的过程 过程文件与主程序是不同的文件。
总结:一、过程的使用形式
二、解题的多种方法
1.不使用过程和函数
2.主程序调用子程序
3.在同一个文件中调用过程
4.主程序调用过程文件中的过程
5.使用函数
第十章 10.9
编写程序实例
例 :使用结构化编程,求 S=1+2+3+…+100
clear
s=0
For i=1 to 100 step 1
s = s+i
endfor
? ″s= ″ , s
求和: S=1+2+3+…+100 过程中的重要式子
S = 0 —— 求和初值 应为零 。
S = S + i —— 每次在 S 中加一个 i 。
i = i + 1 —— 每次在 i 中加一个 1 。
求累加和的式子
ss = ss + i
S 现在的值
S 原有的值
i 的值
+
求积:求积: P = 1P = 1*22*……*100 100 过程中的过程中的重要式子式子
P = 1 —— 求积时初值 应为 1 。
P = P * i —— 每次在 P 中乘一个 i 。
i = i + 1 —— 每次在 i 中加一个 1 。
求连乘积的式子
PP = PP * i
P 现在的值
P 原有的值
i 的值*
例求 S = Sin(1) + Sin(2) + …… + Sin(100)
clear
s=0
For i=1 to 100 step 1
S = S + Sin(i) endfor
? ″S= ″ , S
例 10.15 :输入任意 5 个数要放在数组X 中 , 求出最大数。
解题分三个步骤: 1 、输入数放在 X 数组中。 2 、求出最大数。 3 、显示出来。
步骤 1 :输入数据放在 X数组中。
clear
DIMENSION X( 5 )
For i = 1 to 10
INPUT ″X(i)= ″ TO X(i)
endfor
步骤 2 :求出最大数。
For i = 2 to 5
if X(1)< X(i)
X(1) = X(i) && 使 A(1)保存大的数 endif
Endfor
这样,使 A(1)保存大的数
X(1) X(2) X(3) X(4) X(5)
3 15 12 16 23
23 15 12 16 23
4次比较
结果:
步骤 2 :求出最大数。 ( 第二种方法 )
For i = 2 to 5
if X(1)< X(i) T = X(1) X(1) = X(i) && X(i)和 X(1) 交换
X(i)= T endif
Endfor
交换后,使 A(1)保存大的数
X(1) X(2) X(3) X(4) X(5)
3 15 12 16 23
15 3 12 16 23
4次比较
结果:
步骤 3 :显示最大数。
? ″ 10 个数中最大数是:″, X(1)
例 2 :用双重循环显示如下数字矩阵:
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
解:
For i = 1 to 4 && 外循环控制打印 4 行
For j = 1 to 5 && 内循环控制打印 5 个数 ? ? i && 双问号表示不换行
Endfor
? && 没有显示项表示换行
Endfor
例 3 :用双重循环打印 大 “九九表” :
1×1=1 1×2=2 1×3= 3 ······ 1×9= 9
2×1=2 2×2=4 2×3= 6 ······ 2×9=18
3×1=3 3×2=6 3×3= 9 ······ 3×9=27
4×1=4 4×2=8 4×3=12 ······ 4×9=36
·········· ·········· ·········· ······ ··········
·········· ·········· ·········· ······ ··········
9×1=9 9×2=18 9×3=27 ······ 9×9=81
解:For i = 1 to 9 && 外循环控制打印 9 行
For j = 1 to 9 && 内循环控制打 9 个式子 ?? STR(i,1)+ “×” +STR(j,1)+“=”+STR(i*j,2)+“ ”
Endfor
? && 单问号表示换行
Endfor
例 4 :用双重循环打印 小“九九表” :
1×1=1
2×1=2 2×2=4
3×1=3 3×2=6 3×3= 9 4×1=4 4×2=8 4×3=12 ····· ·········· ··········
·········· ······ ·····
9×1=9 9×2=18 9×3=27 ······ 9×9=81
解:For i = 1 to 9 && 外循环控制打印 9 行
For j = 1 to i ?? STR(i,1)+ “×” +STR(j,1)+“=”+STR(i*j,2)+“ ”
Endfor
? && 单问号表示换行
Endfor
例 10.16 :输入任意 5 个数要放在 X 数组中 , 并按从大到小顺序输出。
解题分三个步骤: 1 、输入数放在 X 数组中。 2 、将 X 数组由大到小排序。 3 、显示出来。
步骤 1 :输入数据放在 X数组中。
clear
DIMENSION X( 5 )
For i = 1 to 5
INPUT ″ 请输入 X(i) : ″ TO X(i)
Endfor
步骤 2 :由大到小排序For i = 1 to 4
For j = i + 1 to 5
if X(i)< X(j) T = X(i) X(i) = X(j) && X(i)和 X(j) 交换 X(j)= T endif
Endfor
Endfor
* 使用选择排序法
比较交换后,使 A(1)保存最大的数
X(1) X(2) X(3) X(4) X(5)
3 15 12 16 23
23 3 12 15 16
第一次比较
结果:
比较交换,使 A(2)保存第 2大的数
X(1) X(2) X(3) X(4) X(5)
3 12 15 16
23 16 3 12 15
第二次比较
结果:
23
比较交换,使 A(3)保存第 3大的数
X(1) X(2) X(3) X(4) X(5)
3 12 15
23 16 15 3 12
第三次比较
结果:
1623
比较交换,使 A(4)保存第 4大的数
X(1) X(2) X(3) X(4) X(5)
3 12
23 16 15 12 3
第四次比较
结果:
1623 15
步骤 3 :按排序后顺序显示。
For i = 1 to 5
? X(i)Endfor
例:输入任意 10 个数要放在 X 数组中然后由大到小排序并显示出来。
* 使用冒泡排序法
分三个步骤:
1 、输入数放在 X 数组中。 2 、将 X 数组由大到小排序。 3 、显示出来。
步骤 1 、输入数据放在 X数组中。
clear
DIMENSION X(10)
For i = 1 to 10
INPUT ″ 请输入 X(i) : ″ TO X(i)
Endfor
步骤 2 、由大到小排序For i = 1 to 9
For j = 10 to i -1
if X(j-1)< X(j) T = X(j) X(j) = X(j-1) && X(j)和 X(j-1) 交换 X(j-1)= T endif
Endfor
Endfor
* 使用冒泡排序法
步骤 3 、按排序后顺序显示。
For i = 1 to 10
? X(i)Endfor
求 S = Sin(1) + Sin(2) + …… + Sin(100)
s=0
i=1
Do While i<= 100
S = S + Sin(i)
i = i + 1enddo
? ″S= ″ , S
例 : 对学生 .DBF, 输入 10 条新记录 ( ( 补充 补充 ))
use D:\教学管理 \ 学生
i=1 Do While i<= 10
APPEND BLANK
@ 5,10 Say ″学号 :″ get 学号 @ 7,10 Say ″ 姓名 :″ get 姓名 @ 9,10 Say ″专业 :″ get 专业 @ 11,10 Say ″ 入学成绩 :″ get 入学成绩 READREADEndDo
USEUSE
例 10.17 编写一个程序,创建表 xscj.dbf ,它的结构可以按下表定义: 1 、输入 10 名学生的 3 门课程的成绩,显示表的内容; 2 、计算平均分,显示表的内容; 3 、计算名次,显示表的内容。
字段名 字段类型 字段宽度 小数点
语文 数值型 6 2
数学 数值型 6 2
英语 数值型 6 2
平均分 数值型 6 2
名次 整型 1 2
CLEAR
CREATE TABLE xscj( 语文 N(6,2), 数学 N(6,2),
英语 N(6,2), 平均分 N(6,2) , 名次 I )
FOR i = 1 TO 10
APPEND BLANK
@ i+2,10 SAY “ 语文 :” GET 语文
@ i+2,30 SAY “ 数学 :” GET 数学
@ i+2,50 SAY “ 英语 :” GET 英语
READ
ENDFOR
BROWSE
REPLACE ALL 平均分 WITH ( 语文 + 数学 + 英语 ) / 3
BROWSE
FOR i =1 TO 10
GO i
pj = 平均分
mc=1
GO TOP
DO WHILE .not.eof()
IF 平均分 >= pj
mc = mc + 1
ENDIF
SKIP
ENDDO
GO i
REPLACE 名次 WITH mc
ENDFOR
Browse
USE
例 10.18有 4 个
具独立功能的过程,分别是 Sub1 、 Sub2 、Sub3 、 Sub4 ,编写一个程序,可以在不同选择下调用这些过程。
SET PROCEDURE TO AA.prg
DO WHILE .T.
INOUT “ 请输入您的选择 (1-5) : ” TO N
DO CASE
CASE N= 1
DO Sub1
CASE N = 2
DO Sub2
CASE N = 3
DO Sub3
CASE N = 4
DO Sub5
OTHERWISE
RETURN
ENDCASE
ENDDO
CLOSE PROCEDURE
提示:先编写过程程序文件再编写主程序文件
例 1: 打印 100 以内的能被 7 整除的奇数
FOR n =1 TO 100 STEP 2
IF n % 7 = 0
? ? n , Space(1)
ENDIF
ENDFOR
说明: ??输出在当前行当前位置上,未到行尾不会换行;
? 输出表达式结果后换行,如用?输出多项,各 项表达式间用 “,”分隔;
例 2: 请打开 D:\DJKS\VBCP\3000005 文件夹下的 MAIN.
PRG, 按要求完成以下程序 : 编程序实现从键盘上输入 20 个字符串,输出这 20 个字符串中最长的那个字符串。( 10.0 分)(试题 F42 )
ACCEPT “ 请输入一个字符串 :” TO M
S=Len(M)
For k=1 to 19
ACCEPT “ 输入一串字符 :” TO X
if LEN(X)>S
S = LEN(X)
M=X
endif
ENDDO
? “ 最长的字符串为 : ” , M