第6章程序设计_第1页
第6章程序设计_第2页
第6章程序设计_第3页
第6章程序设计_第4页
第6章程序设计_第5页
已阅读5页,还剩88页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第6章 结构化程序设计 6.1 程序文件程序文件 6.2 程序的基本控制结构程序的基本控制结构 6.3 子程序、过程与自定义函数子程序、过程与自定义函数 6.4 程序的调试程序的调试 1 1程序文件的建立和编辑程序文件的建立和编辑 一、一、命令方式命令方式 格式:格式:MODIFY COMMAND MODIFY COMMAND 功能功能: : 打开程序编辑窗口打开程序编辑窗口, ,用于建立、编辑和修改程序文件用于建立、编辑和修改程序文件说明:说明:(1 1)若命令中使用)若命令中使用 ,如果该文件不存在,则打开以该文件名为标,如果该文件不存在,则打开以该文件名为标题的程序编辑窗口,输入程序内容

2、,新建该文件;如果该文件已存在,题的程序编辑窗口,输入程序内容,新建该文件;如果该文件已存在,则打开该文件重新进行编辑修改。则打开该文件重新进行编辑修改。 (2 2)若命令中缺省)若命令中缺省 ,则新建以,则新建以 1, 2等命名的系统默等命名的系统默认程序文件,在保存时,用户还得给定文件名。认程序文件,在保存时,用户还得给定文件名。(3 3) 可以包含盘符和路径,若不加路径,文件保存在当前文件可以包含盘符和路径,若不加路径,文件保存在当前文件夹中。若夹中。若 中缺省扩展名,则系统自动加上中缺省扩展名,则系统自动加上.PRG.PRG扩展名。扩展名。 (4 4) 程序编完后,可按程序编完后,可按

3、Ctrl+WCtrl+W存盘退出。若放弃本次编辑修改,可按存盘退出。若放弃本次编辑修改,可按ESCESC键,或键,或Ctrl+QCtrl+Q组合键。组合键。 6.1.1 程序文件的建立、编辑与运行程序文件的建立、编辑与运行 二、二、菜单方式菜单方式(1 1) 用菜单方式新建和编辑程序文件的操作方法如下:用菜单方式新建和编辑程序文件的操作方法如下: 打开打开“文件文件”菜单,选择菜单,选择“新建新建”,进入,进入“新建新建”窗口。窗口。 在在“新建新建”窗口选择窗口选择“程序程序”,再选择,再选择“新建文件新建文件”,进入程序文件编,进入程序文件编辑窗口,逐条输入命令。辑窗口,逐条输入命令。 单

4、击单击 “ “保存保存”按钮,并输入文件名,再单击按钮,并输入文件名,再单击“保存保存” ” 。 (2 2) 用菜单方式打开已有程序文件,修改、存盘的操作方法用菜单方式打开已有程序文件,修改、存盘的操作方法如下:如下: 打开打开“文件文件”菜单,选择菜单,选择“文件文件”,进入,进入“打开打开”窗口。窗口。 选择要修改的程序文件,按选择要修改的程序文件,按“确定确定” ” 后进入程序编辑窗口,修改后存后进入程序编辑窗口,修改后存盘退出。盘退出。三、项目管理器方式三、项目管理器方式创建程序的步骤如下:创建程序的步骤如下: (1 1)文件)文件/ /新建新建/ /选中选中“项目项目”/ /单击单击

5、“新建文件新建文件”按钮,在弹出的按钮,在弹出的“创建创建”对话框中输入项目文件名对话框中输入项目文件名/ /单击单击“保存保存”,从而打开了项目管理器对话,从而打开了项目管理器对话框。框。(2 2)切换至)切换至“全部全部”选项卡,展开选项卡,展开“代码代码”文件夹,选中文件夹,选中“程序程序”,单击,单击“新建新建”按钮,进入程序编辑窗口。按钮,进入程序编辑窗口。(3 3)输入程序后保存。)输入程序后保存。2. 2. 程序文件的运行程序文件的运行一、命令方式运行的格式为:一、命令方式运行的格式为: DO DO 二、菜单方式运行程序的方法为:二、菜单方式运行程序的方法为:(1 1)选择)选择

6、“程序程序”菜单中的菜单中的“运行运行”选项,在弹出的对话框中选择要运行选项,在弹出的对话框中选择要运行的程序文件。的程序文件。(2 2)直接单击常用工具栏上的)直接单击常用工具栏上的“运行运行”按钮。按钮。(3 3)在项目管理器窗口中选中待执行的程序,单击)在项目管理器窗口中选中待执行的程序,单击“运行运行”按钮。按钮。1 1赋值语句赋值语句一、格式一一、格式一格式:格式: = 功能:将表达式的值赋予变量功能:将表达式的值赋予变量说明:说明:(1 1)赋值语句中的赋值号与代数式中的等号形式相同,但意义迥然不同。)赋值语句中的赋值号与代数式中的等号形式相同,但意义迥然不同。 (2 2)变量的类

