您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 2013-1VFP第3、4、5、6部分(程序算法、顺序分支循环、控件)
要点:1.算法的概念及特点2.掌握程序3种基本结构的表示3.掌握利用分支结构编程4.掌握利用循环结构编程5.常用控件第三、四、五讲程序设计(1)算法及算法的表示一、算法的概念及特点所谓算法就是对解决问题所采用的方法和步骤的描述。二、算法的描述算法的描述方法有很多,为直观、准确地表示一个问题的处理方法和步骤,通常采用流程图的方法。流程图是用一些几何图形符号、线条及文字说明来表征一个问题的处理过程。一般采用传统流程图和N-S图来描述算法。(教材P51)【例3-1】设计如图所示表单,在文本框text1中输入华氏温度,单击“计算”按钮可以求出对应的摄氏温度,并在文本框text2中显示。表示华氏温度表示摄氏温度,,其中fascelsfascels9)32(5“计算”按钮的“Click”事件代码如下:fas=thisform.text1.valuecels=5*(fas-32)/9thisform.text2.value=round(cels,1)什么意思?〖描述方法1〗用自然语言表示步骤1:输入华氏温度fas。步骤2:按照公式,计算摄氏温度cels。9)32(5fascels步骤3:输出摄氏温度。〖描述方法2〗用流程图表示如图所示。开始计算cels输入fas输出cels结束〖描述方法3〗用N-S流程图如图所示。一个算法应该具有以下特点:教材P52①确定性。②有穷性。③有效性。④输入。⑤输出。任何一个问题能否让计算机处理,关键在于能否设计出合理的算法,有了合适的算法,再使用合适的计算机语言来编写程序。VFP就是一种语言工具。要用VFP编写出高质量的程序,一方面要构建合理的算法,另一方面要掌握VFP的语法规则,它是实现算法的基础。命令有一定的书写规则:1、命令分行。程序中每条命令都以回车键结尾,一行只能写一条命令。若命令需分行书写,应在一行终了时键入续行符“;”,然后按回车键。2、命令注释。程序中可以插入注释,以提高程序的可读性。注释语句NOTE|*注释部分&&注释部分格式:行首注释单命令的行尾注释三、3种基本结构的表示程序的3种基本结构:顺序结构、选择(或分支)结构、循环结构,它们构成了实现一个算法的基本单元。•顺序结构:是一种最基本、最简单的程序结构。如下图所示,先执行A,再执行B,A与B按照顺序执行。ABAB(a)流程图(b)N-S图•选择(或分支)结构:根据条件是否成立而执行不同的程序模块。PTFAB条件pABYN(a)流程图(b)N-S图•循环结构:是指重复执行某些操作,重复执行的部分称为循环体。条件PAN条件PAY(a)流程图(b)N-S图常用输入输出控件1)输入控件2)输出控件文本框标签、文本框fas=thisform.text1.valuethisform.text2.value=round(cels,1)R=thisform.text1.valuethisform.label3.caption=alltrim(str(s,8,1))程序设计实例顺序结构程序实例分支(选择)结构程序实例循环结构程序实例1.顺序结构顺序结构是在程序执行时,根据程序中语句的书写顺序依次执行的命令序列。VisualFoxPro系统中的大多数命令都可以作为顺序结构中的语句。教材P53(教材P52)【例3-2】设计如图3-5所示表单,在文本框text1、text2、text3中输入三角形的三边,单击“计算”按钮可以在文本框text4中显示三角形的面积。其计算公式为2/)())()((cbalclblallarea(其中a,b,c为三角形的三边,area为三角形的面积)“计算”按钮的“Click”事件代码如下:a=thisform.text1.valueb=thisform.text2.valuec=thisform.text3.value=(a+b+c)/2area=sqrt(*(-a)*(-b)*(-c))thisform.text4.value=round(area,1)lllll数据输入数据处理数据输出2.分支(选择)结构分支结构是在程序执行时,根据不同的条件,选择执行不同的程序语句,用来解决有选择、有转移的诸多问题。多路分支语句常见的分支结构有:IF语句单分支语句if…endif双分支语句If…else…endif流程图1)IF语句格式:见教材P57条件?语句序列1语句序列2YNENDIF之后的命令(教材P53)【例3-3】修改【例3-2】,在文本框text1、text2、text3中输入三角形的三边,单击“计算”按钮,如果输入的三边能构成三角形,则在文本框text4中显示三角形的面积;否则用提示框给出提示信息:不能构成三角形,重新输入!。如图所示。“计算”按钮的“Click”事件代码如下:a=thisform.text1.valueb=thisform.text2.valuec=thisform.text3.valueifa+bcanda+cbandb+ca=(a+b+c)/2area=sqrt(*(-a)*(-b)*(-c))thisform.text4.value=round(area,1)elsemessagebox(不能构成三角形,重新输入!)thisform.text1.value=0thisform.text2.value=0thisform.text3.value=0thisform.text4.value=0thisform.text1.setfocusendifllllll清空文本框光标定位在text1中(教材P54)【例3-4】设计如图3-13所示表单,其中文本框Text1中可以接受日期型数据,运行表单后在Text1中输入日期:08/25/11,单击命令按钮“Command1”,则标签Label2显示什么?其中command1控件的click事件代码:d=thisform.text1.valuey=year(d)IFy/4=int(y/4)ANDy/100int(y/100)ORint(y/400)=400y1=是ELSEy1=不是ENDIFthisform.label2.caption=y1判断某一年是否是闰年假如年份用y表示,判断y是否是闰年的方法是:若y能够被400整除或y能够被4整除并且不能够被100整除提示:判断一个整数M能否被另一个整数N整除,一般采用三种方法,判断:①MOD(M,N)是否等于0②INT(M/N)是否等于M/N③M%N=0若等于,则表明M能被N整除。EXM2:输入两个数,比较大小,并输出较大数。输入两个数a,bab??aYN结束?b方法一:双分支输入两个数a,bab?把b的值赋给aYN?a方法二:单分支EXM3:输入两个数,比较大小,并按从大到小的顺序输出。输入两个数a,bab?交换a,b的值YN?a,b使用单分支结构:容器A容器B容器C1231、C=A2、A=B3、B=C赋值赋值赋值交换思考:输入3个数a,b,c,比较大小,并按从大到小的顺序输出。“求解”命令按钮的“Click”事件代码如下:a=thisform.text1.valueb=thisform.text2.valuec=thisform.text3.valueifabt=aa=bb=tendififact=aa=cc=tendififbct=cc=bb=tendifthisform.text1.value=athisform.text2.value=bthisform.text3.value=c(教材P53)【例3-5】已知一元二次方程的3个系数,求一元二次方程的根。求根公式:21,242bbacxa分支的嵌套“求解”命令按钮的“Click”事件代码如下:a=thisform.text1.valueb=thisform.text2.valuec=thisform.text3.valueifa=0messagebox(二次项系数为0,这不是一个一元二次方程)thisform.text1.setfocuselsed=b^2-4*a*cifd=0x1=round((-b+sqrt(d))/(2*a),2)x2=round((-b-sqrt(d))/(2*a),2)thisform.text4.value=x1thisform.text5.value=x2elsemessagebox(该方程没有实数根!)endifendifEXM4:比较任意三个数的大小,并输出较大数。输入三个数a,b,cab?ca?cb?输出c输出a输出c输出b结束NYYNNY4)多分支语句格式:(见教材58页)流程图:条件1ENDCASE后面的语句条件2otherwise命令序列1命令序列2命令序列N命令序列Q条件N【修改例3-6】输入月份值,显示对应季节的中文名字(3,4,5月为春季,6,7,8月为夏季,9,10,11月为秋季;12,1,2月为冬季)。“输出”命令按钮的click事件代码:yf=val(thisform.text1.value)docasecaseyf=3oryf=4oryf=5jj=春季caseyf=6oryf=7oryf=8jj=夏季caseyf=9oryf=10oryf=11jj=秋季caseyf=12oryf=1oryf=2jj=冬季endcasethisform.label3.caption=jj注意:①if…endif,docase…endcase必须配对出现,表示分支的开始和结束。②为使程序清晰易读,对分支、循环等结构应使用缩格书写方式。③表达分支、循环的每种语句都不允许在一个命令行中输完,必须按格式一行一行地键入,因此,不能出现在命令窗口中。④三种选择结构之间可以相互嵌套,但不能交叉。循环结构能够使某些语句或程序段重复执行若干次。如果某些语句或程序段需要在一个固定的位置上重复操作,使用循环是最好的选择。3.循环结构常见的循环结构有:条件循环步长循环扫描循环涉及数据表的循环,第6章介绍1)条件循环(dowhile循环)格式:流程图:条件语句序列Enddo之后的语句NY教材P62【例】计算1+2+3+…+100第1步,计算0+1;第2步,计算(0+1)+2;第3步,计算(0+1+2)+3;………第i步,计算(0+1+…+i-1)+i;……….第100步,计算(0+1+…+99)+100;递归算法前i-1次累加和第i次累加项基本方法:属于“累加器”类型问题(1)在进入累加前先给累加器赋初值(求和一般为0)(2)用循环语句实现累加循环变量赋初值;循环条件;循环变量的改变规律(3)循环体语句的设计累加器当前值=累加器原值+循环当前值三个“确定”循环三要素算法:确定循环变量i并赋初值为1定义s存放累加和,初值为0确定循环条件i=100s=s+i确定循环变量的变化趋势i=i+1输出结果s递推公式在条件循环中如何体现的??s=1+2+3+…+100i=100s=s+ii=i+1s=0,i=1开始结束输出sYN循环变量赋初值循环条件(i大于100就结束)循环变量的变化趋势从1变到100“计算”按钮的click事件代码:s=0i=1dowhilei=100s=s+ii=i+1enddoThisform.text1.value=s循环体【修改例3-8】计算s=1+2+3+…+n“计算”命令按钮的“click”事件代码:n=thisform.text1.values=0x=1dowhilex=ns=s+xenddothisform.text2.value=s说明:①循环结构从dowhile开始,到enddo结束,两者必须成对出现;在enddo后面可以书写注释。②循环是否继续取决于条件的当前取值,一般情况下循环体中应含有改变条件取值的命令或语句,否则将造成死循环。③循环结构能自身嵌套(多重循环),还能与选择结构的各种形式嵌套。2)步长循环(for…endfor计数循环)格式:教材P62确定循环变量并赋初值(在FOR中实现)确定循环条件并判断?(在FOR中实现)执行循环体中
本文标题:2013-1VFP第3、4、5、6部分(程序算法、顺序分支循环、控件)
链接地址:https://www.777doc.com/doc-3729798 .html