第7章 程序设计入门.docx

上传人:b****6 文档编号:6081991 上传时间:2023-01-03 格式:DOCX 页数:17 大小:168.40KB
下载 相关 举报
第7章 程序设计入门.docx_第1页
第1页 / 共17页
第7章 程序设计入门.docx_第2页
第2页 / 共17页
第7章 程序设计入门.docx_第3页
第3页 / 共17页
第7章 程序设计入门.docx_第4页
第4页 / 共17页
第7章 程序设计入门.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

第7章 程序设计入门.docx

《第7章 程序设计入门.docx》由会员分享,可在线阅读,更多相关《第7章 程序设计入门.docx(17页珍藏版)》请在冰豆网上搜索。

第7章 程序设计入门.docx

第7章程序设计入门

第7章VisualFoxPro程序设计入门

要求:

熟记:

程序定义、程序文件的建立和执行、简单的输入输出命令。

理解:

两种选择结构(重点运用IF-ENDIF)、三种循环结构(重点运用DO-ENDDO)

模块定义和调用、变量的作用域、参数的传递

7.1程序与程序文件

7.1.1程序的概念

1、程序:

2、程序的特点:

(1)利用编辑器,方便地输入、修改和保存程序代码

(2)调用另一个程序(命令行不可以)

(3)多次运行程序

[7-1]求圆周长的程序。

*功能说明:

求圆周长

clear

settalkoff

input"请输入圆的半径:

"toR&&请用户输入半径到R

L=2*pi()*R

?

"半径为:

"+allt(str(R))+"的圆,其周长=",L

settalkon

*程序结束

7.1.2程序文件的建立、修改与执行

7.1.3简单输入输出命令

1、ACCEPT命令

2、INPUT命令

3、WAIT命令

Wait“*******”toxtimeout5

[7-1a]

*功能说明:

wait用法演示

clear

wait"请选择今日是否为周末(Y/N)?

"toYN&&用户输入y或者n

ifuppe(YN)="Y"

?

"今天休息!

"

else

?

"今天工作!

"

endi

*程序结束

7.2程序的基本结构

7.2.1顺序结构

[7-2]

*功能说明:

求圆面积

clear

settalkoff

input"请输入圆的半径:

"toR&&请用户输入半径到R

S=pi()*R^2

?

"半径为:

"+allt(str(R))+"的圆,其面积=",S

settalkon

*程序结束

7.2.2选择结构

[7-3]

*功能说明:

判断输入数字是奇数还是偶数

clear

input"请输入数据:

"toNumber&&用户输入被测数据

ifNumber%2=0&&判断是否被整除

?

allt(str(number))+"为偶数"

else

?

allt(str(number))+"为奇数"

endi

*程序结束

[7-4]

*显示当前季节

M=month(date())

docase

casem>=3andm<=6

season="春"

casem>=6andm<=8

season="夏"

casem>=9andm<=11

season="秋"

otherwise

season="冬"

endc

?

"当前季节是:

"+season

7.2.3循环结构

1、DOWHILE语句

[7-5]

*显示student表中s_lesson1成绩大于等于85的同学

usestudent

dowhilenoteof()

ifs_lesson1>=85

display

endi

skip

endd

[7-5a]

*显示student表中s_lesson1成绩大于等于85的同学的前两位同学

clea

n=0

usestudent

dowhilenoteof()

ifs_lesson1>=85

n=n+1

display

ifn=2

exit

endi

endi

skip

endd

[7-5b]

*显示student表中s_lesson1和s_lesson3都大于等于85的同学

clea

usestudent

dowhilenoteof()

ifs_lesson1>=85

ifs_lesson3<85&&如果s_lesson3小于85则下行一条记录并返回循环条件

skip

loop

endi

display

endi

skip

endd

2、FOR语句(已知循环次数)

[7-6]

**求1-100中的偶数和,演示for循环功能

sum=0

fori=2to100step2&&循环开始,步长为2

sum=sum+i

endf&&循环结束

?