7、型是可变的,随着所赋值的类型而变。)变量的类型是可变的,随着所赋值的类型而变。例如:例如:X=2006/3/24X=2006/3/24?TYPE(X) & ?TYPE(X) & 结果为结果为D D,即日期型,即日期型X=DATE()-XX=DATE()-X?TYPE(X) & ?TYPE(X) & 结果为结果为N N,即数值型,即数值型6.1.2 程序中的常用命令(语句)程序中的常用命令(语句)二、格式二二、格式二STORE STORE TO TO 功能:将表达式的值同时赋予变量名表中的多个变量。功能:将表达式的值同时赋予变量名表中的多个变量。例如:例如:STORE 0 TO A,B,C,D

8、& STORE 0 TO A,B,C,D & 将变量将变量A,B,C,DA,B,C,D同时初始化为同时初始化为0 02 2输入单字符命令输入单字符命令格式:格式:WAIT WAIT TO TO WINDOWS AT WINDOWS AT , NOWAITCLEAR|NOCLEARTIMEOUT NOWAITCLEAR|NOCLEARTIMEOUT 功能:显示提示信息,暂停程序的执行,接受用户从键盘输入一个字符。功能:显示提示信息,暂停程序的执行,接受用户从键盘输入一个字符。说明:说明:(1 1)若无)若无 ,屏幕显示默认的系统提示信息,屏幕显示默认的系统提示信息“按任意键继按任意键继续续”。(

9、2 2)若有)若有 TO TO 子句,则键入的一个字符赋予内存变量,输入字子句,则键入的一个字符赋予内存变量,输入字 符时不要输入字符的定界符。符时不要输入字符的定界符。(3 3)若有)若有NOWAITNOWAIT子句,系统不等待用户按键,直接往下执行。子句,系统不等待用户按键,直接往下执行。(4 4)TIMEOUT TIMEOUT 子句用于设定系统等待时间(秒数),到时就子句用于设定系统等待时间(秒数),到时就自动向下执行,内存变量也得不到值。自动向下执行,内存变量也得不到值。(5 5)若有)若有NOCLEAR NOCLEAR 子句,提示信息窗口将一直保留在系统主窗口上。如果子句,提示信息窗

10、口将一直保留在系统主窗口上。如果要去除信息窗口,可以输入要去除信息窗口,可以输入 WAIT CLEAR WAIT CLEAR 命令。命令。例如:例如:WAIT WAIT 请输入请输入Y/N TO CH WINDOWS AT 10,20 TIMEOUT 5Y/N TO CH WINDOWS AT 10,20 TIMEOUT 5 执行后执行后, ,在主窗口的第在主窗口的第1010行行,20,20列出现一个小窗口,显示提示信息列出现一个小窗口,显示提示信息“请输请输入入Y/N”Y/N”,如果,如果5 5秒内输入一个字符,内存变量秒内输入一个字符,内存变量CHCH的值为该字符;如果的值为该字符;如果5

11、 5秒内秒内不输入字符,则不输入字符,则CHCH的值为空。无论有无字符输入,信息窗口都将消失,程的值为空。无论有无字符输入,信息窗口都将消失,程序继续向下执行。序继续向下执行。例如:例如:WAIT TIMEOUT 1WAIT TIMEOUT 1 该命令的作用实际上是等待该命令的作用实际上是等待1 1秒钟后程序继续向下执行,而且不显示任何秒钟后程序继续向下执行,而且不显示任何提示信息。提示信息。 3 3输入字符串命令输入字符串命令格式:格式:ACCEPT ACCEPT TO TO 功能:程序暂停执行,等待用户从键盘输入字符串。当用户以回车键结束功能:程序暂停执行,等待用户从键盘输入字符串。当用户

12、以回车键结束输入时,内存变量得到字符串的值,程序继续向下执行。输入时,内存变量得到字符串的值,程序继续向下执行。说明:说明:(1 1)键盘输入时不要加字符串定界符,否则定界符也作为字符串内容一并)键盘输入时不要加字符串定界符,否则定界符也作为字符串内容一并赋予内存变量。同理,即使输入的是纯数字,也将作为数字字符串存入内赋予内存变量。同理,即使输入的是纯数字,也将作为数字字符串存入内存变量。存变量。(2 2) 可以是字符串可以是字符串, ,也可以是字符串变量。也可以是字符串变量。(3 3)如果不输入任何内容而直接按回车)如果不输入任何内容而直接按回车, ,则系统将空串赋予内存变量。则系统将空串赋

13、予内存变量。例如:例如:ACCEPT ACCEPT 请输入要查找学生的学号请输入要查找学生的学号: TO STU_NO: TO STU_NO 当输入:当输入:0503021505030215并按回车键后,并按回车键后,STU_NOSTU_NO得到字符串得到字符串05030215,05030215,程序继程序继续向下执行。其结果相当于执行了赋值语句续向下执行。其结果相当于执行了赋值语句STU_NO=05030215STU_NO=05030215。本例也可写成:本例也可写成:STR=STR=请输入要查找学生的学号请输入要查找学生的学号: : ACCEPT STR TO STU_NO ACCEPT

14、STR TO STU_NO4 4输入任意数据命令输入任意数据命令格式:格式:INPUT INPUT TO TO 功能:程序暂停执行,等待用户从键盘输入数据。当用户以回车结束输入功能:程序暂停执行,等待用户从键盘输入数据。当用户以回车结束输入时,内存变量得到相应的值,程序继续向下执行。时,内存变量得到相应的值,程序继续向下执行。说明:说明:(1 1)INPUT INPUT 命令可以接受字符型、数值型、逻辑型、日期型和日期时间型命令可以接受字符型、数值型、逻辑型、日期型和日期时间型数据,可以接受常量、变量或一般表达式。数据,可以接受常量、变量或一般表达式。(2 2)数值型常量直接输入(如:)数值型

