vfp8.1-三种程序结构_第1页
vfp8.1-三种程序结构_第2页
vfp8.1-三种程序结构_第3页
vfp8.1-三种程序结构_第4页
vfp8.1-三种程序结构_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

大纲要求:(1)1、程序文件的建立与运行;2、程序文件中常用的命令:输入类、输出类、注释命令,中止程序执行命令等。3、程序的三种基本结构:

1)顺序结构;

2)选择结构:IF…ELSE…ENDIF及其嵌套;

DOCASE…ENDCASE;3)循环结构:DOWHILE…ENDDO

及其嵌套;第八章VFP程序设计基础

大纲要求:

4、多模块程序:

1)子程序设计与调用;

2)自定义函数与过程;

3)变量作用域;5、代码式菜单设计。6、程序的调试方法。第八章程序设计基础

程序的三种基本结构

结构化程序设计方法中,所有程序只能由三种结构构成:顺序结构:程序的流程是简单、顺序的,从第一条语句顺序地执行到结束或返回语句。选择结构:程序执行中,根据某些条件的不同,可以有选择地执行不同的语句部分。循环结构:程序执行中,可以根据某些条件是否成立,而重复执行某些程序语句。程序的三种基本结构程序的基本构成开始部分:注释与说明、初始化程序部分:输入、处理、输出结束部分:恢复环境,程序结束的命令*TEST2.PRGUSE学生管理!学生

ACCE'输入姓名:'TOXMLOCAFOR学生.姓名=XMDISPUSE&&初始化,打开表&&处理&&恢复、结束*TEST4.PRG关联查询学生选课成绩&&初始化部分CLEA&&清屏SELE1&&选择1号工作区USE选课

ALIASXK&&打开选课表SETORDERTOTAGXHASELE2USE学生ALIASXSSETRELATO学号INTOXK&&建立关联

&&执行部分ACCE“请输入姓名:”

TOXM&&交互式输入姓名LOCAFOR姓名=ALLTRIM(XM)&&查询?姓名,XK.课程号,XK.成绩

&&显示&&恢复部分CLEAALL&&关闭表,清变量程序的三种基本结构【例】已知鸡兔的头数为16,脚数为40,求鸡、兔数目。*鸡兔同笼问题;

CLEAH=16F=40X=(4*H–F)/2Y=(F–2*H)/2?’共有鸡’,X?’共有兔’,YCANCEL&&处理部分&&初始化部分&&输出与结束部分程序的三种基本结构2、选择结构

根据某逻辑表达式的值,判断与决定程序的走向。分为:单分支、双分支、多分支三种。1)单分支结构

IF<条件>

语句序列

ENDIF执行方式:当条件为真时,执行语句序列,否则直接执行ENDIF后的语句。条件语句序列.T.ENDIF后的语句单选择结构流程图程序的三种基本结构1)单分支结构【例】输出两数X,Y中大的一个(IF…ENDIF)

INPUT‘输入X’TOXINPUT‘输入Y’TOYS=XIFY>XS=Yendif

?Scancel.T..F.Y>X输入X输入YS=Y结束输出SS=X输入47输出7输入52输出5程序的三种基本结构2、选择结构2)双分支结构

IF<条件><语句序列1>ELSE<语句序列2>ENDIF执行方式:当条件为真时,执行语句序列1,否则执行语句序列2。任何情况下,两个序列中只会有一个被执行。双选择结构流程图条件语句序列1语句序列2.T..F.ENDIF后的语句程序的三种基本结构.T..F.Y>X输入X输入Y结束输出YS=X输出X2)双分支结构【例】输出两数X,Y中大的一个(IF…ELSE…ENDIF)

INPUT‘输入X’TOXINPUT‘输入Y’TOYIFX>Y?Xelse?Yendifcancel输入47输出7输入52输出5程序的三种基本结构.T..F.总分>=650打开表输入姓名到XM关闭表并结束输出‘Y’查询XM输出‘N’【例】判断某同学是否可以获得奖学金(入校总分>=650)

CLEAUSE学生

ACCE‘学生姓名:’

TOXMLOCAFOR姓名=XMIF入校总分>=650?姓名+‘可以获得。’

ELSE?姓名+‘不能获得。’

ENDIFUSECANC可以获得不能程序的三种基本结构【例】输入并判断某年是否是闰年。分析:1)定义变量输入量:Y年份;2)数学模型与算法:

闰年的计算方法:(1)年份能被4整除但不能被100整除;或:(2)年份能被400整除;逻辑表达式:中间变量(L型)TJ=MOD(Y,4)=0ANDMOD(Y,100)!=0ORMOD(Y,400)=0算法:(1)输入年份;INPUT‘输入年份’TOY(2)判断是否闰年,并输出结果;程序的三种基本结构程序:CLEAINPUT‘输入年:’TOYTJ=MOD(Y,4)=0ANDMOD(Y,100)!=0;ORMOD(Y,400)=0IFTJ?Y,’是闰年’ELSE?Y,’不是闰年’ENDIFCANC条件?‘是闰年’?‘不是’.T..F.结束输入年份计算条件程序的三种基本结构3)多分支结构格式:

