中职教材VF程序设计程序设计循环部分PPT_第1页
中职教材VF程序设计程序设计循环部分PPT_第2页
中职教材VF程序设计程序设计循环部分PPT_第3页
中职教材VF程序设计程序设计循环部分PPT_第4页
中职教材VF程序设计程序设计循环部分PPT_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

开始VF语言程序设计侯真慰电子与计算机技术学院计算机科学与技术系基础教研室2010.02上几次课内容的复习一、单边分支

命令格式:IF〈逻辑表达式〉〈命令语句1〉……分支体

ENDIF

功能:若逻辑表达式值为“.T.”,执行命令语句分支体序列;否则,程序继续运行ENDIF以后的语句。条件分支体YESNO

程序流程图条件YESNO分支体N-S流程图二、双边分支

命令格式:IF〈逻辑表达式〉〈命令语句〉……分支体1ELSE

〈命令语句〉……分支体2ENDIF

功能:若逻辑表达式值为“.T.”,执行命令分支体1语句序列;否则,执行命令分支体2语句序列。然后程序继续运行ENDIF以后的语句。条件分支体1YESNO

程序流程图分支体2条件YESNO分支体1N-S流程图分支体2条件分支函数命令格式:IIF(〈逻辑表达式〉,〈表达式1〉,〈表达式2〉)功能:若逻辑表达式值为“.T.”,则返回表达式1

的值,否则返回表达式2

的值返回值:字符、日期、逻辑值或数值三、多重分支

命令格式:DOCASECASE〈逻辑表达式1〉

分支体1

CASE〈逻辑表达式2〉

分支体2…………CASE〈逻辑表达式N〉

分支体NOTHERWISE

分支体N+1ENDCASE

功能:若逻辑表达式1值为“.T.”,执行命令分支体1语句序列;逻辑表达式2值为“.T.”,执行命令分支体2语句序列;……;若前面的逻辑表达式值均为“.F.”,就执行命令分支体N+1,然后程序继续运行ENDCASE

以后的语句。条件1分支体1YN

程序流程图分支体2条件N条件2分支体N分支体N+1ENDCASE后的语句NNYY条件1YN分支体

1N-S流程图分支体

2YYNN分支体N分支体N+1条件2条件NN第三节

循环结构程序设计

循环结构是用于描述重复执行的操作。它利用指定条件的当前值来控制程序中某一部分命令序列的重复执行操作,从而达到自动的、按条件确定的重复操作的目的。循环结构三要素

循环控制变量的初值

循环的执行条件---(控制变量的终值)使循环趋于结束的语句

FOR

循环

DOWHILE

循环

SCAN

循环VF中有三种循环结构语句:一、FOR循环(计数型循环)命令格式:

FOR〈循环变量〉=〈初值〉TO〈终值〉[STEP〈步长〉]

循环体命令语句

ENDFOR|NEXTFOR〈循环变量〉=〈初值〉TO〈终值〉[STEP〈步长〉]

循环体命令语句循环变量未超越终值循环体命令语句ENDFORENDFOR后的命令NY初值循环变量计算初值终值步长值循环变量

+

步长

循环变量CLEARSETTALKOFF?“程序:计算1+2+3+4+...+N的值”INPUT“请输入N的值”TONBB=0FORAA=1TONBB=BB+AAENDFOR?“1+2+3+4+...+N的值为”,BBSETTALKONRETURN

输入N的值BB=0FORAA=1TON

循环体命令

BB=BB+AA

输出累加和BB例:计算1+2+3+4+...+N的值分析:0+1+2+3+4+...+N被加数加数

BBAA结果验证的方法----图表法总结出的规律:需要重复(循环)的操作:

BB=BB+AAAA=AA+1(1N)三要素:

1循环变量AA的初值:

12循环的执行条件:AA<=N3使循环趋于结束的语句:AA=AA+1二、DOWHILE循环(条件循环)命令格式:DOWHILE〈逻辑表达式〉