15、常量直接输入(如:1.234E-151.234E-15,-128-128) 字符型常量必须加定界符,否则出错。如:字符型常量必须加定界符,否则出错。如: “ “中国科技大学中国科技大学” ” She said, Youre my super star. ) She said, Youre my super star. ) 逻辑型常量必须加圆点定界(如:逻辑型常量必须加圆点定界(如:.T.T.,.F.F.) 日期型常量按严格格式输入,也可利用转换函数输入。如:日期型常量按严格格式输入,也可利用转换函数输入。如: 1997/7/11997/7/1,CTOD(07-01-97) CTOD(07-01

16、-97) 日期时间型常量按严格格式输入,也可利用转换函数输入。如:日期时间型常量按严格格式输入,也可利用转换函数输入。如: 1944-10-5 04:16:30 a1944-10-5 04:16:30 a,CTOT(12-25-06 06:00:00 p)CTOT(12-25-06 06:00:00 p)。(3 3)不能不输入内容,直接按回车键。)不能不输入内容,直接按回车键。例如:例如:INPUT INPUT 输入输入N N的值的值: TO N: TO N键入键入100100并按回车后,并按回车后,N N的值为的值为100100。作用等价成赋值语句。作用等价成赋值语句 N=100N=100小

17、结:小结:以上四条语句(命令)的功能都是对变量赋值。以上四条语句(命令)的功能都是对变量赋值。赋值语句是在编程时给定变量一个值。赋值语句是在编程时给定变量一个值。 三条输入命令是在程序执行过程中,通过键盘临时输入数据给变量赋值,三条输入命令是在程序执行过程中,通过键盘临时输入数据给变量赋值,用法比较灵活。一般来说,需要从键盘输入一个字符时,使用用法比较灵活。一般来说,需要从键盘输入一个字符时,使用WAITWAIT命令;需命令;需要从键盘输入多个字符时,使用要从键盘输入多个字符时,使用ACCEPTACCEPT命令;需要从键盘输入数值型量命令;需要从键盘输入数值型量或日期型量时,使用或日期型量时,

18、使用INPUTINPUT命令。命令。例例6.2 6.2 编写程序文件编写程序文件PROG2.PRGPROG2.PRG,要求根据键盘输入字段变量住校否的值,要求根据键盘输入字段变量住校否的值,显示显示XSDA.DBFXSDA.DBF中相应的记录。中相应的记录。 XSDA.DBFXSDA.DBF的内容列表如下:的内容列表如下:学号学号 姓名姓名 性别性别 籍贯籍贯 出生日期出生日期 住校否住校否 简历简历 照片照片 990001 990001 王强王强 男男 芜湖芜湖 10/22/79 .F. memo gen 10/22/79 .F. memo gen 990002 990002 吴晓群吴晓群

19、女女 安庆安庆 08/09/80 .F. memo gen 08/09/80 .F. memo gen 990123 990123 张良华张良华 女女 合肥合肥 07/04/77 .F. Memo Gen 07/04/77 .F. Memo Gen 990004 990004 李明李明 男男 蚌埠蚌埠 06/08/78 .T. memo gen 06/08/78 .T. memo gen 990015 990015 赵林波赵林波 男男 浙江浙江 10/12/79 .F. memo gen 10/12/79 .F. memo gen 990006 990006 刘小丽刘小丽 女女 江苏江苏 02

20、/07/78 .T. memo Gen 02/07/78 .T. memo Gen 990045 990045 杨明杨明 男男 上海上海 08/12/77 .F. memo gen 08/12/77 .F. memo gen 990077 990077 李东辉李东辉 男男 辽宁辽宁 07/05/77 .F. memo gen 07/05/77 .F. memo gen 990123 990123 张良华张良华 女女 合肥合肥 07/04/77 .F. Memo Gen 07/04/77 .F. Memo Gen 990111 990111 李小红李小红 女女 芜湖芜湖 05/05/78 .T.

21、 memo Gen 05/05/78 .T. memo Gen 900055 900055 朱俊朱俊 男男 山东山东 02/05/80 .F. memo gen 02/05/80 .F. memo gen 900088 900088 尹茗尹茗 女女 河北河北 09/18/78 .T. memo gen09/18/78 .T. memo gen PROG2.PRGPROG2.PRG程序清单如下程序清单如下: :SET TALK OFF & SET TALK OFF & 关闭对话功能关闭对话功能CLEAR & CLEAR & 清屏清屏USE XSDAUSE XSDAINPUT INPUT 请输入住

22、校吗请输入住校吗? TO L? TO LDISP ALL FOR DISP ALL FOR 住校否住校否=L OFF=L OFFUSEUSESET TALK ON & SET TALK ON & 打开对话功能打开对话功能CANCELCANCEL运行时运行时, ,若输入若输入T,T,则结果如下则结果如下: :5 5输出命令输出命令格式一:格式一:? 功能:先换行功能:先换行, ,再输出各表达式的值再输出各表达式的值例如:例如:? ? 数学数学,SPACE(5), ,SPACE(5), 物理物理,SPACE(5), ,SPACE(5), 化学化学,SPACE(5), ,SPACE(5), 总分总分

