中国高校课件下载中心 》 教学资源 》 大学文库

铜陵学院数学与计算机学院:《数据库原理及应用》课程教学资源(教案讲义)第4章 结构化程序设计

文档信息
资源类别:文库
文档格式:DOC
文档页数:13
文件大小:204.5KB
团购合买:点击进入团购
内容简介
铜陵学院数学与计算机学院:《数据库原理及应用》课程教学资源(教案讲义)第4章 结构化程序设计
刷新页面文档预览

第4章结构化程序设计4.1程序与程序文件4.1.1程序的概念程序是能够完成一定任务的命令的有序集合。一组构成程序的命令被存放的文件称为程序文件或命令文件。4.1.2程序文件的建立、修改与运行程序文件建立、修改与运行方法有多种,下面介绍常用的三种。1、命令方式(1)程序文件的建立和修改命令格式:MODIFYCOMMAND[|?功能:打开一个编辑窗口,从中可以修改或创建程序文件。(2)程序的运行命令格式:DO】TO功能:在程序执行过程中,将用户交互式输入的内容作为字符串赋值给指定内存变量。说明:①如果选用,那么系统会首先显示该表达式的值,作为提示信息,并将输入的字符串赋值给。②该命令只能接收字符串,而不需加定界符,否则系统将把定界符作为字符串的一部分。③若不输入任何字符而直接按回车键,系统将把空串赋值给指定的内存变量。【例4-1】编程从键盘输入学生姓名,在XSDA中查找并显示其内容

第 4 章 结构化程序设计 4.1 程序与程序文件 4.1.1 程序的概念 程序是能够完成一定任务的命令的有序集合。一组构成程序的命令被存放的文件称为程 序文件或命令文件。 4.1.2 程序文件的建立、修改与运行 程序文件建立、修改与运行方法有多种,下面介绍常用的三种。 1、命令方式 (1)程序文件的建立和修改 命令格式:MODIFY COMMAND [|?] 功能:打开一个编辑窗口,从中可以修改或创建程序文件。 (2) 程序的运行 命令格式:DO 功能:运行已建立的程序文件。 说明:该命令除了可以从命令窗口调用程序外,还可以在程序中使用,可以从一个程序 调用子程序。 2、通过项目管理器 (1)程序文件建立 首先打开已建立的项目文件,选择“全部”选项卡中“代码”,并在“代码”中选择“程 序”,单击“新建”按钮,在程序编辑窗口中逐条输入程序内容,编辑完按下“保存”按钮。 (2)程序文件的运行 在“管理项目器”的“代码”选项卡中的“程序”项中,选择程序,按下“运行”按钮, 该程序的结果即显示于 VFP 的主窗口里。 3、菜单方式 (1)程序文件的建立 执行“文件”|“新建”命令,在对话框中选取择“程序”文件,出现程序编辑窗口, 在程序编辑窗口逐条输入程序内容,保存程序文件。 (2)程序文件的运行 选择菜单“程序”中的“运行”命令,出现“运行”对话框,在“运行”对话框中选择 程序文件后单击“运行”按钮。如要运行在程序编辑窗口的当前正在编辑的程序,可单击常 用工具栏上的“运行”按钮。 4.1.3 程序设计中常用的输入输出命令 1、ACCEPT 命令 格式:ACCEPT [] TO 功能: 在程序执行过程中,将用户交互式输入的内容作为字符串赋值给指定内存变量。 说明: ①如果选用,那么系统会首先显示该表达式的值,作为提示信息,并将输 入的字符串赋值给。 ②该命令只能接收字符串,而不需加定界符,否则系统将把定界符作为字符串的一部分。 ③若不输入任何字符而直接按回车键,系统将把空串赋值给指定的内存变量。 【例 4-1】编程从键盘输入学生姓名,在 XSDA 中查找并显示其内容

*程序文件名1x4_1.prg。SETTALK OFFCLEARUSE XSDAACCEPT”请输入要查找的学生名:”TOXMLOCATEFOR姓名=XMDISPUSESET TALK ONRETURN2、INPUT命令格式:INPUT[】TO功能:在程序执行过程中,将用户交互式输入的内容赋值给指定内存变量。说明:如果选用,那么系统会首先显示该表达式的值,作为提示信息,并将输入的数据赋值给。②可以输入字符型、数值型、逻辑型、日期型等类型数据,而且可以是常量、变量或表达式等形式,按回车键结束输入。③输入非数值型数据要加定界符。如输入逻辑型常量时要用圆点定界(.T.)、输入日期型常量要用大括号(2004-05-10)、输入字符型加””或,,等。【例4-2】编写程序,查找指定籍贯和出生日期以后的学生。*程序文件名1x4_2.prgSET TALK OFFCLEARUSE XSDAINPUT”请输入学生籍贯:”TOJGINPUT"请输入出生日期:”TOCSRQDISPFOR 籍贯=JGAND出生日期>CSRQQ&&结果显示在查询窗口里SET TALK ONUSERETURN在命令窗口输入D0LX43,然后输入”浙江”(字符定界符不可少)和(1980/1/1)(日期定界符不可少),程序运行结果如下图所示。一回文MicrosoftVisualFoxPro文件(E编罐(E)显示V)格式(O)工具(D程序(P)窗口(W)帮助(H)Deaayaa一口国##际?请输入学生籍贯:“浙工”请输入出生日期:(1980/1/1)是否团员糖质器片记次号姜器,榮满炎性别出生日期嘉经10/01/86.T.Gen3、WAIT命令格式:WAIT「】TO】「WINDOWS】「TIMEOUT功能:显示信息并暂停程序执行,当按下任意键或单击鼠标后继续执行。说明:①若字符表达式,系统将先显示字符表达式的值作为提示信息,并将输入的单字符赋值给用来保存用户键入的单字符,其类型只能是字符型。若不选TO短语,键入的单字符不保留。③如果指定WINDOW子句,则会出现一个WAIT提示窗口,在窗口中显示提示信息。提示窗口一般定位于WINDOW子句

*程序文件名 lx4_1.prg。 SET TALK OFF CLEAR USE XSDA ACCEPT "请输入要查找的学生名:" TO XM LOCATE FOR 姓名=XM DISP USE SET TALK ON RETURN 2、INPUT 命令 格式:INPUT [] TO 功能:在程序执行过程中,将用户交互式输入的内容赋值给指定内存变量。 说明: ①如果选用,那么系统会首先显示该表达式的值,作为提示信息,并将输 入的数据赋值给。 ②可以输入字符型、数值型、逻辑型、日期型等类型数据,而且可以是常量、变量或表 达式等形式,按回车键结束输入。 ③输入非数值型数据要加定界符。如输入逻辑型常量时要用圆点定界(.T.)、输入日 期型常量要用大括号{^2004-05-10}、输入字符型加”或’’等。 【例 4-2】编写程序,查找指定籍贯和出生日期以后的学生。 *程序文件名 lx4_2.prg SET TALK OFF CLEAR USE XSDA INPUT "请输入学生籍贯:" TO JG INPUT "请输入出生日期:" TO CSRQ DISP FOR 籍贯=JG AND 出生日期>CSRQ &&结果显示在查询窗口里 SET TALK ON USE RETURN 在命令窗口输入 DO LX4_3,然后输入”浙江”(字符定界符不可少)和{^1980/1/1}(日 期定界符不可少),程序运行结果如下图所示。 3、WAIT 命令 格式:WAIT [] [ TO ] [WINDOWS] [TIMEOUT] 功能:显示信息并暂停程序执行,当按下任意键或单击鼠标后继续执行。 说明: ①若字符表达式,系统将先显示字符表达式的值作为提示信息,并将输入的单字符赋值 给。若不选用提示信息,则显示默认的提示信息“按任意键继续.”。 ②用来保存用户键入的单字符,其类型只能是字符型。若不选 TO 短语,键入的单字符不保留。 ③如果指定 WINDOW 子句,则会出现一个 WAIT 提示窗口,在窗口中显示提示信息。提示 窗口一般定位于 WINDOW 子句

④TIMEOUT选项指在中断WAIT命令之前,等待键盘或鼠标输入的秒数,一旦超时就不再等待用户按键,自动向下执行。【例4-3】用WAIT命令在信息提示窗口显示:谢谢使用VisualFoxPro!WAIT“谢谢使用VisualFoxPro!”WINDOWSTIMEOUT104、格式输入输出命令格式:@在指定的起始位置显示信息。③GET50f=50*0.1+(w-50)*0.2&&货物重量超过50公斤时的计算公式ENDIF?”托运费为:”,f2、双分支结构格式:IFELSE

④TIMEOUT 选项指在中断 WAIT 命令之前,等待键盘或鼠标输入的秒数,一旦超时就不 再等待用户按键,自动向下执行。 【例 4-3】用 WAIT 命令在信息提示窗口显示:谢谢使用 Visual FoxPro! WAIT “谢谢使用 Visual FoxPro!” WINDOWS TIMEOUT 10 4、格式输入输出命令 格式:@ [ SAY ] [ GET ] . READ 功能:在指定的行、列位置显示或打印输出结果,也可接受数据的输入。 说明: ①行、列指定显示信息的起始位置(屏幕上的行、列号)。 ②SAY 在指定的起始位置显示信息。 ③GET 等待输入变量的值,GET 子句的变量必须用 READ 命令激活(即 GET 子句必须与 READ 命令配合使用),在多个 GET 子句后,仅用一个 READ 命令即可。 4.2 程序的结构 在结构化程序设计中,程序的基本结构有三种:顺序结构、分支结构和循环结构。 4.2.1 顺序结构 顺序结构是最简单的程序结构,它按命令在程序中出现的先后次序依次执行。绝大多数 问题仅用顺序结构是无法解决的,还要用到分支结构和循环结构。 4.2.2 分支结构 分支结构是指程序流程发生了分支,程序执行时根据条件选择其中某一分支执行的程序 结构。Visual FoxPro 6.0 的分支结构按分支多少分为单分支、双分支和多分支三类。 1、单分支结构 格式: IF〈条件表达式〉 〈语句序列〉 ENDIF 功能:首先计算〈条件表达式〉的值,当〈条件表达式〉的值为真时,执行〈语句序列〉; 否则,跳过“语句序列”,直接执行 ENDIF 后面的第一条语句。 【例 4-4】输入货物重量,计算该货物的托费,记费标准每公斤为 0.1 元,当超过 50 公斤后,超出数为 0.2 元。 *程序文件名 LX4_4.prg INPUT “请输入货物重量:” TO w IF w50 f=50*0.1+(w-50)*0.2 &&货物重量超过 50 公斤时的计算公式 ENDIF ?”托运费为:”,f 2、双分支结构 格式: IF ELSE

ENDIF功能:根据计算得到的值是“真”还是“假”,决定是执行,还是执行。若是“真”(.T.),执行;如的值是“假”(.F.),则执行。说明:①IF和ENDIF必须配对使用,缺一不可,即双分支结构以IF开始,以ENDIF结束。②为关系表达式或逻辑表达式,也可用逻辑常量,结果不是“真”(.T.)就是“假”(.F.)。③各语句序列由一至多条语句组成。④IF-ENDIF可以嵌套使用,即语句序列中可以包含新的IF-ENDIF,IF要与ENDIF配对。【例4-5】在XSDA表中查找给定姓名的学生记录,若找到该记录则显示,若未能找到则显示“查无此人!”。*程序文件名LX4_5.prgUSE XSDAACCEPT"请输入待查姓名:”TOXMLOCATEFOR姓名=XMIF.NOT.EOFO?”姓名:”+姓名?”性别:”+性别?”出生日期:”+DTOC(出生日期)&&出生日期为日期型,需用DTOC(函数转换ELSE?”查无此人!”ENDIFUSERETURN3、多分支结构格式:DOCASECASECASE.CASE[OTHERWISE]ENDCASE功能:依次判断各条件表达式,直至某条件表达式成立,就执行该CASE和下一个CASE之间的语句序列,然后转向执行ENDCASE后继语句。说明:①不管有几个CASE条件成立,只有最先成立的那个CASE条件的对应语句序列被执行。②若所有条件都不成立,如有OTHERWISE项,则执行该项后的语句序列n+1:若无OTHERWISE项,则直接执行ENDCASE后的语句

ENDIF 功能:根据计算得到的值是“真”还是“假”,决定是执行, 还是执行。若是“真”(.T.),执行;如的值是“假”(.F.),则执行。 说明: ①IF 和 ENDIF 必须配对使用,缺一不可,即双分支结构以 IF 开始,以 ENDIF 结束。 ②为关系表达式或逻辑表达式,也可用逻辑常量,结果不是“真”(.T.) 就是“假”(.F.)。 ③各语句序列由一至多条语句组成。 ④IF-ENDIF 可以嵌套使用,即语句序列中可以包含新的 IF-ENDIF,IF 要与 ENDIF 配对。 【例 4-5】在 XSDA 表中查找给定姓名的学生记录,若找到该记录则显示,若未能找到 则显示“查无此人!”。 *程序文件名 LX4_5.prg USE XSDA ACCEPT"请输入待查姓名: " TO XM LOCATE FOR 姓名=XM IF .NOT. EOF() ?”姓名:”+姓名 ?”性别:”+性别 ?”出生日期:”+DTOC(出生日期) &&出生日期为日期型,需用 DTOC()函数转换 ELSE ?”查无此人!” ENDIF USE RETURN 3、多分支结构 格式:DO CASE CASE CASE . CASE [OTHERWISE ] ENDCASE 功能:依次判断各条件表达式,直至某条件表达式成立,就执行该 CASE 和下一个 CASE 之间的语句序列,然后转向执行 ENDCASE 后继语句。 说明: ①不管有几个 CASE 条件成立,只有最先成立的那个 CASE 条件的对应语句序列被执行。 ②若所有条件都不成立,如有 OTHERWISE 项,则执行该项后的语句序列 n+1;若无 OTHERWISE 项,则直接执行 ENDCASE 后的语句

③DOCASE和ENDCASE必须成对出现,DOCASE是本结构的入口,ENDCASE是本结构的出口。【例4-6】编程计算分段函数值[2x-1(x=10f=SQRT (x+1)ENDCASE?'结果:,fSET TALK ONRETURN4.2.3循环结构当某程序段需要反复执行若干次,或者反复执行到某个条件成立(或不成立)时止,这种根据条件来决定是否重复执行某段程序的结构称为循环结构。1、DOWHILE-ENDDO语句格式:DOWHILE《语句序列1[LOOP]《语句序列2》[EXIT]ENDDO功能:执行该语句时,先判断DOWHILE处的循环条件是否成立,如果条件为真,则执行DOWHILE与ENDDO之间的命令序列(循环体)。当执行到ENDDO时,返回到DOWHILE再次判断循环条件是否为真,以确定是否再次执行循环体。若条件为假,则结束该循环语句,执行ENDDO后面的语句。说明:①如果一开始执行循环时条件值就为假,则循环体一次都不执行:若每次判断时条件值都为真,则该循环无休止进行,称为“死循环”。②如果循环体包含LOOP命令,那么当遇到LOOP时,就结束循环体的本次执行,不再执行其后面的语句,而是转回DOWHILE处重新判断条件。③如果循环体包含EXIT命令,那么当遇到EXIT时,就结束该语句的执行,转去执行ENDDO后面的语句。通常LOOP或EXIT出现在循环体内嵌套的选择语句中,这两条命令只能用在循环体中,适用于三种不同的循环语句。根据条件来决定从LOOP回去,还是从EXIT退出循环体

③DO CASE 和 ENDCASE 必须成对出现,DO CASE 是本结构的入口,ENDCASE 是本结构的 出口。 【例 4-6】编程计算分段函数值      +  +   −  = x 1 ( 10) 3 5 (0 x 10) 2 1 ( 0) ( ) x x x x f x *程序文件名 LX4_6.prg SET TALK OFF INPUT ”输入 x 值:” TO x DO CASE CASE x=10 f=SQRT(x+1) ENDCASE ?’结果:’,f SET TALK ON RETURN 4.2.3 循环结构 当某程序段需要反复执行若干次,或者反复执行到某个条件成立(或不成立)时止,这 种根据条件来决定是否重复执行某段程序的结构称为循环结构。 1、DO WHILE-ENDDO 语句 格式:DO WHILE [LOOP] [EXIT] ENDDO 功能:执行该语句时,先判断 DO WHILE 处的循环条件是否成立,如果条件为真,则执 行 DO WHILE 与 ENDDO 之间的命令序列(循环体)。当执行到 ENDDO 时,返回到 DO WHILE 再 次判断循环条件是否为真,以确定是否再次执行循环体。若条件为假,则结束该循环语句, 执行 ENDDO 后面的语句。 说明: ①如果一开始执行循环时条件值就为假,则循环体一次都不执行;若每次判断时条件值 都为真,则该循环无休止进行,称为“死循环”。 ②如果循环体包含 LOOP 命令,那么当遇到 LOOP 时,就结束循环体的本次执行,不再执 行其后面的语句,而是转回 DO WHILE 处重新判断条件。 ③如果循环体包含 EXIT 命令,那么当遇到 EXIT 时,就结束该语句的执行,转去执行 ENDDO 后面的语句。 ④通常 LOOP 或 EXIT 出现在循环体内嵌套的选择语句中, 这两条命令只能用在循环体 中,适用于三种不同的循环语句。根据条件来决定从 LOOP 回去,还是从 EXIT 退出循环体

【例4-7】计算S=1+2+十3+·+10之和。程序分析:用变量i作为计数器,计算循环次数,i可从1开始,每次循环增加1,直至10:用变量S作为累加器,初值为0,每次执行循环体下一个数加到S中。这样,当循环结束时,S的值为1至10的累和数。*程序文件名1x4_7.prgSETTALKOFFs=0i=1DO WHILE i=[STEP《步长》]≤若步长为负,则≥②省略步长时,默认值为1。③初值、终值、步长均为数值表达式,仅在循环开始时计算一次,执行循环的过程中并不会改变。④循环变量值在循环体内可以改变,但会影响循环次数。5EXIT和LOOP命令可以出现在循环体内。执行LOOP命令时,结束本次循环,循环变量增加一个步长值,返回FOR循环头判断循环条件是否成立;执行EXIT命令时,程序跳出循环,执行ENDFOR后继语句。【例4-8】用FOR...·ENDFOR计算S=1+2+3+.+10。*程序文件名1x4_8.prgSETTALK OFFS=0FOR I=1 TO 10S=S+IENDFOR?"1~10的和为:",SSET TALK ONRETURN可以看到,用FOR·..ENDFOR编写的累计计数程序,程序结构显得十分简洁、清晰。【例4-9】从键盘输入10个数,编程找出其中的最大值和最小值

【例 4-7】计算 S=1+2+3+···+10 之和。 程序分析:用变量 i 作为计数器,计算循环次数,i 可从 1 开始,每次循环增加 1,直 至 10;用变量 s 作为累加器,初值为 0,每次执行循环体下一个数加到 s 中。这样,当循环 结束时,s 的值为 1 至 10 的累和数。 *程序文件名 lx4_7.prg SET TALK OFF s=0 i=1 DO WHILE i= TO [STEP ] ENDFOR|NEXT 功能:首先将初值赋给循环变量后,判断循环变量是否超过终值,若没超过,则执行循 环体,循环变量增加一个步长值,再次判断循环变量是否超过终值以决定是否继续执行循环 体;若超过,则直接执行 ENDFOR 的后续语句。 说明: ①循环变量没超过终值的 2 种情况: 若步长为正,则≤ 若步长为负,则≥ ②省略步长时,默认值为 1。 ③初值、终值、步长均为数值表达式,仅在循环开始时计算一次,执行循环的过程中并 不会改变。 ④循环变量值在循环体内可以改变,但会影响循环次数。 ⑤EXIT 和 LOOP 命令可以出现在循环体内。执行 LOOP 命令时,结束本次循环,循环变 量增加一个步长值,返回 FOR 循环头判断循环条件是否成立;执行 EXIT 命令时,程序跳出循 环,执行 ENDFOR 后继语句。 【例 4-8】用 FOR.ENDFOR 计算 S=1+2+3+···+10。 *程序文件名 lx4_8.prg SET TALK OFF S=0 FOR I=1 TO 10 S=S+I ENDFOR ?"1~10 的和为:",S SET TALK ON RETURN 可以看到,用 FOR.ENDFOR 编写的累计计数程序,程序结构显得十分简洁、清晰。 【例 4-9】从键盘输入 10 个数,编程找出其中的最大值和最小值

*程序文件名1x4_9.prgSET TALK OFFCLEARINPUT“请从键盘输入一个数:”TOASTORE A TO MAX,MINFORI=2TO10INPUT“请从键盘输入一个数:”TOAIFMAXAMIN=AENDIFENDFOR?”最大值为:”,MAX?”最小值为:”,MINSET TALK ONRETURN3、SCAN-ENDSCAN语句格式:SCAN[范围][FOR][WHILE]《循环体》ENDSCAN功能:该语句为表扫描型循环语句,执行该语句时,记录指针在当前表的指定范围内自动、从上往下依次移到满足条件的记录上,并对每一条记录执行循环体内的命令,直到全部执行完退出循环:若表中没有满足条件的记录,则直接退出循环。说明:①范围:有ALL、NEXTn、Recordn和REST。只有范围之内的记录才可能扫描到,SCAN的默认范围ALL。②FOR:针对范围之内所有满足条件的记录,执行循环体。③WHILE:只有当前记录满足条件,才执行循环体,一旦遇到使条件表达式值为假的记录时,SCAN命令便终止,转向执行ENDSCAN后继语句。4)EXIT、LOOP也可在循环体内使用,功能同DOWHILE-ENDDO和FOR-ENDFOR。【例4-10】编写程序,从键盘上任意输入一个出生日期,显示XSDA表中比该出生日期迟的学生信息。*程序文件名1x4_10.prgSET TALK OFFCLEAROPENDATAJXGLUSE XSDAGO TOPINPUT“任意输入一个出生日期:"TO csrqSCANFOR出生日期>cSrqDISPLAYENDSCANCLOSE DATABASESET TALK ONRETURN

*程序文件名 lx4_9.prg SET TALK OFF CLEAR INPUT “请从键盘输入一个数:” TO A STORE A TO MAX,MIN FOR I=2 TO 10 INPUT “请从键盘输入一个数:” TO A IF MAXA MIN=A ENDIF ENDFOR ?”最大值为:”,MAX ? ”最小值为:”,MIN SET TALK ON RETURN 3、SCAN-ENDSCAN 语句 格式:SCAN [范围] [FOR] [WHILE] ENDSCAN 功能:该语句为表扫描型循环语句,执行该语句时,记录指针在当前表的指定范围内自 动、从上往下依次移到满足条件的记录上,并对每一条记录执行循环体内的命令,直到全部 执行完退出循环;若表中没有满足条件的记录,则直接退出循环。 说明: ①范围:有ALL、NEXT n、Record n和REST。只有范围之内的记录才可能扫描到,SCAN 的 默认范围ALL。 ②FOR:针对范围之内所有满足条件的记录,执行循环体。 ③WHILE:只有当前记录满足条件,才执行循环体,一旦遇到使条件表达式值为 假的记录时,SCAN命令便终止,转向执行ENDSCAN后继语句。 ④EXIT、LOOP 也可在循环体内使用,功能同 DO WHILE-ENDDO 和 FOR-ENDFOR。 【例 4-10】编写程序,从键盘上任意输入一个出生日期,显示 XSDA 表中比该出生日期 迟的学生信息。 *程序文件名 lx4_10.prg SET TALK OFF CLEAR OPEN DATA JXGL USE XSDA GO TOP INPUT "任意输入一个出生日期:" TO csrq SCAN FOR 出生日期>csrq DISPLAY ENDSCAN CLOSE DATABASE SET TALK ON RETURN

4、语句嵌套在一个循环中又包含另一个循环,称为循环嵌套。循环都可以相互嵌套。可以包含另一个循环的循环称为外循环,被包含的循环称为内循环,这种结构又称多重循环。例如:FORDO WHILESCAN-FORFORDOWHILE....ENDFORENDFORENDDOENDFORENDDOENDSACN【例4-11】双重循环*程序文件名1x4_11.prgCLEARSET TALK OFF?”i”,"j"FOR i=1 TO 2FOR j=3 TO 5? i,jENDFORENDFORSET TALK ONRETURN说明:①循环体“?i,j”共执行了6次,外循环变量改变一次,内循环变量取值一个完整循环。②不要直接从循环体外转入循环体内。VFP规定:不论哪种循环,循环入口(如FOR、DOWHILE、SCAN)和出口(如ENDFOR、ENDDO、ENDSCAN)总是配套的,且出口语句总是与最近的未配套的入口配对。对于EXIT语句,它只能退出当前的循环体,不能一次退出多层循环。对LOOP子句,则规定必须转到所在层次的循环入口而不能转到外层或其它循环的入口。③分支和循环语句可以嵌套使用,即语句序列中可以包含新的分支和循环,应当注意不能形成嵌套的交叉。在循环结构中,如下列结构是错误的。FORDOWHILESCAN一FORFORDOWHILE...ENDFORENDDOENDSACNENDFORENDFORENDDO4.3程序举例【例4-12】计算:s=1!+2!+3!+...·+10!程序分析:用2层FOR..·ENDFOR语句来实现。内层循环用于计算每个数的阶乘即n!,外层循环控制n的值由1变化到10,每次循环n值增加1。计算n!可参照前面计算1+2+..….+10的编程思想方法,事先给定n值,用变量p存放n!的结果,令p的初值为1,在FOR….…ENDFOR语句的循环体中使用命令p=p*i,i为循环控制变量,每循环一次值加1,当i超过n时脱离内层循环

4、语句嵌套 在一个循环中又包含另一个循环,称为循环嵌套。循环都可以相互嵌套。可以包含另一 个循环的循环称为外循环,被包含的循环称为内循环,这种结构又称多重循环。 例如: FOR FOR . ENDFOR ENDFOR DO WHILE FOR . ENDFOR ENDDO SCAN DO WHILE . ENDDO ENDSACN 【例 4-11】双重循环 *程序文件名 lx4_11.prg CLEAR SET TALK OFF ?”i”,”j” FOR i=1 TO 2 FOR j=3 TO 5 ? i,j ENDFOR ENDFOR SET TALK ON RETURN 说明: ①循环体“?i,j”共执行了 6 次,外循环变量改变一次,内循环变量取值一个完整循环。 ②不要直接从循环体外转入循环体内。VFP 规定:不论哪种循环,循环入口(如 FOR、 DO WHILE、SCAN)和出口(如 ENDFOR、ENDDO、ENDSCAN)总是配套的,且出口语句总是与 最近的未配套的入口配对。对于 EXIT 语句,它只能退出当前的循环体,不能一次退出多层 循环。对 LOOP 子句,则规定必须转到所在层次的循环入口而不能转到外层或其它循环的入 口。 ③分支和循环语句可以嵌套使用,即语句序列中可以包含新的分支和循环,应当注意不 能形成嵌套的交叉。 在循环结构中,如下列结构是错误的。 FOR FOR . ENDFOR ENDFOR DO WHILE FOR . ENDDO ENDFOR SCAN DO WHILE . ENDSACN ENDDO 4.3 程序举例 【例 4-12】计算:s=1!+2!+3!+.+10! 程序分析:用 2 层 FOR.ENDFOR 语句来实现。内层循环用于计算每个数的阶乘即 n!, 外层循环控制 n 的值由 1 变化到 10,每次循环 n 值增加 1。计算 n!可参照前面计算 1+2+. +10 的编程思想方法,事先给定 n 值,用变量 p 存放 n!的结果,令 p 的初值为 1,在 FOR. ENDFOR 语句的循环体中使用命令 p=p*i,i 为循环控制变量,每循环一次值加 1,当 i 超过 n 时脱离内层循环

*程序文件名1x4_12.prgs=0FOR n=1 TO 10p=1FOR i=1 TO np=p*iENDFORs=s+pENDFOR?sRETURN【例4-13】输出斐波纳契(Fibonacci)数列的前20项,数列的规律是:第一、二个数是1,从第三个数起,每个数是前面两个数之和。程序分析:先输出第1个和第2个数f1和f2,从第三个数起具有相同的规律,即f:=fi-i+fi-2。程序中用f3存放要计算的数,f3输出后将前一位的数(在f2中)赋给f1,f3的值赋给f2,再重新计算f3。直至算出前20位数。*程序文件名1x4_13.prgCLEARf1=1f2=1? f1?f2FOR i=3 TO 20f3=f1+f2? f3f1=f2f2=f3ENDFORRETURN【例4-14】从键盘上任意输入一个学生姓名,在表XSDA中查,若有则显示该生信息否则显示“没找到!”,要求程序可以查找若干个学生直到不想再查找为止。程序分析:使用循环进行若干次的查找,每次循环可以从键盘上输入一个学生姓名,确定表中是否存在该生,若存在则显示,显示完该生情况后,询问是否继续查找,用户通过回答来决定是否进行下一次的循环查找,直至不再查找为此,本程序的循环条件可以设为.T.,何时结束循环由循环内部EXIT语句来决定。*程序文件名1x4_14.prgSETTALKOFFUSE XSDADO WHILE.T.CLEARACCEPT"请输入学生姓名:”TOxmLOCATEFOR ALLT(姓名)=xmIF.NOT.EOFODISP

*程序文件名 lx4_12.prg s=0 FOR n=1 TO 10 p=1 FOR i=1 TO n p=p*i ENDFOR s=s+p ENDFOR ? s RETURN 【例 4-13】输出斐波纳契(Fibonacci)数列的前 20 项,数列的规律是:第一、二个 数是 1,从第三个数起,每个数是前面两个数之和。 程序分析:先输出第 1 个和第 2 个数 f1 和 f2,从第三个数起具有相同的规律,即 fi=fi-1+fi-2。程序中用 f3 存放要计算的数,f3 输出后将前一位的数(在 f2 中)赋给 f1,f3 的值赋给 f2,再重新计算 f3 .。直至算出前 20 位数。 *程序文件名 lx4_13.prg CLEAR f1=1 f2=1 ? f1 ?f2 FOR i=3 TO 20 f3=f1+f2 ? f3 f1=f2 f2=f3 ENDFOR RETURN 【例 4-14】从键盘上任意输入一个学生姓名,在表 XSDA 中查,若有则显示该生信息, 否则显示“没找到!”,要求程序可以查找若干个学生直到不想再查找为止。 程序分析:使用循环进行若干次的查找,每次循环可以从键盘上输入一个学生姓名,确 定表中是否存在该生,若存在则显示,显示完该生情况后,询问是否继续查找,用户通过回 答来决定是否进行下一次的循环查找,直至不再查找为此,本程序的循环条件可以设为.T., 何时结束循环由循环内部 EXIT 语句来决定。 *程序文件名 lx4_14.prg SET TALK OFF USE XSDA DO WHILE .T. CLEAR ACCEPT "请输入学生姓名:" TO xm LOCATE FOR ALLT(姓名)=xm IF .NOT.EOF() DISP

ELSEWAITXm+"没找到!"WINDOWTIMEOUT5ENDIFWAIT”是否继续查找,请输入Y(继续)或N(不继续):"TOanSIF UPPER(ans)=""LOOPELSEEXITENDIFENDDOUSESET TALK ONRETURN4.4子程序和过程文件4.4.1概念在程序设计中常有这样的情况,在同一程序的不同位置,或者在不同程序中出现相同的程序段:这些程序段每次在运行时,可能以不同的参数运算,如果在一个程序中重复编写这些相同的程序段,程序既长,又浪费存储空间,解决方法就是将上述程序段编写为一个独立的、可供其它程序调用的子程序。在VFP中也称其为过程。调用过程的程序称为主程序或主调程序。在程序运行过程中,是通过主程序或主调程序去调用子程序或过程的,当子程序或过程运行完后,程序返回主调程序的调用处并执行下一条语句。4.4.2过程的定义和调用1、过程的定义格式:PROCEDURE丨FUNCTION《语句序列>[RETURN【表达式》]】[ENDPROCENDFUNC]功能:定义一个指定名称的过程和具体的内容。说明:PROCEDUREFUNCTION命令表示一个过程的开始,并命名过程名。过程名必须以字母或下划线开头,可包含字母、数字和下划线。ENDPROC|ENDFUNC命令表示一个过程的结束。如果缺省ENDPROC「ENDFUNC命令,那么过程结束于下一条ENDPROC|ENDFUNC命令或文件结尾处。当程序执行到RETURN处,将返回命令窗口或转到调用程序调用命令的下一条命令执行,同时返回表达式的值,若不带表达式,则返回逻辑值.T.。②若过程需要从外部获取数据,要用PARAMETERS或LPARAMETERS命令定义用来接收外部数据的形式参数,形式参数可以有多个变量,各变量名间用逗号分隔,它们在本过程被调用时获得具体的值。③PROCEDURE为过程的定义,而FUNCTION为自定义函数的定义。在VFP中,两者基本相同。过程可以在程序文件代码的后面,也可保存在一个单独的文件中(该文件称为过程文

ELSE WAIT xm+"没找到! " WINDOW TIMEOUT 5 ENDIF WAIT "是否继续查找,请输入 Y(继续)或 N(不继续):" TO ans IF UPPER(ans)="Y" LOOP ELSE EXIT ENDIF ENDDO USE SET TALK ON RETURN 4.4 子程序和过程文件 4.4.1 概念 在程序设计中常有这样的情况,在同一程序的不同位置,或者在不同程序中出现相同的 程序段;这些程序段每次在运行时,可能以不同的参数运算,如果在一个程序中重复编写这 些相同的程序段,程序既长,又浪费存储空间,解决方法就是将上述程序段编写为一个独立 的、可供其它程序调用的子程序。在VFP中也称其为过程。调用过程的程序称为主程序或主 调程序。 在程序运行过程中,是通过主程序或主调程序去调用子程序或过程的,当子程序或过程 运行完后,程序返回主调程序的调用处并执行下一条语句。 4.4.2 过程的定义和调用 1、过程的定义 格式: PROCEDURE∣FUNCTION [RETURN []] [ENDPROC∣ENDFUNC] 功能:定义一个指定名称的过程和具体的内容。 说明: ①PROCEDURE∣FUNCTION 命令表示一个过程的开始,并命名过程名。过程名必须以字母 或下划线开头,可包含字母、数字和下划线。 ENDPROC∣ENDFUNC 命令表示一个过程的结束。如果缺省 ENDPROC∣ENDFUNC 命令,那么 过程结束于下一条 ENDPROC∣ENDFUNC 命令或文件结尾处。 当程序执行到 RETURN 处,将返回命令窗口或转到调用程序调用命令的下一条命令执行, 同时返回表达式的值,若不带表达式,则返回逻辑值.T.。 ②若过程需要从外部获取数据,要用 PARAMETERS 或 LPARAMETERS 命令定义用来接收外 部数据的形式参数,形式参数可以有多个变量,各变量名间用逗号分隔,它们在本过程被调 用时获得具体的值。 ③PROCEDURE 为过程的定义,而 FUNCTION 为自定义函数的定义。在 VFP 中,两者基本 相同。 ④过程可以在程序文件代码的后面,也可保存在一个单独的文件中(该文件称为过程文

共13页,试读已结束,阅读完整版请下载
刷新页面下载完整文档
VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
相关文档