第7章 程序设计基础.docx

上传人:b****8 文档编号:9484277 上传时间:2023-02-04 格式:DOCX 页数:31 大小:62.15KB
下载 相关 举报
第7章 程序设计基础.docx_第1页
第1页 / 共31页
第7章 程序设计基础.docx_第2页
第2页 / 共31页
第7章 程序设计基础.docx_第3页
第3页 / 共31页
第7章 程序设计基础.docx_第4页
第4页 / 共31页
第7章 程序设计基础.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

第7章 程序设计基础.docx

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

第7章 程序设计基础.docx

第7章程序设计基础

第7章程序设计基础

7.1学习指导

7.1.1基本概念

1.程序

VisualFoxPro程序实际上为了实现某一项任务,将若干条VisualFoxPro命令和程序控制语句按一定的结构组成的命令序列。

在VisualFoxPro中,程序是以文件的形式保存在外存储器中,程序文件的扩展名为“.PRG”。

2.命令文件的建立与运行

(1)命令文件建立

MODIFYCOMMAND<文件名>

(2)命令文件运行

DO<命令文件名>[WITH<发送参数表>]

(3)调试命令与辅助命令

SETTALKON/OFF

SETPRINTON/OFF

SETDEVICETOPRINT/SCREEN

SETECHOON/OFF

TYPE<文件名>[TOPRINT]

CANCEL[<任意字符>]

3.分支程序设计

(1)简单分支语句

IF<条件表达式>

<语句组>

ENDIF

(2)选择分支语句

IF<条件表达式>

<语句组1>

ELSE

<语句组2>

ENDIF

(3)IF条件语句的嵌套

IF<条件表达式1>

<语句组1>

ELSE

IF<条件表达式2>

<语句组2>

ELSE

IF<条件表达式3>

<语句组3>

ELSE

ENDIF

EDNIF

ENDIF

(4)结构分支语句

DOCASE

CASE<条件表达式1>

<语句组1>

CASE<条件表达式1>

<语句组1>

[OTHERWISE]

[<语句组>]

ENDCASE

4.循环结构程序设计

(1)DOWHILE-ENDDO循环结构

DOWHILE<条件表达式>

<语句组>

LOOP

EXIT

ENDDO

(2)DOWHILE-ENDDO循环嵌套结构

DOWHILE<条件表达式1>

DOWHILE<条件表达式1>

LOOP

EXIT

ENDDO

EXIT

ENDDO

(3)FOR-ENDFOR循环结构

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

<命令序列>

[LOOP]

[EXIT]

ENDFOR

(4)SCAN-ENDSCAN循环结构

SCAN[<范围>][FOR<条件表达式>]

<命令序列>

[LOOP]

[EXIT]

ENDSCAN

(5)过程文件的建立

PROCEDURE<子过程名>

<语句组>

RETURN

(6)打开过程文件

SETPROCEDURETO<过程文件名1>[,<过程文件名2>,…]

(7)关闭过程文件

CLOSEPROCEDURE

SETPROCEDURETO

(8)带参数的过程调用

DO<文件名>WITH<发送参数表>

PARAMETERS<接受参数表>

7.1.2基本操作

1.创建程序

在“新建”对话框上选择“程序”,单击“新建文件”按钮。

2.打开程序

在“打开”对话框中的“文件类型”下拉列表中选择“程序(*.qpr)”,然后选择或在“文件名”框中输入程序文件名,单击“确定”即可。

3.运行

在“程序”下拉菜单中,点击“运行”。

4.关闭程序

单击程序文件右上角的关闭按钮。

7.1.3相关命令

创建或修改程序:

MODIFYCOMMAND[<程序文件名>|?

]

运行程序:

DO<程序文件名>

7.2例题解析

7.2.1选择题

【例7-1】在XS.DBF中有30条记录,执行如下程序:

CLEAR

USEXS

GO10

LIST

RECNO()

则在窗口中显示的记录是。

A)10B)11C)30D)31

【答案】D

