890 likes | 1.02k Views
授课章节. 第九章 程序设计 1.1 程序设计基础 1.2 程序的基本结构 主要内容 : 应用程序基本操作 应用程序中的常用命令 顺序结构程序设计 教学目的: 通过本次课掌握程序设计的基本概念、程序设计的基本思想和方法。 教学重点: 程序设计的基本思想和方法 教学难点: 程序设计的基本思想和方法 教学课时 : 2 学时 教学方法: 讲授法、演示法、任务驱动. 9.1.1 程序设计基础. 程序设计的概念. 应用程序的建立. 应用程序的运行. 应用程序的修改.
E N D
授课章节 • 第九章 程序设计 1.1 程序设计基础 1.2 程序的基本结构 主要内容: 应用程序基本操作 应用程序中的常用命令 顺序结构程序设计 教学目的:通过本次课掌握程序设计的基本概念、程序设计的基本思想和方法。 教学重点:程序设计的基本思想和方法 教学难点:程序设计的基本思想和方法 教学课时:2学时 教学方法:讲授法、演示法、任务驱动
9.1.1 程序设计基础 • 程序设计的概念 • 应用程序的建立 • 应用程序的运行 • 应用程序的修改 返 回
9.1 程序设计基础 9.1.1 程序设计的概念 • 一. 什么是程序设计 • 所谓程序设计是指利用计算机解决实际问题的过程,这个过程包括对具体问题进行分析、建立数学模型、编写算法、使用某种程序设计语言编写程序、最后调试运行获得结果。可见编写程序只是程序设计过程中的一个步骤。 • 二. 关于算法 • 1. 要计算机解决某一个问题,必须编写相应的程序。编写程序需要确定解决问题的方法和思路,并要正确地写出求解步骤,这就叫解决这个问题的算法(algorithm)。 • 计算机处理某一问题的过程与我们日常处理事情的过程十分相似,都要按一定的步骤和相应的方法来处理。例如,邮寄一封信的过程可分为写信、写信封、贴邮票、投入信箱等四个步骤,这些步骤可以看作是写信的算法。下面举两个计算机处理问题的算法的例子。
【例9-1-1】交换两个变量中的数据。 • 已知变量x和y中分别存放了数据,现在要交换其中的数据。为了达到交换的目的,需要引进一个中间变量m,其算法如下: • ① 将x中的数据送给变量m,即x→m; • ② 将y中的数据送给变量x,即y→x; • ③ 将m中的数据送给变量y,即m→y。
【例9-1-2】输入三个不相同的数,求出其中的最小数。【例9-1-2】输入三个不相同的数,求出其中的最小数。 • 先设置一个变量min,用于存放最小数。当输入a、b、c三个不相同的数后,先将a与b进行比较,把小者送给变量min,再把c与min 进行比较,若c<min,则将c的数值送给min,最后min中就是三个数中的最小数,具体算法如下: • ①若a<b ,则a→min,否则b→min; • ②再将c与min进行比较,若c<min,则c→min。这样,min 中存放的即是三个数中的最小数。
对于同一个问题,可以有不同的算法。例如求1+2+3+…+100的和,可以采用如下方法:先求1+2,再加3,再加4,一直加到100,最后得到结果5050。也可以采用这样的方法:1+2+3+…+100=(1+100)+(2+99)+(3+98)+…+(50+51)= 50101 = 5050。显然,对于心算来说,后一种方法更简便,而累加更适用于计算机解题。因此,为了有效的进行解题,不仅要保证算法正确,还要选择好的算法,即方法简单、运算步骤少,能迅速得出正确结果的算法。
9.1.2 程序的控制结构 任何复杂的程序都由3种基本控制结构组成。它们是顺序结构、选择结构和循环结构。 1. 顺序结构 这是最简单的一种基本结构,依次顺序执行不同的程序块。 2. 选择结构 根据条件满足或不满足而去执行不同的程序块。 3. 循环结构 循环结构是指重复执行某些操作,重复执行的部分称为循环体。
9.1.3 结构化程序设计方法 结构化程序设计采用自顶向下、逐步求精和模块化的分析方法。 自顶向下是指对设计的系统要有一个全面的理解,从问题的全局入手,把一个复杂问题分解成若干个相互独立的子问题,然后对每个子问题再作进一步的分解,如此重复,直到每个问题都容易解决为止。 逐步求精是指程序设计的过程是一个渐进的过程,先把一个子问题用一个程序模块来描述,再把每个模块的功能逐步分解细化为一系列的具体步骤,以致能用某种程序设计语言的基本控制语句来实现。逐步求精总是和自顶向下结合使用,一般把逐步求精看作自顶向下设计的具体体现。 模块化是结构化程序的重要原则。所谓模块化就是把大程序按照功能分为较小的程序。
程序文件的建立、修改与执行 • 应用程序:为完成某项任务所需执行的命令序列,这些命令 按照一定的结构有机地组合在一起,并以文件的形式存储在 磁盘上,又称为命令文件。 • 应用程序的组成: • 前言:注释语句 • 设置区:设置程序的运行环境,多由SET命令实现 • 程序体:所有命令序列,一般包括数据的输入输出、数据的 处理以及结果输出等命令 • 整理部分:如关闭各种文件 • 程序的退出:设置有关命令关闭文件返回到命令窗口状态或 操作系统状态
程序文件的建立、修改与执行 1.建立或修改程序文件 可用两种方式调用系统内置的文本编辑器建立或修改程序文件: 命令方式 MODIFY COMMAND [<盘符>] [<路径>]〈程序文件名〉 或 MODIFY FILE [<盘符>] [<路径>]〈程序文件名〉 说明:其中<文件名>指明要建立或者修改的文件。如果省略文件名,编辑窗口会打开名为untitled.prg的文件。当关闭窗口时出现对话框,要求输入文件名。若使用?,则显示“打开”对话框。在此框中,用户可以选择一个已存在的文件或者输入要建立的新文件名。如果没有给文件指定扩展名,则MODIFY COMMAND默认为.prg,而MODIFY FILE却默认为空,所以使用MODIFY FILE建立程序文件时文件名必须带扩展名.prg。 菜单方式 打开“文件”菜单,选择“新建”;在“新建”窗口,选择“程序”,再选择“新建文件”
应用程序的建立 • 菜单方式:文件 → 新建 → 程序 • 命令方式:MODIFY COMMAND<程序名> • 说明:<程序名>为主文件名,其扩展名的默认值为.PRG • 示例:建立名为 P1.PRG 的应用程序 • 命令窗口:MODI COMM P1.PRG • 编辑窗口:* P1.PRG (求和S=1+2+3+…+100) • SET TALK OFF • CLEAR • STORE 0 TO N,S • DO WHILE N<=100 • S=N+S • N=N+1 • ENDDO • ? “累加和 S=”, S • SET TALK ON • RETURN
应用程序的保存 保存 ① 菜单方式: 文件 → 保存 ② Ctrl + W →另存为 → 保存 放弃修改 ① 文件 → 还原 ② ESC 应用程序的修改 菜单方式: 文件 → 打开 命令方式: MODIFYCOMMAND<程序名>
应用程序的运行 1. 菜单方式:程序→ 运行 2. 命令方式:DO 〈应用程序名〉[WITH<参数表> • 说明: • 在程序运行过程中执行到下述命令时将会中断运行而 • 退出,它们退出后返回的系统状态分别是: • RETURN:结束当前程序,返回调用点或命令窗口状态。 • CANCEL:程序终止执行,返回命令窗口状态。 • QUIT:退出Visual FoxPro系统,返回操作系统状态。 • 在程序运行过程中,若按下ESC键可使运行强行中断。 • 这时系统显示警告,并给用户三种选择: • 取消:中断程序的运行。(此为缺省选项) • 继续执行:忽略ESC的中断作用,继续程序的执行。 • 挂起:暂时中断程序的运行,返回命令窗口。当再次运行 • 时可以从中断处继续运行。
程序文件中的辅助命令 1.程序注释命令 为增强程序的可读性,往往需要在程序中使用注释来对程序进行说明,为阅读程序提供方便。Visual FoxPro中有两种程序注释命令。 命令格式: NOTE|* [注释] && [注释] 第一个命令在程序中加注释行信息。执行程序文件时,不执行以NOTE或*开头的行。如果要在下一行继续注释,可在本注释行尾加上一个分号;,或者直接回车再另用一个注释命令。 第二个命令在命令语句的尾部加注释信息。
2.常用状态设置命令 (1)置会话状态命令 命令格式: SET TALK ON|OFF 在会话状态开通时,Visual FoxPro在执行命令时会向用户提供大量的反馈信息。工作于程序方式时,这不仅会减慢程序的运行速度,而且还会与程序本身的输出相互夹杂,引起混淆。所以程序调试时,一般置“会话”于开通状态,而在执行程序时则通常要求置“会话”于断开状态。 (2)置打印状态命令 命令格式: SET PRINT ON|OFF 系统默认打印机置于断开状态,就是说命令的执行结果只送到屏幕,不送往打印机。若用命令SET PRINT ON置打印机为接通状态,则在屏幕上显示的执行结果被同时打印。
(3)置屏幕状态命令 命令格式: SET CONSOLE ON|OFF 在系统的默认状态下,用户从键盘输入的内容都在屏幕上显示,然而有时却要求键入的内容保密而不被显示,这只需使用命令SET CONSOLE OFF便可。在应用程序中当用户键入密码的时就可先执行此命令。 (4)置缺省驱动器和目录命令 命令格式: SET DEFAULT TO [盘符:][路径] 用于设置进行输入输出操作时的缺省驱动器和缺省目录。
2. 键盘输入命令 1. 基本输入命令 格式:INPUT [<提示信息>] TO <内存变量> 功能:暂停程序运行,等待键入表达式并将其值赋给指定的内存变量,待按回车键后,继续运行程序。 说明: ① <提示信息>为可选项,其格式、功能与要求同ACCEPT 命令。 ② 命令中的<内存变量>的类型决定于键入数据的类型,但 不得为M型数据。 ③ 若键入的是表达式,本命令将先计算出表达式的值,然 后把其结果赋给<内存变量>。 ④ 若键入字符型常量或逻辑型常量时应带有定界符。 ⑤ 在响应该命令时,若键入了无效表达式或只按下回车键, 系统将会给出“语法错”的提示信息。
例1:试运行下述交互输入命令。 INPUT “请输入:身份证号码:”TO ID INPUT “请输入姓名:”TO XM 例2: 从键盘输入两个任意正数,编程求以两数为边长的长方形面积。程序文件名为P3.PRG SET TALK OFF CLEAR INPUT “长方形一边的长为:”TO A INPUT “长方形另一边的长为:”TO B S=A*B ? “长方形的面积为:” , S SET TALK ON RETURN
2. 字符串输入命令 格式:ACCEPT<提示信息>TO <内存变量> 说明:1)暂停程序的运行,等待用户键入字符型常量以赋给指定的内存变量。 2)<提示信息>是显示在屏幕上的、用于提示说明的字符型表达式。 3)如果不键入任何字符而只按回车键,则赋给内存变量的值将是一个空字符串。 示例: ACCEPT “请输入姓名:”TO name ? name
3. 输入单字符命令 格式:WAIT<提示信息>TO <内存变量> 功能:暂停程序的运行,等待用户键入单个字符后再恢复程序运行。 说明:1)<提示信息>为可选项,其格式、功能与要求同ACCEPT命令。如果命令中无此选项,则系统默认的提示信息是:PRESS ANY KEY TO CONTINUE…… 2)TO <内存变量>也为可选项,选用时,则键入的单个字符均作为字符型数据赋给内存变量。如果只是按下回车键,则只将一个空字符存入内存变量。 示例: WAIT “请回答 Y/N ?” TO yn 执行后显示:请回答 Y/N ? 输入:Y (不用加定界符,不用按回车,此时yn=“Y”)
三条输入命令的异同 • INPUT命令可接受数值型、字符型、逻辑型、日期型和日期时间型数据,数据形式可以是常量、变量、函数和表达式,如果是字符串,一定要用定界符,输入完毕要按回车键结束; • ACCEPT命令只能接受字符型数据,不需要定界符,输入完毕按回车键结束; • WAIT命令只能输入单个字符,且不需要加定界符,输入完毕不需要按回车键。
4. 清除命令 格式I:CLEAR 说明:清除当前屏幕上的所有信息 格式II:CLEAR ALL 说明:关闭所有文件,清除所有内存变量 格式III:CLEAR TYPEAHEAD 说明:清除键盘缓冲区 5. 关闭文件命令 格式I:CLOSE ALL 说明:关闭所有的数据库、表以及索引文件 格式II:CLOSE <文件类型> 说明:文件类型 DATABASE 数据库文件、索引文件、格式文件 INDEX 当前工作区的索引文件 FORMAT 当前工作区的格式文件 PROCEDURE 当前工作区的过程文件 ALTERNATE 文本输出文件
6. 输出命令 1.基本输出命令 命令格式:?<表达式表> 或 ?? <表达式表> 命令功能:计算和显示表达式的值。 使用 ? 表示结果显示在下一行 使用 ?? 表示结果显示在同一行 当有多个表达式时使用 ,分隔。
2.文本输出命令 格式:TEXT <文本内容> END TEXT 说明:将文本内容原样输出 3.定位输出命令 格式:@ <行,列>SAY<数据> 说明:在指定的行、列处输出数据
示例: TEXT ######################## ######学籍管理系统###### ######################## END TEXT 示例: name = SPACE(8) age = 0 CLEAR @ 10,20 SAY “请输入姓名:” GET name @ 10,20 SAY “请输入年龄:” GET age READ
例:编程,根据输入的半径值,计算出相应的圆的周长。例:编程,根据输入的半径值,计算出相应的圆的周长。 SET TALK OFF CLEAR INPUT “请输入圆的半径:” TO R L=2*3.1416*R @10,10 SAY “圆的周长是:”+STR(L,6,3) SET TALK ON RETURN
7. 运行中断和结束命令 格式I:QUIT 说明:退出VFP,返回到操作系统状态 格式II:CANCEL 说明:结束本次程序的运行,返回到命令窗口状态 格式III:RETURN [TO MASTER] 说明:返回到调用点处。
条件 B A A B 结构程序设计 程序设计的过程:分析问题、确定任务、划分模块、建立模型、组织数据、描述操作步骤、编写程序、上机调试、分析运行结果、写出程序说明书。 流程图:就是运用一些特定的图形符号和必要的文字来描述解题步骤的图示。 三种基本程序结构流程图: 条件 A 循环结构 顺序结构 分支结构
顺序结构程序设计 顺序结构程序:自始至终严格按照程序中语句的先后顺序逐条执行,是最基本、最普遍的结构形式。 示例:编程,根据输入的半径值,计算出相应的圆的周长。 SET TALK OFF CLEAR INPUT “请输入圆的半径:” TO R L=2*3.1416*R @10,10 SAY “圆的周长是:”+STR(L,6,3) SET TALK ON RETURN
授课章节 • 第九章 程序设计 1.2 程序的基本结构——分支结构程序设计 主要内容: 单分支结构 双分支结构 多分支结构 教学目的:通过本次课掌握程序设计的基本 结构分支结构 教学重点:双分支结构、多分支结构 教学难点:语句的嵌套 教学课时:2学时 教学方法:讲授法、演示法、任务驱动
分支结构程序设计 两分支结构 多分支结构 退 出
条件表达式 语句行序列 ENDIF后面的语句 分支结构:就是按照一定的条件由判断语句或选择语句构成的双重或多重走向的程序 两分支结构 1. 简单分支 语 句 行 1)简单分支的格式: IF <条件表达式> <语句行序列> ENDIF 注意:IF和ENDIF必须成对出现 N Y 例:在“学生表”中查看“李尚清”的基本情况。 SET TALK OFF CLEAR USE 学生表 LOCATE FOR 姓名=”李尚清”
语句行序列2 语句行序列1 ENDIF后面的语句 IF FOUND() DISP ENDIF USE SET TALK ON 2. 选择分支 语 句 行 格式:IF <条件表达式> <语句行序列1> ELSE <语句行序列2> ENDIF 条件
例1:求解一元二次方程AX2+BX+C=0,系数A,B,C的值由用户通过键盘输入,当方程有实根时,屏幕显示出两根的值;当方程无实根时,屏幕显示出“方程无实根!” 例1:求解一元二次方程AX2+BX+C=0,系数A,B,C的值由用户通过键盘输入,当方程有实根时,屏幕显示出两根的值;当方程无实根时,屏幕显示出“方程无实根!” SET TALK OFF CLEAR INPUT “A=” TO A INPUT “B=” TO B INPUT “C=” TO C D=B*B-4*A*C IF D>=0 X1=(-B+SQRT(D))/(2*A) X2=(-B-SQRT(D))/(2*A) ?“方程的两根是:”+STR(X1,2)+SPACE(4)+STR(X2,2) ELSE ?”方程无实根!” ENDIF SET TALK ON RETURN
3. 判断语句嵌套 IF语句多重嵌套示意结构如下: IF<条件表达式1> <语句行序列1> ELSE IF<条件表达式2> <语句行序列2> ELSE IF<条件表达式3> <语句行序列3> ELSE ……… ENDIF3 ……… ENDIF2 ……… ENDIF1 注意: (1)IF、ELSE(可不选)、ENDIF一一 对应、互相匹配 (2)允许简单判断和选择判断语句自我嵌套或相互嵌套,但层次必须清楚,不得交叉 (3)最好采用缩格(锯齿形)的书写方式
X2+4X-1 (X≤0) 3X2-2X+1 (0<X≤10) X2+1 (X>10) Y= 例:根据键入X的值,计算下面分段函数的值,并显示结果。 程序如下: SET TALK OFF CLEAR INPUT “X=” TO X IF X>0 IF X>10 Y=X*X+1 ELSE Y=3*X*X-2*X+1 ENDIF ELSE Y=X*X+4*X-1 ENDIF ?”分段函数值为:”+STR(Y,10,2) SET TALK ON RETURN
多分支结构 格式: DO CASE CASE <条件表达式2> <语句行序列2> …… CASE <条件表达式2> <语句行序列2> [OTHERWISE <语句行序列N+1> ENDCASE[注释内容]
执行过程: 在执行DO CASE语句时,依次判断各<条件>是否满足,若<条件>满足,就执行该条件后的命令组,直到遇到下一个CASE、OTHERWISE或ENDCASE。命令组执行后不再判断其他条件,而转向执行ENDCASE后面的第一条命令。所以在一个DO CASE结构中,最多只能执行一个CASE语句。 如果没有一个<条件>满足,就执行OTHERWISE后面的命令组,直到ENDCASE。如果没有OTHERWISE,则不作任何操作就转向ENDCASE之后的第一条命令。
例:用DO CASE语句修改上面计算分段函数的例子。 SET TALK OFF CLEAR INPUT “X=” TO X DO CASE CASE X<=0 Y=X*X+4*X-1 CASE X>0.AND.X<=10 Y=3*X*X-2*X+1 CASE X>10 Y=X*X+1 ENDCASE ?”分段函数值为:”+STR(Y,10,2) SET TALK ON RETURN
例 求1~100之间全部奇数之和 SET TALK OFF STORE 0 TO x,y DO WHILE .T. x=x+1 DO CASE CASE INT(x/2)=x/2 LOOP CASE x>=100 EXIT OTHERWISE y=y+x ENDCASE ENDDO ? "0~100之间的奇数之和为:",y SET TALK ON RETURN
【例】假设收入(P)与税率(R)的关系如下表,编程求税金。程序文件名为PROG12.PRG。【例】假设收入(P)与税率(R)的关系如下表,编程求税金。程序文件名为PROG12.PRG。 0 P<800 R= 0.05 800 ≤ P<2000 0.08 2000≤P<5000 0.1 P≥5000 SET TALK OFF CLEAR INPUT “请输入收入:” TO P DO CASE CASE P<800 R=0 CASE P<2000 R=0.05
CASE P<5000 R=0.08 OTHERWISE R=0.1 ENDCASE TAX=P*R ? ”税金为:”,TAX SET TALK ON RETURN
使用分支语句应注意的几点 (1)IF…… ENDIF和DO CASE…… ENDCASE 必须配对使用,DO CASE与第一个CASE〈条件表达式〉之间不应有任何命令。 (2)〈条件表达式〉可以是各种表达式或函数的组合,其值必须是逻辑值。 (3)〈命令行序列〉可以由一个或多个命令组成,可以是条件控制语句组成的嵌套结构。 (4)DO CASE…… ENDCASE 命令,每次最多只能执行一个〈命令行序列〉。在多个CASE项的〈条件表达式〉值为真时,只执行第一个〈条件表达式〉值为真的〈命令行序列〉,然后执行ENDCASE的后面的第一条命令。
循环结构程序设计 当型循环结构 固定次数的循环结构 表扫描循环结构 多重循环结构 退出
授课章节 • 第九章 程序设计 1.2 程序的基本结构——循环结构程序设计 主要内容:当型循环结构 固定次数的循环结构 教学目的:通过本次课掌握程序设计的基本 结构循环结构 教学重点:当型循环结构、 固定次数的循环结构 教学难点:循环结构 教学课时:2学时 教学方法:讲授法、演示法、任务驱动
语句行序列 N Y 循环体内语句 修改条件表达式 ENDDO后面的语句 循环结构 循环结构则能够使某些语句或程序段重复执行若干次。如果某些语句或程序段需要在一个固定的位置上重复操作,使用循环是最好的选择。1.DO WHILE循环语句又叫当循环语句 【格式1】DO WHILE <条件表达式> <语句序列> ENDDO 条件表达式 一个循环结构一般应具备如下的条件: (1)循环的初始条件:一般为给循环控制变量赋初值; (2)循环头:循环语句的起始,设置、判断循环条件; (3)循环尾:循环语句的结尾; (4)循环体:位于循环头和循环尾之间、循环控制重复执行的语句序列
假 真 后面的语句 END 【格式2】DO WHILE <条件表达式> <语句序列1> [LOOP] <语句序列2> [EXIT] <语句序列3> ENDDO 条件表达式 循环体 [LOOP] • LOOP语句:强行返回到循环开始语句。 • EXIT语句:强行跳出循环,接着执行ENDDO后的语句 [EXIT] DO
【例1】编程求1+2+3+……+100之和。程序文件名为PROG16.PRG。【例1】编程求1+2+3+……+100之和。程序文件名为PROG16.PRG。 SET TALK OFF CLEAR S=0 I=1 DO WHILE I<=100 S=S+I I=I+1 ENDDO ? ”1+2+3+……+100=”,S SET TALK ON RETURN
例2:编程求和S=1+2+3+…+100。 • SET TALK OFF • CLEAR • STORE 0 TO N,S • DO WHILE N<=100 • S=N+S • N=N+1 • ENDDO • ?”累加和S=”,S • SET TALK ON • RETURN
例3:令计算机从0开始计数,每计一个数,便判断该数是否为偶数,若是偶数则接着计下一个数;若是奇数则将其累加,若累加和大于250,则计数结束;若累加和不大于250则继续计数,编写程序。例3:令计算机从0开始计数,每计一个数,便判断该数是否为偶数,若是偶数则接着计下一个数;若是奇数则将其累加,若累加和大于250,则计数结束;若累加和不大于250则继续计数,编写程序。 SET TALK OFF CLEAR STORE 0 TO X,Y DO WHILE .T. X=X+1 DO CASE CASE INT(X/2)=X/2 LOOP CASE X+Y>250 EXIT OTHERWISE Y=X+Y ?”Y=”,Y ENDCASE SET TALK ON ENDDO RETURN