循环命令语句组

ENDDO

逻辑表达式(条件)值为真

循环体命令语句

逻辑表达式循环体命令语句ENDDOENDDO后的命令NY功能:系统执行到该语句时,首先判断循环起始语句中<条件表达式>的值是否为真,当其值为真时执行循环体;其值为假时,退出循环而执行循环终端语句的后续语句。CLEARSETTALKOFF?“计算1+2+3+4+...+N的值”

INPUT“请输入N的值”

TON

BB=0AA=1DOWHILEAA〈=N

BB=BB+AAAA=AA+1ENDDO?“1+2+3+4+...+N的值为”,BB

SETTALKONRETURN

输入N的值BB=0AA=1满足AA〈=N循环体命令

BB=BB+AAAA=AA+1输出累加和BB例:计算1+2+3+4+...+N的值分析:0+1+2+3+4+...+N被加数加数

BBAA总结出的规律:需要重复(循环)的操作:

BB=BB+AAAA=AA+1(1N)三要素:

1循环变量AA的初值:

12循环的执行条件:AA<=N3使循环趋于结束的语句:AA=AA+1

CLEARSETTALKOFFUSE学生

DOWHILE.NOT.EOF()IF性别=”男”

DISPLAYENDIFSKIPENDDOUSESETTALKONRETURN

循环在数据表中的应用:逐条显示在《学生表》中性别为“男”的学生的所有记录内容。

打开学生表满足.NOT.EOF()性别=”男”YNDISPLAYSKIP关闭学生表分析:逐条操作的命令循环结构(没到库尾就一直工作)显示一条记录内容的命令

DISPLAY性别为“男”的条件

性别=”男”总结出的规律:需要重复(循环)的操作:

判断性别=”男”

DISPLAYSKIP三要素:

1循环变量的初值:.T.

2循环的执行条件:.NOT.EOF()=.T.

3使循环趋于结束的语句:SKIPh:\vf07课件\vf课件旧\亲朋好友录入模块.prg**********************************************程序名称:亲朋好友录入模块.PRG*功能:录入模块*********************************************DOWHILE循环在数据表录入中的应用USEh:\vf07课件\vf课件旧\亲朋好友录1.dbf录入否="Y"DOWHILE

录入否="Y"

APPENDBLANK@6,16SAY

“亲友情况录入栏”

@10,10SAY

“请输入亲友的姓名”

GET

姓名

@12,10SAY

“请输入亲友的年龄”

GET

年龄

@14,10SAY

“请输入亲友的生日”

GET

生日

@16,10SAY

“请输入亲友是否党员”

GET

党员否

@18,10SAY

“请输入亲友的身高”

GET

身高

@28,20SAY"是否录入新数据(Y/N)?"GET

录入否

READENDDOUSEh:\vf07课件\vf课件旧\亲朋好友录1.dbfAPPENDBLANK@6,16SAY

“亲友情况录入栏”

@10,10SAY

“请输入亲友的姓名”

GET

姓名

@12,10SAY

“请输入亲友的年龄”

GET

年龄

@14,10SAY

“请输入亲友的生日”

GET

生日

@16,10SAY

“请输入亲友是否党员”

GET

党员否

@18,10SAY

“请输入亲友的身高”

GET

身高

READ循环变量未超越终值命令组ENDFORENDFOR后的命令NY循环变量

+

步长

循环变量逻辑表达式ENDDOENDDO后的命令NY命令组两种循环的工作比较DOWHILE循环FOR循环LOOPEXIT语句功能示意LOOP语句:强行终止循环,返回到循环开始语句。无条件循环命令循环变量未超越终值命令组ENDFORENDFOR后的命令NY循环变量

+