23、 结果如下结果如下: :数学数学 物理物理 化学化学 总分总分格式二:格式二:? 功能:在当前光标位置不换行,直接输出各表达式的值功能:在当前光标位置不换行,直接输出各表达式的值6 6文本输出语句文本输出语句格式:格式: TEXTTEXT ENDTEXT ENDTEXT功能:将功能:将 原样输出,帮助理解和使用程序。原样输出,帮助理解和使用程序。 SET TALK OFFSET TALK OFFCLEARCLEARTEXTTEXT 1 1追加记录追加记录 2 2删除记录删除记录 3 3修改记录修改记录 4 4查询记录查询记录ENDTEXTENDTEXTWAIT WAIT 请选择请选择: TO

24、CH TIMEOUT 5: TO CH TIMEOUT 5SET TALK ONSET TALK ONRETURNRETURN7 7简单格式输出命令简单格式输出命令格式:格式: SAY SAY 功能:在指定的行、列位置显示表达式的值功能:在指定的行、列位置显示表达式的值说明:说明:(1 1) 起始行号和起始列号均为起始行号和起始列号均为0 0(2 2) SAYSAY后面只能跟一个数据输出项后面只能跟一个数据输出项例如:例如:10,20 SAY 10,20 SAY 现在的时间是现在的时间是 +TIME()+TIME() 执行结果在第执行结果在第1010行、行、2020列显示:列显示: 现在的时间

25、是现在的时间是 12:23:4512:23:458 8格式输入输出命令格式输入输出命令格式:格式: SAY SAY GET GET READ READ功能:对已存在的变量在指定位置建立一个反像显示编辑区,对该变量原功能:对已存在的变量在指定位置建立一个反像显示编辑区,对该变量原有值进行编辑修改,并将结果保存在该变量中。有值进行编辑修改,并将结果保存在该变量中。说明:说明:(1 1)起始行列号均为)起始行列号均为0 0,且可以是数值型表达式。,且可以是数值型表达式。(2 2)SAYSAY子句用于显示提示信息。子句用于显示提示信息。(3 3)GETGET子句中的变量可以是已赋值的内存变量,也可以是

26、字段变量,类子句中的变量可以是已赋值的内存变量,也可以是字段变量,类型可以是型可以是N N、C C、D D、L L、T T、M M、G G等等(4 4)READREAD子句的作用是激活子句的作用是激活GETGET子句中的编辑域,所以在子句中的编辑域,所以在READREAD子句前的所子句前的所有有GETGET子句仅起显示变量值的作用,不能编辑。子句仅起显示变量值的作用,不能编辑。(5 5)双击备注型字段或通用型字段的编辑区,或按)双击备注型字段或通用型字段的编辑区,或按Ctrl+HomeCtrl+Home,Ctrl+PgUpCtrl+PgUp,Ctrl+PgDnCtrl+PgDn才能编辑修改其内

27、容。其他类型字段的内容可以直接在编辑域修才能编辑修改其内容。其他类型字段的内容可以直接在编辑域修改,按回车键结束编辑,并将编辑域中的内容保存到相应的变量中。改,按回车键结束编辑,并将编辑域中的内容保存到相应的变量中。例例6.3 6.3 编写程序编写程序PROG3.PRGPROG3.PRG,使用格式输入输出语句,修改,使用格式输入输出语句,修改XSDA.DBFXSDA.DBF中指定中指定记录的内容。记录的内容。SET TALK OFFSET TALK OFFCLEARCLEARUSE XSDAUSE XSDAINPUT INPUT 请输入记录号:请输入记录号: TO N TO NGO NGO N

28、3,10 SAY 3,10 SAY 姓名姓名 GET GET 姓名姓名3,28 SAY 3,28 SAY 性别性别 GET GET 性别性别4,10 SAY 4,10 SAY 住校否住校否 GET GET 住校否住校否4,28 SAY 4,28 SAY 出生日期出生日期 GET GET 出生日期出生日期5,10 SAY 5,10 SAY 简历简历 GET GET 简历简历5,28 SAY 5,28 SAY 照片照片 GET GET 照片照片READREADUSEUSESET TALK ONSET TALK ONCANCELCANCEL9 9其他辅助命令其他辅助命令(1 1)清屏命令:)清屏命令

29、:CLEARCLEAR功能:清楚整个屏幕,光标回到屏幕左上角功能:清楚整个屏幕,光标回到屏幕左上角(2 2)终止程序命令:)终止程序命令:CANCELCANCEL功能:结束程序运行,返回命令窗口,同时释放所有私有变量。通常主程功能:结束程序运行,返回命令窗口,同时释放所有私有变量。通常主程序以序以CANCELCANCEL结束。结束。(3 3)设置会话状态命令:)设置会话状态命令:SET TALK ON/OFFSET TALK ON/OFF功能:默认时,会话处于功能:默认时,会话处于ONON状态,不需要会话功能时,可以设置状态,不需要会话功能时,可以设置OFFOFF状态。状态。会话是指在执行命令