【解析】在程序中首先打开表XS.DBF,将记录指针指向第10条记录,命令LIST将显示全部记录,并将指针指向文件尾记录,这时的记录号为31。

【例7-2】设有如下程序:

CLEAR

A=50

B=100

DOWHILEB>A

A=A+B

B=B+50

ENDDO

A

执行程序时,显示A的值为。

A)50B)150C)100D)200

【答案】B

【解析】在程序中,首先赋值给变量A、B为50、100,然后在DOWHILE-ENDDO循环中判断条件B是否大于A,执行循环体中的命令,这时变量A、B的值均为150,然后再判断条件B>A是否为真,条件不为真,则执行循环体后面的命令,即显示变量A的值,所以正确答案为B。

【例7-3】设有如下程序:

A=“1000”

DOSUB

A

PROCEDURESUB

A=A+”100”

ENDPROC

执行程序时,显示的输出结果为。

A)1100B)1000C)1000100D)100100

【答案】C

【解析】程序首先将字符串“1000”赋值给变量A,然后调用过程SUB,在SUB过程中,将字符串“1000”与另一字符串“100”相连生成字符“1000100”,赋值给变量A并输出,因此答案为C。

【例7-4】在下列程序运行后,屏幕上显示的结果是。

STORE0TOX,Y

DOWHILEX<10

X=X+Y

Y=Y+2

ENDDO

X,Y

A)106B)128C)108D)126

【答案】B

【解析】X与Y初始值分别为0,在循环中Y的值每次加2,分别为2,4和6等,而X=X+Y则表示Y的若干个值的累加,即0,2,6和12。

当X=12时,已不满足循环条件X<10,退出循环,此时X=12,Y=8。

【例7-5】私有变量用命令来定义。

A)PROJECTB)PUBLICC)LOCALD)PRIVATE

【答案】D

【解析】PROJECT不是VisualFoxPro中的命令。

PUBLIC用来定义公共变量。

LOCAL用来定义局部变量。

PRIVATE用来定义私有变量。

7.2.2填空题

【例7-6】下列程序运行后的结果是。

A=1

B=2

DOWHILEA<5

X=A*B

STR(A,1)+’*’+STR(B,1)+”=“+STR(X,2)

A=A+1

B=B+1

ENDDO

【答案】1*2=2

2*6=6

3*4=12

4*5=20

【解析】程序中循环变量A的初始值为1,循环体中每次加1,循环执行条件是A<5,因此,循环次数为4次。

每次循环中计算A与B的乘积,语句?

STR(A,1)+’*’+STR(B,1)+”=“+STR(X,2)是为了显示形如1*2=2的输出格式。

【例7-7】下列程序执行后,X和Y的值分别为和。

STORE2TOX,Y

DOSUB1

X,Y

PROCEDURESUB1

PRIVATEX

Y=5

X=Y+4

X,Y

【答案】2、5

【解析】主程序中X和Y的值都为2,子程序SUB1中,变量X被定义为仅在子程序中有效,因此,其值的改变不影响主程序中X的值。

而变量Y在子程序中被赋值为5,其改变要影响到主程序,这样,在返回主程序时,X为调用之前的值2,而Y则为在子程序中被改变的值5。

【例7-8】用下列程序找出所有的水仙花数。

所谓水仙花数,是指这样一个三位数,其各位数字的立方和等于该数本身,如153=13+53+33,对以下程序填空完成该功能。

FORN=100TO999

A=INT(N/100)

B=

C=

IFN=A^3+B^3+C^3

N

ENDIF

ENDFOR

【答案】INT((N-100*A)/10)、N-INT(N/10)*10

【解析】用程序找出满足条件的数据,采用的是对指定范围内的所有数据一一进行判断的过程。

因此,该程序中循环变量从100~999表示要处理所有的三位数,在循环体中对每个数进行判断。

由于要使用到这个三位数中各位上的数字,因此在循环体中先将三位数N的每位上数字找出来,其中A=INT(N/100)找出的是百位数,B和C保存的分别是十位数和个位数,填空的内容就是从N中计算出十位和个位数,计算这两个值的表达式分别为INT((N-100*A)/10)和N-INT(N/10)*10。