步长循环变量LOOP逻辑表达式ENDDOENDDO后的命令NY命令组LOOPLOOPEXIT语句功能示意EXIT语句:强行停止循环,跳出到循环后的语句。无条件结束循环命令循环变量未超越终值命令组ENDFORENDFOR后的命令NY循环变量

+

步长循环变量EXIT逻辑表达式ENDDOENDDO后的命令NY命令组EXIT例编程显示学生表中除“李宁”以外的所有记录。总结出的规律:需要重复(循环)的操作:

判断姓名=”李宁”

则SKIP和LOOPDISPLAYSKIP三要素:

1循环变量的初值:.T.

2循环的执行条件:.NOT.EOF()=.T.

3使循环趋于结束的语句:SKIP分析:逐条操作的命令循环结构(没到库尾就一直工作)显示一条记录内容的命令

DISPLAY除“李宁”以外的条件的反条件

姓名=“李宁”CLEARSETTALKOFFUSE学生

DOWHILE.NOT.EOF()

IF姓名=”李宁”

SKIP

LOOPENDIFDISPLAYSKIPENDDOUSESETTALKONRETURN

打开学生表满足.NOT.EOF()姓名=”李宁”YNSKIPLOOPDISPLAYSKIP关闭学生表

书中P144例9.5

用了一个永真循环,注意循环跳出的方法。永真循环跳出的唯一方法:EXITEXIT

必须存在于循环结构中的条件结构中三、SCAN循环(指针型循环)SCAN循环是专为操作数据表记录而设计的循环。命令格式:

SCAN[<范围>][FOR<逻辑表达式>]

循环体命令行序列

ENDSCAN功能:该语句在指定的范围内,用数据记录指针来控制循环次数。执行语句时,首先判断函数EOF()的值,若其值为“真”,则结束循环;否则,结合(条件表达式1)或(条件表达式2),执行(循环体命令行序列),记录指针移到指定的范围和条件内的下一条记录,重新判断函数EOF()的值,直到函数EOF()的值为真时结束循环。SCAN[<范围>][FOR<逻辑表达式>]

循环体命令在范围内命令组初始记录指针ENDSCAN后的命令NYLOOPEXIT满足FOR条件满足WHILE条件YYNN记录指针增1CLEARSETTALKOFFUSE学生SCANFOR性别=“男”

DISPLAYENDSCANUSESETTALKONRETURN例用SCAN语句逐条显示在《学生表》中性别为“男”的学生的所有记录内容。P147例9.8总结出的规律:需要重复(循环)的操作:

判断性别=”男”

DISPLAY三要素:

1循环变量的初值:指针指向库头

2循环的执行条件:性别=”男”

且未到库尾

3使循环趋于结束的语句:隐含的SKIP分析:逐条操作的命令循环结构SCAN[ALL]显示一条记录内容的命令

DISPLAY性别为“男”的条件

FOR性别=”男”CLEARSETTALKOFF预查姓名=""@5,5SAY"请输入要查找的亲朋姓名"GET预查姓名READUSEi:\foxpro\亲朋好友录.dbfSCANALLFOR姓名=预查姓名

DISPLAYENDSCANUSESETTALKONRETURN程序:按条件查找记录.PRG三种循环的功能比较DOWHILEFORSCAN循环的嵌套问题

多重循环即循环的嵌套,是在一个循环结构的循环体中又包含另一个循环。我们称外层循环为外循环,被包含的循环为内循环。嵌套层数一般没有限制,但内循环的循环体必须完全包含在外循环的循环体中,不能相互交叉。正确的嵌套关系如下:

DOWHILE<条件表达式1>

<语句序列11>DOWHILE<条件表达式2>

<语句序列21>DOWHILE<条件表达式3>

<语句序列3>ENDDO

<语句行序列22>ENDDO