DOCASECASE条件1

语句序列1CASE条件2

语句序列2…..CASE条件n

语句序列nOTHERWISE

语句序列

ENDCASE条件1条件2条件nOTHERWISE语句序列1语句序列2语句序列N语句序列ENDCASE后面语句.T..F.F.程序的三种基本结构注意:1、每次至多只执行一个语句序列。2、从DOCASE入口,满足哪个条件就执行对应语句序列,并立即跳出CASE结构。3、各条件是互斥的,如:语句序列n的执行条件是:不满足条件1、条件2、…条件n-1,但满足条件n。4、若所有条件都不满足,则执行OTHERWISE后的语句序列,OTHERWISE可以省略,5、注意结构的完整性。条件1条件2条件nOTHERWISE语句序列1语句序列2语句序列N语句序列ENDCASE后面语句.T..F.F.程序的三种基本结构SETTALKOFFINPUTTOXDOCASECASEX>0Y=1&&x>0CASEX=0Y=0&&!X>0.and.x=0OTHERWISEY=-1&&!X>0.and.!x=0ENDCASE?“Y=”,YCANCEL【例】求Y(X)的值。1(X>0)Y=0(X=0)-1(X<0)【例】根据选课表中成绩判断该生成绩属于优、良、合格、不合格;分析:基本步骤如下:

1、打开表;

2、输入姓名,查询成绩;

3、根据成绩n判断等级nj;对本步骤:用docase…endcase

解决将成绩变量n的值域(<60,60-79,80-89,90以上)从值域的一端向另一端依次划分(此处从左到右):0n<60n<80608090100n<90n<100由于每一步都是对前一步的否定,所以只需要

<0n<60n<80608090100n<90n<100Use选课Acce‘输入姓名’toxmLocafor姓名=xmN=成绩Docasecasen<60

nj=‘不合格’

casen<80

nj=‘合格’

casen<90

nj=‘良’

otherwise

nj=‘优’Endcase?xm,’同学的成绩’,n??‘等级为:’,njUseCanc0其它n>=60608090100n>=80n>=90Use选课Acce‘输入姓名’toxmLocafor姓名=xmN=成绩Docasecasen>=90

nj=‘优’

casen>=80

nj=‘良’

casen>=60

nj=‘合格’

otherwise

nj=‘不合格’Endcase?xm,’同学的成绩:’,n??‘等级为:’,njUseCanc右端向左端依次划分:读程序:分析下面的一个程序:Docasecase计算机<60?“不及格”

case计算机>=60?‘及格’

case计算机>=70?“中”

case计算机>=80?‘良’

case计算机>=90?‘优’Endcase

问题:1、若输入计算机=75,输出什么?2、若输入85、95,分别输入什么?3、若有错,错在何处?如何修改?0n<606080901003、循环结构

在程序的执行过程中,某些语句需要多次重复执行,控制这些语句反复执行的结构,称为循环结构。【例】计算1+2+3+4+……+100,可以是:

S=1+2+3+4+5+6……..

无法写下

或:S=0S=S+1S=S+2…………..S=S+100

共计100句实质上,这100句形式上基本相同。可以归结为

S=S+i(i=1,2,…100)程序的三种基本结构3、循环结构

DOWHILE<条件><语句序列>ENDDO

1)首先判断条件是否成立,当条件为真时,执行语句序列,否则执行ENDDO后面的语句。

2)每次执行完语句序列,都回到循环结构首部,再次判断条件是否成立,只要条件为真,则一直循环。

3)只要某次判断条件为假,立即结束循环,执行ENDDO后面的语句。

4)因此,循环体有可能一次也不执行.F..T.条件语句序列ENDDO后面的语句程序的三种基本结构基本结构示例:计算1到100的平方和。分析:

1、用变量S装结果,初值为02、人工执行的过程是:

S=0步数KS=S+1*11S=S+2*22…………..S=S+100*100100引进一个数值型变量K计算步数,则上述每一步:

1)S=S+K*K2)K=K+1直到K>100

为止。因此,可以写成循环结构:循环条件为:

K<=100循环体为:

S=S+K

K=K+1.F..T.K<=100S=S+K*KK=K+1ENDDO后面的语句S=0K=1问题:在?S处K的值是多少?.F..T.K<=100S=S+K*KK=K+1ENDDO后面的语句S=0K=1循环初值循环体循环条件基本结构示例:计算1到100的平方和。命令序列:S=0K=1DOWHILEK<=100ENDDOS=S+K*KK=K+1?SRETU

