版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,第七章,VFP程序设计基础,2,#DEFINE PI 3.1415926 R=6 R=R/2 S=PI*R*R L=2*PI*R ?S ?L,引 言,3,程序 为了完成某一具体任务而编写的一系列指令 程序设计 编写程序的过程 优点 自动执行多条命令 可被修改,可多次运行 可调用其他程序,4,7.1 创建、修改和运行应用程序,创建 项目管理器 菜单“新建” MODIFY COMMAND VFP程序行的规则 一个命令行内只能写一条命令 一个命令行可由若干物理行组成 采用“缩进”格式书写,扩展名为.PRG,5,修改 “打开”/“修改”按钮 MODIFY COMMAND 运行 “运行”按钮 DO
2、&扩展名为.prg,6,7.2 Visual FoxPro基本语法结构,7.2.1 常用命令 ?/? SAY表达式 CLEAR NOTE/*/& STORE 表达式TO变量1,变量2,. WAIT WINDOWS TO 变量 INPUT TO 变量 ACCEPT TO 变量,7,例1: Use js Append blank Edit,7.2.2 顺序结构程序设计 按程序中的语句顺序执行,8,例2:交换两个变量的值 input “please enter a:” to a input “please enter b:” to b c=a a=b b=c ?a,b,9,例3:任意输入一个年份,计
3、算出对应的生肖,csx=“猴鸡狗猪鼠牛虎兔龙蛇马羊” csx=猴鸡狗猪鼠牛虎兔龙蛇马羊 input please enter a: to a b=mod(a,12) c=substr(csx,2*b+1,2) ?str(a,4)+对应的生肖是:+c,10,7.2.3 分支结构程序设计 根据条件的测试结果执行不同的操作。 IFELSEENDIF DO CASEENDCASE,格式1 IF 条件表达式 命令组1 ENDIF,11,例1 CLEAR WAIT WINDOW “请按数字键09!” TO cnumkey IF VAL(cnumkey)=5 ?”按的数字键为:”+cnumkey ENDIF
4、,12,例2,input to x If x=0 y=x+10 ?y endif if x-3 y=2*x ?y Endif,13,格式2 IF 条件表达式 命令组1 ELSE 命令组2 ENDIF,14,例3.输入三角形的三边,求三角形的面积,input to a input to b input to c if a+bc and a+cb and b+ca p=(a+b+c)/2 s=sqrt(p*(p-a)*(p-b)*(p-c) ?s else ?”不能构成一个三角形” endif,15,例4. X (x=10),Input to x if x1 y=x else if x10 y=2
5、*x-1 else y=3*x-11 endif endif ?y,16,DO CASEENDCASE DO CASE CASE 条件表达式1 命令组1 CASE 条件表达式2 命令组2 OTHERWISE 其他命令组 ENDCASE,17,18,例.任意输入一个不超过5位的正整数,编程输出它是几位数,并分别打印它的每一位数,Input to x do case case x=10000 y=5 case x=1000 y=4 case x=100 y=3 case x=10 y=2 otherwise y=1 endcase,19,a=int(x/10000) b=int(x-a*10000
6、)/1000) c=int(x-a*10000-b*1000)/100) d=int(x-a*10000-b*1000-c*100)/10) e=x-a*10000-b*1000-c*100-d*10 do case case y=5 ?“这是一个5位数:”,a,b,c,d,e case y=1 ? “这是一个1位数:”,e endcase,20,1.求ax2+bx+c的根,其中a,b,c由键盘输入 2.键盘输入3个整数,按由小到大的顺序输出,21,Delta=b*b-4*a*c DO CASE CASE delta0 ?“方程有两个不等的实数根:” ?(-b+sqrt(delta)/(2*a
7、) ? (-b-sqrt(delta)/(2*a) CASE delta=0 ?“方程有两个相等的实数根:” ? b/(2*a) CASE delta0 ?“方程有两个复根:” real_part=-b/(2*a) img_part=sqrt(-delta)/(2*a) ?alltrim(str(real_part)+”+”+alltrim(str(img_part)+”I” ?alltrim(str(real_part)+”-”+alltrim(str(img_part)+”I” ENDCASE,22,7.2.4 循环结构程序设计 循环能重复执行一组语句 这组语句称为循环体,SCANENDS
8、CAN FORENDFOR DO WHILEENDDO,23,SCANENDSCAN,SCAN FORWHILE ENDSCAN,适用于对表中记录进行处理 自动将记录指针移到下一条满足条件的记录,24,例 显示JS表中全部记录的jsgh,jsxm Use js scan ?js.jsgh ,js.jsxm endscan use,25,例 显示JS表中记录号为偶数的jsgh,jsxm Use js scan for recno()%2=0 ?js.jsgh ,js.jsxm endscan use,26,FOR = TO STEP ENDFOR / NEXT 适用于已知循环次数的场合,FORE
9、NDFOR,27,当步长为正时,即为大于 当步长为负时,即为小于,For i=1 to 3 step 1 ?i endfor,1,2,3,28,1. For i=10 to 2 step -3 ?i endfor,2. For j=3 to 5 step -2 ?j endfor,29,例 计算1100之间所有的奇数和,s=0 for i=1 to 100 step 2 s=s+i endfor ?s,30,例 计算10!,p=1 for i=1 to 10 p=p*i endfor ?p,31,改错题1. 下列程序的功能是:将一个字符串中的各个单词的首字母组成其缩写形式(大写字母),其中,字
10、符串由多个英文单词组成且各单词之间用一个空格分隔,例如,对于字符串“central processing unit”,生成其缩写形式“CPU”。 其基本算法为:字符串左边加一个空格,然后依次检查字符串的每一个字符,如果该字符串为字母且左边为空格,则该字母为首字母。,32,cString=central processing unit cString=SPACE(1)+UPPER(cString) cResult=SPACE(0) FOR n=2 TO cString c=SUBSTR(cString ,n ,1) If between(c,A,Z) AND SUBSTR(cString ,n-
11、1,1)=SPACE(1) cResult=cResult+n ENDIF ENDFOR Wait windows 缩写形式为+cResult,33,改错题2. 将二进制的数转换成十进数的表示。 nNumber=1011001 &认定它为二进制数 cNumber=ALLTRIM(STR(nNumber) nResult=0 FOR n=LEN(cNumber) TO 1 c=LEFT(cNumber,1) IF c=0 nResult=nResult*2+1 ELSE nResult=nResult*2 ENDIF cNumber=SUBSTR(cNumber,2) ENDFOR WAIT W
12、INDOWS 十进制数表示为+STR(nResult),34,改错题3.下列程序的功能是计算分数数列2/1,3/2,5/3 ,8/5., m/n, m+n/m的前20项之和。,nSum=0 m=2 &数列中第一项的分子 n=1 &数列中第一项的分母 FOR x=1 to 20 nSum=nSum+m/x y=m m=m+n n=y ENDDO Wait window前20项之和为 +str(nSum,10,2),35,改错题4下列程序的功能是统计所有的“水仙花数”的个数.(“水仙花数”是指一个三位数,其各位数字立方和等于该数本身,例如153=13+33+53),ncount=1 for n=1
13、00 to 999 n1=val(substr(str(n,3),3,1) n2=val(substr(str(n,3),2,1) n3=val(substr(str(n,3),1,1) if n13+n23+n33=n ncount=ncount+1 endif endfor wait windows ”水仙花数”的个数为+ncount,36,DO WHILEENDDO DO WHILE 条件表达式 循环体 ENDDO 适用于循环次数未知的情况,37,38,例:判断以下程序的运行结果 s=0 i=1 do while i=100 s=s+i i=i+1 enddo ?s,39,s=“ABCD
14、EF” n=len(s) k=1 do while k=n ?subs(s,k,n-k) k=k+1 enddo,40,例:设有一张足够大的纸,厚0.09mm,问将它对折多少次以后可以达到珠穆朗玛峰(8848米)的高度?,x=0.09*10(-3) y=0 do while x=8848 x=2*x y=y+1 enddo ?对折后的高度是:,x ?对折了,y,次,41,例:任意产生100个01之间的随机数,统计大于0.5和小于0.5的数的个数.,x=0 y=0 i=1 do while i0.5 x=x+1 else y=y+1 endif i=i+1 enddo,?大于0.5的个数:,x
15、?小于0.5的个数:,y,42,例.统计一个字符串中包括多少个汉字 cString=微软(Microsoft)的视窗(Windows)操作系统 nCount=0 Do while LEN (cString)0 If ASC(left(cString ,1)127 nCount=nCount+1 cString=SUBSTR(cString,3) Else cString=SUBSTR(cString,2) Endif Enddo Wait windows 汉字个数为+str(nCount),43,LOOP命令和EXIT命令,LOOP命令(短路语句) 求1100之间非3的倍数的所有奇数之和 S=
16、0 FOR I=1 TO 100 STEP 2 IF MOD(I,3)=0 LOOP ENDIF S=S+I ENDFOR,44,EXIT命令(退出语句) 随机产生一个7080之间的数 x=0 do while .t. x=rand()*100 if x70 and x80 exit endif enddo,45,双重循环,计算 S=1!+2!+3!+20! s=0 For i=1 to 20 p=1 for j=1 to i p=p*j next j s=s+pnext i (可以用单循环),46,S=0 P=1 FOR I=1 TO 20 P=P*IS=S+P NEXT I,47,编写打印
17、乘法表的程序,CLEAR ? FOR A=1 TO 9 FOR B=1 TO A S=A*B ?STR(A,1)+*+STR(B,1)+=+STR(S,2)+ ENDFOR ? ENDFOR,48,求之间的素数,x=0 FOR M=3 TO 200 STEP 2 N=INT(SQRT(M) FOR I=2 TO N IF M=INT(M/I)*I EXIT ENDIF ENDFOR IF IN ? +STR(M,4) ENDIF ENDFOR,49,利用循环打印图形,* * * *,For i=1 to 4 i,50-i say ”*” endfor,* * * *,For i=1 to 5
18、for j=1 to 2*i-1 i,50-i+j say “*” endfor endfor,50,数组的使用 由一系列被称为元素的有序数据值构成 用序号引用这些元素 数组名下标 数组名下标1,下标2 数组必须先定义,后使用 1. 数组的定义 DECLARE 数组名空间大小 &定义私有数组 DIMENSION 数组名空间大小 &定义私有数组 PUBLIC 数组名空间大小 &定义全局数组 LOCAL 数组名空间大小 &定义局部数组,51,2. 数组的使用 定义后的数组自动被赋予.F.值 例如 DIMENSION A5,5 A=25 &对所有元素赋值 A2,2=4 A2,3=“abc” A3,3
19、=.T. A4,4=10/01/1949 DISP MEMORY,52,产生50个随机数DIMENSION A(50), B(5,10)FOR I=1 TO 50A(I)=RAND()ENDFORFOR I=1 TO 5FOR J=1 TO 10B(I,J)=RAND()NEXT JNEXT I,53,产生10个(1050)之间的随机整数。DIMENSION X(10)FOR I=1 TO 10N=5&赋初值DO WHILE N50N=INT(RAND()*100)ENDDO X(I)=NENDFOR,54,求Fibonacci数列的前40项1,1,2,3,5,8,13,。 dime a40
20、a1=1 a2=1 ?a1,a2 for i=3 to 40 ai=ai-1+ai-2 ?ai endfor,55,将数组A(10)中的10个元素按升序进行排序。 (2,6,4,8,19,3,7,5,20,13) FOR I=1 TO 10FOR J=I+1 TO 10IF A(I) A(J) T=A(I) A(I)=A(J) A(J)=TENDIFENDFORENDFOR 思考:降序如何处理?,56,打印杨辉三角 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1,57,clear DIME b10,10 FOR i=1 to 10 bi,1=1 bi,i=1 ENDFOR FOR
21、i=3 to 10 FOR j=2 to i-1 bi,j=bi-1,j+bi-1,j-1 ENDFOR ENDFOR,FOR i=1 to 10 FOR j=1 to i i,47-3*i+6*j say str(bi,j,6) ENDFOR ENDFOR,58,多次重复执行,有特定功能的一段代码 1. 过程的定义与调用 定义 PROCEDURE 过程名 PARAMETERS 参数列表 语句序列 RETURN 返回值 ENDPROC 调用 DO 过程名 WITH 参数列表 ,7.4 过程和用户自定义函数,59,例 ?我是主程序! do a1 do a2 proc a1 ?我是子程序1! endproc proc a2 ?我是子程序2! endproc,60,例 s=0 a=3 b=4 do area with s,a,b ?s proc area para s1,x,y s1=x*y return s1 endproc,61,2. 自定义函数的定义与调用 定义 FUNCTION 函数名 PARAMETERS 参数列表 语句序列 RETURN 返回值 ENDFUNC 调用 =函数名(参数值),62,存储 独立的程序文件中或一般程序的底部 过程文件 数据库的存储过程 若存于独立文
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年深信服云计算技术岗笔试题及答案详解
- 2026华为面试题及解答答案
- 2025-2026学年家长的风俗教学板书设计
- 2025-2026学年教学目标人物插画设计
- 《7.3 牛顿第一定律 惯性》(教学设计)-沪粤版(2024)初中物理八年级下册
- 2025-2026学年人教版八上地理教学设计
- 2026中国宝武秋招笔试题及答案
- 2026年十九报告填空测试题及答案
- 2026年智商怎么测情商测试题及答案
- 中班科学教案怎样让球动起来
- 能源与动力工程测试技术 课件 第五章 压力测量
- 鱼类学讲义课件
- 舌下腺囊肿护理
- 保洁公司合作协议
- 学校食堂“三同三公开”制度实施方案
- 2024年开学第一课:人工智能与未来教育
- 《老年性骨质疏松症中西医结合诊疗指南》
- 社会实践报告之山西传统民俗文化
- GB/T 18314-2024全球导航卫星系统(GNSS)测量规范
- 专题10 说明文阅读(含答案+原卷版)备战2025年中考语文真题专项汇编(全国版)
- DL-T-5115-2016混凝土面板堆石坝接缝止水技术规范
评论
0/150
提交评论