常用算法VFP程序
(整理)VFP程序步骤
第一部分:程序入门一级一、选择结构(IF- ELSE - ENDIF)语句格式:IF〈条件〉〈语句序列1〉[ ELSE〈语句序列2〉]ENDIF说明:IF和ENDIF必须配对使用,而ELSE可选。
三个语句应各占一行。
若省略ELSE子句,条件为真时,则执行〈语句序列1〉,然后再执行ENDIF后的语句;否则,若条件为假,即执行ENDIF后的语句。
二、循环结构1、条件循环:语句格式:DO WHILE 〈条件表达式〉〈语句序列1〉[LOOP]〈语句序列2〉[ EXIT ]〈语句序列3 〉ENDDO说明:系统执行该语句时,先测试条件表达式的值,若为真,则执行循环体,在循环体中修改循环条件,直到条件为假时,脱离循环,执行循环体ENDDO后的语句。
若遇到LOOP 语句,则直接返回执行DO语句,测试条件以决定是否继续循环。
若执行循环体时遇到EXIT 语句,则不执行下面的语句,直接跳出循环,执行ENDDO后面的语句。
注意:DO WHILE必须和ENDDO配合使用,两者缺一不可,DO WHILE语句前一定要有条件变量的初始值。
2、计数循环FOR〈循环变量〉=〈循环初值〉TO〈循环终值〉[STEP〈步长〉]〈语句序列1〉[LOOP]〈语句序列2〉[EXIT]〈语句序列3〉ENDFOR/NEXT说明:使用和DO WHILE 基本一致,注意步长和ENDFOR语句。
三、程序举例:A. 简单整除,求和求个数。
Eg:求出[10,100]内所有能被2整除的整数的和(2530),个数(46)set talk offclearn=0 &&设置计数变量s=0 &&设置求和变量for i=10 to 100if mod(i,2)=0n=n+1 &&满足条件计数变量加1s=s+i &&满足条件,求和变量增加endifendfor? n,sset talk onreturnA1.求出[10,100]内所有能被7和9中至少一个数整除的整数的个数(22),和(1250).A2.求出[10,100]内所有能被7但不能被9整除的整数的个数(12), (665)A3.求出[10,100]内所有能被7和9中的一个且只有一个数整除的整数的个数(21),(1187)A4.编写程序,求出1~7000以内能被3或者7整除的数的个数(3000)。
VFP第3部分(程序算法及顺序分支)
y/4=int(y/4) and y/100<>int(y/100) or y/400=int(y/400)
CLEAR INPUT "请输入年份:" to y IF y/4=int(y/4) and y/100<>int(y/100) y/400=int(y/400) ?str(y,4)+"年是闰年" ELSE ?str(y,4)+"年不是闰年" ENDIF RETURN
例 交换变量A和B的值。 算法描述如下: S1:A→T; S2:B→A; S3:T→B; 根据此算法,马上可以写出VFP程序如下: T=A A=B B=T
A B
T
一个算法应该具有以下特点:
①确定性。
②有穷性。
③有效性。 ④输入。 ⑤输出。
任何一个问题能否让计算机处理, 关键在于能否设计出合理的算法,有 了合适的算法,再使用合适的计算机 语言来编写程序。 VFP就是一种语言工具。要用VFP 编写出高质量的程序,一方面要构建 合理的算法,另一方面要掌握VFP的语 法规则,它是实现算法的基础。
P
Y
A
条件p
N B
T
F
A
B
(a)流程图
(b)N-S图
•
循环结构:是指重复执行某些操作, 重复执行的部分称为循环体。
N 条件P Y A 条件P
A
(a)流程图
(b)N-S图
程序文件中的常用命令
1、基本的输入/输出命令
1)INPUT命令(任意数据输入命令,除M和 G型之外的其他类型的数据) 格式:INPUT [<提示信息>] TO <内 存变量> 功能:在屏幕上显示[<提示信息>], 并等待用户通过键盘输入表达式,再把表 达式的值赋给指定的<内存变量>。
VFP命令、函数及程序语句大全
VFP命令、函数及程序语句大全二、常用函数1、数学函数函数用途ABS(<数值表达式>)绝对值,|x|CEILING(<数值表达式>)>=自变量的最小整数EXP(<数值表达式>)对基E的幂,e=2.71828FLOOR(<数值表达式>)<=自变量的最大整数INT(<数值表达式>)取整(舍尾)自变量LOG(<数值表达式>)自变量的自然对数,ln xLOG10(<数值表达式>)自变量的普通对数,lg xMAX(<表达式1>,<表达式2>)两个值的最大值MIN(<表达式1>,<表达式2>)两个值的最小值MOD(<数值表达式1>,<数值表达式2>)求余数RAND([<数值表达式1>])返回伪随机数ROUND(<数值表达式1>,<数值表达式2>)四舍五入第一个自变量SIGN(<数值表达式>)自变量的符号SQRT(<数值表达式>)平方根(正根)2、字符串操作函数函数用途&<内存变量> 用于代替内存变量内容LEN(<字符串表达式>)返回字符串表达式的字符个数SPACE(<数值表达式>)生成空格SUBSTR(<字符串表达式>,<数值表达式n>[,<数值表达式L>])求子字符串,从指定的字符串表达式第n个开始,总长为L的字符串LOWER(<字符串表达式>)将字符串字母转换成小写字母UPPER(<字符串表达式>)将字符串字母转换成大写字母TRIM(<字符串表达式>)删除字符串尾空格ASC(<字符串表达式>)返回字符串表达式最左边的第一个字符的ASCII码CHR(<数值表达式>)将数值表达式转换成字符AT(<字符串表达式1>,<字符串表达式2>[,<数值表达式n>])确定字符串表达式1在字符串表达式2中的位置,n为字符串表达式第几次出现STR(<数值表达式>[,<数值表达式L>][,<数值表达式n>)将数值转换为字符串,L为数值表达式总长,n为小数位数VAL(<字符串表达式>)将数字字符串转换为数字TYPE(<表达式>)检测表达式值的数据类型LTRIM(<字符串表达式>)删除字符串左部空格RTRIM(<字符串表达式>)删除字符串右部空格LEFT(<字符串表达式>,<数值表达式n>)取字符串左边部分字符,n为返回的字符个数RIGHT(<字符串表达式>,<数值表达式n>)取字符串右边部分字符,n从右边截取字符个数3、表(.dbf)操作函数函数用途BOF([<工作区号或别名>])查表文件开始函数EOF([<工作区号或别名>])表文件结尾测试函数RECNO([<工作区号或别名>])测试当前或指定工作区表的当前记录号DELETED([<工作区号或别名>])记录删除测试函数FILE(<"字符串">)测试文件是否存在函数DBF([<工作区号或别名>])检测表的文件名函数4、日期、时间函数函数用途DATE()查系统当前日期函数TIME([<数值表达式>])查系统当前时间函数YEAR(<日期型表达式>|<日期时间型表达式>)由日期查年函数MONTH(<日期型表达式>|<日期时间型表达式>)从日期查月份函数CMONTH(<日期型表达式>|<日期时间型表达式>)由日期查月份名函数DAY(<日期型表达式>|<日期时间型表达式>)从日期查当月的日函数DOW(<日期型表达式>|<日期时间型表达式>[,<数值表达式>])由日期查星期函数CDOW(<日期型表达式>|<日期时间型表达式>)从日期查星期名函数DTOC(<日期型表达式>|<日期时间型表达式>)日期转换为字符函数CTOD(<字符串表达式>)字符串转换为日期函数CTOT(<字符串表达式>)返回日期时间值函数TTOC(<日期时间型表达式>)返回字符值5、显示、打印位置函数函数用途ROW()判断光标行位置函数COL()判断光标列位置函数INKEY([<数值表达式>])检测用户所击键对应的ASCII码函数,数值表达式以秒为单位等待击键的时间6、其他函数函数用途DISKSPACE()返回默认磁盘驱动器中可用字节数函数OS()检测操作系统名称的函数VERSION()返回VFP版本号的函数VFP命令、函数及程序语句大全(3)三、主要程序语句1、条件判断语句格式:(1)IF <条件><命令语句组>ENDIF说明:如果条件为真,则执行命令语句组中的各语句,否则跳过这些命令语句不执行,而执行ENDIF后的语句。
VFP常用命令函数程序汇总
常用命令函数程序汇总一、主要命令:1、CREATE 文件名作用:建立一个以.dbf为扩展名的新表。
在命令中不加文件名或问号系统也会弹出对话框,要求用户输入想要建立的表名。
2、MODIFY STRUCTURE作用:显示表文件结构,并允许修改此表的结构。
只有在用USE命令打开表文件以后,才能显示或修改表文件的结构。
3、APPEND作用:在当前表的尾部(无论表中有无记录)追加记录(在当前表指当前正使用的表)。
若为APPEND [BLANK]是指在APPEND命令后面加上BLANK参数表示在当前表的尾部添加一条空白记录。
无BLANK参数时,表示在当前表的尾部添加一条记录并要求用户输入相应的字段内容。
4、INSERT作用:在表文件中间插入一个新记录。
若为INSERT [BEFORE] [BLANK],则INSERT表示在当前记录后插入一记录;INSERT BEFORE 在当前记录前插入一记录;INSERT BEFORE BLANK 在当前记录前插入一空记录。
5、BROWSE作用:主要用于打开浏览窗口,查阅表文件并同时进行修改。
若为BROWSE [FIELDS <字段名表>],则表示看到所列字段名的字段内容。
6、USE作用:打开(USE 文件名)和关闭表文件(USE)。
说明:前一个命令用来打开<文件名>指定的表文件,该表如有备注型字段,则同时打开相应的备注文件(.fpt文件);后一个命令关闭当前打开的表文件。
7、LIST和DISPLAY作用:显示表(.dbf)的内容、结构或状态。
格式:LIST|DISPLAY [OFF] [<范围>] [FIELDS] <表达式表> [WHILE <条件>] [FOR <条件>][TO PRINT|TO FILE <文件>]LIST|DISPLAY STRUCTURE TO PRINT|TO FILE <文件>]LIST|DISPLAY STATUS [TO PRINT|TO FILE <文件>]说明:命令带OFF参数表示不显示记录号,范围指定对哪些记录进行操作,范围包括:RECORD n第几号记录、NEXT n 当前记录开始的几个记录、REST 自当前记录开始至文件末尾的所有记录、ALL所有的记录。
VFP常用编程命令及常用函数
VFP常用编程命令及常用函数VFP常用编程命令及常用函数常用编程命令及常用函数注:在语法中如用方括号“[]”括起来的词句,表示可以不用。
常用命令假设(if...endif) 循环(dowhile...enddo)分支(docase...endcase)赋值(store...to) 调用表单(do form) 调用子程序(do)返回调用程序(return) 启动事件处理(readevents)清除事件处理(clearevents)开关命令执行状态(set talkon/off)结束程序(cancel)常用函数数值转换字符(str()) 字符转换数值(val()) 取系统日期(date())取年份(year()) 取月份(month()) 取天日(day())取整(int()) 四舍五入(round()) 删除标记(delete())记录号(recno()) 记录数(reccount()) 找到记录(found())表结尾(eof()) 表开头(bof()) 消除后续空格(trim())消除前导空格(ltrim())假设语句根据一逻辑表达式的值,有条件的执行一组命令。
语法:IF 逻辑表达式 [THEN]程序组1[ELSE程序组2]ENDIF参数:逻辑表达式代表一逻辑值,如果这逻辑值为真,系统执行程序组1,否则不执行程序组1,如果有else及程序组2的话,则执行程序组2,如没有则什么也不执行,直接执行endif后面的语句。
备注:在if...endif之间还可以有if...endif,即该命令是可以嵌套的。
then可以有也可以没有,对程序没有影响。
else及程序组2可以有也可以没有,但如果有的话,在逻辑表达式的值为假时,程序组2将被执行。
if 与 endif 必须配对使用,即有一个 if 必须有一个 endif,否则程序会出错。
举例:例1:假如分数字段的值大于等于90,则让等级字段的值为“优”,并显示该记录。
VF运算基础
),ATC()不分大小 ()不分大小 ⒎求子串位置函数:AT(串1,串2,数值), 求子串位置函数: ( , ,数值), () 写 ⒏子串替换函数:STUFF(串1,位置,长度,串2) 子串替换函数: ( ,位置,长度, 注意:长度为 串 插入串 插入串1, 为空串, 注意:长度为0,串2插入串 ,串2为空串,在串 中删除长度指定 为空串 在串1中删除长度指定 的字符 ⒐字符替换函数:CHRTRAN(串1,串2,串3) 字符替换函数: ( , , ) 注意: 与串2中某个字符匹配 相应字符替换, 注意:串1与串 中某个字符匹配,就用串 相应字符替换,如果串 与串 中某个字符匹配,就用串3相应字符替换 3字符个数小于串 字符个数,则在串 中删除匹配字符,串3字符 字符个数小于串2字符个数 则在串1中删除匹配字符 中删除匹配字符, 字符 字符个数小于串 字符个数, 个数多于串2字符个数,多余字符被忽略。 个数多于串 字符个数,多余字符被忽略。 字符个数 ⒑字符串匹配函数:LIKE(串1,串2),匹配为真,否则为假。 字符串匹配函数: ( , ,匹配为真,否则为假。 可包含通配符*,? 串1可包含通配符 可包含通配符
2.1.3 内存变量常用命令 ⒈内存变量的赋值 STORE 表达式 TO 变量名表 内存变量名=表达式 内存变量名 表达式 ⒉表达式的显示 ?表达式 ??表达式 ??表达式
⒊内存变量的显示 LIST MEMORY [LIKE 通配符 通配符][TO PRINTER ][TO FILE 文件名 文件名] DISPLAY MEMORY [LIKE 通配符 通配符][TO PRINTER ][TO FILE 文件名 文件名] ⒋内存变量的清除 CLEAR MEMORY RELEASE 内存变量表 RELEASE ALL [EXTENDED] EXTENDED在程序中删 在程序中删 除公共变量用 RELEASE ALL [LIKE 通配符 通配符][EXCEPT 通配符 通配符]
VFP重要算法
VFP重要算法数的累加1、(1+2+…+100)cleas=0i=1do while i<=100s=s+ii=i+1enddo?"1+2+3+...+100=",sReturn(for)cleas=0for i=1 to 100s=s+iendfor?"1+2+3+...+100=",sreturn2、(1+2+…+n)n=thisform.text1.values=0x=1do while x<=ns=s+xenddothisform.text2.value=s3、(N!)p=1for i=1 to thisform.text1.valuep=p*iendforthisform.text2.value=p4、(1+3+5+…+99)clears=0for i=1 to 100 step 2s=s+iendfor?"100以内奇数之和是:",s(or)set talk offs=0i=1do while i<=100s=s+ii=i+2enddo?s5、(1+2*2+3*3+…n*n)clearS=0For i=1 to nS=s+i*iEndfor?s6、(1到n的奇数和、偶数和) s1=0s2=0i=0do while i<100i=i+1if i/2=int(i/2)s1=s1+ielses2=s2+iendifenddo?s1?s27、(100以内能够被X整除的数之和)clearS=0For i=1 to 100If i%3=0S=s+iEndifEndfor?s(or)s=0For i=3 to 100 step 3S=s+iEndfor?s8、(1+1/2+1/3+…+1/100)clears=0for a=1 to 5s=s+1/aendfor?s9、(水仙花数) set talk offclearfor i=100 to 999a=int(i/100)b=int(i/10)%10c=mod(i,10)if i=a**3+b**3+c**3?iendifendforset talk onreturn10、(判断一个数是不是素数)set talk offclearinput '输入一个大于2的自然数:'to nflag=0for i=2 to sqrt(n)if mod(n,i)=0flag=1endifendforif flag=1?'不是素数'else?'是素数'endifreturn11、(1-1/2+1/3-1/4+……+1/99-1/100)set talk offclears=0for i=1 to 100if i%2=0s=s-1/ielses=s+1/iendifendfor?sset talk onreturn12、输入一个大于0的整数,计算从1到这个整数之间的所有不被3整除的和set talk offclearinput "请输入整数" to as=0for b=0 to aif b/3-int(b/3)>0s=s+bb=b+1endifendfor?sset talk onreturn13、输入任意三个数,求出较大数,并显示出来set talk offclearinput "请输入数据a" to ainput "请输入数据b" to binput "请输入数据c" to cdo casecase a>b and a>c?acase b>a and b>c?bcase c>a and c>b?cendcaseset talk onreturn14、求1到1000所有能被5 或能被7整除的奇数之和set talk offclears=0for a=1 to 1000if mod(a,5)=0 and mod(a,2)>0 or mod(a,7)=0 and mod(a,2)>0s=s+aa=a+1endifendfor?sset talk onreturn15、试编写程序求出100到300之间能被3和7整除的数的个数set talk offclearn=0for a=100 to 300if mod(a,3)=0 and mod(a,7)=0n=n+1a=a+1endifendfor?nset talk onreturn16、双重循环打印“九九乘法口诀表”set talk offclear?" *"for A=1 to 9??Aendfor?for A=1 to 9?AB=1do while B<=AP=A*B??pB=B+1enddo?endforset talk onreturn17、判断闰年:y=thisform.text1.valueif y/4=int(y/4) and y/100<>int(y/100) or y/400=int(y/400) bel3.caption=alltrim(str(y,4))+'年是闰年'elsebel3.caption=alltrim(str(y,4))+'年不是闰年'thisform.text1.value=0endif(结构化)CLEARINPUT "请输入年份:" to yIF y/4=int(y/4) and y/100<>int(y/100) or y/400=int(y/400) ?str(y,4)+"年是闰年"ELSE?str(y,4)+"年不是闰年"ENDIFRETURN(判断季节)yf=val(thisform.text1.value)do casecase yf=3 or yf=4 or yf=5jj="春季"case yf=6 or yf=7 or yf=8jj="夏季"case yf=9 or yf=10 or yf=11jj="秋季"case yf=12 or yf=1 or yf=2jj="冬季"endcase?jj18、交换两个数:a=thisform.text1.valueb=thisform.text2.valuet=aa=bb=tbel3.caption=alltrim(str(a))bel4.caption=alltrim(str(b))19、逆序显示:x=thisform.text1.valueif x>100 and x<1000 and x=int(x)x1=int(x/100)x2=int(mod(x,100)/10)x3=mod(x,10)y=x1+10*x2+100*x3bel2.caption='结果为:'+str(y,3)elsemessagebox('输入的不是一个3位自然数,请重新输入!','提示框')thisform.text1.value=0thisform.text1.setfocusendif20、找出ASCII中的数字串:x=alltrim(thisform.text1.value)y=""for i=1 to len(x)c=substr(x,i,1)if c>="0" and c<='9'y=y+cendifendforbel3.caption=alltrim(y) 21、找出ASCII中的大写字母:x=alltrim(thisform.text1.value)y=""for i=1 to len(x)c=substr(x,i,1)if asc(c)>=65 and asc(c)<=90y=y+cendifendforbel3.caption=y 22、找出ASCII中的小写字母:x=alltrim(thisform.text1.value)y=''for i=1 to len(x)c=substr(x,i,1)if ASC(C)>=asc('a') and asc(c)<=asc('z') y=y+cendifendforbel3.caption=y。
VFP命令、函数及程序语句大全
VFP命令、函数及程序语句大全展开全文VFP命令、函数及程序语句大全2008-10-24 16:31:09| 分类: VFP资料 | 标签: |字号大中小订阅VFP命令是一种实现对数据库系统进行操作的动词或短语。
VFP 命令可在VFP命令窗口中单独运行,也可编制成程序成批运行,由命令和函数编制的程序可对数据库系统进行自动、复杂的操作,使数据库系统应用起来更加友好、方便。
¨ VFP常用命令分类表¨命令格式VFP命令一般由命令动词和控制短语构成。
一般格式:命令动词[FROM<源文件>][TO<目标文件>][记录范围][FOR/WHILE<条件>][FIELDS<字段名表>][ ]表示可选,<>表示必选, / 表示或选例如:(1)APPEND FROM C:\RSDA.DBF FOR 基本工资>100 FIELDS 编号,姓名,职称,基本工资。
从C:\RSDA.DBF 表中把基本工资大于100元的记录添加到当前表添加字段为:编号,姓名,职称,基本工资。
(2)COUNT FOR 职称="高工"TO GG 统计高工的记录数到内存变量GG。
控制短语规定了对数据库操作的限制条件:1.指向输入输出目标FROM/TOAPPEND FROM,COPY FILE TO <目标文件>2.限制记录范围(SCOPE)ALL 所有记录NEXT<n> 本记录后的第几个记录RECORD<1> 第1个记录REST 当前记录之后所有记录3.选择字段FIELDS<字段表>选择输入/输出的字段。
4.限制条件FOR/WHILE<条件>FOR 基本工资>100 .AND.基本工资<200¨命令格式规则命令的行为单位,一行书写不完,在未尾加上“;”第二行接着写。
VFP6程序设计基础
VFP6支持多种数据类型和函数,包括字符串、数值、日期和时间等, 方便开发人员进行数据处理和计算。
良好的兼容性和扩展性
VFP6与早期版本的Visual FoxPro兼容,同时提供了丰富的API和工 具箱,方便开发人员扩展应用程序的功能。
VFP6的应用领域
01
数据库管理
VFP6适用于小型到中型的数据库 管理系统开发,可以用于企业、 政府和组织的数据存储和管理。
类型转换函数
字符串转数值
将字符串转换为数值类型。
数值转字符串
将数值类型转换为字符串类型。
字符串转日期
将字符串转换为日期类型。
日期转字符串
将日期类型转换为字符串类型。
04
VFP6数据库操作
数据库的创建与打开
01
总结词
创建数据库和打开现有数据库的 方法
创建数据库
02
03
打开数据库
使用VFP6的数据库设计器或命令 行工具,根据需求创建一个新的 数据库。
数据删除
使用SQL语句或VFP6提供的表单设计器,删除数据 库中的数据记录。
05
VFP6表单设计
表单的创建与修改
创建表单
使用表单向导或表单设计器创建表单 ,选择所需的表单类型和布局。
修改表单
在设计视图中,可以添加、删除或修 改表单控件,调整控件位置和大小, 设置控件属性等。
表单控件的使用
01
标签控件
代码重用与模块化
将常用功能封装为函数或模块,减少重复代 码。
程序的发布与分发
编译与打包
将源代码编译为目标平台可执行文件, 并进行必要的文件打包。
文档编写
提供必要的用户手册和技术支持文档。
常用算法VFP程序
1.求最大、最小数问题Dime x(30)Maxx=0 &&极小数Minx=300 &&极大数For k=1 to 30X(k)=1+rand()*300If x(k)>maxxMaxx=x(k)EndifIf x(k)<minxMinx=x(k)Endif??x(k) &&顺序输出30个随机数endformaxx,minx2.最大公约数和最小公倍数问题Input to xInput to yM=xN=yR=x%yDo while R<>0X=yY=RR=x%yEnddoy, M*N/y3.素数(质数)问题Input to xFor k=2 to x-1If x%k=0exitendifendforif k=x?x,”is prime”Else?x.”not prime”endif4.阶乘问题Input to xF=1For k=x to 2 step -1F=f*kEndforF5.百钱百鸡问题for i=0 to 33for j=0 to 50k=100-i-jif 3*i+2*j+int(0.5*k)=100? i,j,kendifendforendfor6.倍数问题一个正整数与3的和是5的倍数,与3的差是6的倍数,编程序求出符合此条件的最小正整数。
num=1do While (num+3)%5<>0 or (num-3)%6<>0num=num+1enddonum7.判断回文数Accept to sL=len(s)For k=1 to int(L/2)if subs(s,k,1)<>subs(s,L-k+1,1)exitendifEndforIf k<=int(L/2)?s,”不是回文数”else?s, ”是回文数”endif8.完全数(因数和)问题所谓“完全数”是指一个数恰好等于它的所有因子之和,例如,6=1+2+3,6是“完全数”。
vfp函数与命令大全
vfp函数与命令大全Visual FoxPro数据库函数ADATABASES() 将所有打开数据库的名称和路径放到内存变量数组中ADBOBJECTS() 把当前数据库中的命名连接名、关系名、表名或sQL视图名放到一个内存变量数组中AFIELDS() 把当前表的结构信息存放在一个数组中,并且返回表的字段数ALIAS() 返回当前表或指定工作区衰的别名ASESSIONS() 创建一个已存在的数据工作期ID数组ATAGINFO() 创建一个包含索引和键表达式的名字、数量和类型信息的数组AUSED() 将一个数据工作期中的表别名和工作区存入内存变量数组BOF() 确定当前记录指针是否在表头CANDIDATE() 判断索引是否为候选索引CDX() 根据指定的索引位置编号,返回打开的复合索引(.CDX)文件名称CPDBP() 返回一个打开表所使用的代码页CREATEOFFLINE() 由已存在的视图创建一个游离视图CURSORGETPROP() 返回VisualFoxPro表或临时表的当前属性设置CURSORSETPROP() 指定VisualFoxPro表或临时表的属性设置CURSORTOXML() 转换VisualFoxPro临时表为XML文本CURVAL() 从磁盘上的表或远程数据源中直接返回字段值DBC() 返回当前数据库的名称和路径DBF() 返回指定工作区中打开的表名,或根据表别名返回表名DBSETPROP() 给当前数据库或当前数据库中的字段、命名连接、表或视图设置一个属性DELETED() 返回一个表明当前记录是否标有删除标记的逻辑值DESCENDING() 是否用DESCENDING关键字创建了一个索引标识DROPOFFLINE() 放弃对游离视图的所有修改,并把游离视图放回到数据库中EOF() 确定记录指针位置是否超出当前表或指定表中的最后一个记录FCOUNT() 返回衰中的字段数目FIELD() 根据编号返回表中的字段名FILTER() 返回SETFILTER命令中指定的表筛选表达式FLDLIST() 对于SETmELDS命令指定的字段列表,返回其中的字段和计算结果字段表达式FLOCK() 尝试锁定当前表或指定表FOR() 返回一个己打开的单项索引文件或索引标识的索引筛选表达式FOUND() 如果CONTINUE、FIND、LOCATE或SEEK命令执行成功,函数的返回值为"真"FSIZE() 以字节为单位,返回指定字段或文件的大小GETFLDSTATE() 返回一个数值,标明表或临时表中的字段是否已被编辑,或是否有追加的记录,或者记录的删除状态是否已更改GETNEXTMODIFIED() 返回一个记录号,对应于缓冲表或临时表中下一个被修改的记录HEADER() 返回当前或指定表文件的表头所占的字节数IDXCOLLATE() 返回索引或索引标识的排序序列INDBC() 如果指定的数据库对象在当前数据库中,则返回"真"(.T.) INDEXSEEK() 在一个索引表中搜索第一次出现的某个记录ISEXCLUSIVE() 判断一个表或数据库是以独占方式打开的ISFLOCKED() 返回表的锁定状态ISREADONLY() 判断是否以只读方式打开表ISRLOCKED() 返回记录的锁定状态KEY() 返回索引标识或索引文件的索引关键字表达式KEYMATCH() 在索引标识或索引文件中搜索一个索引关键字LOOKUP() 在表中搜索字段值与指定表达式匹配的第一个记录LUPDATE() 返回一个表最近一次更新的日期MDX() 根据指定的索引编号返回打开的.CDX复合索引文件名MEMLINES() 返回备注字段中的行数MLINE() 以字符串形式返回备注字段中的指定行NDX() 返回为当前表或指定表打开的某一索引(JDX)文件的名称ORDER() 返回当前表或指定表的主控索引文件或标识PRIMARY() 检查索引标识,如果为主索引标识,就返回"真"(.T.) RECCOUNT() 返回当前或指定表中的记录数目RECNO() 返回当前表或指定表中的当前记录号RECSIZE() 返回表中记录的大小(宽度)REFRESH() 在可更新的SQL视图中刷新数据RELATION() 返回为给定工作区中打开的表所指定的关系表达式SEEK() 在一个已建立索引的表中搜索一个记录的第一次出现位置SELECT() 返回当前工作区编号或未使用工作区的最大编号SETFLDSTATE() 为表或临时表中的字段或记录指定字段状态值或删除状态值SQLCANCEL() 请求取消一条正在执行的SQL语句SQLCOLUMNS() 把指定数据源表的列名和关于每列的信息存储到一个VisualFoxPro临时表中SQLCOMMIT() 提交一个事务SQLCONNECT() 建立一个指向数据源的连接SQLDISCONNECT() 终止与数据源的连接SQLEXEC() 将一条SQL语句送入数据源中处理SQLGETPROP() 返回一个活动连接的当前设置或默认设置SQLMORERESULTS() 如果存在多个结果集合,则将另一个结果集合复制到VisualFoxPro 临时表中SQLPREPARE() 在使用SQLEXEC()执行远程数据操作前,可使用本函数使远程数据为将要执行的命令做好准备SQLROLLBACK() 取消当前事务处理期间所做的任何更改SQLSETPROP() 指定一个活动连接的设置SQLSTRINGCONNECT() 使用一个连接字符串建立和数据源的连接SQLTABLES() 把数据源中的表名存储到VisualFoxPro临时表中SYS(14) 索引表达式SYS(21) 控制索引编号SYS(22) 控制标识名或索引名SYS(2011) 返回当前工作区中记录锁定或表锁定的状态SYS(2012) 返回表的备注字段块大小SYS(2021) 筛选索引表达式SYS(2029) 返回与表类型对应的值SYS(3054) Rushmore优化等级·TAG() 返回打开的.CDX多项复合索引文件的标识名,或者返回打开的.IDX单项索引文件的文件名TAGCOUNT() 返回复合索引文件(.CDX)标识以及打开的单项索引文件(.IDX)的数目TAGNO() 返回复合索引文件(.CDX)标识以及打开的单项索引(.IDX)文件的索引位置TARGET() 返回一个表的别名,该表是SETRELATION命令的INTO子句所指定关系的目标UNIQUE() 用于测试索引是否以惟一性方式建立UPDATED() 用于测试在最近的READ命令中,数据是否已被修改USED() 确定是否在指定工作区中打开了一个表XMLTOCURSOR() 转换XML文本到VisualFoxPro游标或表----------------------------------------------Visual FoxPro日期和时间函数CTOD()把字符表达式转换成日期表达式。
VFP常用编程命令
VFP常⽤编程命令常⽤编程命令假设语句IF 逻辑表达式程序组1 ELSE 程序组2 ENDIF 循环语句DO WHILE ENDDO SCAN FOR ENDSCAN FOR 变量=初始值 TO 结束值STEP 步长值ENDFOR 分⽀语句DO CASECASE 逻辑表达式1程序组 ...[OTHERWISE程序组n+1]ENDCASE数值转换字符函数str(数值表达式,长度,⼩数位数) str(1,1,1)字符转换数值函数val(字符表达式) val(a)取系统⽇期函数date() year() month() day()取整函数int() 四舍五⼊函数round() 消除空格函数alltrim() skip下⼀条COUNT()求表中的记录数 AVG()对数值字段求平均值 SUM()对数值字段求和 MIN()⽤于得到最⼩值MAX()⽤于得到最⼤值 BROWSE LAST删除标记函数delete() delete([表别名|⼯作区])找到记录函数found() found([表别名|⼯作区])表结尾函数eof() eof([表别名|⼯作区])选择⼯作区 SELECT <⼯作区号>插⼊记录:INSERT INTO 表名[(字段名1,字段名2,...)] values(表达式1,表达式,...)APPEND FROM <⽂件名> [FIELDS<字段名表>]替换记录:REPLACE <字段名1> WITH <表达式1>创表CREATE TABLE <表名> (<字段名1> <字段类型>[(<字段宽度>])排序SORT TO <新⽂件名> ON <字段名1>索引INDEX ON <索引关键字> TO<单索引⽂件名>/TAG<索引标识名> 顺序查询命令包括LOCATE和CONTINUE两条件命令。
VFP常见编程实例
VFP常见编程实例1、1-100的累加** 求1到100的累加值CLEARs=0i=1DO WHILE i<=100s=s+ii=i+1 &&一定记住先累加后循环ENDDO?sRETURN2、阶乘** 求5的阶乘CLEARj=1i=1DO WHILE i<=5j=j*ii=i+1ENDDO?jRETURN3、求阶乘和** 求1至5的阶乘和CLEARs=0i=1j=1DO WHILE i<=5j=j*is=s+ji=i+1 ENDDO?sRETURN4、条件定位** 查询定位记录指针在赵伟上CLEARUSE 学生LOCATE FOR 姓名="赵伟"IF FOUND()DISPLAYELSECANCELENDIFCONTINUE5、用scan语句查询定位** 用scan语句查询定位记录在赵伟上CLEARSCAN FOR 姓名="赵伟"DISPLAYENDSCANRETURN6、用scan语句扫描符合条件的记录,并显示出来** 把年龄小于30岁的人显示出来CLEARSCAN FOR 年龄<30DISPLAYENDSCANRETURN7、查找男性职工** 查找男性职工CLEARLOCATE FOR 性别="男"DO WHILE FOUND()DISPLAYCONTINUEENDDORETURN** 查找男性职工CLEARLOCATE FOR 性别="男"DO WHILE NOT EOF()DISPLAYCONTINUEENDDORETURN** 查找男性职工CLEARUSE 职员基本信息表LOCATE FOR 性别="男"DO WHILE .t.IF FOUND() thenDISPLAYELSE&&记住最后一个ELSE语句后面不需要条件表达式CANCELENDIFCONTINUEENDDO** 查找男性职工set talk offclearopen database 家庭成员管理.dbcuse stu.dbfscan for not eof()if xb="女"skipelsedisplayskipendifendscanclose databaseuseset talk onreturn8、新值换旧值** 有一对新生的兔子,从第三个月开始,每个月出生一对兔子,请问到第十二个月共出生多少对兔子?clearstore 1 to a,bi=3do while i<=12c=a+ba=bb=ci=i+1enddo?"一年共出生兔子:",creturn9、多位整数各个位数相加** 求多位整数各个位数之和CLEARs=0input "请输入一个多位整数:" to aDO WHILE a<>0s=s+MOD(a,10) &&将a取余正好是个位上的数a=INT(a/10) &&将a除10取整正好是除个位之后的数ENDDO ?"这个整数的各个位数之和是:",sRETURN10、找100-999之间的“水仙花数”CLEARFOR i=100 TO 999a=INT(i/100)b=INT((i-100*a)/10)c=i-INT(i/10)*10IF i=a^3+b^3+c^3?iENDIFENDFORRETURN11、判断一个大于3的数是否为素数CLEARinput "请输入一个数(>=3):" to sf=0i=2DO WHILE i<=INT(SQRT(s))IF MOD(s,i)<>0i=i+1LOOPELSEf=1EXITENDIFENDDOIF f=0?str(s,3)+"是素数"ELSE f=1&&这个表达式可有可无,为了省事完全省略也可以。
VFP常用函数总汇
SPACE(N)生成N个空格"合计"+SPACE(2)+"123" 合计123TRIM(S)消除字符串尾部空格TRIM("姓名") 姓名ALLTRI(S)消除字符串中所有空格ALLTRIM("李丽")李丽STUFF(S1,N1,N2,S2) 用字符串S2替换S1中第N1个字符起的N2个字符STUFF("NOW",2,& 宏替换P=“G2”USE &P USE G23、日期和时间函数函数名操作例结果DATE()求当前日期DATE() 2001/11/12DATETIME() 求当前日期和时间DATETIME() 2001/11/12/0:22:33amYEAR(D)求年份YEAR(DATE()) 2001MONTH(D)求月份(数值)MONTH(DATETIME()) 11CMONTH(D)求月份(字符)MONTH(DATETIME()) NovenberDAY(D)求日期DAY(DATE()) 12DOW(D)求星期几(数值)DOW(DATE())1CDOW(D)求星期几(英文)CDOW(DATE())sundayTIME(D)求当前时间TIME(DATE())10:20:38am4、数据类型转换函数函数名操作例结果ASC(S)求第一个字符串的ASCII码ASC("what") 87CHR(N)求ASCII码的字符CHR(87) wSTR(R,L,D) 数值转换成字符,L为长度,D为小数位数X=3.1415STR(X,6,2) 3.14VAL(S)字符串转换为数值VAL("123") 123.00CTOD(S)字符串转日期CTOD('11/01/2002') 11/01/2002DTOC(D)日期转换成字符串DTOC(DATE()) 11/01/2002DTOS(D)把日期转成年月日式的字符串DTOS(DATE()) 20021101CTOT(C)字符串转成日期时间型CTOT(11/01/2002 10:30:50am) 11/01/2002 10:30:50am DTOT(D)日期型转为日期时间型DTOT(DATE()) 11/25/2001 00:00:01amTTOC(T)日期时间型转为字符型TTOC(DATETIME()) 11/25/2001 00:00:01amTTOD(T)日期时间型转为日期型TTOD(DATETIME()) 11/25/2001IIF(LE,E1,E2) 逻辑判断IIF(A>0,"YES","NO") YES5、检测函数函数名操作例结果RECNO()检测当前记录号RECNO()1RECCOUNT()检测当前记录数RECCOUNT()12BOF()开始记录BOF()1EOF()最后记录EOF()12FOUND()返回查找结果FOUND().T.ROW()返回当前行坐标ROW()1COL()返回当前列坐标COL()1SYS(N)返回系统状态SYS(13)联机状态。
集合交集算法vfp代码
lcResult = LEFT(lcResult, LEN(lcResult) - 1) && 去除最后一个逗号
* 输出交集结果
"交集结果: " + lcResult
这段代码首先定义了两个集合 lcSet1 和 lcSet2,然后将它们转换为数组 laArray1 和 laArray2。接下来,创建一个新的数组 laIntersection 用于存储交集结果。通过遍历第一个集合的元素并检查是否在第二个集合中,将符合条件的元素添加到交集结果数组中。最后,将交集结果数组转换回字符串形式,并输出结果。
集合交集算法
以下是使用Visual FoxPro(VFP)编写的集合交集算法的代码示例:
* 定义两个集合
LOCAL lcSet1, lcSet2
lcSet1 = "A,B,C,D,E"
lcSet2 = "C,D,E,F,G"
* 将字符串转换为数组
LOCAL laArray1, laArray2
laArray1 = SPLIT(lcSet1, ",")
* 如果元素在第二个集合中,将其添加到交集结果数组中
APion
ENDIF
NEXT
* 将交集结果数组转换回字符串
LOCAL lcResult
lcResult = ""
FOR EACH lnElement IN laIntersection
lcResult = lcResult + lnElement + ","
laArray2 = SPLIT(lcSet2, ",")
遍历算法在VFP中的简单应用
遍历算法在VFP中的简单应用*--遍历算法是递归算法的一个具体应用实例,在程式设计中也是比较常用的算法之一*这里介绍几个常用的应用实例来简单接触下遍历算法的基础应用:*--1、遍历文件dqml='C:' &&需扫描的盘符UseCreate Cursor mylsdbf (wjmc c(120),wjcd N(10),wjrq d,wjshj c(10),wjsx c(6))xGS=1xCD=0Append BlankReplace wjmc With dqmlDo While !Eof()nRecn=Recno()dqml=Alltrim(wjmc)+'/'x=Adir(Mysz,(dqml+'*.*'),'rashd')If x<>0For I=3 To xMysz(I,1)=dqml+Mysz(I,1)xGS=xGS+1xCD=xCD+Mysz(I,2)EndforAppend From Array Mysz For Alltrim(wjmc)<>'.' And Alltrim(wjmc)<>'..' And 'D'$wjsxEndifGo nRecnSkipEnddoBrowseUse*--2、遍历控件Create Cursor kjsl(kjname C(254))Insert Into kjsl(kjname) Values('thisform')Do While !Eof()nRECN=Recno()kjmc=Alltrim(kjname)=Amembers(aval,&kjmc,2)If Type('aval')<>'U'For Each cval In aval&&aval控件名称数组,cval数组值Insert Into kjsl(kjname) Values(kjmc+'.'+cval)EndforEndifRelease avalGo nRECNSkipEnddoBrowse*--3、遍历TreeView 中指定节点及其所有子节点的算法** aChild[1,3]是一个自定义表单数组属性Lparameters cnode** 将所有的子节点的特性都放到表单的数组属性 aChild 中去** 以便在要删除一个节点的时候,删除所有子节点的数据Local oCurNode, nArrayCountnArrayCount = 1oCurNode = cnode && 纪录下第一个子节点的特性This.aChild[1,1] = oCurnode.KeyThis.aChild[1,2] = oCurnode.T extThis.aChild[1,3] = oCurnode.IndexDo While oCurNode.Children > 0oCurNode = oCurNode.ChildIf oCurNode.Children > 0 && 深入到最后一层LoopEndifDo While .T.If oCurNode.Key = cNode.KeyExitEndifnArrayCount = nArrayCount + 1If Isnull(oCurNode.Next) && 如果当前节点之后没有节点了Dimension This.aChild[nArrayCount, 3] && 纪录当前节点的信息This.aChild[nArrayCount, 1] = oCurNode.KeyThis.aChild[nArrayCount, 2] = oCurNode.TextThis.aChild[nArrayCount, 3] = oCurNode.IndexIf !(oCurNode.Key = cnode.Key) && 如果当前节点已经是最高节点了,则立刻退出oCurNode = oCurNode.Parent && 否则,后退一层,并重新开始循环LoopElseExitEndifElse && 当前节点之后还有节点,检查后续的节点oCurNode = oCurnode.Next && 将下一个节点设为当前节点Dimension This.aChild[nArrayCount,3] && 纪录该节点的特性This.aChild[nArrayCount,1] = oCurnode.KeyThis.aChild[nArrayCount,2] = oCurnode.TextThis.aChild[nArrayCount,3] = oCurnode.IndexIf oCurNode.Children > 0 && 如果该节点有子节点,则退出,返回到第一个循环ExitEndifEndifIf oCurNode.Children > 0ExitEndifEnddoIf oCurNode.Key = cNode.KeyExitEndifEnddo。
VFP的基本运算
VFP的基本数据运算本节内容简介VFP程序设计或数据库操作中经常要进行数据的运算。
本节介绍VFP的算术、字符、日期、关系及逻辑运算符,各种运算符的优先级。
利用常量、变量、函数通过运算符组成的各种表达式的运算。
学习目标:1、学会各种运算符的意义、运算规则2、掌握运算符的优先级顺序3、理解判断表达式的合法性及运算结果4、会将一般的数学表达式转换成VFP表达式学习重点与难点:1、运算符的优先级2、表达式的运算运算符及优先级VFP提供了五类运算符,在运算符两边参加运算的对象,必须有相同的类型。
各种运算符都有不同的优先级,与普通的数学一样,可以通过“( )”来改变优先级顺序。
(1)数值运算符:经数值运算后的结果仍为数值举例:?14/7+3^2-abs(-5) && 显示6.00?(4-3)*(12/exp(2)) && 显示1.6240?15%4+1 && 显示4(2)字符运算符字符运算符有如下3种:+ :字符串完全连接。
将两个字符串首尾相接连成一个新字符串。
- :字符串不完全连接。
将运算符前的字符串尾部空格移到运算符后的字符串尾部,再连成一个新的字符串。
$ :字符串包含运算。
若运算符前的字符串包含在运算符后的字符串中,运算结果为逻辑真;否则,运算结果为逻辑假。
(注意其运算结果为逻辑值,而不是字符串)$运算的优先级在字符运算中最高,+运算与-运算同级。
(3)关系运算符进行关系运算时,参与比较的数据类型必须相同。
数值型数据按其数值大小进行比较;字符型数据按字符的ASCII码值或汉字机内码进行比较;日期和时间型数据按日期时间的前(小)后(大)进行比较。
==与=两种运算符在用于字符串比较时是有区别的,==要求参与比较的两个字符串必须完全相同,才返回.T.,否则返回.F.;而=则不然,它以右边的字符串为基准,从第一个字符起进行比较,只要左边前几个字符与比较符右边的字符串相同,就返回.T.。
VFP-运算规则解析
3-2 函数
3、日期和时间函数 求系统日期:date( ) 求系统时间:time( ) 求系统日期时间:datetime( ) 求年:year(日期型数据) 求月:month(日期型数据) 求日:day(日期型数据) 求时:hour(日期时间型数据) 求分:minute(日期时间型数据) 求秒:stc(日期时间型数据)
A=“金融职业技术学校“
取计右算边子子串串出:现次rig数h:t(o串c,cu长rs度(串) 1,B?串=b2le)ft(a,4)+right(a,4)
求子串位置:at(串1,串2)
子串替换:strff(串1,超始位置,长度,串2)
字符替换:chrtran(串1,串2,串3)
字符串匹配:like(串1,串2)
12+24/(6/2+2^3)*2/4-6*6%5^2
3-1运算符与表达式
2、字符运算符
运算符 完全连接 +
不完全连接 –
说明
前后两个字符串首尾连接形成一 个新的字符串
连接前后两个字符串,并将前字 符串的尾部空格移到合并后的 新字符串尾数
例:求下列表达式的值 “Bei “+ “Jing” “Bei “+”Jing”
的年龄、求出香港回归那天是星期几。
二、实地训练
|-4.32| Abs(-4.32)
Ln10
Log(10 )
e3
Exp(3)
求, 56.7)
对于24.5674进行四舍五入保留三位小数 round(24.5674, 3)
取“职业技术学院计算机系”的左边一字
四、归纳总结
1、VFP有五类运算符和五类函数:
数值运算符
五种函数
五种运算符
vfp程序设计
1、求素数1~100之间的素数clears=0for i=2 to 100for j=2 to sqrt(i)if i%j=0exitendifendforif j>sqrt(i)?iendifendfor2、求1~100的素数之和clears=0for i=2 to 100for j=2 to sqrt(i)if i%j=0exitendifendforif j>sqrt(i)s=s+iendifendfors3、输出100到999之间水仙花数clearset talk offfor i=100 to 999s=str(i,3)s1=substr(s,1,1)s2=substr(s,2,1)s3=substr(s,3,1)a=val(s1)b=val(s2)c=val(s3)if i=a^3+b^3+c^3??iendifendfor4、输出100到999之间水仙花数的个数set talk offCLEARn=0for i=100 to 999a=int(i/100) &&取百位数字b=int(i%100/10) &&取十位数字c=mod(i,10) &&取个位数字if a^3+b^3+c^3=in=n+1endifENDFORnset talk on5、排序cleardimension s(10)for i=1 to 10s(i)=int(rand()*100) &&产生两位数的随机整数?s(i)endforfor i=1 to 9k=ifor j=i+1 to 10if s(j)<s(k)k=jendifendfort=s(k)s(k)=s(i)s(i)=tendforfor i=1 to 10?s(i)Endfor6、在VFP中,用循环语句求a+aa+aaa+......+aaaaaa..(n个a)的和clearinput "a=" to ainput "n=" to nb=as=0for i=1 to ns=s+bb=10*b+aendfor"a+aa+aaa+…+aaaa…(n个a)=",s7、求下述数列的前n 项之和813,58,35,23,12 input "请输入n 的值:" to ns1=2.0s2=1.0sum=0.0for i=1 to nsum=sum+(s1/s2)temp=s1s1=s1+s2s2=tempnext"该数列的前"+str(n,3)+"的和是:",sum8、计算数列:1,3,5,7,9,……的前7项之积,将结果存放在变量cj 中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.求最大、最小数问题Dime x(30)Maxx=0 &&极小数Minx=300 &&极大数For k=1 to 30X(k)=1+rand()*300If x(k)>maxxMaxx=x(k)EndifIf x(k)<minxMinx=x(k)Endif??x(k) &&顺序输出30个随机数endformaxx,minx2.最大公约数和最小公倍数问题Input to xInput to yM=xN=yR=x%yDo while R<>0X=yY=RR=x%yEnddoy, M*N/y3.素数(质数)问题Input to xFor k=2 to x-1If x%k=0exitendifendforif k=x?x,”is prime”Else?x.”not prime”endif4.阶乘问题Input to xF=1For k=x to 2 step -1F=f*kEndforF5.百钱百鸡问题for i=0 to 33for j=0 to 50k=100-i-jif 3*i+2*j+int(0.5*k)=100? i,j,kendifendforendfor6.倍数问题一个正整数与3的和是5的倍数,与3的差是6的倍数,编程序求出符合此条件的最小正整数。
num=1do While (num+3)%5<>0 or (num-3)%6<>0num=num+1enddonum7.判断回文数Accept to sL=len(s)For k=1 to int(L/2)if subs(s,k,1)<>subs(s,L-k+1,1)exitendifEndforIf k<=int(L/2)?s,”不是回文数”else?s, ”是回文数”endif8.完全数(因数和)问题所谓“完全数”是指一个数恰好等于它的所有因子之和,例如,6=1+2+3,6是“完全数”。
编程序求1000以内的“完全数”ClearFor n=1 to 1000m=0for i=1 to n-1if n%i=0m=m+iendifendforif m=n??nendifendfor9.二-十进制数转换input to n &&输入一个二进制数s=0k=0do while n<>0s=s+n%10*2^kk=k+1n=int(n/10)enddos10.十-二进制数转换dime s(30)L=1input to de &&输入一个十进制数do while de<>0s(L)=de%2de=int(de/2)L=L+1enddofor i=L-1 to 1 step -1??str(s(i),1)endfor11.常用级数生成与求和(1)已知数列{an}满足a1=1,an=a1+2a2+3a3+….+(n-1)an-1 (n≥2)。
请编写程序,求出a1000的值。
A=1n=2do While n<=1000A=A+(n-1)*An=n+1enddoA(2)计算:Sn=a + aa + aaa + …+ aaaa…aa (最后一个为n个a)比如,当n=4,a=3的时候,则为计算:s=3 +33 +333+3333Input to nInput to aS=aT=aFor I=2 to nT=T*10+as=s+Tendfors其它级数求和问题,请参考辅导资料12.二分法求高阶方程的根x1=-10x2=10Eps=10^-5do while .t.x0=(x1+x2)/2fx0=fun(x0)fx1=fun(x1)if(fx0*fx1<0)x2=x0elsex1=x0endifif abs(fx0)<Epsexitendifenddo"root=",x0proce funpara kreturn 2*k^3-4*k^2+3*k-6(说明:请注意书写高阶方程函数,初始2分点值x1,x2)13.梯形积分法Input to aInput to bEuler = 2.718281828S=0i=0n=100h=(b-a)/nDo While (i<100)T=h*(f1(a+i*h)+f1(a+(i+1)*h))/2.0s=s+Ti=i+1enddosProce f1para xreturn Euler^(-x*x)(说明:实际求解时,请注意正确书写求积函数和等分数)14.冒泡排序for i=1 to Nfor j=1 to N-iif(a(j)<a(j+1) )temp=a(j)a(j)=a(j+1)a(j+1)=tempendifendforendfor(说明:该程序已知数组a的长度为N,并已经被赋值为乱数列)15.选择排序for i=1 to N-1k=ifor j=i+1 to Nif(a(j)<a(k))k=jendifendforif(k!=i)temp=a(i)a(i)=a(k)a(k)=tempendifendfor(说明:该程序已知数组a的长度为N,并已经被赋值为乱数列)16.顺序查找input "请输入被查找的整数值:" to keyfor i=1 to Nif(a(i)=key)flag=1exitendifendforif(flag=1)?"查找成功,共进行了",i,"次比较"else?"数据集合中不存在被查找数据"Endif(说明:该程序已知数组a的长度为N,并已经被赋值为乱数列)17.折半查找flag=0low=1high=NInput “请输入查找关键字:” to keyDo while low<=highmiddle=(low+high)/2if key=a(middle)flag=1exitelse if key> a(middle)low=middle+1elsehigh=middle-1endifendifenddoif flag=1?"查找成功"else?"数据集合中不存在被查找数据”endif(说明:该程序已知数组a的长度为N,并已经被赋值为有序数列)18.有序数列插入Input to xFor i=1 to Nif (A(i)>=x)exitendifendforIf (i<=n)for k=n to i step -1A(k+1)=A(k)endforendifA(i)=x(说明:该程序已知数组a的长度为N,并已经被赋值为有序数列)19.有序数列删除Input to xFor i=1 to Nif (A(i)=x)exitendifendforIf (i<=n)for k=i to nA(k)=A(k+1)endfor(说明:该程序已知数组a的长度为N,并已经被赋值为有序数列)20.矩阵转置dime a(N,M),b(M,N)for i=1 to Nfor j=1 to Mb(j,i)=a(i,j)endforendfor(说明:已知M,N作为数组的行数和列数,假设数组a已经被赋值)21.矩阵旋转dime a(R,R),b(R,R)for i=1 to Rfor j=1 to Rb(R+1-i,R+1-j)=a(i,j)endforendfor22.递归算法(1)阶乘的递归fac(5)Proc facpara xif x=1return 1endifreturn fac(x-1)*x(2)最大公约数递归gcd(16,24)Proc gcdpara m,nif m%n=0return nelsereturn gcd(n,m%n)endif(3)求逆串do strR with sa,1,20proc strRpara ss,a,blocal tif a>breturnelsedo strR with ss,a+1,b-1t=ss(a)ss(a)=ss(b)ss(b)=tendif(说明:sa是一个存放字符串的数组。
参数ss,a,b说明接受一个数组,从1至20个字符求其逆串,结果仍然放在数组sa中)23.字符串处理(1)插入(将子串s1插入主串s中,插入位置L)Proc INS_STRPara s1,s,LIf L>=1 and L<=len(s)+1s0=subs(s,1,L-1)+s1return s0+subs(s,L)endif(2)删除(将子串s1从主串s中删除)Proc DEL_STRPara s1,sIf AT(s1,s)<>0if AT(s1,s)=1s=subs(s,len(s1)+1)elses0=subs(s,1,A T(s1,s)-1),s=s0+subs(s,A T(s1,s)+len(s1))endifendifreturn s(3)比较(输入:s1,s2。
如果两串相等返回0,s1>s2返回1,否则返回-1)Proc CMP_STRPara s1,s2N=1Do While N<=len(s1)x=asc(susb(s1,N,1)-asc(susb(s2,N,1)if x<>0 then exitN=N+1enddoIf x<0return -1elseif x>0return 1elsereturn 0endifendif。