nullnull *第六章结构化程序设计null *第6章 结构化程序设计 6.1 程序设计 6.2 VFP程序设计基础 6.3 程序的控制结构 6.4 多模块程序 null *
程序:(Program)是一组能够完成特定任务的指令序列,按照特定的逻辑关系以一定的结构组织在一起,并以文件的形式存储在计算机外部设备上。
程序设计:根据特定的问题,使用某种程序设计语言编写的,计算机可以执行的指令序列。null *程序基本操作步骤:
1.文件—新建—程序
2.输入程序语句
3.保存文件名为:pro1
4.程序—运行—pro1
x=34
y=45
z=67
?x+y+z
?(x+y+z)/3例:求三个数的总和及平均值。null *命令方式:
1.建立或修改程序:modify command 程序名
4.运行程序:do 程序名
注意:程序文件扩展名:prgnull input 提示信息 to 内存变量
accept 提示信息 to 内存变量
wait 提示信息 to 内存变量输入命令注意:
input命令可用于各种类型数据的输入,输入字符型数据需要加定界符。
Accept命令只限于输入字符型数据。输入时内容不需要加定界符。
Wait一般起到等待的作用。null *Clear
Use djks
accept “请输入考号:” to x &&将accept 改成input 再运行
Loca for 考号=x
Disp 考号,姓名,笔试,上机,结论
Use
wait "谢谢使用!" windows timeout 3
return例:成绩查询。null *
在程序开始使用note加注释。
在语句前用*加注释。
在语句后用&& 加注释。加注释null *Clear
Set talk off
Use xsda
average 成绩
Set talk on
average 成绩set talk on/off
作用:关闭对话状态。Set safety on/off
作用: 提供或取消安全保护。use xsda
copy to abc
use abc
zap
set safety off
zapnull *set heading on/off
显示/不显示字段名use xsda
disp
set heading off
disp?date( )
?time( )
??date( )
@10,10 say date( )??不换行显示
@在第几行第几列显示内容 null *6.3.1 顺序结构 6.3.2 选择结构6.3.3 循环结构null *6. 3 程序的基本控制结构顺序,选择,循环三种基本结构一.顺序结构
按照程序语句一条一条的顺序的往下执行。二.选择结构
根据不同的条件,选择执行不同的程序语句,用来解决有选择,有转移的诸多问题。三.循环结构
使一些语名重复地执行若干次。null *顺序结构流程图程序语句1程序语句2……6.3.1顺序结构null *双分支选择结构流程图条件?语句序列1语句序列2其它语句YESNOnull *条件?YES程序语句其它语句NO循环结构流程图null *[例]:查找djks
中有没有叫刘宁这个学生,显示有关信息。Clear
Use djks
Loca for 姓名=“刘宁"
Disp 考号,姓名,笔试,上机,结论
Use
return结束清除屏幕打开djks表查找名为刘宁的记录显示该学生的情况 关闭表程序流程示意图null *顺序结构课堂练习:任意输入四个数,找出四个数的最大值和最小值。
提示1:任意输入一个数用input命令实现。
例如:input “请输入第一个数” to x
提示2:利用MAX( ),MIN( )函数。
例如: ?MAX(4,5,6,2)值为6null *clear
Input "请输入第1个数" to x1
Input "请输入第2个数" to x2
Input "请输入第3个数" to x3
Input "请输入第4个数" to x4
m=max(x1,x2,x3,x4)
n=min(x1,x2,x3,x4)
?m,n
return任意输入
的四个数求出最大值
和最小值输出结果程序结束
:null *6.3.2选择结构
基本形式有三种:
单分支、双分支、多分支。
1.单分支结构IF 条件表达式
命令行序列
ENDIF语句格式:条件?语句序列ENDIF后续语句YES流程示意图NOnull *Clear
Use djks
accept "请输入考号:" to x
Loca for 考号=x
if found( )
Disp 考号,姓名,笔试,上机,结论
endif
Use
return单分支结构例:成绩查询,找到则显示成绩。null *2.双分支结构语句格式:IF 条件表达式
命令行序列1
ELSE
命令行序列2
ENDIF功能:即根据用户设置的条件表达式的值,选择两个操作中的一个来执行.null *Clear
Use djks
accept "请输入考号:" to x
Loca for 考号=x
if found( )
Disp 考号,姓名,笔试,上机,结论
Else
?"无此人“
endif
Use
return双分支结构例:成绩查询,找到则显示成绩,没找到则显示无此人。 课堂练习 * 课堂练习任意输入一个数,如果这个数大于零则在屏幕上显示你好,否则在屏幕上显示再见。答案 *答案input "请输入数:" to x
if x>0
?"你好"
else
?"再见"
endif
null *clear
input "请输入三角形的第一边:" to a
input "请输入三角形的第二边:" to b
input "请输入三角形的第三边:" to c
if a>0 and b>0 and c>0
if a+b>c and b+a>c and a+c>b
p=(a+b+c)/2
s=sqrt(p*(p-a)*(p-b)*(p-c))
?"三角形的三边长分别为:",a,b,c
?"三角形面积为:",round(s,2)
else
?"此三边不能构成三角形!"
endif
else
?"三角形边长必须大于0!"
endif[例]任意输入三个数,如果这三个数能构成三角形的三边,计算该三角形面积,否则输入错误信息。null *DO CASE
CASE 条件表达式1
命令行序列1
CASE 条件表达式2
命令行序列2
……
CASE 条件表达式N
命令行序列N
[OTHERWISE
命令行序列N+1]
ENDCASE3.多分支结构null *y=2*x-5 x<1
y=2*x 1=
=10 [练习] (利用do case endcase 语句)计算y值。null *clear
input "请输入X的值" TO X
do case
case X<1
Y=2*X-5
case X<10
Y=2*X
case x>=10
Y=2*X+5
endcase
?ynull *6.3.3循环结构DO WHILE <条件表达式>
<命令序列1>
[LOOP]
<命令序列2>
[EXIT]
<命令序列3>
ENDDOnull *DO WHILE 型循环也叫当型循环,即根据条件表达式的值,决定循环体内的执行次数。
最简单的循环格式为:
DO WHILE <条件表达式>
<命令行序列>
ENDDOnull *clear
i=5
do while i>0
?"LOVE "
i=i-1
enddonull *X=1
DO WHILE X<50
?X
X=X*3
ENDDOnull *计算1+2+…+100
s=0
i=1
Do while i<=100
s=s+i
i=i+1
Enddo
?s注意:S=S+i,i=i+1
在这里等号是赋值的作用,
先计算等式右边的表达式,然后把结果赋给等号左边的变量。null练习:计算100以内的奇数和。2500
练习:计算100以内的偶数和。2550null *Clear
Use djks
do while .t.
accept "请输入考号:" to x
Loca for 考号=x
if found( )
Disp 考号,姓名,笔试,上机,结论
Else
?"无此人"
endif
wait "继续吗?(Y/N)" TO yn
if upper(yn)="Y"
loop
else
exit
endif
enddo
use
returnnull *2.计数循环控制语句
语句格式:
FOR 循环变量=循环变量初值 TO 循环变量终值 STEP 循环变量步长
命令行序列
ENDFOR/NEXT计算2+4+…+100S=0
FOR i=2 TO 100 step 2
S=S+i
ENDFOR
?Snull *clear
for n=1 to 300
if n%3=0.and.n%5=0.and.n%7=0 then
??n
endif
endfornull *SCAN 循环结构
功能:专用于处理数据表中的记录。
格式:scan for 条件
命令序列1
[loop
命令序列2]
[ exit
命令序列3]
endscannull *程序要求:显示学生信息表中所有女生的学号、姓名、性别和奖学金信息。use 学生信息
Scan for 性别="女"
? 学号,姓名,性别,奖学金
endscan
usenull *4.多重循环 例1:打印九九乘法口诀表。 clear
for i =1 to 9
for j= 1 to i
?? str(j,1)+"*"+str(i,1)+"="+str(j*i,2)+space(2) endfor
?
endfor null *clear
dime a(5)
for i=1 to 5
input "请输入第" + str(i,1) + "个数:" to a(i)
endfor
for i=2 to 5
if a(1)>a(i)
temp=a(1)
a(1)=a(i)
a(i)=temp
endif
endfor
? "5个数中最小数是:",a(1)例2:任意输入5个数,找出最小值。null *clear
dime a(5)
for i=1 to 5
input "请输入第" + str(i,1) + "个数:" to a(i)
endfor
for i=2 to 5
if a(1)>a(i)
temp=a(1)
a(1)=a(i)
a(i)=temp
endif
endfor
? "5个数中最小数是:",a(1)例3:输出任意行数正三角。null *调用子程序:do 子程序名 with
返回:returnnull *例:任意输入一个数,计算以该数为半径的圆面积。clear
area=0
input "请输入半径" to r
if r<=0
?"半径必须大于0!"
else
do area with r,area
endif
?"半径是:",r
?"面积是:" ,areapara r1,s
s=pi()*r1*r1
return主程序main子程序areanull*s=0
for i=3 to 5
i=i+2
s=s+i
next
?s程序1程序2c=""
a="沈阳农大"
b="程序设计"
for j=1 to 2
c=c+left(a,2)+right(b,2)
next
?c程序3n=3
k=1
for i=1 to n
k=k*i
next
?knull*store 0 to a,b
do while a<30
a=(a+1)*(a+2)
b=b+1
enddo
?b程序4程序5y=0
do while y<=10
y=y+1
if y/4=int(y/4)
??y
endif
enddo程序6x=int(rand( )+5)
do case
case x=3
? "大"
case x=4
?"小"
case x=5
?"多"
otherwise
?“少”
endcasenull*x=0
y=1
do while x<9
x=x+y
y=y+2
enddo
?y程序7程序8a=0
b=1
do while .t.
if a>1
exit
endif
a=a+1
b=b+a*(a+1)
enddo
?b程序9clear
a=-5
input "输入c的值" to c
do case
case a=-5
b=a+1
case a=0
b=a+2
otherwise
b=a+3
endcase
?bnull*dime aa(4)
s=0
for n=1 to 4
aa(n)=n
endfor
for i=1 to 4
s=s+aa(i)
endfor
?s程序10null*input "请输入一个数:" to x
flag=1
for i=2 to x-1
if mod(x,i)=0
?"不是"
flag=0
exit
endif
endfor
if flag=1
?"是"
endif编写程序:判断一个数是否是素数。null*改错:统计200-500之间能被3整除的数的个数。n=0 &&改为:s=0
for i=200 to 500
if mod(i,3)<>0 &&将<>变为=
s=s+1
endif
endfor
? "s=",snull *