30、时向用户提供的反馈信息。通常在执行单命令或调会话是指在执行命令时向用户提供的反馈信息。通常在执行单命令或调试程序时设置试程序时设置ONON状态,而在程序执行时设置状态,而在程序执行时设置OFFOFF状态。状态。(4 4)注释语句)注释语句格式一:格式一:* * 可用于程序任何地方可用于程序任何地方, ,通常对程序作注释通常对程序作注释格式二:格式二:NOTE NOTE 可用于程序任何地方可用于程序任何地方, ,通常对程序作注释通常对程序作注释格式三:格式三:& & 用于某条命令之后用于某条命令之后, ,多用于对某行命令作注释多用于对某行命令作注释 顺序结构是一种最简单的结构,根据程序中语句的书

31、写顺序依次逐条顺序结构是一种最简单的结构,根据程序中语句的书写顺序依次逐条执行。流程图如下:执行。流程图如下:6.2.1 顺序结构顺序结构 语句1 语句2例例6.4 6.4 从键盘输入三角形的二边之长及其夹角从键盘输入三角形的二边之长及其夹角( (度度),),求构成的三角形面积。求构成的三角形面积。* * PROG4.PRG PROG4.PRGSET TALK OFFSET TALK OFFCLEARCLEARINPUT INPUT 输入第一条边长:输入第一条边长: TO A TO AINPUT INPUT 输入第二条边长:输入第二条边长: TO B TO BINPUT INPUT 输入夹角输

32、入夹角( (度度) TO ALPHA) TO ALPHAAREA=AAREA=A* *B B* *SIN(ALPHASIN(ALPHA* *PI()/180)/2PI()/180)/2? ? 三角形的面积为三角形的面积为: ,STR(AREA,6,2): ,STR(AREA,6,2)SET TALK ONSET TALK ONCANCELCANCEL运行结果如右图所示:运行结果如右图所示:例例6.5 6.5 键盘输入五个分数,去掉一个最高分,去掉一个最低分,求其余三键盘输入五个分数,去掉一个最高分,去掉一个最低分,求其余三个分数的平均分。个分数的平均分。* * PROG5.PRG PROG5.

33、PRGINPUT TO AINPUT TO AINPUT TO BINPUT TO BINPUT TO CINPUT TO CINPUT TO DINPUT TO DINPUT TO EINPUT TO EMD=MAX(A,B,C,D,E)MD=MAX(A,B,C,D,E)MX=MIN(A,B,C,D,E)MX=MIN(A,B,C,D,E)SUM=A+B+C+D+ESUM=A+B+C+D+EAVER=(SUM-MD-MX)/3AVER=(SUM-MD-MX)/3? ? 平均分为平均分为: ,ROUND(AVER,2): ,ROUND(AVER,2)CANCELCANCEL 有两种分支结构语句:

34、有两种分支结构语句:IFIF语句和语句和DO CASEDO CASE语句。根据不同的条件,选择语句。根据不同的条件,选择执行不同的语句。执行不同的语句。IFIF语句又有三种不同的形式语句又有三种不同的形式。1 1单向选择单向选择格式:格式:IF IF ENDIF ENDIF功能:计算条件表达式的值,若为真(功能:计算条件表达式的值,若为真(.T.T.),则执行语句块中的语句;),则执行语句块中的语句;若为假(若为假(.F.F.),不执行语句块。无论执行还是不执行,程序都将转向),不执行语句块。无论执行还是不执行,程序都将转向ENDIFENDIF下一条语句继续执行。下一条语句继续执行。说明:说明

35、: (1 1) IF IF 和和 ENDIFENDIF必须配对出现,且分两行书写。必须配对出现,且分两行书写。(2 2) 条件表达式可以是关系表达式或逻辑表达式。条件表达式可以是关系表达式或逻辑表达式。6.2.2 6.2.2 分支结构分支结构 单向单向IFIF语句流程图:语句流程图: IF .T. 条件条件? 语句块语句块ENDIF.F.2 2双向选择双向选择格式:格式:IF IF A ELSE ELSE B ENDIF ENDIF功能:条件成立,执行功能:条件成立,执行 A;条件不成立,执行;条件不成立,执行 B。然后程。然后程序转向序转向ENDIFENDIF下一条语句继续执行。下一条语句继

36、续执行。说明:说明:(1 1) 单向选择实际上是双向选择的特殊形式,要注意语句的书写格式。单向选择实际上是双向选择的特殊形式,要注意语句的书写格式。(2 2) 该语句可以解决一入口,二分支问题该语句可以解决一入口,二分支问题双向双向IFIF语句流程图:语句流程图:条件?语句块1语句块2IF .T. .F.ENDIFTHENELSE例例6.6 6.6 输入乘出租车的公里数,求乘车费(计费标准:输入乘出租车的公里数,求乘车费(计费标准:2.52.5公里以内公里以内6 6元;元;2.52.5公里以外,每超过公里以外,每超过1 1公里,增加公里,增加1.21.2元,要求四舍五入到元)。元,要求四舍五入

37、到元)。* * PROG6.PRG PROG6.PRGSET TALK OFFSET TALK OFFCLEARCLEARINPUT “INPUT “请输入公里数:请输入公里数:” ” TO XTO XIF X2.5IF X2.5 PAY=(X-2.5) PAY=(X-2.5)* *1.2+61.2+6ELSEELSE PAY=6 PAY=6ENDIFENDIF? ? 应付费应付费,ROUND(PAY,0), ,ROUND(PAY,0), 元元 SET TALK ONSET TALK ONCANCELCANCEL例例6.7 6.7 在在XSDA.DBFXSDA.DBF中查找某人,若找到,显示该

