




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、VFP程序设计§1 数据与数据运算 &§2 结构化程序设计 &§3 程序结构 &§4 子程序、过程与自定义函数 &§ 1 数据与数据运算一、数据类型数据是反映现实世界中客观事物属性的记录,它包括两个方面:数据内容与数据形式。数据内容就是数据的值,数据形式就是数据的存储形式和操作使用方式,也称为数据类型。VFP6系统为使用户建立和操作数据库更加方便,将系统中所有操作、处理的数据,分为几种不同数据类型:字符型、数值型、日期型、日期时间型、逻辑型、备注型、通用型、货币型、二进制字符型和二进制备注型。二、常量与变量在VF
2、P系统中,数据可用常量、变量、数组表示,数据还可以用字段、记录和对象中,由它们存储、容纳各种类型的数据。(一)常量常量是在命令或程序中可直接引用、具有具体值的命名数据项,其特征是在整个操作过程中它的值和表现形式保持不变。VFP按常量取值的数据类型,将常量分为6种类型:数值型常量、浮点型常量、字符型常量、逻辑型常量、日期型常量、日期时间型常量。1、数值型常量由数字、小数点和正负号组成,表示整数或实数值。如:100,-21,15.31,-21092.5041等分别是数值型常量中的整数和实数。2、字符型常量由任意ASCII字符、汉字、空格或数字等组成的字符型数据,字符型常量又称为字符串。为与其他类型
3、常量、变量和标识符相区别,VFP要求将字符串中所有字符,用一对双引号“"”或单引号“'”或方括号“ ”作为定界符对括起来。如“I am a student.”,中华人民共和国,Visual FoxPro数据库系统都是字符串。3、日期型常量日期型常量是表示日期值的数据,其默认格式是mm/dd/yyyy。如10/01/04和10/01/2004均表示2004年10月1日这一日期常量值。4、逻辑型常量逻辑型常量就是表示逻辑判断结果“真”或“假”的逻辑值。逻辑常量只有真和假两种值,分别用(.T.或.y.)和(.F.或.n.)表示真和假。VFP中在表示逻辑常量的字母左右加注圆点符“.”
4、以示区别。(二)变量变量是在操作过程中可以改变其取值或数据类型的数据项。确定一个变量,需要确定其三个要素:变量名、数据类型和变量值。1、内存变量内存变量是一种存在于计算机内存中变量,是一种单个数据元素的临时性变量,需要时临时定义,不用时可随时释放。内存变量分为用户自定义内存变量和系统内存变量。(1)内存变量的建立建立内存变量就是给内存变量赋值。内存变量赋值既可定义一个新的内存变量,也可改变已朋内存变量的值或数据类型。【格式】内存变量=表达式【功能】计算<表达式>的值并赋值给指定内存变量。【例】A=3+2y=2*x+5(2)内存变量的显示输出可以用两个命令在屏幕上显示输出内存变量的值
5、。【格式1】?表达式表 AT 列号【格式2】?表达式表 AT 列号【功能】计算表达式表中各表达式的值,并在屏幕上指定位置显示输出各式的值。格式1:不管有无指定表达式表,都会输出一个回车换行符。如果指定了表达式表,各表达式值将在下一行的起始处输出;格式2:不会输出一个回车换行符,各表达式值在屏幕上当前行光标所在位置直接输出;表达式表:多个逗号两两分隔的表达式,各表达式的值输出时,以空格分隔;AT 列号:该子句指定表达式值从指定列开始显示输出。AT的定位只对它前面的一个表达式有效,多个表达式必须用多个AT子句分别定位输出,而且可反序定位。【例】?A,B,C AT 20?A2、数组数组是一种结构化的
6、变量,是一组具有相同名称、以下标相互区分的有序内存变量。一个数组通常都包含多个数据元素。Visual FoxPro系统中只允许使用一维数组(相当于数列)和二维数组(相当于行列式或矩阵)。(1)数组元素数组中各有序变量(数据元素)组成数组的成员,称为数组元素。数组元素实质上是一个内存变量,也称数组变量,它们具有相同变量名即数组名,彼此以下标区分;数组元素的名称(变量名)用数组加下标构成。如A(1)、B(2,3)分别表示一维数组A的第1个数组元素,二维数组B中第2行第3列的数组元素;下标必须用圆括号对括;一维数组的元素只有一个下标,二维数组的元素有两个以逗号分隔的下标(也可用一个下标表示);数组元
7、素的下标均从1开始,各元素的初始值为 .F. ;数组元素的数据类型决定于最后赋值的数据类型;不同元素的数据类型可以不同;数组元素与普通内存变量一样操作,可以赋值和引用。(2)数组的定义数组必须先定义后使用,定义数组是向系统申请数组元素在内存中存储空间。【格式】DIMENSION 数组名1(N1, N2)DECLARE 数组名1(N1 , N2) ,数组名2(N3 ,N4)【功能】定义一维或二维数组。(3)数组的元素的排列一维数组是按下标从小到大的顺序排列的,二维数组的排列是先按下标1,再按下标2的从小到大的顺序排列。如:A(5)排列如下表所示:A(1)A(2)A(3)A(4)A(5)B(3,4
8、)排列如下表所示:B(1,1)B(1,2)B(1,3)B(1,4)B(2,1)B(2,2)B(2,3)B(2,4)B(3,1)B(3,2)B(3,3)B(3,4)其中:B(7)相当于B(2,3)(4)数组的赋值与引用数组元素的赋值与引用,与普通内存变量的规则相同。【例】DIME A(5) , B(3,4)STORE “OK” TO AB(1,1)=10B(1,2)=20?A(3),B(1,2),B(2,3)三、常用函数Visual FoxPro系统中,函数是一段程序代码,用来进行一些特定的运算或操作,支持和完善命令的功能,帮助用户完成各种操作与管理。函数的一般形式为: 函数名(参数1 , 参数
9、2)Visual FoxPro的函数由函数名与参数(即自变量)两部分组成。参数必须用圆括号对括起来,如有多个参数,各参数以逗号分隔;有些函数可省略参数,或不需参数,但也必须保留括号; (一)字符函数字符函数是处理字符型数据的函数,其自变量或函数值中至少有一个是字符型数据。函数中涉及的字符型数据项,均以C表示。1、字符串长度函数【格式】LEN(C)【功能】返回字符串C的字符数(长度)。函数值为N型。2、取子字符串函数【格式】SUBSTR(C, N1, N2)【功能】返回从字符串C中第N1个字符开始,截取N2个字符的子串。LEFT(C, N) 从字符串C左边取N个字符RIGHT(C, N) 从字符
10、串C右边取N个字符3、子串位置函数【格式】AT(C1, C2)【功能】返回字符串C1在字符串C2中的起始位置。函数值为整数。如果串C2不包含串C1,函数返回值为零。4、删除字符串空格函数【格式】RTRIM | TRIM(C)【功能】删除字符串C尾部空格字符。LTRIM(C) 删除字符串C的前导空格字符。ALLTRIM(C) 删除字符串C的前导和尾部空格字符。5、空格函数【格式】SPACE(N)【功能】返回一个包含N个空格的字符串。6、大小写字母转换函数【格式】LOWER(C) | UPPER(c)【功能】LOWER( )将字符串C中字母全部变成小写字母,UPPER( )将字符串C中字母全部变成
11、大写字母,其它字符不变。(二)数值函数数值函数用于数值运算,其自变量与函数都是数值型数据。1、取绝对值函数【格式】ABS(N)【功能】计算N(数值表达式)的值,并返回该值的绝对值。2、取整函数【格式】INT(N)【功能】计算数值表达式N的值,返回该值的整数部分。3、四舍五入函数【格式】ROUND(N1, N2)【功能】返回N1四舍五入的值,N2表示保留的小数位数。4、最大值和最小值函数【格式】MAX | MIN(N1, N2 , N3.)【功能】返回数值表达式中的最大值MAX( )和最小值MIN( )。5、求余数函数(求模函数)【格式】MOD(N1, N2)【功能】返回N1除以N2的余数。余数
12、的小数位数与N1相同,符号与N2相同。6、平方根函数【格式】SQRT(N)【功能】求非负N的平方根。7、符号函数【格式】SIGN(N)【功能】返回N的符号。正数、零、负数分别返回1、0、-1。(三)转换函数在数据库应用的过程中,经常要将不同数据类型的数据进行相应转换,满足实际应用的需要。Visual FoxPro系统提供了若干个转换函数,较好地解决了数据类型转换的问题。1、数值转换为字符串【格式】STR(N ,长度,小数位数)【功能】将N的数值转换成字符串形式。函数值为C型。2、字符串转换为数值【格式】VAL (C)【功能】将C串中数字转换成对应数值,转换结果取两位小数。函数值为N型。3、字符
13、转换为ASCII码值【格式】ASC(C)【功能】返回C串首字符的ASCII码值。函数值为N型。4、ASCII码转换为相应字符【格式】CHR(N)【功能】返回以N值为ASCII码的ASCII字符。函数值为C型。四、运算符与表达式在Visual FoxPro系统中,表达式是由常量、变量、函数及其他数据容器单独或与运算符组成的有意义的运算式子。运算符是对数据对象进行加工处理的符号,根据其处理数据对象的数据类型,运算符分为算术(数值)运算符、字符运算符、日期时间运算符、逻辑运算符和关系运算符五类,相应的,表达式也分为算术表达式、字符表达式、日期时间表达式、逻辑表达式和关系表达式五类。¨ 在V
14、isual FoxPro系统中,各类运算的优先顺序如下:圆括号>算术和日期运算>字符串运算>关系运算>逻辑运算用户也可以通过给表达式加圆括号的方式,改变其默认运算顺序。如果多个同一级别的运算,则按在表达式中出现的先后顺序进行运算。(一)算术表达式算术表达式又称数值表达式,其运算对象和运算结果均为数值型数据。数值运算符的功能及运算优先顺序,如表所示。表中运算符按运算优先级别从高到低顺序排列。算术运算符运算符功能表达式举例运算结果优先级别( )圆括号(2-5)*(3+2)-15最高最低-取相反数-(3-8)5*、乘幂2*5、3232、9*、/乘、除2*10、25/520、5
15、%取余数20%32+、-加、减36+19、29-4755、-18(二)字符表达式字符表达式是由字符运算符将字符型数据对象连接起来进行运算的式子。字符运算的对象是字符型数据对象,运算结果是字符常量或逻辑常量。下表为字符运算符的功能。字符运算符运算符功能表达式举例运算结果+串1+串2:两串顺序相连接12 +5612 56-串1-串2:串1尾空格移到串2尾后再顺序相连接12 -561256 "+"与"-"都是字符连接运算符,都将两字符串顺序连接,但“+”是直接连接,“-”则将串1尾部所有空格移到串2尾部后再连接。(三)关系表达式由关系运算符连接两个同类数据对象
16、进行关系比较的运算式称为关系表达式。关系表达式的值为逻辑值,关系表达式成立则其值为“真”,否则为“假”。关系运算符运算符功能表达式举例运算结果<小于15<4*6.T.>大于A > 1.T.=等于2+4 = 3*5.F.=串全等比较abc=abcabc.F.<=小于或等于'abc' <= 'AB'.F.>=大于或等于10-10-02>=10/01/02.T.<>、#、!=不等于5 <> -10.T.$包含于。串1$串2:串1是否为串2子串1234$a123451234$34512.T.F.关系
17、运算符的优先级别相同。关系表达式运算时,就是比较同类两数据对象的“大小”,对于不同类型的数据,其“大小”或者是值的大小,或者是先后顺序。日期或日期时间数据以日期或时间的先后顺序为序。 (四)逻辑表达式由逻辑运算将逻辑型数据对象连接而成的式子称为逻辑表达式。逻辑表达式的运算对象与运算结果均为逻辑型数据。逻辑运算符前后一般要加圆点“.”标记,以示区别。逻辑运算符运算符功能优先级别.NOT. (!)逻辑非,取其右边逻辑值的相反值最高最低.AND.逻辑与,两边的逻辑值均为真才得真.OR.逻辑或,两边的逻辑值均为假才得假对于各种逻辑运算,其运算规则可由逻辑运算真值表确定,如下表所示就是逻辑运算真值表。&
18、#167; 2 结构化程序设计结构化程序设计的方法:自顶向下,逐步求精。结构化程序由顺序结构、选择结构、循环结构三种基本结构组成。VFP提供面向过程的程序设计和面向对象的程序设计方法。面向过程的程序设计是用结构化编程语言来实现编写程序。具体就是告诉计算机如何一步一步解决问题,即要求计算机“怎么做”。它不依赖具体的机器。面向对象的程序设计适于解决大型的任务,设计程序时只需告诉计算机“做什么”,而不用说明“怎么做”。它不依赖具体的机器。VFP程序是由一系列命令组成,又称命令文件或程序文件。运行程序文件就是执行文件中的各条命令。一、引例先看一个完整的VFP过程化程序实例,从中可以引出程序的几个基本概
19、念。*程序示例:求圆形的面积。CLEAR&&清除主窗口中的信息SET TALK OFF&&关闭命令窗口对话INPUT "请输入圆的半径,R=" TO R&&输入圆的半径S=PI( )*R2&&计算圆的面积? "圆的面积=",S&&输出圆的面积SET TALK ON&&打开命令窗口对话RETURN&&返回命令窗口NOTE 程序结束有关此Visual FoxPro程序的几点说明:注释语句【格式1】* 注释内容每一行开头均可加此注释【格式2】NOTE
20、 注释内容同上【格式3】&& 注释内容行尾注释【功能】增强程序文件易读性,编译时注释内容不会被执行。NOTE 注释一行写不下可加续行符”;”, &&注释不能用在命令语句行续行符”;”的后面。对话开关语句【格式】SET TALK OFF | ON【功能】关闭或打开命令执行时的对话开关。命令的分行Visual FoxPro程序是命令行的序列,每个命令都以回车键结束,一行只能写一条命令;若一条命令太长,一行写不下,也可分行书写,并在分行处加上续行符“;”,再按回车键。程序的结束执行程序文件时,将依次执行文件中的命令,直到所有命令执行完毕,或者执行到以下命令:CANCA
21、L:终止程序运行,清除所有的私有变量,返回命令窗口;RETURN:结束程序执行,返回调用它的上级程序,若无上级程序则返回命令窗口;二、程序中常用的简单语句一个程序如果没有输出操作(即将程序结果显示出来)就没有什么实用价值,而如果没有输入操作(即给变量提供数据),则必然缺乏灵活性。VFP提供多种方法来实现信息的输入和输出。(一)输入语句1、赋值输入语句在编写程序时,给变量提供数据可以用赋值语句,多用于给变量赋初值。【格式1】STORE 数据 TO变量名表【格式2】变量名=表达式【功能】给变量赋值,其中格式1可以同时给多个变量赋同一个值,而格式2只能给一个变量赋一个值。而在程序运行过程中,往往需要
22、根据实际情况输入数据赋值给变量,这就需要采用交互式数据输入语句。2、交互式输入语句INPUT命令【格式】INPUT 提示信息 TO 内存变量【功能】在程序执行过程中,将用户交互式输入的内容赋值给指定内存变量【例】从键盘输入两个任意正数,编程求以两数为边长的矩形面积。程序文件名为PROG4.PRGSET TALK OFFCLEARINPUT“矩形的边长a为:” TO AINPUT“矩形的边长b为:” TO BS=A*B?“矩形的面积为:”, SSET TALK ONRETURN【练习】编写一个能同时求矩形面积与周长的程序。(二)输出语句1、简单输出语句【格式】?|?表达式【功能】将表达式的值输出
23、(?)到下一行起始处,或直接输出(?)到当前光标所在位置。2、格式输出语句【格式】行号,列号 SAY 表达式【功能】将表达式的值在指定位置输出到屏幕上。【说明】与格式输入命令相同, SAY。§ 3 程序结构Visual FoxPro系统提供的命令丰富,且功能强大,把这些命令和程序设计语句有效地组织在一起,就形成了实现某一特定功能的程序。所谓程序设计就是通过对实际问题的分析,确定解题算法,并应用程序设计语言提供的命令或语句将解题算法描述为计算机处理的语句序列(即程序)。所谓结构化程序设计,就是采用自顶向下逐步求精的设计方法和单入口单出口的控制结构,即顺序、分支、循环三种基本结构构成。一
24、、顺序结构顺序结构是一种最简单的结构。在这种结构中,程序根据语句中的命令的书写顺序依次执行的命令序列。VFP系统中的大多数命令都可以作为顺序结构中的语句。【例】编程实现输入某个三角形的底和高,计算其面积。 SET TALK OFFCLEARINPUT “请输入三角形的底:” TO DINPUT “请输入三角形的高:” TO GAREA=D*G/2&&计算面积?AREA&&输出面积SET TALK ON CANCEL【例】某商场营业员工资的计算方法是:每月600元的基本工资加该月总销售额的8.5提成。要求编一程序,输入某营业员的月总销售额,计算并显示该营业员的月收
25、入。二、分支结构(选择结构)分支结构是在程序执行时,根据不同的条件,选择执行不同的程序语句,用来解决有选择、有转移的诸多问题。分支结构又称选择结构,其形式有如下三种:单向分支、双向分支和多路分支。TF条件语句序列(一)单向选择语句单向选择语句,即根据用户设置的条件表达式的值,决定某一操作是否执行。【格式】IF 条件表达式 语句序列 ENDIF【功能】该语句首先计算条件表达式的值,当条件表达式的值为真时,执行语句序列;否则,执行ENDIF后面的第一条命令。【例】求一元二次方程AX2BXC0的实根。SET TALK OFFCLEARINPUT “A=” TO AINPUT “B=” TO BINP
26、UT “C=” TO CZ=B2-4*A*CIF Z>=0 X1=(-B+SQRT(Z)/(2*A) X2=(-B-SQRT(Z)/(2*A) ?”X1=”, X1, ”X2=”, X2ENDIFSET TALK ONRETURN(二)双向选择TF条件语句序列1语句序列2双向选择语句,即根据用户设置的条件表达式的值,选择两个操作中的一个来执行。【格式】IF 条件表达式 语句序列1 ELSE 语句序列2ENDIF【功能】该语句首先计算条件表达式的值,当条件表达式的值为真时,执行语句序列1中的命令;否则,执行语句序列2中的命令;执行完语句序列1或语句序列2后都将执行ENDIF后面的第一条命令
27、。【例】编写一密码校验程序(假设密码为ABC)。SET TALK OFFCLEARACCEPT “请输入您的密码:” TO AIF A= “ABC” CLEAR ?“欢迎使用本系统!”ELSE ? “密码错误!”ENDIFSET TALK ONCANCEL【例】根据输入的百分制成绩,转换成等级分(85以上优秀、60以上合格、60以下不合格)。CLEARSET TALK OFFINPUT “请输入成绩:” TO CJIF CJ>=85&&判断成绩等级 ? “优秀”ELSE&&成绩小于85之后再作判断 IF CJ>=60 ? “合格” ELSE ? “不
28、合格” ENDIF&&内层判断结束ENDIF&&外层判断结束SET TALK ONCANCEL(三)多路分支选择多路分支语句,即根据多个条件表达式的值,选择执行多个操作中的一个对应执行。 【格式】 DO CASE CASE 条件表达式1 语句序列1 CASE 条件表达式2 语句序列2 CASE 条件表达式N 语句序列N OTHERWISE 语句序列N+1 ENDCASE【功能】该语句根据给出的N个条件表达式的值,选择N+1个语句序列中的一个执行。当所有CASE中条件表达式的值都是假时,如果有OTHERWISE项,则执行语句序列N+1,再执行ENDCASE后面的第
29、一条命令;否则,直接执行ENDCASE后面的第一条命令。【例】假设收入(S)与所得税税率(R)的关系如下表,编程计算个人所得税的缴费方法。0S800R=0.05800S20000.082000S50000.1S5000程序结构如下:SET TALK OFFCLEARINPUT “您的月工资收入:” TO SDO CASE CASE S<800 TAX =0 CASE S<2000 TAX =0.05*(S-800) CASE S<5000 TAX =0.08*(S-800) OTHERWISE TAX =0.1*(S-800)ENDCASE? “应缴个人所得税:”,TAXSE
30、T TALK ONRETURN【说明】使用分支语句应注意的几点(1)IF ENDIF和DO CASE ENDCASE必须配对使用,DO CASE与第一个CASE 条件表达式之间不应有任何命令。(2)条件表达式可以是各种表达式或函数的组合,其值必须是逻辑值。(3)语句序列可以一个或多个命令组成,或是其他控制语句构成的嵌套结构。(4)DO CASEENDCASE命令,每次最多只能执行一个语句序列。在多个CASE项的条件表达式值为真时,只执行第一个条件表达式值为真的语句序列,然后执行ENDCASE的后面的第一条命令。【例】编写身高体重测试仪测量程序。体质指数(BMI)=体重(kg)÷身高平
31、方(m2)。BMI<20瘦弱,2024正常,>24超重,>26肥胖。程序结构如下:CLEARINPUT “您的身高(m):” TO HINPUT “您的体重(kg):” TO GBMI=G/H2DO CASE CASE BMI<=20 MessageBox(“您的体形偏瘦,注意加强营养!”,16 ,“提示”) CASE BMI>20 .AND. BMI<=24 MessageBox(“您的体形完全正常,继续保持!”,64 ,“提示”) CASE BETWEEN(BMI,24,26) MessageBox(“您的身材有些超重,注意饮食和锻炼!”,48,“提示”
32、) OTHERWISE MessageBox(“您太胖了,赶紧减肥、加强锻炼!”,16 ,“提示”)ENDCASERETURN三、循环结构在用计算机解决实际问题时,经常会遇到重复处理的内容,因此就需要在程序中将某些语句重复执行。循环结构是按照一定的条件使某些语句或程序段重复执行若干次。这里给大家介绍的是WHILE条件循环和FOR步长循环(一)当循环语句 DO WHILE 【格式】 DO WHILE 条件表达式 语句序列1 ENDDO【功能】根据指定条件控制循环体的执行。【说明】(1)DO WHILEENDDO之间的语句序列称为循环体,是被控制重复执行的部分。(2)DO WHILE<条件&
33、gt;是循环语句的起始,通过<条件>控制循环。其控制过程是:进入DO WHILE时,首先判断条件是否成立,若为真,则执行一遍循环体,当遇到ENDDO时,返回到循环起始DO WHILE,再次判断条件是否成立,执行循环体,直到条件为假时跳出循环,转而执行ENDDO后续语句。特例,当一开始条件就不成立,将立即退出循环,一次也不执行循环体。(3)如果循环体中含有LOOP语句,则当遇到LOOP时强行返回到循环开始语句DO WHILE,再判断条件;如果循环体中含有EXIT语句,则当遇到EXIT时强行跳出循环,接着执行ENDDO后的语句。通常LOOP或EXIT出现在循环体内的选择语句中,根据条件
34、决定是LOOP还是EXIT。(4)在执行循环体过程中,每执行一遍循环体,一定要修改一次条件,否则无法实现对循环次数的控制,当条件永远为真时,将会造成死循环。循环条件设置是构成循环结构的重要因素,常见的几种条件设置方法:计数形式键盘输入数据直接用.T.作为条件,用EXIT跳出循环等。【例】编程求1210之和。(计数形式)SET TALK OFFCLEARS=0I=1DO WHILE I<=10S=S+II=I+1ENDDO?"1210",SSET TALK ONRETURN【例】编程求能使任一英文字符串颠倒输出。(计数形式)CLEARINPUT "输入一个字符
35、串:" TO S1S2=""I=LEN(S1)DO WHILE I>=1S2=S2+SUBSTR(S1,I,1)I=I-1ENDDO?S2RETURN【例】编程求1100之间的奇数之和。(直接用.T.作为条件)SET TALK OFFCLEARS=0I=1DO WHILE .T.S=S+II=I+2IF I>100EXITENDIFENDDO?"100以内的奇数和为:",SSET TALK ONCANCEL(二)步长循环语句 FOR NEXT【格式】FOR 循环变量=初值 TO 终值 STEP 步长循环体语句序列ENDFOR | N
36、EXT使用FOR循环语句的有关说明:省略STEP 步长,则步长为默认值1;初值、终值和步长都可以是数值表达式,但这些表达式仅在循环语句开始执行时计算一次。循环语句执行过程中,初值、终值和步长是不会改变的,并由此确定循环的次数;可以在循环体内改变循环变量的值,但会改变循环执行次数;EXIT和LOOP命令可以出现在循环体内。执行LOOP命令时,结束本次循环,循环变量增加一个步长值,返回FOR循环头判断循环条件是否成立。执行EXIT命令时,程序跳出循环,执行循环尾后面的语句【例】从键盘输入10个数,编程找出其中的最大值。SET TALK OFFCLEARINPUT “请从键盘输入一个数:” TO A
37、MAX = AFOR I=2 TO 10INPUT “请从键盘再输入一个数:” TO AIF MAX < AMAX = AENDIFENDFOR?“最大值为:”, MAXSET TALK ONRETURN 【注】使用循环语句时应注意的几点(1)DO WHILE和ENDDO、FOR和ENDFOR必须配对使用。(2)语句序列可以是任何VFP语句,也可以是循环语句,即可以为多重循环。(3)循环变量应是数值型的内存变量或数组元素。(三)循环嵌套循环嵌套是指在一个循环结构的循环体中又包含另一个循环。我们称外层循环为外循环,被包含的循环为内循环。内循环的循环体必须完全包含在外循环的循环体中,不能相互
38、交叉。书写时采用分层缩进的写法,使程序结构更加清晰以及便于阅读程序。 【例】编程输出下三角形“九九乘法表”。SET TALK OFFCLEARFOR X=1 TO 9&&乘法表行标 FOR Y=1 TO X&&乘法表列标 S=X*Y ?STR(Y,1)+"*"+STR(X,1)+"="+STR(S,2)+" " NEXT ? &&换行ENDFORSET TALK ONRETURN【例】编程输出右图。*SET TALK OFFCLEARFOR I=1 TO 4&&控制显示*
39、的行数 FOR J=1 TO 4-I&&控制*前面的空格数 ? " " NEXT FOR K=1 TO 2*I-1&&控制显示*的个数 ? " *" NEXT ? &&换行ENDFORSET TALK ONRETURN§ 4 过程与自定义函数一、过程在程序设计中,有一些程序段需要反复执行多次,这些程序段是分散在同一程序的不同位置或在不同程序中重复执行,可将其与嵌入它的程序分开,形成独立的程序序列,待使用时再调入程序中,以实现不同位置上的重复操作。这样做增强了程序的可读性和模块化。我们称这种具有独立
40、功能而且可以被其它程序调用的程序序列为过程。【例】求出圆面积和周长。*MAIN.PRGSET TALK OFFSET PROCEDURE TO SUBL=0A=0INPUT “半径为:” TO RDO AREA WITH R,ADO CIRCLE WITH R,L?“圆面积为:”,A?“圆周长为:”,LSET PROCEDURE TOSET TALK ONCANCEL* SUB.PRGPROCEDURE AREAPARAMETERS X,YY=3.14159*X*XRETURNPROCEDURE CIRCLEPARAMETERS X,YY=2*3.14159*XRETURN【例】编程用递归方法
41、求N的阶乘。N!= 1(N=0)N*(N-1)!(N>=1)SET TALK OFFCLEARINPUT “请输入N:” TO NS=1DO SUB1 WITH N,S?STR(N,2)+“!=”,SSET TALK ONPROCEDURE SUB1&&求阶乘的过程PARAMETER X,YIF X>=1DO SUB1 WITH X-1,Y&&递归调用Y=X*YENDIFRETURN二、自定义函数自定义函数和过程一样,可以以独立的程序文件形式单独存储在磁盘上,也可以放在过程文件或直接放在程序文件中。与过程所不同的是,自定义函数不管其是否带参数,其在完
42、成某种操作后必须返回一个函数值;且函数调用不是通过DO命令来实现的,与系统函数一样是通过函数名引用的,并且在程序中只能用来组成表达式。1、自定义函数格式:【格式】FUNCTION <函数名>PARAMETER <形式参数表><函数体语句序列>RETURN <表达式>【说明】FUNCTION <函数名>是函数说明语句,调用函数时就是通过函数名引用的。PARAMETER是参数说明语句,形式参数表列出了调用时应该输入的参数(只能是输入参数);若无参数可省略。RETURN后的表达式为函数的返回值。2、自定义函数的调用【格式】函数名( 实际参数
43、表)【功能】用实参替换函数中的形参,运行函数体并返回函数值.【例】计算圆面积SET TALK OFFCLEARINPUT ”请输入圆的半径:” TO R?”圆的面积为:”,AREA(R) &&AREA()为计算面积的函数SET TALK ONFUNCTION AREA&&计算面积的函数PARAMETER X&&形参说明RETURN(3.1416*X2)【例】将十进制整数转换成二进制数SET TALK OFFCLEARINPUT ”请输入一个十进制整数:” TO D?”转换成二进制数为:”,D2B(D)&&D2B()为十进制转二进制
44、函数SET TALK ONRETURNFUNCTION D2B&&转换函数PARAMETER N&&形参说明B=”DO WHILE N>0 B=STR(MOD(N,2),1)+B N=INT(N/2)ENDDORETURN B§ 5 经典程序范例一、历年程序题【2002】求两个整数m和n的最大公约数,最小公倍数【2006】。CLEARINPUT "M=" TO MINPUT "N=" TO NIF M<N T=M M=N N=TENDIFA=MB=NDO WHILE B#0 T=A%B A=B B=T
45、ENDDO?"最大公约数为:",A?"最小公倍数为:",M*N/ACANCEL【2003】输人三个数,编程求出三个数中最大数和最小数,并显示输出。【2007】CLEARINPUT "输入第一个数" TO AINPUT "输入第二个数" TO BINPUT "输入第三个数" TO CIF A<B T=A A=B B=TENDIFIF B<C T=B B=C C=TENDIFIF A<C T=A A=C C=TENDIF?”max=”,max, ”min=”,minRETURN【2
46、003】从键盘输入一个正整数n,编程求出12+22+n2,并将结果显示输出。CLEARINPUT "输入一个正整数" TO NS=0FOR I=1 TO N S=S+I2ENDFOR?”S=”,SRETURN【2004】整型变量a,b,c中分别存放各不相同的数值。编写程序,实现a,b,c从大到小排序,并以此顺序输出排序后的三个数。CLEARINPUT "输入第一个数" TO AINPUT "输入第二个数" TO BINPUT "输入第三个数" TO CIF A<B T=A A=B B=TENDIFRETURN
47、【2003】已知三个矩阵A(3×2)、B(2×4)、C(3×4),分别由数组A3,2、B2,4、C3,4表示,请编程实现矩阵乘法,即C=A×B(C(i,j)=A(i,1)×B(1, j)+A(i,2)×B(2,j)。CLEADECLARE A(3,2),B(2,4),C(3,4)FOR I=1 TO 3 FOR J=1 TO 2 INPUT "A(3,2)矩阵元素" TO A(I,J) ENDFORENDFORFOR I=1 TO 2 FOR J=1 TO 4 INPUT "B(2,4)矩阵元素"
48、; TO B(I,J) ENDFORENDFORFOR I=1 TO 3 FOR J=1 TO 4 C(I,J)=0 FOR K=1 TO 2 C(I,J)=C(I,J)+A(I,K)*B(K,J) ENDFOR ENDFORENDFORFOR I=1 TO 3 ? FOR J=1 TO 4 ?C(I,J) ENDFORENDFORRETURN【2004】输入任意自然数n和变量x,利用函数方式计算Y的值。(公式:Y=l+x+2x2+3x3+nxn)CLEARINPUT "请输入n:" TO NINPUT "请输入x:" TO XY=1FOR I=1 TO
49、 N Y=Y+FT(X,I)ENDFOR?"函数值为:",SFUNCTION FTPARA A,BRETURN B*ABCANCELab b bc c c c cd d d d d d dc c c c cb b ba【2004】编写程序输出以下图案(必须利用循环语句控制)SET TALK OFFCLEARFOR I=1 TO 4 FOR J=3+I TO 5-I STEP -1 I,J SAY CHR(I+96) ENDFORENDFORFOR I=5 TO 7 FOR J=I-3 TO 11-I I,J SAY CHR(104-I) ENDFORENDFORSET TA
50、LK ONRETURN 【2005】通过键盘输入一串字符,统计并输出其中英文字母的个数。CLEARACCEPT "请输入字符串:" TO SN=0FOR I=1 TO LEN(S) C=SUBSTR(S,I,1) IF ASC(C)>=ASC(A); .AND.ASC(C)<=ASC(Z); .OR. ASC(C)>=ASC(a); .AND.ASC(C)<=ASC(z) N=N+1 ?C ?N ENDIFENDFOR?"英文字符数共计:",N,"个"RETURN【2005】已有按从小到大的顺序排列的10个数,
51、现输入一个数,要求插入到数列中。插入后数列仍然按从小到大顺序排列。CLEARDECLARE N(11)FOR I=1 TO 10 INPUT "输入一个数:" TO N(I)ENDFORINPUT "再输入一个数:" TO N(11)J=10DO WHILE N(J+1)<N(J) T=N(J+1) N(J+1)=N(J) N(J)=T J=J-1ENDDO FOR I=1 TO 11 ?"N("+STR(I,2)+")=", N(I)ENDFORRETURN【2006】求lA+2A+3A+10A。CLEAR
52、INPUT "A=" TO AS=0FOR I=1 TO 10 S=S+I*AENDFOR?"S=",SRETURN【2006】从键盘输入10个数存人数组a中,统计数组下标是奇数且数组元素值为偶数的元素个数。CLEARK=0DIME A(10)FOR I=1 TO 10INPUT "A(I)=" TO A(I)NEXTFOR I=1 TO 10 STEP 2IF A(I)%2=0 K=K+1ENDIFENDFOR?"K=",KRETURN【2007】某班有45名学生参加“专升本”考试。现要求从键盘输入全班一门课的成
53、绩,输出该课程的平均分、及格人数及其百分比。CLEARSTORE 0 TO K,SDIME A(45)FOR I=1 TO 45INPUT "输入成绩:" TO A(I)NEXTFOR I=1 TO 45S=S+A(I)IF A(I)>=60 K=K+1ENDIFENDFOR?"平均分",S/45?"及格人数",K,"占百分比",K/45RETURN【2007】数组a中已存放了10个由小到大排列的数。现从键盘输入一个数x,要求删除数组中与其相同的数,并将后续的数依次前移,最后输出剩余的数。CLEARK=0DIME A(10)FOR I=1 TO 10INPUT "A(I)=" TO A(I)NEXTINPUT "X=" TO XFOR I=1 TO 10IF X=A(I) For j=I to 9A(j)=A(j+1)nextENDIFENDFORFOR I=1 TO 10?"A(I)=",A(I)NEXTRETURNl 按照如下公式求出累加和Sn=a+aa+aaa+.+aa.a(n个)CLEARINPUT "a=&quo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 应对学习压力主题课件
- 河南单招大专试题及答案
- 助理广告师考试心态调整技巧试题及答案
- 北上广的纺织工程师证书考试试题及答案
- 检测中心考试试题及答案
- 威海发展面试题及答案
- 会计比赛面试题及答案
- 我们的水资源试题及答案
- 国际商业美术设计师考试要点试题及答案
- 水果导购考试题及答案
- 商品房门窗加工合同协议
- 四年级下册数学口算练习题
- 《超重康复之道》课件
- 建筑图纸识图培训
- 飞行员劳动合同模板及条款
- 第中西艺术时空对话 课件 2024-2025学年岭南美版(2024) 初中美术七年级下册
- 高氧潜水考试题及答案
- 2025年二级建造师之二建矿业工程实务通关考试题库带答案解析
- 盲医考试题及答案
- 上海市宝山区2022-2023学年五年级下学期期中调研语文试题(有答案)
- 教科版科学三年级下册期中测试卷
评论
0/150
提交评论