<语句行序列12>ENDDO*********************************************程序名称:九九表.PRG*功能:展示利用FOR语句循环输出九九表********************************************1*1=11*2=22*2=41*3=32*3=63*3=91*4=42*4=83*4=124*4=161*5=52*5=103*5=154*5=205*5=251*6=62*6=123*6=184*6=245*6=306*6=361*7=72*7=143*7=214*7=285*7=356*7=427*7=491*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=641*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81分析1*1=11*2=22*2=41*3=32*3=63*3=91*4=42*4=83*4=124*4=16┇┇┇1~9行第?行:1~i列第3行第3列行乘数列:被乘数12341234clearsettalkoffFOR被乘数=1TO9

列数=(被乘数-1)*9FOR乘数=

1TO被乘数

行数=乘数

@行数,列数

SAYSTR(被乘数,1)+"X"+STR(乘数,1)+"="+LTRIM(STR(被乘数*乘数))ENDFORENDFORsettalkonreturnfor(被乘数=1TO9)for(乘数=1TO被乘数

)输出被乘数*乘数=x第五节子程序、过程和函数

结构化程序设计方法要求将一个大的系统分解成若干个子系统,每个子系统就构成一个程序模块。模块是一个相对独立的程序段,它可以为其他模块所调用,也可以去调用其他模块。将一个应用程序划分成一个个功能相对简单、单一的模块程序,不仅有利于程序的开发,也有利于程序的阅读和维护。VFP模块化在具体实现上提供三种形式,它们是子程序、过程和函数。主程序与子程序调用关系示意图

一、子程序

子程序也叫外部过程,是以程序文件(.PRG)的形式单独存储在磁盘上的。子程序只需录入一次,就可反复被调用执行。

1.子程序的结构在VFP中,子程序的结构与一般的程序文件一样,可以用MODIFYCOMMAND命令来建立、修改、和存盘,扩展名也默认为.PRG。

【命令格式】

RETURN[TOMASTER|TO

程序文件名|表达式]

【命令功能】该命令中止一个程序、过程、或用户自定义函数的执行,返回上一级调用程序、最高级调用程序、另外一个程序或命令窗口。【语句说明】(1)通常程序执行到RETURN时,会自动返回到上级调用程序调用语句的下一条语句继续执行。如果是在最高一级主程序中,则返回命令窗口。(2)选用TOMASTER

子句时,则返回最高一级调用程序,即在命令窗口下,调用的第一个主程序。(3)TO程序文件名表示程序将转向到指定的程序。(4)如选用表达式,表示将表达式的值返回调用程序,通常用于自定义函数。(5)在程序最后,如果没有RETURN命令,则程序运行完毕后,将自动默认执行一个RETURN命令,但过程文件除外。2.子程序的调用:【命令格式】

DO<程序文件名>|<过程名>[WITH

参数表]【命令功能】执行以<程序文件名>或<过程名>为名的过程。【命令说明】WITH参数表子句用来指定传递到程序或过程的参数,在参数表中列出的参数可以是表达式、内存变量、常量、字段名或用户自定义函数,各参数间用逗号分隔。

【例】

*

MAIN.PRG******

SETTALKOFF

?”正在执行主程序”

DOSUB1

SETTALKON

*SUB1.PRG******

?”正在执行SUB1”

RETURN【例】利用子程序方法求M!/(N!*(M-N)!)(M>N)

*main.prg

****子程序sub1.prg*INPUT"请输入M:"TOm

s=1INPUT"请输入N:"TOnFORi=1TOxs=0s=s*ix=mENDFORDOsub1

RETURNss2=sx=nDOsub1s3=sx=m-nDOsub1s4=ss1=s2/(s3*s4)?s1

过程和函数也都是功能上相对完整和独立的程序单元,并没有本质上的不同,一般的划分方法:有返回值的称为函数,没有返回值的称为过程。引入过程和函数的目的有三点:

1、模块化程序设计模块是一个功能相对较为完整和独立的小的程序单元,可以单独的设计、调试和管理。2、复用性可被多次重复调用3、可读性二、过程和函数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论