第7章 程序设计基础.docx
- 文档编号:9484277
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:31
- 大小:62.15KB
第7章 程序设计基础.docx
《第7章 程序设计基础.docx》由会员分享,可在线阅读,更多相关《第7章 程序设计基础.docx(31页珍藏版)》请在冰豆网上搜索。
第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的自然数之和、
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第7章 程序设计基础 程序设计 基础