程序设计基础课件_第1页
程序设计基础课件_第2页
程序设计基础课件_第3页
程序设计基础课件_第4页
程序设计基础课件_第5页
已阅读5页,还剩127页未读 继续免费阅读

下载本文档

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

文档简介

F

■••••'

应用台港

2010-4-271

彩,本章主要内容

•程序设计的基本概念

•程序文件建立与运行

•三种程序控制结构

•多模块程序

•程序调试

2010-4-272

:计的基本概念•广:

一、VFP的工作方式

•命令工作方式(或交互工作方式)

通过菜单选择的方法或在命令窗口中逐条输入

命令的方法来执行的。

・程序工作方式

根据解决实际问题的需要,将一系列符合

VisualFoxPro要求的命令按一定的逻辑结构编排

成一个完整的应用程序,然后输入到计算机内自动

地、连续地加以执行。

2010-4-273

的基本概念

「对于制作简单短小的应用程序;

使用过程编程方式比较容易,

二、VFP的编程方印同时,这也是面向对象编程方

式的基础。本章重点介绍面向

面向过程编程方式过程的程序设计。

用结构化编程语言来编写结构化的程序,它把

一个复杂的程序分成较小的过程,每个过程可以单

独进行调试。

•面向对象编程方式

用面向对象的技术编程,它把编程工作主要集

中在描述的对象上,程序是事件驱动的,在执行过

再设计的基本概念

三、程序设计的步骤

>分析问题或任务,总结或抽象出问题的数学模型

>根据数学模型确定解决问题的算法思想

>确定要建立的数据表或数据库的基本结构及其数据表之间

的关系

>画出茬序流程图

>编写程序,实现功能要求,并在计算机上调试通过

>用典型数据对所编写的程序进行测试,验证程序的可靠性

>编写使用说明书,整理有关资料,进行总结

2010-4-275

程序文件建立与运行

■■I*»:

•程序文件

程序是由命令组成的ASCH码文本文件,所以

程序文件也称为命令文件。该文件可用任何文本编

辑器或字处理软件来建立。

•程序文件扩展名

源文件的扩展名是.PRG,程序在运行时,会产

生主文件名与.PRG程序主文件名相同,扩展名

为.FXP的目标文件。

2010-4-276

II11,'叫*ah泉已土壬程序文件建立

1…一■■U1,■fl■

建立程序最简单的方法是用系统本

身提供的编辑器。VFP有2种方式进入程

序编辑器窗口:菜单方式和命令方式

2010-4-277

建立程序文件

用菜单建立程序的步骤为:

>单击菜单“文件”f“新建”命令或者单击常用

工具栏的“新建”按钮,打开“新建”对话框。

>打开“程序1”的程序编辑新窗口。

2010-4-278

fcmf,令疗式建立程序文件

格式:MODIFYCOMMAND[〈程序文件名>]|?

功能:打开程序编辑窗口,从中可以修改或

创建程序文件。

几点说明:

•〈程序文件名):指定修改或创建的程序文件名。

•如果用MODIFYCOMMAND?,则出现“打开”对

话框,如图所示。

2010-4-279

在用命令建立程序文件时,最好在命令后加上程

序文件名,这样可以直接创建或修改用户给出的程

序文件。

建好的文件将保存在“默认目录”指定的文件夹

下,默认的扩展名是.PRG。如果需要保存在其它文

件夹下,还可在命令中指定路径。如:

MODICOMMD:\excercise\example

区程序输入与保存

,二题I索轴】州II

[例6-1]在程序编辑窗口输入如下6条命令。

CLEAR&&将屏幕输出窗口内容清空

a=l2&&将数值12赋值给变量a

b=18&&将数值18赋值给变量b

cna+b&&将变量a与b和计算出来,赋值给变量c

?a,b,c&&输出变量a、b、c的值

RETURN&&表示程序结束

2010-4-2711

本章中每个例题的程序

名可以按照CX+例题编号

来命名,例如例6-1可以用

cxl,例6—2可以用cx2,其

他例题依此类推。用户也

可以自己设定程序名

6;工2程序运行

•菜单方式运行程序

单击菜单“程序”f“运行”命令,打开“运

行”对话框。选定定要执行的程序文件,如选择:

CX1,单击“运行”按钮,即可运行程序。

『’出*7k6;1.2程序运行

的网闾।汕!!!川1丽咖1111111州1出即

•命令方式运行程序

格式:DO<程序文件名》

功能:将指定的程序文件调入内存并运行。

如在命令窗口里输入:DOcxl

将在屏幕输出程序计算结果:

121830

2010-4-2714

『’出籍7k三:6工2程序运行