7.2.3操作题

【例7-9】一个简单的求ax2+bx+c=0的方程的解程序。

【操作步骤】

1新建一程序文件equation.PRG,也可以使用命令来建立此程序,命令为:

MODIFYCOMMANDequation

2输入下列程序,如图7-1所示,按Ctrl+W保存。

a=2

b=1

c=-1

TEMP=b*b-4*a*c

X1=(-b+SQRT(TEMP))/(2*a)

X2=(-b-SQRT(TEMP))/(2*a)

?

x1,x2

图7-1求ax2+bx+c=0的方程的解程序

3运行该程序文件。

主窗口显示如下:

0.5000-1.000

【例7-10】用IF分支设计:

求ax2+bx+c=0的方程的解。

【操作步骤】

1设计表单

表单包含下列对象:

标签Label1~Label5用于信息提示;文本框Text1、Text2、Text3分别用于输入a、b、c系数;文本框Text4、Text5用于存放方程根X1和X2。

一个命令按钮Command1用于执行计算。

界面安排如图7-2所示。

图7-2计算一元二次方程根界面

2设置对象属性,如表7-1所示。

表7-1计算一元二次方程根对象属性

对象名

属性名

属性值

对象名

属性名

属性值

Form1

Label1

Label2

Label3

Label4

Label5

Caption

Caption

Caption

Caption

Caption

Caption

计算方程根

a=

b=

c=

X1=

X2=

Text1

Text2

Text3

Text4

Text5

Command1

Value

Value

Value

ReadOnly

ReadOnly

Caption

0

0

0

.T.

.T.

计算

3算法分析

方程的根有以下几种可能:

●a=0,不是一元二次方程;

●b2-4ac=0,有两个相等的实根;

●b2-4ac>0,有两个不相等的实根;

●b2-4ac<0,没有实数根。

4编写代码

“计算”按钮(Command1)的Click事件代码:

a=Thisform.text1.value

b=Thisform.text2.value

c=Thisform.text3.value

drt=b*b-4*a*c

IFa!

=0.and.drt>=0

x1=(-b+SQRT(drt))/(2*a)

x2=(-b-SQRT(drt))/(2*a)

Thisform.text4.value=x1

Thisform.text5.value=x2

Thisform.Refresh

ELSE

IFa=0

Messagebox(“a不能为0!

”)

ELSE

Messagebox(“没有实数解!

”)

ENDIF

ENDIF

【例7-11】用CASE分支设计:

统计成绩分数段。

【操作步骤】

1设计表单

表单包含下列对象:

标签Label1~Label2用于信息提示;文本框Text1用于输入成绩;文本框Text2~Text6用于存放各分数段的统计结果;一个命令按钮Command1用于执行统计,每输入一个成绩统计一次。

界面安排如图7-3所示。

图7-3成绩分段统计界面

②设置对象属性,如表7-2所示。

表7-2成绩分段统计象属性

对象名

属性名

属性值

Form1

Label1

Label1

Text1

Text2

Text3

Text4

Text5

Text6

Command1

Caption

Caption

Caption

Value

Value

Value

Value

Value

Value

Caption

成绩分段统计

请输入成绩

>=9080-8970-7960-69<60

0

0

0

0

0

0

确定

③编写代码

“计算”按钮(Command1)的Click事件代码

cj=Thisform.text1.value

IFcj<0.or.cj>100

Messagebox(“输入的成绩不正确!

”)

ELSE

DOCASE

CASEcj>=90

Thisform.text2.value=Thisform.text2.value+1

CASEcj>=80.and.cj<90

Thisform.text3.value=Thisform.text3.value+1

CASEcj>=70.and.cj<80

Thisform.text4.value=Thisform.text4.value+1

CASEcj>=60.and.cj<70

Thisform.text5.value=Thisform.text5.value+1

CASEcj<60

