常用算法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¨命令格式规则命令的行为单位,一行书写不完,在未尾加上“;”第二行接着写。
- 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。