38、记录;若找不到,显示中查找某人,若找到,显示该记录;若找不到,显示“查无此人查无此人!”!”。* * PROG7.PRG PROG7.PRGSET TALK OFFSET TALK OFFUSE XSDAUSE XSDAACCEPT ACCEPT 输入待查找人的姓名输入待查找人的姓名: TO NAME: TO NAMELOCATE FOR LOCATE FOR 姓名姓名=NAME=NAMEIF FOUND()IF FOUND()DISP OFFDISP OFFELSEELSE? ? 查无此人查无此人! ! ENDIFENDIFUSEUSESET TALK ONSET TALK ONCANCEL

39、CANCEL例例6.8 6.8 键盘输入一个年份,判断是平年还是闰年?(注:对于非整百年的键盘输入一个年份,判断是平年还是闰年?(注:对于非整百年的年份,被年份,被4 4整除即为闰年;对于整百年的年份,必须被整除即为闰年;对于整百年的年份,必须被400400整除才是闰年)。整除才是闰年)。* * PROG8.PRG PROG8.PRGINPUT Enter a year: TO YINPUT Enter a year: TO YIF MOD(Y,4)=0 AND MOD(Y,100)0 OR MOD(Y,400)=0IF MOD(Y,4)=0 AND MOD(Y,100)0 OR MOD(Y,

40、400)=0?Y, is a leap year. ?Y, is a leap year. ELSEELSE?Y, is a common year. ?Y, is a common year. ENDIFENDIFCANCELCANCEL3 3 IFIF语句的嵌套语句的嵌套 IF-ELSE-ENDIFIF-ELSE-ENDIF语句中的语句块里可以包含任何合法的语句,也可以包语句中的语句块里可以包含任何合法的语句,也可以包含另一条含另一条IFIF语句,这就构成了语句,这就构成了IFIF语句的嵌套。嵌套语句的嵌套。嵌套IFIF语句可以解决一入口,语句可以解决一入口,三三分支分支甚至更多甚至更多分

41、支分支的问题。嵌套形式可以是多种多样的,以下是其中的的问题。嵌套形式可以是多种多样的,以下是其中的一种一种:IF IF 1 1ELSEELSE IF IF 2 2 ELSE ELSE 3 ENDIF ENDIFENDIFENDIF条件1条件2语句块1语句块2语句块3IF.T.F.ELSEIF.T.F.ELSEEND IF例例6.9 6.9 从键盘输入从键盘输入a,b,ca,b,c的值的值( (设设a0)a0),求一元二次方程的两个实根。,求一元二次方程的两个实根。* * PROG9.PRG PROG9.PRGSET TALK OFFSET TALK OFFINPUT INPUT 请输入请输入a