Thisform.text6.value=Thisform.text6.value+1

ENDCASE

ENDIF

Thisform.Refresh

【例7-12】用FOR循环与WHILE循环分别设计:

计算n的阶乘。

【操作步骤】

1设计表单

表单包含下列对象:

标签Label1、Label2用于信息提示;文本框Text1用于输入n;文本框Text2用于存放n!

的计算结果。

一个命令按钮Command1用于执行计算。

界面安排如图7-4所示。

图7-4计算n的阶乘界面

2设置对象属性,如表7-3所示。

表7-3计算n的阶乘对象属性

对象名

属性名

属性值

对象名

属性名

属性值

Label1

Label2

Text1

Caption

Caption

Value

n=

n!

=

0

Text2

Command1

ReadOnly

Caption

.T.

计算

3编写代码

“计算”按钮(Command1)的Click事件代码:

(1)FOR循环编写:

n=Thisform.text1.value

IFn<=0

RETURN

ENDIF

n1=1

FORi=1TOn

n1=n1*i

ENDFOR

Thisform.text2.value=n1

Thisform.Refresh

(2)WHILE循环编写:

n=Thisform.text1.value

IFn<=0

RETURN

ENDIF

n1=1

i=1

DOWHILEi<=n

n1=n1*i

i=i+1

ENDDO

Thisform.text2.value=n1

Thisform.Refresh

 

7.3习题

7.3.1选择题

1.VisualFoxPro程序文件的扩展名是。

A、.FXPB、.FOXC、.PRGD、.FRT

2.执行以下程序后,变量X的值为。

PUBLICX

X=5

DOSUB

X

PROCEDURESUB

PRIVATEX

X=10

RETURN

A、5B、6C、7D、8

3.下列程序运行的结果是。

N=0

S=0

DOWHILEN<100

N=N+1

IFINT(N/2)=N/2

LOOP

ELSE

S=S+N

ENDIF

ENDDO

”S=“,S

A、S=500B、S=2500C、S=1500D、S=2000

4.下列程序完成的功能是。

S=0

FORN=2TO100STEP2

S=S+N

ENDFOR

”S=“,S

A、1~100中奇数的和B、1~100中偶数的和

C、1~100中所有数的和D、无意义

5.已知英语字段当前值是90,以下程序段的执行结果是。

DOCASE

CASE英语<60

INPUT‘请输出英语成绩等?

’TO英语

”成绩等级:

”+”不及格”

CASE英语>=60

”成绩等级:

”+”及格”

CASE英语>=70

”成绩等级:

”+”中等”

CASE英语>=80

”成绩等级:

”+”良好”

CASE英语>=90

”成绩等级:

”+”优秀”

ENDDO

A、成绩等级:

及格B、成绩等级:

中等

C、成绩等级:

良好D、成绩等级:

优秀

6.执行以下程序段后,屏幕显示M的值是。

M=0

N=100

DOWHILEN>M

M=M+N

N=N–10

ENDDO

M

A、0B、10C、99D、100

7.以下程序的运行结果是。

DIMENSIONA(2,3)

I=1

DOWHILEI<=2

J=1

DOWHILEJ<=2

A(I,J)=I*J

?

?

A(I,J),””

J=J+1

ENDDO

I=I+1

ENDDO

RETURN

A、123B、12C、123D、123

12332249246

8.执行INPUT命令输入数据,要输入字符串时,可以使用的定界符是。

A、单引号、双引号或方括号B、单引号

C、单引号或双引号D、单引号、双引号、方括号或圆点

9.执行如下程序,如果输入N的值为5,则最后S的显示值是。

S=0

I=1

INPUT“N=?

”TON

DOWHILES<=N

S=S+1

I=I+1

ENDDO

S

A、1B、3C、5D、6

10.在各选项中,与下面IF语句等效的是。

INPUT“X=?

”TOX

IFX>0

Y=1

ELSE

IFX=0

Y=0

ELSE

Y=-1

ENDIF

ENDIF

IIF(X>0,0,IIF(X>0,1,-1))