、匕[diRU:innll

・单击常用工具栏上“!”命令按钮执行该程序

在程序打开并且为当前程序的情况下,

单击常用工具栏上“!”命令按钮可执行该程

序。

2010-4-2715

ffl

在程序执行过程中,如果程序出现运行错误或用户按下了“Esc”键,将

弹出“程序错误”对话框,如图所示。

单击“挂起”按钮,可暂时有

了程序错设

止程序的运行,可在命令窗口

里输入命令:RESUME,或单击单击“帮助”命

***中断***菜单“程序”一“继续执行”令按钮可提示相

命令可继续执行程序O关帮助信息。

单击“取消”

按钮可取消单击“忽略”命令

程序的执行。按钮忽略程序的错

y

误继续执行程序。

2010-4-27

h添已上售程序辅助命令

Fin…一■山

以前介绍的所有VisualFoxPro命令都可

以用在程序设计中。另外VisualFoxPro还提

供了一些辅助命令,这些命令能使程序更好

地阅读和有效地运行。本小节介绍:

•程序注释命令

•程序结束命令

•信息对话框函数MESSAGEBOX

•运行环境设置命令

2010-4-2717

II叫*a麋*程序注释命令

VisualFoxPro提供了3种注释命令:

格式1:NOTE〈注释内容)

格式2:*<注释内容》

功能:使NOTE或*后面的内容成为注释内容。

格式3:[<命令>]&&<注释内容》

功能:〈注释内容〉对&&左面的命令做出解释或给

出运行结果,又称为行尾注释命令。

2010-4-2718

II11,'叫*afe*T程序结束命令

格式1:RETURN

功能:返回到上一级模块。如果本程序是以菜单方

式或在命令窗口中调用执行的,则返回到命令交互

状态。

格式2:CANCEL

功能:终止程序运行,清除程序中的私有变量,返

回到命令窗口。

格式3:QUIT

功能:关闭VisualFoxPro,j

2010-4-2719

函数MESSAGEBOX

MessageBox函数用于显示一个信息对话框,可以在

程序运行过程中,显示一些信息,例如提示信息、错误

信息等。其构成如图所示。信息对话框的“标'

题”部分。

____7

错误信息X信息对话框的

“提示信息”部

输入的用户名或密码错误,语重新输入

信息对话框y

的“图标”定,

部分。

<______y

信息对话框的

“按钮”部分。

2010-4-2720

湛双话框函数MESSAGEBOX

格式:

MESSAGEBOX(〈字符表达式1>[,<数值表达式>[,〈字符表达式2>]])

功能:供用户定义信息对话框,按下相应的按钮返

回一个数值。

说明:

•V字符表达式1>用于指定在对话框中显示的信息

文本。

•V数值表达式〉用于根据表6・1的内容设置对话框中

的按钮、图标和默认按钮,缺省该参数表示取0。

O戏话框函数MESSAGEBOX

表6-1照拒38变£x函数中按钮、图标设置表

数值一对话框按钮一

0。仅有“确定”按钮一

1-“确定”和“取消"按钮一

2P“放弃”、“重试”和“卷、略”按钮小

3-“是〃、“否”和“取消”按钮一

4c“是”和"否"按钮/

1“重试”和“取消"按钮一

16P“停止”图标/

321

图标^

48一惊叹号一

64d信息(i)图标一

第1个按钮。

默认按钮。256-第2个按钮Q-----;

512第3个按钮户**'

2010-4-2722

.对话框函数MESSAGEBOX

•〈字符表达式2>用于指定对表6-2返回值表P

话框标题栏的显示文本。返回数值一按下按钮一

缺邕该参数表示在标题栏12确定2

显示"MicrosoftVisual取消2

FoxPro”。放弃2

•函数值返回一个数值,用重试2

户可根据操作时按下的按忽略2

钮来获得相应的返回值,

是,

返回值见表6-2,用户编程

否.

时根据返回值来设置动作。

[例6-3]在信息对话框中使用2个按钮“是”和“否”,

使用“问号”图标,默认按钮为第二个按钮,显示“真

的要退出系统吗?”信息,对话框标题为“提示信息”。

在命令窗口里输入:

a=MESSAGEBOX(〃真的要退出系统吗?。4+32+256,〃提示信息〃)

就会显示如图所示的信息对话框。

单击“是”按钮,返回值为6,

单击“否”按钮,返回值为7。

2010-4-27

二运行环境设置命令Q

fcmf■■

同WHIM蹄

在程序中运用一些环境设置命令,可使程

序正常而高效地运行。运行环境设置命令大

多数是由SET命令设置的,它一般有ON和OFF

两个选项,当为ON状态时,设置有效,为OFF

状态时设置无效。有的SET命令用TO指定设置

值。常用的环境设置命令如表6-3所示。

2010-4-27

表6-3常用运行环境设置命令d

命令"功能。

SETTALKON/OFFP设置受控命令执行的结果在屏幕上显示与否。

SETSTATUSON/OFFP设置屏幕下端的状态行显示与否「

SETSAFETYON/OFFP设置进行文件重写或覆盖操作时是否有提示。

SETHEADINGON/OEF^设置执行LIST或DISPLAY时是否显示字段名Q

SETESCAPEON/OFFP设置按“ESC”键时是否终止程序的执行」

