vfp考试教案 62程序结构_第1页
vfp考试教案 62程序结构_第2页
vfp考试教案 62程序结构_第3页
vfp考试教案 62程序结构_第4页
vfp考试教案 62程序结构_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

vfp考试教案 62程序结构 6.2程序结构程序设计1程序设计的步骤分析问题确定算法将算法描述为计算机处理的语句序列(即程序)2“结构化程序设计”原则自顶向下,逐步求精3结构化编程方法提出了顺序,选择(分支),循环三种基本结构。 任何一个程序都可以用这三种结构装配起来。 三种基本结构6.2.1顺序结构(最基本,最简单)按照程序语句行的自然顺序,一条接一条语句的执行,不需要专门的结构语句来支持。 6.2.2分支结构(选择结构)解决实际问题时,常常需要对问题的给定条件作出判断,以便选择不同的解决方法,这就必须使用分支结构来编制程序。 分支结构有相应的结构语句,根据判断条件的真假,选择不同的语句执行。 分支结构语句(套用这样的语句,实现分支结构) (1)单一选择:IF条件语句序列A ENDIF说明该结构首先计算IF语句中的条件表达式(逻辑型的值,可以是返回值是逻辑型的函数,关系表达式,逻辑表达式)的值,如果它为真,则执行IF和ENDIF之间的语句序列A。 否则跳过转到ENDIF后面的语句继续执行。 IF条件,ENDIF必须各占一行,且必须成对使用。 语句序列A可由VFP认识的任何语句行构成。 条件语句序列A TF (2)双选择IF条件语句序列A ELSE语句序列B ENDIF说明该结构当IF语句为真(.T.)时,执行语句序列A,执行完转到ENDIF后面的语句。 若条件为假(.F.),则执行完语句序列B,然后执行ENDIF后面的语句。 注意IF,ELSE,ENDIF语句各占一行.IF,ENDIF必须成对使用.语句序列A,语句序列B可由任何语句行构成.允许多层嵌套 (3)多选择往往在判断选择时,可能会有多个不同的条件,编制这种程序最好使用多选择结构语句。 A条件T ENDIF后面的语句DO CASECASECASECASEOTHERWISEENDCASE说明从DOCASE语句说明多选择结构开始,进入本结构后,按顺序选择第一个条件为真的CASE子句并执行它的若干语句行,然后从ENDCASE语句退出本结构。 如果找不到满足条件的语句,执行OTHERWISE后的语句。 注意DOCASE,ENDCASE必须配对使用,且各占一行。 DOCASE是本结构的入口,ENDCASE是本结构的出口。 DO CASE后面紧接着CASE,且各占一行,中间不能有任何语句。 条件33条件22条件11不管有几个CASE条件成立,只有最先成立的那个CASE条件的对应命令会执行。 语句序列里可以出现各种类型的语句,如果又出现多选择结构,则是本语句的嵌套形式。 例计算分段函数值Y=-1(X=0)1(020)Y=-1(X=0)1(020) (4)选择嵌套语句中的IF和ENDIF,DOCASE-ENDCASE等必须成对出现,嵌套不能出现交叉。 在嵌套中,为了使程序清晰易于阅读,可按缩进格式写。 IFIFIFDO CASE语句序列1CASEELSE语句序列1语句序列2ENDIF CASE语句序列N ELSEOTHERWISE语句序列3语句序列N+1ENDIF ENDCASEELSEENDIF双选套双选双选套多选6.2.3.循环结构在一个大程序段中,常常会重复使用某一段相同的程序段。 在编制程序时,不必重复编写这个程序段,可以用循环结构来代替它。 如对表的操作和计算问题。 VFP6.0提供了三种循环结构的形式,以适应不同情况的应用. (1)当型循环DO WHILEENDDO结构DO WHILE语句序列LOOP语句序列EXIT语句序列ENDDO循环体:需要多次重复执行的部分,其中包括参数修改,通过重复执行中对参数的修改达到对循环次数的控制.语句含义(如何执行)选择项LOOP和EXIT的含义循环条件的设置第一种计数形式A=1&循环变量初值DO WHILEA=10&循环变量终值A=A+1&在循环体中修改变量的值ENDDO例求1100的和。 SET TALKOFF CLEAR Y=0X=1DO WHILEX=100Y=Y+X X=X+1&在循环体中修改变量的值ENDDO?1-100的和为,Y SET TALK ON CANCEL思考1.退出循环结构后X,Y的值分别是多少?2.循环结构中的两个语句调换位置后是什么结果?3.X=X+1改成X=X-1后是什么结果?例求1100的奇数和。 例求1-100之间的非3的倍数的所有奇数之和.SET TALKOFF CLEARSTOR0TO YX=1DO WHILEX=100IF INT(X/3)X/3Y=Y+X ENDIFX=X+2ENDDO?100以内非3的倍数的奇数和为,Y SET TALK ONCANCEL例求1111111.?1234599100?例求123499100.?1357197199?例求123499100=?例求10!例12+42+72+102+直到和超过1000为止。 求和为多少,项数为多少。 引入计数循环FORENDFOR/NEXT结构(一般在已知循环次数的情况下使用)FOR=TOSTEP语句序列ENDFOR/NEXT执行过程:遇到FOR语句时,首先将循环变量的值与终值比较,若超过终值,则结束循环.执行ENDFOR/NEXT后面的语句;若没有超过终值,则执行循环体.每执行一次循环,循环变量的值都要自动加上增量(步长值),从而控制循环执行的次数.说明:步长值可正可负。 即超过的含义是若步长为正,控制变量递增,直到大于终值停止循环。 若步长为负,控制变量递减,直到小于终值停止循环。 默认步长为1。 循环次数INT((终值初值)/步长)+1在此循环体中,循环变量每次加步长是自动加的,不需再加语句,如果人为的修改控制变量的值,会影响循环的执行次数。 LOOP语句,EXIT语句在SCAN,FOR结构的功能与在DO WHILE结构中相同.例求123910的和SET TALKOFF CLEARS=0FOR X=1TO10STEP1*STEP1缺省,默认为1S=S+X ENDFOR?S=,S SET TALK ONCANCEL例编程求P=1*2+3*4+5*6+7*8+21*22算法分析SET TALKOFF CLEARS=0FOR I=1TO21STEP2S=S+I*(I+1)ENDFOR?和是,S或者?和是+STR(S)SET TALK ON RETURN例宰相的麦子相传古印度宰相达依尔,是国际象棋的发明者。 有一次,国王因为他的贡献要奖励他,问他想要什么。 达依尔说“只要在国际象棋棋盘上(共64格)摆上这么些麦子就行了第一格一粒,第二格两粒,后面一格的麦子总是前一格麦子数的两倍,摆满整个棋盘,我就感恩不尽了。 国王一想,这还不容易,于是就答应了宰相,结果在兑现他的承诺时,发现全印度的粮食都不够奖赏的。 请计算国王总共需要奖赏宰相多少粒米。 请分别用For循环和do while循环实现。 例找出100999之间的所有“水仙花数”。 所谓水仙花数是指一个三位数,各位数字的立方和等于该数本身。 (如153135333)算法分析如何分离出一个三位数中的各位数字。 解1SET TALKOFF CLEAFOR I=100TO999A=INT(I/100)B=INT(I-100*A)/10)C=I-INT(I/10)*10IF I=A3+B3+C3?I ENDIF ENDFOR SET TALK ON RETURN解2SET TALKOFF CLEAFOR I=100TO999S=STR(I,3)A=VAL(LEFT(S,1)B=VAL(SUBS(S,2,1)C=VAL(RIGHT(S,1)IF I=A3+B3+C3?I ENDIF ENDFOR SET TALK ON RETURN例求1-100之间的自然数之和,偶数之和,奇数之和。 LOOP和EXIT的含义和使用方法例给程序填空程序的功能是求1到100之间的奇数和。 CLEARY=0FOR X=1TO100IF MOD(X,2)=0-ELSE-ENDIF ENDFOR?Y例读程序,写结果SET TALKOFF N=0DO WHILE.T.IF N=98EXIT ENDIFN=N+2ENDDO?N=+STR(N,3)RETURN例读程序,写结果SET TALKOFF CLEARSTORE0TO M,N DO WHILE MN?M,是素数ELSE?M,不是素数ENDIF SETTALKONRETURN例输入一个字符串,组成其倒序字符串并输出。 ACCEPT请输入一个字符串TO AS=”&变量S用来放倒序后的字符串,初值为空L=LEN(A)FOR X=L TO1STEP-1S=S+SUBSTR(A,X,1)&从后往前依次取A中的字符连接到S中ENDFOR?S例:由用户输入一个二进制数,把其转换成十进制数。 CLEA ACCEPT请输入一个二进制数TO AL=LEN(A)S=0FOR X=L TO1STEP-1S=S+VAL(SUBSTR(A,X,1)*2(L-X)ENDFOR?S例用户从键盘输入一个大写字母,得出从该字母开始的8个连续大写字母组成的字符串,然后输出这个字符串。 WAIT“请输入一个大写字母”TO STY=ASC(ST)&起始字符的ASCII码FOR X=1TO7ST=ST+CHR(Y+X)&7次把产生的字符依次连接到ST中ENDFOR?ST第二种键盘输入数据ANS=YDO WHILEUPPER(ANS)=YWAIT是否继续(Y/N)?TO ANS&循环体中输入Y或N,决定是ENDDO否再次执行循环体例:完善程序:查找表中指定姓名的学生记录.此程序可以实现多次查找,只要输入Y就可以继续查找,输入N停止查找.第三种直接用.T.作为条件,用EXIT退出循环。 DO WHILE.T.&条件永远成立IFEXIT&只可能在循环体中退出循环ENDIFENDDO第四种文件头或文件尾的测试USE&这儿不要出现让指针移动的语句,如果需要在循环之前要把指针移回第一条记录DO WHILE.NOT.EOF()&指针没到文件尾,即为真,执行循环体,否则退出SKIP&每执行一次循环体,指针下移一条记录。 ENDDO例:列出XSDA表中1979年以后出生的学生记录,并统计出学生人数。 SETTALKOFF CLEAUSE XSDAN=0DO WHILE NOT EOF()IF出生日期=1979/01/01DISPLAY N=N+1ENDIF SKIPENDDO USESETTALKONCANCEL引入扫描循环SCANENDSCAN结构SCAN DO WHILENOTEOF()ENDSCAN SKIPENDDO对打开的表指定范围内符合条件的记录逐条进行语句序列中规定的操作.该循环中语句序列每执行一次,表中记录指针下移一条记录.直到表文件记录结束为止.缺省范围和条件时上面左右两种结构是等同的。 SCAN后如果加条件表示只对符合条件的记录循环。 SCAN FORENDSCAN例:试着用SCANENDSCAN改写上面的例子(SCAN后可以加指定条件)例:对于给定的表XSCJ,增加一个字段,等级C (6),编程实现填充表中的等级字段,如果其计算机成绩60分,等级字段填充不合格,如果在60到70之间(不包括70分),填充合格,如果在70到85之间(不包括85分),填充良好,如果在85分到100分之间(包括100分),填充优秀.xx上第二套求阶乘xx上第三套产生连续字符xx下第八套二进制转换十进制xx下第六套求范围内素数和xx下第8套(统计字符串中字母和数字的个数)例求两个整数M和N的最大公约数和最小公倍数。 算法分析最大公约数将两个数中大的数给A,小的数给B(用除法取余的方法来求) (1)求A/B的余数N. (2)若N=0,则B为最大公约数若N0,则执行 (3) (3)将B放入A,N放入B,然后再求A/B的余数,回到 (2)最小公倍数两个数的乘积除以最大公约数。 SETTALKOFF CLEARINPUT请输入M值TO AINPUT请输入N值TO BC=A*B N=MOD(A,B)DO WHILEN0A=B B=N N=MOD(A,B)ENDDO?最大公约数是:,+STR(B)?最小公倍数是:,+STR(C/B)SETTALKONRETURN把此题和表联系起来。 (xx下第四套)例考生文件夹下已有数据表F01.DBF和空数据表F02.DBF,表结构如下F01(数据1(N,4),数据2(N,4)F02(最大公约数(N,4)请在考生文件夹下编写程序PROG1.PRG,其功能是:1)先根据数据表F02.DBF复制一个同结构的空数据表F03.DBF;2)求F01中“数据1”和“数据2”两字段的最大公约数,并将结果保存到F03的“最大公约数”字段中。 (注使用DOWHILE循环编程)(同时操作两张表)USE F02COPY TOF03USE F01&一号工作区打开F01,F02自动关闭USE F03IN2&二号工作区打开F03SCAN&在F01所在的1号工作区A=数据1B=数据2N=MOD(A,B)DOWHILEN0A=B B=N N=MOD(A,B)ENDDO SELE2APPE BLANKREPL最大公约数WITH BSELE1ENDSCAN SELE2LISTxx下第7套(求设备数量,资产总值)(2102下第3套类似)作业讲解XSCJ表中数学,英语,计算机的平均值大于等于80分的计算总分,否则不计算总分错误的做法:USE XSCJA=(数学+英语+计算机)/3SCAN IF A=80REPLACE总分WITH数学+英语+计算机ENDIF ENDSAN正确的做法USE XSCJSCAN A=(数学+英语+计算机)/3IFA=80REPLACE总分WITH数学+英语+计算机ENDIF ENDSAN找出XSCJ表中数学成绩最高的那个学生的学号和数学成绩。 USE XSCJMA=数学XH=学号SCAN IF数学MA MA=数学XH=学号ENDIF ENDSCAN?MA,XHxx上第4套(SELE)xx下第5套(求总距离) (4)循环嵌套在循环体中又包含循环,通常称为多重循环或循环嵌套.循环中也可以嵌套选择结构。 注意是嵌套,不能交叉。 问题一打印图形打印如下图形问题2穷举法穷举法就是通过把解决问题的所有可能情况逐一试验来找出符合条件的解的方法。 这种方法特点是盲目性较大,解决时间可能时间较长。 例.有一道趣味数学题有30个人在一家小饭店用餐,其中有男人、女人和小孩。 每个男人花了3块,每个女人花了2块,每个小孩花了1块,一共花去50块。 问男人、女人和小孩各有几人??分析设有男人、女人、小孩各X,Y,Z个。 则X+Y+Z=303X+2Y+Z=50它是不定方程。 应采用“穷举法”去试根。 CLEAR FOR X=1TO16FOR Y=1TO25Z=30-X-Y IF3*X+2*Y+Z=50?X,Y,Z ENDIFENDFOR ENDFOR例有表D1把D1复制成DD1。 有若干鸡和兔放在同一个笼子里,H表示共有多少个头,F表示共有多少只脚,在DD1中填充每条记录里鸡和兔的个数。 分析对于每一条记录设有鸡和兔各X,Y个。 则X+Y=H2X+4Y=F CLOSETABLES ALLUSE

温馨提示

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

评论

0/150

提交评论