A、1~100中奇数的和B、1~100中偶数的和

C、1~100中所有数的和D、无意义

7.3.2填空题

1.以下程序用来显示CJ表中英语及格的所有记录,在程序的填空。

USECJ

DOWHILE.NOT.EOF()

IF英语>=60

DISPLAY

ENDIF

ENDDO

USE

2.执行以下程序,屏幕上显示的是。

STORE2TOX,Y

DOWHILE.T.

Y=Y+3

DOCASE

CASEINT(Y/5)*5=Y

LOOP

CASEY>10

EXIT

OTHERWISE

X=X+Y

ENDCASE

”X=”+STR(X,2),”Y=”+STR(Y,2)

ENDDO

3.下列程序是求出100以内能被3整除但不能被7整除的数据之和,请在处填空。

STORE0TOS,N

DOWHILEN<=100

S=S+N

ENDIF

ENDDO

”S=”+STR(S)

4.执行以下程序,屏幕上显示的是。

STORE0TOY1,Y2

X=10

DOWHILEX>1

IFSQRT(X)=3ORINT(X/2)=X/2

Y1=Y1+X

ELSE

Y2=Y2+X

ENDIF

X=X-1

ENDDO

”Y1=”+STR(Y1,3),”Y2=”+STR(Y2,3)

5.以下程序是计算的,执行程序后,屏幕上显示的结果是。

STORE0TOX,Y

DOWHILE.T.

X=X+1

Y=Y+X

IFX>=100

EXIT

ENDIF

ENDDO

”1~100的自然数之和”+STR(Y,4)

6.以下程序计算S=1+2+3+…+100,请在程序的处填空。

I=1

DOWHILEI<=100

S=S+I

ENDDO

”S=”,S

7.以下程序逐条显示“学生”数据表中1990年出生的学生记录,请在程序的处填空,已知数据表有名为“出生日期”的日期型字段。

USE学生

LOCATEFOR

DOWHILE

DISP

WAIT

ENDDO

USE

8.以下程序功能是从键盘输入两个正整数,求出其最大公约数并输出,请在程序的填空。

INPUT“X=”TOX

INPUT“Y=”TOY

IFX

T=X

X=Y

Y=T

ENDIF

T=X%Y

DOWHILE

X=Y

Y=T

ENDDO

“Y=”,Y

9.以下程序执行后,变量X的结果是。

FORI=1TO2

X=X+1

FORJ=1TO4

IFJ%2#0

LOOP

ELSE

X=X+1

ENDIF

ENDFOR

X=X+1

ENDFOR

X

10.以下程序执行后的结果是。

STORE0TOX,Y,S1,S2,S3

DOWHILEX<10

X=X+1

DOCASE

CASEINT(X/2)=X/2

S1=S1+X/2

CASEMOD(X,3)=0

S2=S2+X/3

CASEX%2#0

S3=S3+1

ENDCASE

ENDDO

S1,S2,S3

11.以下程序计算1~100之间的所有奇数的平方和并显示出来,请在程序的处填空。

S=0

X=1

DOWHILEX<=100

ENDDO

S

12.以下程序执行后的结果是。

X=1

FORI=1TO50

IFX>=10

EXIT

ENDIF

IFX%2=1

X=X+5

LOOP

ENDIF

X=X–3

ENDFOR

X

13.以下程序在“XS”数据表中按姓名查找某条记录,请在程序的处填空。

USEXS

ACCEPT“请输入学生姓名:

”TONAME

LOCATEALLFOR

IF

DISPLAY

ELSE

”查无此人?

附:

习题答案

7.3.1选择题

1.C2.A3.B4.B5.D

6.D7.D8.A9.D10.D

7.3.2填空题

1.SKIP

2.X=10、Y=8

3.IFN/3=INT(N/3)ANDN/7<>INT(N/7)、N=N+1

4.Y1=39、Y2=15

5.1~100的自然数之和、

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

当前位置:首页 > 工程科技 > 冶金矿山地质

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

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