SETCONSOLEON/OFF"设置程序中诞盘输入的信息是否发送到屏幕上。

怔日期年份按4位显示与否

SETCENTURYON/OFFP

SETPRINTERON/OFF^设置输出的结果是否送打EU机口

SETSTRICTDATETO0。设置通常日期格式显示。

flnui[.,交互式输入命令f

根据解决实际问题的需要,往往在程序运

行的过程中,由用户向程序输入一些数据或

信息,完成这种功能的一些命令称为交互式

输入命令。VisualFoxPro提供了多种交互式

输入命金。本小节介绍三种命令:

•ACCEPT

•INPUT

•WAIT

2010-4-2727

!数据输入命令ACCEPT

格式:ACCEPT[〈提示信息〉]TO〈内存变量》

功能:暂停程序的执行,等待用户输入一个字符串给变量。

说明:

(1)[〈提示信息>],是在屏幕上出我的提示信息。它可以是字

符串:此时必须用双引号将其括起亲,也可以是字符型内存交

量,该内荐变量必须预先减值。

(2)用户在键盘输入的任何字符信息都被赋值给“内存变量”。

输入的数据将作为字符型数据处理,不需要定界符括起来,如

果输入了定界符,则这些定界符也被作为输入字符的一部分。

(3)输入比需要的信息后,按“Enter”键结束本命令的输入。

口果没有输入其他信息,只按回车键,将把一个空字符串赋值

o

y

2010-4-2728

[例6-4]编一程序,将人事数据表打开,在程序运

行中输入人员姓名,显示指定姓名的人员记录。

NOTE该程序用于从人事数据表中查找用户指定姓名的人员信息。

CLEAR

USErsb

ACCEPT〃请输入要查找的姓名:〃TOname

LOCATEFORALLTRIM(姓名)=name

DISPLAY

RETURN

:达式输入命令[NPUT

格式:INPUT[<提示信息>]T0〈内存变量》

功能:暂停程序的执行,接受用户输入合法的表达式并将表

达式的值赋值给内存变量。

说明:

(1)[<提示信息>],同“ACCEPT”命令中的[<提示信息>]。

(2)用户可输入任何一个合法的数值型(N)、字符型

(C)、日期型(D)、逻辑型(L)表达式,系统先计算表

达式的值并将该值赋值给内存变量。

(3)如果输入字符串信息,则必须加上双引号或单引号定

界符,如〃ABC〃。

(4)按“Enter”键结束输入,如果输入的是非法表达式,

系统将提示重新输入。

2010-4-2730

[例6-5]已知圆半径为r,求圆面积s(要求四舍五入保田

三位小数)。

分析:假设圆的半径为r,则计算圆面积s的公式为:s=〃r2,

计算圆面积公式的VisualFoxPro表达式为:PI()*r^2。程

序代码如下:

*该程序用于计算用户指定半径的圆的面积。

CLEAR

INPUT〃请输入圆半径片〃TOr

s=R0UND(PI()*r^2,3)&&PI0为圆周率函数%,ROUND函数为四舍五入函数

?〃该圆半径为:〃,

?〃该圆面积为:〃,S

RETURN

2010-4-2731

格式:WAIT[〈提示信息>][TO<内存变量>]

[WINDOWS[AT<行坐标>,<列坐标>]][TIMEOUTC等

卷秒数>][NOWAIT]

功能:暂停程序,用户按任意键或者时间超过等待

的秒数后,程序继续执行。如果包含[TO〈内存变量

>]短语,将用户所按键盘字符赋值给指定的内存变

量。

2010-4-27

(1)[〈提示信息>],指定要显示的自定义信息。若

省略该参数,则VisualFoxPro显示默认的信息

“按任意键继续……”。如果该参数为空字符,则不

显示信息。

(2)[WINDOWS]:在VisualFoxPro主窗口右上角

的系统信息窗口中,显示提示信息。如果指定[AT<

行坐标》,<列坐标>],则该窗口在指定屏幕坐标位置

显不。

(3)TIMEOUT〈等待秒数):指定在执行WAIT命令

之后,程序暂停的时间,〈等待秒数>参数指定等待的

时间秒数。

(4)NOWAIT子句指在前述指定的Windows窗口中显示

WAIT信息的同时,程序继续执行而不暂停。

%p幅IT使用举例

下列命令将在屏幕16行、16列位置处显示一

含有提示信息的小窗口,如图所示,此时单击

鼠标按键、按下键盘上任意一个按键或小窗口

在屏幕上停留7秒后,从屏幕上消失。

WAIT”请稍后,程序将继续执行......〃WINDOWSAT16,16TIMEOUT7

话稍后,程序将继续执行.....

II11,'叫*a器―67声程序控制结构

结构化程序包括三种基本结构,即

•顺序结构

•选择结构

•循环结构

2010-4-2736

胫,621顺序结构

顺序结构是程序设计中最基本的

结构,该结构按照程序命令出现的

先后顺序依次执行。事实上,如果

不进行特殊说明,程序中的命令就

自动按其前后排列顺序执行。

2010-4-2737

[例6-6]假设我国2007年国民生产总值为

200,000亿元,按每年平均10%的速度递增,编程计

算到2020年我国国民生产总值将会达到多少?

国民生产总值计算公式为:未来值P1=初值P0X

(1+速度a)时间间隔n

这里,初值p0=200000亿元,速度为a=0.1,

时间间隔n=2020-2007=13,Pl为未来待计算的值。

VisualFoxPro计算表达式为:pl=p0*(l+a)"n。

该程序流程图如图所示。

2010-4-2738

程序代码如下:

CLEAR

p0=200000

a=0.1

n=13

pl=pO*(l+a)*n

?〃我国2007年的国民生产总值为:”,p0,〃亿元。

?〃我国2020年的国民生产总值为:〃,pl,〃亿元。

RETURN

2010-4-27

『’出耀7k日顺序结构程序举例2

[例6-7]在人事数据表中,根据从屏幕

上输入的职工姓名来查询该职工的姓名、性

别、职称、出生日期、工作日期。

用ACCEPT命令输入和?命令输出,程序代

码如下。

2010-4-2740

则一构程序举例2

CLEAR

USErsb

ACCEPT”请输入被查询职工的姓名:〃TOname

LOCATEFORALLTRIM(姓名)=name

?+姓名

?+别

?+称

?〃出生日期:〃+DTOC(出生日期)

?”工作日期:〃+DTOC(工作日期)

USE

RETURN

2010-4-27

『’出焉7k£*6丁去2选择结构

选择结构,是一种常用的基本结构,是根

据所给条件是否为真,选择执行某一分支的

相应操作。按照选择结构执行路径的多少,

可分为:

•简单分支结构

•双分支选择结构

•多分支选择结构

2010-4-2742

格式:

IF〈条件》

[命令序列]

ENDIF

功能:根据条件的逻辑值来确定是否执行[命

令序列]o

芝结构说明金

Him出口:川HI

(1)根据〈条件》的逻辑值进行判断。如果〈条件〉的

逻辑值为.T.,就依次执行[命令序列],执行完后就

转去执行ENDIF之后的命令。如果<条件》的逻辑值

为.F.,贝!|IF<条件>和ENDIF之间的所有命令都不执行,

而直接转到ENDIF之后的命令。

(2)IF语句和ENDIF语句必须成对出现,且各占一行。

(3)为了程序阅读方便,便于以后维护修改,建议

对于[命令序列]部分采取向右蝉隼坞

2010-4-2744

工简单分支结构举例1

L___。”

[例6-8]铁路托运行李,按规定每张客

票托运行李不超过50公斤时,每公斤0.25元,

如超过50公斤,超过部分按每公斤0.45元计

算。编写一个程序,把行李重量输入计算机,

计算出运费,并打印出付款清单。

问题分析:设行李重量为W公斤,应付运

费为P元,则运费公式为:

当WW50,p=0.25Xw

当W>50,p=50X0.25+(w-50)XO.45

2010-4-27

该问题计算机程序框图如右图所示。

程序代码如下:

NOTE计算铁路托运行李费,W为行李重量,P为运费。

CLEAR

INPUT〃请输入行李重量:〃TOw

P=0.25*w

IFw>50

P=50*0.25+(w-50)*0.45

ENDIF

?〃行李重量为:〃,w,〃公斤〃

?〃应付运费为:〃,P,〃元〃

RETURN

2010-4-27

[例6-9]程序运行时,从键盘输入两个

数a、b,如果a〉b,则将二者的数据交换。

程序代码如下:

2010-4-2747

CLEAR

INPUT〃请输入给变量a的数值:〃TOa

INPUT”请输入给变量b的数值:〃TOb

?〃a与b交换之前的值分别是:〃+ALLTRIM(STR(a,10))+〃,〃+ALLTRIM(STR(b,10))

IFa>b

c=a&&c为中间变量

a=b

b=c

ENDIF

?〃a与b交换之后的值分别是:〃+ALLTRIM(STR(a,10))+〃,〃+ALLTRIM(STR(b,10))

RETURN

2010-4-2748

II11,'叫*a专h二戛聚分支选择结构

格式:

IF〈条件》

[命令序列1]

ELSE

[命令序列2]

ENDIF

功能:根据条件的逻辑值来决定程序执行[命

令序列1]还是[命令序列2L

2010-4-2749

(1)如果〈条件》的逻辑值为.T.,就执行[命令序

列1],执行完后就转到执行ENDIF之后的命令。如

果〈条件》的逻辑值为.F.,就执行[命令序列2],完

成后,转去执行ENDIF之后的命令。

(2)ELSE语句单独占一行,IF语句和ENDIF语句必

须成对出现,且各占一行。

2010-4-2750

分支选择结构举例

[例6-10]设出租车不超过2公

里时一律收费7元钱,超过时则超过

部分每公里加收2.6元。试根据里程

数编程计算并显示出应付车费(用

双分支选择结构编程)。

程序代码如下:

2010-4-2751

CLEAR

INPUT〃请输入里程数:〃TOk

IFk<=2

cf=7

ELSE

cf=7+(k-2)*2.6

ENDIF

?”里程为:〃,k,〃公里〃

?"车费为:",cf,〃元〃

RETURN

2010-4-2752

可分支结构嵌套

在分支结构的《命令序列》中,可以

包含任何VisualFoxPro命令语句,也可

以包括另夕|"一^个或几个合法的分支结构

语句,也就是说分支结构可以嵌套。对

于嵌套的分支结构语句,一定注意内外

层分支结构层次分明,即注意各个层次

的IF…ELSE…ENDIF语句的配对情况。

2010-4-2753

支结构嵌套举例

[例6-11]永立公司对销售人员的报酬计算

方法如下:每月销售10万元(含10万元)以下者,

只得基本工资1000元;每月销售10万元以上至30

万元(含30万元)者,则超过10万元以上部分按

2%提成;每月销售30万至50万(含50万元)者,

超过30万元部分按5%提成;超过50万元部分按

10%提成。以上各个级别的计算实行累加计算。

编程按输入每个销售人员编号和销售额,计算每

个销售人员的报酬(报酬结果按四舍五入规则取

整)。

2010-4-2754

支结构嵌套举例

■,N・L

编程思路:为了编程方便,先将每个级别

23……i…H3g第售额的多少用

的酬19

f=l学一码如下:

O

CLEAR

ACCEPT”销售员编号:“TOsalenumber

INPUT〃销售额:〃TOsalevolume

payl=1000

pay2=pay1+ROUND((300000-100000)*0.02,0)

pay3=pay2+R0UND((500000-300000)*0.05,0)

■■

支结构嵌套举例

Wt

IFsalevolume<=100000

pays=payl

ELSE

IFsalevolume<=300000

pays=payl+ROUND((salevolume-100000)*0.02,0)

ELSE

IFsalevolume<=500000

pays=pay2+R0UND((salevolume-300000)*0.05,0)

ELSE

pays=pay3+R0UND((salevolume-500000)*0.1,0)

ENDIF

ENDIF

ENDIF

?salenumber+”号销售员工作报酬:”+STR(pays,6,0)+“元。”

RETURN

2010-4-27■56

贰三第分支选择结构

格式:

DOCASE

CASE〈条件1>

〈命令序列1>

CASE〈条件2>

<命令序列2>

CASE<条件n>

〈命令庠列n>

[OTHERWISE

〈命令序列n+l>]

ENDCASE

2010-4-2757

选择结构说明

(1)多分支选择结构执行的过程是:系统依次判断各

〈条件》是否满足,若某一〈条件>为.工,就执行该<条

件》下的〈命令序列》,执行后不再判断其它〈条件》,

而转去执行ENDCASE后面的第一条命令。如果没有一个

<条件>为.T.,就执行OTHERWISE后面的[命令序列n+1],

直到ENDCASE;如果没有OTHERWISE,则不作任何操作

就转向ENDCASE之后的第一条命令。

(2)DOCASE语句和ENDCASE语句必须成对出现,各占

一行。

2010-4-27

(3)多分支选择结构中各CASE语句后的<条件》是按

其先后顺序判断执行的,因此对实际问题进行编程

时,应认真考虑各个条件排列的先后顺序。

2010-4-27

[例6-12]用多分支选择结构编程计算[例

6-11]o程序代码如下:

CLEAR

ACCEPT”销售员编号:“TOsalenumber

INPUT〃销售额:〃TOsalevolume

payl=1000

pay2=payl+R0UND((300000-100000)*0.02,0)

pay3=pay2+R0UND((500000-300000)*0.05,0)

2010-4-27

DOCASE

CASEsalevolume<=100000

pays=payl

CASEsalevolume<=300000

pays=payl+ROUND((salevolume-100000)*0.02,0)

CASEsalevolume<=500000

pays=pay2+R0UND((salevolume-300000)*0.05,0)

OTHERWISE

pays=pay3+R0UND((salevolume-500000)*0.1,0)

ENDCASE

?salenumber+”号销售员工作报酬:“+STR(pays,6,0)+“元。”

RETURN

--------------------------

II11,'叫*a7±丁6:隽3循环结构

在程序设计中,有时需要从某处开始

有规律地反复执行某些类似的操作,这

些类似的操作一般用循环结构程序设计

来解决。在VisualFoxPro中,提供了3

种循环结构,即:

•当型循环结构

•步长型循环结构

•表扫描型循环结构/

2010-4-2762

fcmf喧I当型循环结构

格式:

DOWHILE〈条件〉

[命令序列]

ENDDO

功能:根据<条件》是否满足来决定是否执行

[命令序列]o

2010-4-2763

(1)当型循环执行的过程是:根据〈条件〉的逻辑值,进

行判断。如果〈条件》的逻辑值为.「,则执行DOWHILE和

ENDDO之间的[命令序列](也称为循环体),当[命令序列]

包含的所有命令执行完毕后,程序自动返回到DOWHILE语

句,每执行一遍就判断一次DOWHILE语句中的<条件>。如

果<条件》仍然为则继续执行DOWHILE和ENDDO之间的

[命令序列],直到〈条件》的逻辑值为.F.,结束循环,转

去执行ENDDO之后的第一条命令。

(2)DOWHILE和ENDDO语句应配对使用,各占一行。

2010-4-27

(3)在[命令序列]的适当位置可以放置EXIT和LOOP

语句,用以对循环过程作特殊处理。EXIT的功能是:

结束循环命令,转去执行ENDDO之后的第一条命令。

LOOP语句的功能是:终止本次循环命令,返回到循环

入口。EXIT和LOOP语句只能在循环结构中使用,并且

常常附加条件加以限制。

(4)在命令序列中可以嵌套IF・・・ENDIF、DO

CASE…ENDCASE、DOWHILE…ENDDO、FOR…ENDFOR、

SCAN・・・ENDSCAN等程序结构。

[例6-13]鸡兔同笼问题。设鸡和兔共有头38个,

脚138个,问鸡和兔各为多少只?

问题分析:设鸡为cocks只,兔为rabbits只,则

有:cocks+rabbits=38;2*cocks+4*rabbits

=138o可令鸡和兔的头数之和或者脚数之和为一变

量,如本题令二者脚数之和foots为变量,开始令

cocks=0,foots=0,用循环进行判断是杏

foots<>138,如果是,则进行如下运算:

cocks二cocks+1;rabbits=38-cocks;

foots=2*cocks+4*rabbits;再进行循环判断,直

到foots<>138不成立(BPfoots=138),循环结束,

输出结果。程序框图如图所示

2010-4-2766

程序代码如下:

CLEAR

cocks=0

foots=0

DOWHILEfoots<>138

cocks=cocks+l

rabbits=38-cocks

foots=2*cocks+4*rabbits

ENDDO

?〃鸡的数量为:〃,cocks

?”兔的数量为:",rabbits

2010-4-27

fcmf--■要■-步长型循环结构泡带

格式:

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

[命令序列]

ENDFOR|NEXT

功能:根据循环变量的值是否超过终值来决

定是否执行[命令序列]。

2010-4-2768

(1)〈初值〉、〈终值〉、〈步长值)都是数值表

达式;当〈步长值》是1时,可以省略STEP子

句。

(2)ENDFOR或NEXT语句为循环终端语句,用

以标明本循环结构的终点。该语句必须和

FOR语句配对使用。

2010-4-2769

-

长型循环结构说明

(3)该循环结构的执行过程是:首先将初值赋值给循环变

量,然后判断循环变量的值是否超过终值(这里超过终值

的含义是:如果步长值为正数,则循环变量的值大于终值

为超过,如果步长值为负数,则循环变量的值小于终值为

超过),不超过就执行循环体,遇到ENDFOR或NEXT语句,

自动使循环变量增加一个步长值,再将循环变量的值与终

值比较,如果循环变量的值不超过终值,就再执行循环体,

不断循环执行。如果循环变量的值超过终值则不执行循环

体,而转去执行ENDFOR或NEXT语句后面的第一条语句。

(4)在循环体内的适当位置也可以放置EXIT和LOOP语句,

作用和用法与当型循环结构类似。

2010-4-2770

[例6-15]求1+2+3+…+99+100的值。

问题分析:采用累加的办法,用循环变量

产生1、2、3、…、99、100这些数。用s保存

累加和,s的初始值为3每次循环将s加上循

环变量的值,再赋值给变量s,循环结束即求

得s。程序代码为:

2010-4-2771

器型循环结构程序举例1

,•1•一'

CLEAR

s=0

FORx=lTO100

s=s+x

ENDFOR

?”1—100自然数累加和是:〃,S

RETURN

2010-4-2772

[例6-16]从键盘上输入任何一个自然数,求该

自然数的阶乘。

问题分析:假设该自然数为n,那么求n的阶乘的

公式是:

n*(n-l)*(n-2)**2*1

有了这样的公式,我们就可以用循环程序将该n的

阶乘求解出来。将循环变量的初值设为n,终值设为

1,步长值设为-1。用factor作为存放阶乘的变量,

factor的初始值为L每次循环都使factor乘以循

环变量的值,循环结束即求得factor的值。该程序

代码如下:

2010-4-2773

&构程序举例21募3

CLEAR

factor=l

INPUT〃请输入一个自然数:〃TOn

FORx=nTO1STEP-1

factor=factor*x

ENDFOR

?〃自然数〃+ALLTRIM(STR(n,10))+〃的阶乘是:〃+ALLTRIM(STR(factor,20))

RETURN

2010-4-2774

II叫*a会■表猾描循环结构

格式:

SCAN[<范围>][FOR<条件1>WHILE〈条件2>]

[命令序列]

ENDSCAN

功能:根据对打开数据表的范围和条件来决定

是否执行[命令序列]。

fel渗扫描循环结构说明

(1)该结构是针对当前打开的数据表进行操作的。它的功能是:

对当前打开的数据表中指定范围内符合条件的记录,逐个进行〈

命令序列〉所规定的操作,如果缺省范围和条件子句时,则对所

有记录逐个进行〈命令序列》规定的操作。

(2)表扫描型循环结构每循环一遍,记录指针自动移动到下一

条记录,不需要设置SKIP语句。

(3)SCAN和ENDSCAN语句要配对使用,且各占一行。

(4)在〈命令序列》的适当位置也可以放置EXIT和LOOP语句,功

能和用法同其他循环结构类似。

律己描循环结构程序举例

II"-4.If

■■KU

[例6-17]将人事数据表中基本工资小于

1000的姓名、基本工资两个字段输出,并统

计这些职工的人数。(用SCAN-ENDSCAN结

构编程)

基本操作步骤为:关闭所有数据表,打开

人事数据表,设计一个累加变量必代表满足

条件的记录数,给n赋初值0,用表扫描循环

结构定位满足条件的记录,输出姓名、基本

工资两个字段,并对n进行累加1,循环结束

即求得n,输出n。程序代码如下:

2010-4-2777

CLOSEDATABASE

CLEAR

USErsb

n=0

SCANFOR基本工资〈1000

?姓名,基本工资

n=n+l

ENDSCAN

?〃基本工资在1000元以下的人数有:〃+STR(N,2)+〃人。〃

CLOSEDATABASE

RETURN

2010-4-27

fcmf循环结构嵌套

循环结构的嵌套是指在一个循环体内包含

其它的循环结构,也称为多重循环结构。

同一种类型的循环结构可以嵌套,不同类

型的循环结构也可以嵌套。

要编好循环结构嵌套程序,必须做到:循

环开始语句和循环结束语句配对出现;内外

层循环层次分明,不得交叉。

VisualFoxPro最多允许128层嵌套。请看

落巧循环结构嵌套举例

[例6-18]用双重循环打印九九乘法表,即:

1X1=1,1X2=2,…,1X9=9

2X1=2,1X2=4,•••,2X9=18

9X1=9,9X2=18,•••,9X9=81

问题分析:这是一个有9个行、9个列数据项的矩

阵,可以用双重循环解决。外循环用于控制各个行,

内循环用于控制每一行的各个列项,一行输出完毕

以后,换行输出下一行各个列的数据项。程序代码

如下:

2010-4-2780

*打印乘法九九表。

CLEAR

FORa=lTO9

FORb=lTO9

p=a*b

??STR(a,1)+〃义〃+STR(b,l)+〃=〃+STR(p,2)+〃

ENDFOR

?&&注意??和?的区别

ENDFOR

RETURN

II11,'叫*a柄等多模块程序

应用程序一般都是多模块程序,

可包含多个程序模块。模块是可以

命名的一个程序段,可指主程序、

子程序、函数、过程。

2010-4-2782

『’出路7k王松、3.1子程序

能够完成一定功能的可供其它程序使用

(调用)的独立程序段称为子程序。它独立

存在,但可以被多次调用,调用子程序的程

序称为主程序。在应用系统开发中,把程序

完成的主要功能都分配给各子程序去完成,

这样主程序可以写得比较简捷,整个应用系

统的维护方便,应用系统运行的效率也很高。

'r.呼程序的调用

格式:

DO〈程序文件名1〉[WITH<参数表>][IN〈程序文件名2>]

功能:用来执行一个程序。

说明:

(1)程序文件名L指定要执行程序的名字。DO〈程序文件

名1>直接执行或调用《程序文件名1>指定的程序。

(2)[WITH<参数表>]:指定传递到子程序的参数,在〈参数

表》中列出的参数可以是表达式、内存变量、常量、字段或用户

自定义函数。

(3)当〈程序文件名1>是子句IN〈程序文件名2>中的一个过

程时,DO命令调用该过程。请参阅例6-24。

伍漏2-仔程序的返回

格式:

RETURN[TOMASTER|TO〈程序文件名>]

功能:将程序执行的控制权返回到指定程序的相关代码行。

说明:

(1)该语句放在一个程序的末尾。

(2)不带参数的RETURN语句的功能是将程序控制权返回

到调用该子程序的主程序的下一条命令语句。

(3)RETURNTOMASTER:如果有多级程序调用,某一子

程序的该语句将使程序控制权返回到最高一级调用程序。

(4)RETURNTO〈程序文件名〉:表示将控制权交给指定

的程序。

fcmf=3■吁程序的建立

建立子程序的方法与建立程序的方法类似。

但要注意:

•每个子程序必须单独使用一个文件名保存

起来,子程序文件名的扩展名也是・PRG。

•主程序和子程序之间有关变量值的传递关

2010-4-27

有本于子程序举例1

[例6-19]利用主程序调用子程序的方法计算任

意3个自然数的阶乘和,即求s=a!+b!+c!o

建立步骤:先建立好求任一自然数阶乘的程序,

如例6-16o由于这里是通过主程序调用子程序的方

法求三个自然数阶乘之和,因此在子程序中所求出

的每个自然数的阶乘就不用输出了;另外子程序计

算所需的自然数是主程序通过变量传递到子程序的,

因此,在子程序中输入自然数的语句也可以不要。

牖摩希雷例中,作为求阶乘的子程序可以是如下

2010-4-2787

注意,该子程序中的变量n的值需*子程序,文件名为jc

要由主程序传递。将该子程序保存文factor=l

件名为:jc。FORx=nTO1STEP-1

主程序的编写:在程序运行时输入factor=factor*x

三个任意自然数分别给三个变量a、b、ENDFOR

c,定义与子程序中传递数据的相关RETURN

变量,这里分别是传递求阶乘需要的

自然数变量n,保存计算阶乘结果的

变量factor。然后三次调用子程序即

可分别计算出三个自然数的阶乘,计

算这三个阶乘之和并输出。

2010-4-2788

*主程序代码

DOjc

CLEAR

s=s+factor

INPUT〃a二〃TOa

n=c

INPUT〃b二〃TOb

DOjc

INPUT〃c=〃TOc

s=s+factor

s=0

?ALLTRIM(STR(a,3))+〃!+〃+ALLTRIM(STR(b,3));

factor=l

+〃!+〃+ALLTRIM(STR(c,3))+〃!=〃,s

n=a

RETURN

DOjc

s=factor

n=b

2010-4-27

-子程序举例2

1

[例6-20]用带参数传递数据的方法编程计算球的体积

(四舍五入保留三位小数)。球体积的计算公式是:

volume=4/37rr3,VisualFoxPro表达式是:

volume=4/3*PI()*r"3o

注意,在建立含有参数传递子程序时,子程序的第一条

语句必须是:

PARAMETER〈参数表》

〈参数表》要与DO〈程序文件名>WITH<参数表》语句中

的〈参数表》中的参数一一对应,以便相互传递数据,由

PARAMETER〈参数表>中给出的参数叫形参,而DO〈程序文件

名>WITH<参数表>中给出的参数叫实参。实参的名称与形

参的名称可以一样,也可以不一样。一般情况下实参的个数

等于(或小于)形参的个数,但不能大于形参的个数,如实

参个数小于形参的个数,多出的形参篦脚隹

/£w/A

2010-4-2790

主程序代码如下:

本例计算球的体积的CLEAR

子程序代码是:INPUT〃请输入球的半径:〃TOr

PARAMETERr,volumecube=0

volume=ROUND(4/3*PI()叱3,3)DOqtjWITHr,cube

RETURN?〃半径为〃+ALLTRIM(STR(r,10))+

将该子程序以文件名球庙体积是:",cube

RETURN

qtj保存起来。

2010-4-2791

fcmf蠡自定义函数

VisualFoxPro提供了许多系统函数,用户

也可以自己定义函数(UserDefined

Function),简称UDF。在VisualFoxPro中

有两种形式的UDF:

•独立用户定义函数

•依附用户定义函数

2010-4-2792

格式:

[PARAMETERS〈参数表>]

[命令序列]

RETURN[<表达式>]

功能:定义一个可以独立运行的函数。

2010-4-2793

(1)[PARAMETERS〈参数表>]:接受函数运行时

传递过来的数据,如果函数不需要传递数据,该语

句可省略。

(2)[命令序列]:用于进行各种处理的命令组合。

简单的函数也可以为空。

(3)RETURN〈表达式》语句中〈表达式〉的值作为返

回函数值,它决定了函数的类型。如缺省该语句,

则返回函数值为・工。

2010-4-2794

(4)函数名称就是保存时用的程序文件名。如果

UDF的名称与已有的函数名相同,系统只承认已有

函数,因此不能用已有的函数名来命名UDF。

(5)UDF的调用形式是<函数名>([<参数表>])。

参数表中每个参数可以是任何合法的VisualFoxPro

表达式,参数的个数必须与UDF中PARAMETERS语句里

的参数表参数个数相等,数据类型也应符合UDF中的

要求。

2010-4-2795

[例6-21]定义一个计算求立

方数的函数。*求1到10的立方数

CLEAR

该程序的代码如下

FORi=lTO10

*求立方数函数。函数名为cube

?i,c⑴

*(即以cube.prg为文件名存盘)

ENDFOR独立用户定、

PARAMETERSv

RETURN义函数

RETURNv*v*v

在右面程序代码中,调用求

立方函数cube,prg,求1到10的

立方数。

2010-4-27

依附用户定义函数不能作为一个独立的程序文件,它以

FUNCTION<函数名〉开头,依附在某程序的后面或某过程文件

中。依附用户定义函数用如下格式定义。

FUNCTION〈函

温馨提示

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

评论

0/150

提交评论