sum

3、SCAN语句(用于处理表中记录)

[7-7]

*显示表中两科成绩均在85分以上的同学,演示scan功能

clea

usestudent

scanfors_lesson1>=85ands_lesson3>=85

display

wait""timeout2&&结果在屏幕停留2秒

ends

7.3多模块程序

在编制一个较复杂的程序时,可按适当的原则把一个逻辑复杂、语句数量偏大的程序分解成多个功能相关又相对独立的语句规模较小的程序段——模块。

实际中的应用程序一般均为多模块程序。

模块功能单一、结构相对独立。

在VFP中,模块有子程序、过程两种形式。

子程序:

过程:

两者区别。

7.3.1模块的定义和调用

1、子程序的应用举例

这里用主程序7-7a调用子程序7-7b解释子程序的用法。

[7-7a]

*利用子程序调用技术求A!

+B!

+C!

的值,!

表示阶乘

settalkoff

clea

store0tos,t

input"请在这里输入A:

"tox

do7-7b

s=s+t

input"请在这里输入B:

"tox

do7-7b

s=s+t

input"请在这里输入C:

"tox

do7-7b

s=s+t

?

"A!

+B!

+C!

的值=",s

settalkon

[7-7b]

*主程序7-7a.prg的子程序

t=1

fori=1tox

t=t*i

endf

return

2、过程的应用举例

*利用子程序调用技术求A!

+B!

+C!

的值,!

表示阶乘

settalkoff

clea

store0tos,t

input"请在这里输入A:

"tox

dopp

s=s+t

input"请在这里输入B:

"tox

dopp

s=s+t

input"请在这里输入C:

"tox

dopp

s=s+t

?

"A!

+B!

+C!

的值=",s

settalkon

*过程

procedurepp

t=1

fori=1tox

t=t*i

endf

return

3、过程文件的建立、打开、调用与返回、关闭举例

将多个过程放在一个文件里,这个文件就叫做过程文件。

[7-7e]

*主程序调用“过程文件”计算A!

+B!

+C!

的值

settalkoff

clea

store0tos,t

setprocedureto77d

input"请在这里输入A:

"tox

do77d1

s=s+t

input"请在这里输入B:

"tox

do77d1

s=s+t

input"请在这里输入C:

"tox

do77d1

s=s+t

?

"A!

+B!

+C!

的值=",s

do77d2

settalkon

过程文件77d

*过程文件定义

procedure77d1

t=1

fori=1tox

t=t*i

endf

endproc

procedure77d2

?

""

?

'过程定义演示之过程2'

endproc

7.3.2变量的作用域

作用域:

起作用的范围。

公共变量、私有变量和局部变量三种。

表7-1变量作用域对比

名称

公共变量

私有变量

局部变量

关键字

Public

Private

Local

作用域

所有模块

本模块及下属模块

本模块

释放

Cleamemo/rele/quit

模块程序运行结束

模块程序运行结束

定义

事先定义

直接使用

事先定义,赋初值.F.

1、公共变量

2、私有变量

[7-8]

settalkoff

x=10

y=15

dop1

?

x,y

procp1

privx,y

x=50

y=100

?

x,y

retu

结果:

50,100

10,15

3、局部变量

[7-9]

settalkoff

clea

a=5&&私有变量,在本模块和下属模块均有效,此时值为5

?

a

dop2

?

a&&显示a中新的赋值,字符串"林业大学"

retu

procp2

locala,b

b=100

dop3

?

a&&此时a是local定义的,显示.f.

?

b

procp3

a="林业大学"&&过程p3中的a继续沿用主程序的私有变量a,其值由原来的5换成字符串"林业大学"

retu

7.3.3参数传递

1、参数传递的概念

格式

功能

参数类型

数据类型

取值

主程序:

do***with<实参表>

调用指定过程,并将参数表中的数据传递给被调过程

实参

内存变量/常量/表达式

内存变量必须有初值

过程:

Proc***

para<形参表>

接收上级模块传送过来的数据