在数据库应用中,循环往往用于逐条处理记录,此时:LOCAFOR条件GOTOP循环体语句是:SKIP处理每条满足条件的记录CONTINUE或循环条件是:(只处理满足条件的记录)循环的初始语句是:(处理全部记录)DOWHILNOTEOF()ENDDO循环的初始语句是:循环条件是:DOWHILNOTEOF()循环体语句是:处理每条记录ENDDO统计XSQK.DBF表中入校总分在**分以上的学生人数

USE学生情况表

STN=0INPUT"请输入要统计学生人数的分数点:"TOSCDOWHILENOTEOF()IF入学总分>=SCSTN=STN+1ENDIFSKIPENDDO?"学生入学总分在"+STR(SC,3)+"以上者的人数是:"+STR(STN,2)USERETURNlocafor入学总分>=SCDOWHILENOTEOF()

STN=STN+1

contENDDO

USE学生

LOCAFOR入校总分>=580DOWHILEnoteof()DISPCONTINUEENDDO?’结束’

USECANCEL初始语句循环条件循环体

【例】显示学生表中总分高于580分的学生记录;如果表中没有总分高于580的记录,则循环一次也不会执行。带LOOP和EXIT的循环

DOWHILE<条件><语句序列1>[LOOP]<语句序列2>[EXIT]<语句序列3>ENDDO1)当执行到LOOP语句时,将跳过循环体中后续语句,直接回到循环首部。2)当执行到EXIT语句时,立即结束循环,执行ENDDO后面的语句。条件.F..T.循环体ENDDO后面的语句LOOPEXIT

USE学生

gotopDOWHILEnoteof()if入校总分<580skiploop

endifDISPskipENDDOUSECANCEL初始语句循环条件循环体【例】显示学生表中总分高于580分的学生记录;如果本记录总分低于580,则跳过,回到循环首部,继续下一条。

USE学生

counttonDOWHILE.T.input‘输入记录号’toidocasecasei<=0exitcasei>n?’记录号超界’

Othergoi

disp

endcaseENDDOUSE另类循环:死循环——dowhile.t.

死循环一般用于交互式输入或菜单选单程序中,能够无限循环执行,直到满足某条件为止。所以,死循环中必然有分支判断语句,并包含EXIT语句,以便满足某条件时,强行退出循环,转而执行ENDDO后面的语句。计数循环FOR……..ENDFOR|NEXT格式:

FOR<循环变量>=<循环初值>TO<循环终值>[STEP<步长>]ENDFOR|NEXT[<循环变量>]【例】fori=1to10……endforfori=10to0step-1……Nextifori=1to10?inext同样地,循环中可以有LOOP和EXIT。2、计数循环FOR…ENDFOR循环变量<=终值.T.循环体循环变量+STEP循环变量=初值.F.ENDFOR后面的语句1)循环变量赋初值;2)检查循环变量是否超过终值否则,跳出循环若未超过,则进入循环3)执行循环体4)当执行到ENDFOR或NEXT时,循环变量=循环变量+步长回到循环首部,继续第2)步。【例】计算1到100的和。K<=100.T.S=s+kK=k+1K=1.F.?‘s=’,s循环初值为:S=0K=1循环条件为:K<=100循环体为:S=S+KK=K+1s=0forK=1to100step1s=s+kendfor?’s=‘,scancel相比之下,FOR循环更简洁一些。.F..T.K<=100S=S+KK=K+1ENDDO后面的语句S=0K=1循环初值循环体循环条件回顾用DOWHILE……ENDDO解题:

命令序列:S=0K=1DOWHILEK<=100ENDDOS=S+KK=K+1?SRETU【例】计算n的阶乘。Fac=1Input‘请输入n的值:’tonFork=1tonfac=fac*kNext?str(n,5)+‘!=’+str(fac,5)CancelFac=1Input‘请输入n的值:’tonK=1Dowhilek<=nfac=fac*kk=k+1enddo?str(n,5)+‘!=’+str(fac,5)Cancel方法二:用dowhile循环方法一:用for循环循环初值为:K=1循环体为:

S=S*K循环条件为:

K<=100K=K+13、表文件扫描循环SCAN

SCAN[<范围>][FOR<条件>][WHILE<条件>]<语句序列1>ENDSCAN当无FOR时,等价于:GOTOP(或到范围的第一条记录)DOWHILE.NOT.EOF()<语句序列>SKIPENDDO当有FOR时:等价于:LOCAFOR/WHILE<条件>DOWHILE.NOT.EOF()<语句序列>CONTINUEENDDO3、表文件扫描循环SCAN

USE学生

scanfor入校总分<580

DISPENDSCANUSECANCEL

USE学生

gotop

locafor入校总分>=580DOWHILEnoteof()

dispcontinueENDDOUSECANCEL4、多重循环

(嵌套循环结构)

【例】

DOWHILE<条件1><语句序列1>forj=1tok<语句序列2>fori=1tom<语句序列31>

ENDforfori=1ton<语句序列32>

ENDfor

ENDforENDDO第一层循环(外层循环)第二层循环并列第三层循环(内循环)

温馨提示

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

评论

0/150

提交评论