42、 a的值的值: TO A: TO AINPUT INPUT 请输入请输入b b的值的值: TO B: TO BINPUT INPUT 请输入请输入c c的值的值: TO C: TO CD=BD=B* *B-4B-4* *A A* *C CIF D=0IF D=0 X=-B/(2 X=-B/(2* *A)A) ? ? 方程有两个相等的实根方程有两个相等的实根: : ? X1=X2=,X? X1=X2=,XELSEELSE IF D0 IF D0 X1=(-B+SQRT(D)/(2 X1=(-B+SQRT(D)/(2* *A)A) X2=(-B-SQRT(D)/(2 X2=(-B-SQRT(D)/

43、(2* *A)A) ? ? 方程有两个实根方程有两个实根: : ? X1=,STR(X1,6,2)? X1=,STR(X1,6,2)? X2=,STR(X2,6,2)? X2=,STR(X2,6,2) ELSE ELSE ? ? 方程无实根方程无实根! ! ENDIF ENDIFENDIFENDIFSET TALK ONSET TALK ONCANCELCANCEL4 4多分支语句多分支语句格式:格式: DO CASEDO CASE CASE CASE 1 1 CASE CASE 2 2 CASE CASE n-1 n-1 OTHERWISE OTHERWISE n ENDCASE ENDCA

44、SE 功能:依次检测条件表达式的值,一旦某一条件满足,执行相应语句块,功能:依次检测条件表达式的值,一旦某一条件满足,执行相应语句块,然后转到然后转到ENDCASEENDCASE下一条语句。如果所有条件表达式的值都为假,倘若无下一条语句。如果所有条件表达式的值都为假,倘若无OTHERWISEOTHERWISE子句,则不执行任何语句,直接转到子句,则不执行任何语句,直接转到ENDCASEENDCASE下一条语句;如若下一条语句;如若有有OTHERWISEOTHERWISE子句,则无条件执行子句,则无条件执行OTHERWISEOTHERWISE与与ENDCASEENDCASE之间的语句块,然之间的

45、语句块,然后转到后转到ENDCASEENDCASE下一条语句。下一条语句。说明:说明:(1 1)DO CASEDO CASE和和ENDCASEENDCASE必须配对使用,必须配对使用,OTHERWISEOTHERWISE子句可以省略,但省略子句可以省略,但省略后其功能也不复存在。后其功能也不复存在。(2 2)通常一入口,三分支的问题可以使用嵌套)通常一入口,三分支的问题可以使用嵌套IFIF语句或语句或DO CASE DO CASE 语句来语句来编程。如果多于三个分支,使用编程。如果多于三个分支,使用DO CASEDO CASE语句比较方便。语句比较方便。(3 3)既然语句块中可以是任何合法的)

46、既然语句块中可以是任何合法的VISUAL FOXPROVISUAL FOXPRO语句,语句,IF-ELSE-IF-ELSE-ENDIFENDIF与与DO CASE-ENDCASEDO CASE-ENDCASE可以互相嵌套,但这种嵌套必须是完整的嵌套,可以互相嵌套,但这种嵌套必须是完整的嵌套,不得交叉嵌套。不得交叉嵌套。 1 1条件1条件2条件n-1语句块n语句块1语句块2语句块n-1DO CASEENDCASEOTHERWISE.T.T.T.F.F.F.例例6.10 6.10 键盘输入一个字符,判断它是大写字母、小写字母、数字字符还键盘输入一个字符,判断它是大写字母、小写字母、数字字符还是其他

47、特殊字符。是其他特殊字符。* * PROG10.PRG PROG10.PRGSET TALK OFFSET TALK OFFWAIT Enter a character: TO CHWAIT Enter a character: TO CHDO CASEDO CASE CASE ASC(CH)=65 AND ASC(CH)=65 AND ASC(CH)=97 AND ASC(CH)=97 AND ASC(CH)=0 AND CH=0 AND CH=9 ?CH, is a digit. ?CH, is a digit. OTHERWISE OTHERWISE ?CH, is a special

48、character. ?CH, is a special character.ENDCASEENDCASESET TALK ONSET TALK ONCANCELCANCEL例例6.11 6.11 键入两个数和一个运算符(键入两个数和一个运算符(+ +、- -、* *、/ /),求相应运算的结果。),求相应运算的结果。INPUT INPUT 输入一个数:输入一个数: TO X TO XINPUT INPUT 输入另一个数:输入另一个数: TO Y TO YWAIT WAIT 输入运算符(输入运算符(+ +、- -、* *、/ /):): TO CH TO CHDO CASEDO CASECAS

49、E CH=+CASE CH=+ 7,0 SAY X+Y 7,0 SAY X+YCASE CH=-CASE CH=- 7,0 SAY X-Y 7,0 SAY X-YCASE CH=CASE CH=* * 7,0 SAY X 7,0 SAY X* *Y YCASE CH=/CASE CH=/ 7,0 SAY X/Y 7,0 SAY X/YOTHERWISEOTHERWISE 7,0 SAY 7,0 SAY 输入运算符错误输入运算符错误 ENDCASEENDCASESET TALK ONSET TALK ONCANCELCANCEL1 1当型循环语句当型循环语句格式:格式:DO WHILE DO W

50、HILE ENDDO ENDDO功能:当功能:当 的值为真(的值为真(.T.T.)时,执行循环体中的语句,一旦)时,执行循环体中的语句,一旦 的值为假(的值为假(.F.F.),程序跳出循环体,转到),程序跳出循环体,转到ENDDOENDDO下一条语句继下一条语句继续执行。续执行。 说明:说明:(1 1)循环起始语句)循环起始语句DO WHILEDO WHILE与循环结束语句与循环结束语句ENDDOENDDO之间的语句块称为循环之间的语句块称为循环体。执行时,先计算表达式的值,如果条件一开始就不成立,则循环体一体。执行时,先计算表达式的值,如果条件一开始就不成立,则循环体一次也不执行,直接跳到次

51、也不执行,直接跳到ENDDOENDDO下一条语句。如果条件成立,则依次执行循环下一条语句。如果条件成立,则依次执行循环体语句,遇到体语句,遇到ENDDOENDDO后,返回循环起始语句,再判断条件是否成立。只要条后,返回循环起始语句,再判断条件是否成立。只要条件成立就重复上述过程,一旦条件不成立,就跳出循环体。如果条件永远件成立就重复上述过程,一旦条件不成立,就跳出循环体。如果条件永远成立,形成死循环。为了避免死循环,在循环体中必须要有语句能够改变成立,形成死循环。为了避免死循环,在循环体中必须要有语句能够改变条件表达式的值。条件表达式的值。(2 2)当循环次数事先未知时,使用)当循环次数事先未

52、知时,使用DO WHILE-ENDDODO WHILE-ENDDO语句。语句。(3 3)循环体中,可以出现)循环体中,可以出现LOOPLOOP语句。遇到语句。遇到LOOPLOOP语句时,程序立即转向语句时,程序立即转向DO DO WHILEWHILE循环起始语句,而不再执行循环起始语句,而不再执行LOOPLOOP下面的循环体语句。下面的循环体语句。6.2.3 6.2.3 循环结构循环结构(4 4) 循环体中,可以出现循环体中,可以出现EXITEXIT语句。遇到语句。遇到EXITEXIT语句时,程序立即跳出本语句时,程序立即跳出本层循环,转向逻辑上的下一条语句继续执行。设置层循环,转向逻辑上的下

