普通专升本辅导vfp编程Word文档格式.docx
《普通专升本辅导vfp编程Word文档格式.docx》由会员分享,可在线阅读,更多相关《普通专升本辅导vfp编程Word文档格式.docx(45页珍藏版)》请在冰豆网上搜索。
一切可以使用简单变量的地方,都可以使用数组元素。
DIMENSIONX(6),Y(2,3)
可引用X
(1)~X(6),Y(1,1)Y(1,2)Y(1,3)Y(2,1)Y(2,2)Y(2,3)
整体赋值:
对数组名赋值时
定义数组:
X=5Y=X+5(Y=10)
4、表达式
运算符把运算量连接起来的式子。
数值表达式
数值表达式由算术运算将数值型数据连接起来构成,其运算结果仍是数值型数据。
VisualFoxPro中的算术运算符包括^或**,*,/,%,+及-等。
各运算的意义及优先级如表所示。
运算符
优先级
意义
^或**
1
乘方运算
*、/、%
2
乘、除、求运算
+、-
3
加、减运算
2^3,2**3,2/3,8%3等
字符表达式
字符表达式由字符串运算将字符型数据连接而成,其运算结果是字符型数据。
字符串运算符有以下两个。
+:
完全连接,将前后两个字符串首尾相连形成新的字符串。
-:
不完全连接,将前一个字符串的尾部空格移到新的字符串末尾
“AAA”+“BBBB”,“AAA”+“BBBB”等
关系表达式
关系表达式由关系运算符将两个数据连接而成,其运算结果是逻辑数据。
关系运算符的意义及作用如表所示。
作用
小于
=
等于
小于等于
==
字符串精确比较
>
大于
、#、!
不等于
大于等于
$
子串包含测试
其中:
==和$仅用于字符型数据,其他可用于任何数据。
1>
=3,1!
=4,”AA”$”AAABBBB”等
4.逻辑表达式
逻辑表达式由逻辑运算符将逻辑数据连接起来构成,其运算结果仍然是逻辑型数据。
逻辑运算符有逻辑非(.NOT.或!
)、逻辑与(.AND.)和逻辑或(.OR.)。
在VisualFoxPro中也可分别写成NOT,AND和OR。
其优先级顺序依次为NOT,AND和OR。
NOT1>
2等
5、常用函数
数值函数:
数值函数的自变量和返回值都是数值型数据
绝对值函数
格式:
ABS(数值表达式)
功能:
返回绝对值
平方根函数
SQRT(数值表达式)
返回数值表达式的平方根。
求整数函数
INT(数值表达式)
INT()返回数值表达式的整数部分。
求余数函数
MOD(数值表达式1,数值表达式2)
返回两个表达式相除后的余数。
对于该函数,应特别注意函数的结果,余数的正负号与除数相同。
如果两个表达式同号,则函数值为两个表达式相除的余数。
当两个表达式异号时,函数值为两个表达式相除的余数再加上除数的值。
求最大值和最小值函数
格式:
MAX(数值表达式1,数值表达式2[,数值表达式3…])
MIN(数值表达式1,数值表达式2[,数值表达式3…])
计算各自变量表达式的值,MAX()返回其中的最大值,MIN()返回其中的最小值。
字符函数
求字符串长度函数
LEN(字符表达式)
功能:
返回指定字符表达式值的长度,即字符表达式中所包含的字符个数。
大小写转换函数
LOWER(字符表达式)
UPPER(字符表达式)
功能;
LOWER()将指定表达式值中的大写字母换成小写字母,其他字符不变。
UPPER()将指定表达式值中的小写字母换成大写字母,其他字符不变。
空格字符串生成函数
SPACE(数值表达式)
返回由数值表达式的值所指定数目的空格组成的字符串。
(4)取子串函数
LEFT(字符表达式,长度)
LEFT()从指定字符表达式值的左边取一个指定的子串作为函数值。
3.数据类型转换函数
数值转换成字符串函数
STR(数值表达式[,长度[,小数位数]])
将数值表达式的值转换成字符串,转换时根据需要自动进行四舍五入。
小数位数默认值为0,长度的默认值为10。
字符串转换成数值函数
VAL(字符表达式)
将由数字符号(包括正负号、小数点)组成的字符型数据转换成相应的数值型
型数据。
字符串出现非数字字符时,只转换前面部分;
当字符串首字符不是数字符号时返回数值0。
ASC(字符)
转换成相应字符的ASCII值
CHR(数值)
数值转换成相应ASCII字符
二、程序设计
1.程序与程序文件的概念
程序是指能够完成一定命令的有序集合。
存放这组命令的文本文件称为程序文件或命令文件.(VFP程序文件的扩展名是.PRG)
程序文件在书写时要遵守以下的规则:
.一行只能写一条命令;
每条命令以回车结尾;
一条命令需要分行书写时,应在上一行结束时加上续行符“;
”;
为提高程序的可读性,可在程序中插入注释,其中注释行以“*”开头,命令后添加的注释以“&
&
“开头。
2.简单的输入输出命令
INPUT命令
INPUT[〈字符表达式〉]TO〈内存变量〉
等待用户从键盘输入数据,当用户以“ENTER”键结束输入时,系统将表达式的值存入指定的内存变量,程序继续执行。
该命令中,用户可以输入任何合法的表达式。
说明:
.在命令中使用字符表达式时,系统先显示表达式的值作为提示信息;
.输入的数据利用是常量,变量或表达式如X+Y,但不能不输入任何内容直接按“Enter”键;
输出命令
?
换行输出?
?
不换行输出
例:
”A”
?
”B”
”A”
”B
3、程序的基本结构
顺序结构
程序的基本结构指程序中命令或语句执行的流程结构,有顺序,选择和循环三种基本结构。
顺序结构是最简单的程序结构,它按命令在程序中出现的次序依次执行。
流程图
例1:
将字符串大写字母变为小写字母。
分析:
LOWER()将指定表达式值中的大写字母换成小写字母,其他字符不变。
CLEAR&
清除内存变量
SETTALKOFF&
关闭人机对话
INPUT“输入一个字符串:
”TOS
S=LOWER(S)
“S值是:
”,S
SETTALKON&
打开人机对话
例2:
将两个字符串连接输出
分析:
+:
”TOS1
”TOS2
S=S1+S2
“两个字符串连接后值是:
例3:
输入三个数,要求按大小顺序输出
MAX(数值表达式1,数值表达式2[,数值表达式3…])
INPUT“输入一个数:
”TOA
”TOB
”TOC
“按大小顺序输出是:
”,MAX(A,B,C),A+B+C-MIN(A,B,C)-MAX(A,B,C),MIN(A,B,C)
2.选择结构
在VisualFoxpro中形成选择结构的语句有条件语句和分支语句。
分支语句
单一分支
IF〈条件〉
〈语句序列〉
ENDIF
条件为真,执行语句序列.
例4:
求|X|
”TOX
IFX<
X=-X
ENDIF
“X绝对值是:
”,X
打开人机对话
双分支
IF〈条件〉
〈语句序列1〉
[ELSE
〈语句序列2〉]
根据〈条件〉是否成立从两组语句序列中选择一组执行。
有else子句时,两组供选择的代码分别是〈语句序列1〉和〈语句序列2〉,
当〈条件〉成立时,执行〈语句序列1〉,否则〈语句序列2〉,然后转向ENDIF之后的下一条语句;
2无ELSE时,可认为第2组代码不包含任何命令,当〈条件〉成立时,执行〈语句序列〉,然后转向ENDIF之后的下一条语句;
否则直接转向ENDIF之后的下一条语句;
IF和ENDIF必须成对出现,IF为此结构的入口,ENDIF表示此结构的出口;
例5:
商场优惠销售,消费不足200元八折,超过200元,按六六折.
INPUT“消费金额:
IFX>
=200
Y=X*0.66
ELSE
Y=X*0.8
“应付金额是:
”,Y
条件语句嵌套使用。
例6:
商场优惠销售,消费不足200元八折,超过200元不足500元7折,超过500元按六折.
三个分支,条件语句嵌套使用。
Y=X*0.7
IFX>
=500
Y=X*0.6
ENDIF
例7:
求符号函数的值.
当X<
0Y=-1,X=0Y=0,X>
0Y=1
INPUTTOX
Y=1
ELSE
Y=-1
IFX=0
Y=0
ENDI
“符号函数的值是:
8.求函数的值,当X<1时Y=X;
当1≤X<10时Y=2X-1;
当X≥10时Y=3X-11
INPUT“X=”TOX
1
Y=X
=1ANDX<10
Y=2*X-1
Y=3*X-11
“Y=”,Y
多分支语句
DOCASE
CASE〈条件1〉
〈语句序列1
CASE〈条件2〉
〈语句序列2〉
…….
CASE〈条件n〉
〈语句序列n〉
[OTHERWISE
〈语句序列n+1〉]
ENDCASE
依次判断CASE后面的条件是否成立,当发现某个CASE后面的条件成立时,就执行该CASE和下一个CASE之间的语句序列,然后执行ENDCASE后面的命令;
当所有的条件都不成立,则执行OTHERWISE和ENDCASE之间的语句序列,然后转向ENDCASE后面的语句。
当有多个CASE条件都成立时,只有最先成立的那个CASE条件对应的语句序列被执行;
如果所有CASE条件都不成立,且没有OTHERWISE子句,则直接跳出结构;
DOCASE和ENDCASE必须成对出现,DOCASE是本结构的入口,ENDCASE是本结构的出口。
例9:
当X<1时Y=X;
INPUT“X=”TOX
DOCASE
CASEX<1
CASEX>
=1andX<10
Y=2*X-1
OTHERWISE
ENDCASE
例10:
百分制转化为等级制
=90‘A’>
=80‘B’>
=70‘C’>
=60‘D’<
60‘E’
INPUT“成绩=”TOX
=90
?
“A”
=80
“B”
=70
“C”
=60
“D”
“E”
3.循环结构
循环结构是指程序在执行过程中,其中某段代码(语句序列)被重复执行若干次,被重复的代码段称为循环体.。
语句:
DOWHILE—ENDDO
格式1:
DOWHILE〈条件〉
[LOOP]
[EXIT]
〈语句序列3〉
ENDDO
格式2:
FOR<
循环变量>
=初值TO〈终值〉[STEP<
步长>
]
〈语句序列>
ENDFOR
先判断DOWHILE处的条件,如果条件成立,就执行DOWHILE与ENDDO之间的语句序列,即循环体,执行到ENDDO时,返回到DOWHILE,再次判断循环条件是否成立,以确定是否再次执行循环体,条件不成立时,结束该语句循环的序列,执行ENDDO后面的语句。
说明:
当第一次判断条件时,条件即不成立,则循环体一次都不执行;
循环体中包含LOOP命令,当遇到该命令时,结束循环体的本次执行,不再执行其后的语句,转回DOWHILE处重新判断条件;
循环体中包含EXIT命令,当遇到该命令时,结束该循环体的执行,转去执行ENDDO之后的语句;
循环结构举例
累加型
例11:
求∑I=1+2+3+4+…..+N
INPUT“值:
”TON
I=1
S=0
DOWHILEI<
=N
S=S+I
I=I+1
ENDD
“1+2+3+…+N=”,S
打开人机对话
***或使用FOR循环(适合已知次数的循环)
FORI=1TONSTEP1
ENDD
例12:
输出1,1,2,3,5,8,13,。
。
前四十项,每行输出四个数。
分析:
此题为斐玻拉比数列
第一项:
F1=1
第二项:
F2=1
第三项始:
F1=F1+F2,F2=F2+F1。
循环变量(一次输出二项):
I=0。
19,每行输出四个数,为偶数换行。
I=0
F1=1
F2=1
=19
STR(F1,10),STR(F2,10)
F1=F1+F2
F2=F2+F1
IFMOD(I,2)==0
例13:
求2/1,3/2,5/3,8/5,13/8,21/13。
数列的前20项和。
分子:
2,3,5,8,13。
分母:
1,2,3,5,8。
变量设定:
I1=2,I2=3,I1=I1+I2,I2=I2+I1。
分母:
J1=1,J2=2,J1=J1+J2,I2=J2+J1。
项值:
T1=I1/J1,T2=I2/J2。
和数:
S=0(初值),S=S+T1+T2
循环变量:
I=1。
10
程序如下:
I1=2
I2=3
J1=1
J2=2
=10
T1=I1/J1
T2=I2/J2
S=S+T1+T2
I1=I1+I2
I2=I2+I1
J1=J1+J2
J2=J2+J1
“2/1,3/2,5/3,8/5,13/8,21/13。
数列的前20项和=”,S
例14:
求1,-1/2,1/3,-1/4,1/5,-1/6。
符号:
+,-间隔
FLAG=+1
I=1,2,3…,
项值:
T=FLAG*1/I
和数:
S=0(初值),S=S+T
循环变量:
20
=20
S=S+T
I=I+1
FLAG=-FLAG
T=FLAG*1/I
“1,-1/2,1/3,-1/4,1/5,-1/6。
例15:
.求E的值(E=1+1/1!
+1/2!
+1/3!
+。
+1/N!
精确到1E-6)
S=1
Fm=1
T=1
DOWHILEt>
=1E-6
Fm=fm*i
T=1/Fm
“E=1+1/1!
=”,S
累积型
例16:
求N!
S=S*I
“N!
嵌套型(循环嵌套)
例17:
求1!
+2!
+3!
+….+10!
此题为循环嵌套
外循环变量:
I取值1,2,3,4,5,6,7,8,9,10
内循环求I!
内循环变量:
J取值1,2,…,I
累加变量:
S=S+T
J=1
T=1
DOWHILEJ<
=I
T=T*J
J=J+1
I=I+1
“1!
3、多模块程序
1、模块的概念(过程或函数)
模块是一个相对独立的程序段,一个应用程序中包含了多个模块,模块间的执行采用调用的方式,一个模块可以被其他模块调用,也可以调用其他的模块。
被其他程序调用的模块称为子模块,调用其他模块而没有被其他模块调用的模块称为主程序。
2、模块的定义和调用
在VISUALFOXPRO中,模块可以是命令文件,也可以是过程。
定义格式:
PROCEDURE/FUNCTION〈过程名〉
PARAMETERS〈形参变量1〉[,〈形参变量2〉,…]
〈命令序列〉
[RETURN〈表达式〉]
3、模块调用
过程文件处于打开状态时,可以调用过程。
调用格式:
DO〈过程名〉WITH参数表
实参可以是常量、变量或表达式;
调用模块时,自动把实参传递给对应的形参;
例18:
求长方形面积.
*SUB1.PRG
PARAA,B,C
CLEAR
C=A*B
RETURN
*MAIN.PRG
INPUT“长:
”TOL
INPUT“宽:
”TOW
DOSUB1.PRGWITHL,W,S
“面积是:
例19:
计算CMN=M!
/(N!
*(M-N)!
)
此题为组合问题求解:
X!
求解三次。
编一求解X!
的函数/过程,调用三次即可
代码如下:
CF。
PRG(求解X!
的函数/过程)
PARAP
J=1
R=1
DOWHILEJ<
=P
R=R*J
RETUEN
MAIN。
PRG(调用三次,求解组合问题)
INPUT“M=”TOM
INPUT“N=”TON
MN=M-N
MC=CF(M)/(CF(N)*CF(MN))
“C(M,N)=”,MC
经典例题分析
1.输入两个正整数,求最大公约数