形参

内存变量

使用方法:

(1)带参数的过程调用按实参与形参在参数表中的排列位置一一对应关系传递数据,因此对应位置必须具有相同数据类型;

(2)当实参个数>形参个数,系统报错;

当实参个数<形参个数,多余形参赋值为.f.;

2、参数传递方式

带参数的过程调用分两种方式,按值传递和按引用传递。

按值传递,过程中参数变化后的值不传回主程序;按引用传递,则过程中参数变化后的值要传回主程序。

使用值传递的变量要用小括号括起来,而按引用传递则不用。

常量和表达式只能用值传递,而内存变量可以使用两种方式。

[7-9a]

*参数传递程序举例

settalkoff

clea

x=1

y=3&&此时x=1,y=3

doppwithx,(y)&&此时x=a=7,(y)=y=3

?

x,y

doppwithx,y&&此时x=a=7,y=b=8

?

x,y

retu

procpp

paraa,b,c&&形参3个,多于实参2个

a=7

b=8

c=9

retu

输出结果:

73

78

[7-10]

*变换两个变量的值,练习两种传递类型

settalkoff

clea

x=10

y=20

doppwithx,(y)&&格式1的传递方式,内存变量x为引用传递,其值在过程中变换为b=y=20

?

x,y&&y是值传递,所以其结果仍为原值。

输出结果=20,20

x=10

y=20

setUDFPtorefe&&设置格式2的传递方式

pp((x),y)&&x按值传递,y受语句setUDFPtorefe影响,按引用传递

?

x,y&&结果应为10,10

x=10

y=20

setUDFPtovalue&&设置格式2的传递方式

pp((x),y)&&受语句setUDFPtovalue影响,x,y按值传递

?

x,y&&结果应为10,20

retu

procpp

paraa,b

tt=a

a=b

b=tt

retu

7.4程序调试

为了演示运用调试器进行程序调试的过程,编写了程序7-11。

[7-11]

*计算表中两科成绩均在85分以上的成绩之和并屏显该同学信息,以演示程序调试器功能

clea

r=0&&定义一个局部内存变量r,存放满足循环条件的记录数

usestudent

scanfors_lesson1>=80ands_lesson3>=80

r=r+1&&记录数加1

sum=s_lesson1+s_lesson3&&对两个成绩加和,目的是观察”调试输出值“

debugoutsum&&在调试器中输出sum

display&&屏显满足条件的学生信息

ends

7.4.1调试器界面

打开调试器可用菜单方式(主菜单[工具][调试器]),也可用命令方式(在命令窗口键入debug)。

本例通过键入debug打开调试器界面,如图7-1中所示。

图中用五种颜色标出调试器的5个窗口以及在工具栏上对应的打开/关闭窗口按钮。

图7-1VFP6.0调试器界面

7.4.2调试器工作过程

1、打开要调试的文件。

通过主菜单或者工具栏按钮打开文件(本例为7-11.prg),见图7-2所示。

2、单击工具栏中的跟踪按钮开始进行跟踪调试,见图7-3。

3、单击跟踪按钮3次,当运行到usestudent语句时,在“局部窗口”出现了刚刚进行了赋值(r=0)的r的值,见图7-4。

4、再单击跟踪按钮4次,当运行到debugoutsum语句时,在“局部窗口”出现了两个内存变量的值,见图7-5。

其中sum是第一位满足条件学生的两科分数和。

注意此时调试输出窗口并没有任何显示。

5、再单击跟踪按钮1次,当运行到display语句时,在“调试输出”出现了上条语句debugoutsum的运行结果,如图7-6。

6、就这样,一步一步,最后调试完毕,其界面如图7-7所示。

图7-2打开要调试的文件7-11.prg

图7-3对程序7-11.prg开始跟踪调试。

图7-4局部窗口出现r值的状况

图7-5局部窗口出现两个内存变量的状况

图7-6调试输出根据程序中的debugout语句有了结果

图7-7程序调试结束时的界面

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1