53、一条语句继续执行。设置EXITEXIT语句,也是防止死语句,也是防止死循环的一种方法。循环的一种方法。DO WHILE DO WHILE 语句的流程图如下语句的流程图如下: : 初始设置条件满足吗?循环体语句LOOPEXIT.F.T.DO WHILEENDDO例例6.12 6.12 统计统计XSDA.DBFXSDA.DBF中中19791979年以后出生的人数年以后出生的人数, ,并显示他们的记录。并显示他们的记录。SET TALK OFFSET TALK OFFCLEARCLEARUSE XSDAUSE XSDAN=0 & N=0 & 记数器通常初始化为记数器通常初始化为0 0DO WHILE

54、 NOT EOF()DO WHILE NOT EOF()IF IF 出生日期出生日期=1979/1/1=1979/1/1DISP OFFDISP OFFN=N+1 & N=N+1 & 记数器记数器ENDIFENDIFSKIP & SKIP & 修改记录指针,漏写该句,程序死循环修改记录指针,漏写该句,程序死循环ENDDOENDDO? 1979? 1979年以后出生的人数为年以后出生的人数为+STR(N,2)+ +STR(N,2)+ 人人 USEUSESET TALK ONSET TALK ONCANCELCANCEL例例6.13 6.13 求求 12 + 42 + 72 + 12 + 42 +

55、 72 + 一直加到超过一直加到超过10001000为止,输出项数与和为止,输出项数与和数。数。* * PROG13.PRG PROG13.PRGi=1i=1s=0s=0n=0n=0do while s=1000do while s=1000s=s+i2s=s+i2i=i+3i=i+3n=n+1n=n+1enddoenddo?n,items?n,items?sum=,s?sum=,sCANCEL CANCEL 例例6.14 6.14 完善例完善例6.76.7,使程序能多次查找学生的记录,一旦输入,使程序能多次查找学生的记录,一旦输入N N,立即结,立即结束查找。束查找。USE XSDAUSE

56、XSDAANSWER=YANSWER=YDO WHILE UPPERDO WHILE UPPER(ANSWER)= Y(ANSWER)= YACCEPT ACCEPT 输入待查找学生的姓名输入待查找学生的姓名: TO NAME: TO NAMELOCATE FOR LOCATE FOR 姓名姓名=NAME=NAMEIF NOT EOF()IF NOT EOF()DISP OFFDISP OFFELSEELSE? ? 查无此人查无此人! ! ENDIFENDIFWAIT WAIT 是否继续查找是否继续查找(Y/N)? TO ANSWER(Y/N)? TO ANSWERENDDOENDDO? ?

57、结束查找结束查找 USEUSE CANCEL CANCEL例例6.15 6.15 键盘输入两个整数键盘输入两个整数, ,求它们的最大公约数和最小公倍数。求它们的最大公约数和最小公倍数。INPUT INPUT 输入一个整数:输入一个整数: TO M TO MINPUT INPUT 输入另一个整数:输入另一个整数: TO N TO NM1=MM1=MN1=NN1=NT=MOD(M,N)T=MOD(M,N)DO WHILE T#0DO WHILE T#0M=NM=NN=TN=TT=MOD(M,N)T=MOD(M,N)ENDDOENDDO? ? 最大公约数为最大公约数为: ,STR(N,4): ,ST

58、R(N,4)? ? 最小公倍数为最小公倍数为: , STR(M1: , STR(M1* *N1/N,4)N1/N,4)CANCELCANCEL2 2计数型循环语句计数型循环语句格式:格式:FOR FOR = TO TO STEP STEP ENDFOR | NEXT ENDFOR | NEXT功能:语句执行时,首先循环变量赋以初值,与终值比较,若超过终值,则功能:语句执行时,首先循环变量赋以初值,与终值比较,若超过终值,则循环体一次也不执行,直接跳到循环终止语句循环体一次也不执行,直接跳到循环终止语句ENDFORENDFOR的下一条语句;若不超的下一条语句;若不超过终值,则依次执行循环体语句,

59、遇到过终值,则依次执行循环体语句,遇到ENDFORENDFOR后,程序转回到后,程序转回到FORFOR循环初始语循环初始语句。然后循环变量加上步长,再判断是否超过终值,只要不超过终值就执行句。然后循环变量加上步长,再判断是否超过终值,只要不超过终值就执行循环体。一旦超过终值,程序退出循环体,继续执行循环体。一旦超过终值,程序退出循环体,继续执行ENDFORENDFOR的下一条语句。的下一条语句。说明:说明:(1 1)步长可正可负。若步长为)步长可正可负。若步长为1 1,可以省略,可以省略STEPSTEP子句。子句。(2 2)计数型循环语句用于循环次数事先已知的场合。循环次数可按下式来计)计数型

60、循环语句用于循环次数事先已知的场合。循环次数可按下式来计算:算:INT(ABS(INT(ABS(终值终值- -初值初值)/)/步长步长)+1)+1(3 3)循环体内可以出现)循环体内可以出现 LOOPLOOP和和EXITEXIT语句,其功能如前所述。语句,其功能如前所述。(4 4)循环变量可以在循环体中出现,参加运算)循环变量可以在循环体中出现,参加运算; ;也可以不出现,起控制循环也可以不出现,起控制循环次数的作用。次数的作用。(5 5)循环结束语句一般用)循环结束语句一般用ENDFORENDFOR,也可以使用,也可以使用NEXTNEXT。 记数型循环语句流程图记数型循环语句流程图循环变量=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论