文档介绍:三种程序结构补充
可爱卡通创意手绘通用PPT幻灯片演讲
选择分支结构
程序代码:
SET TALK OFF
CLEAR
USE 学生
ACCEPT "输入指定的班级(如951或953):" TO BJ
LOCATE F指定学生的平均成绩CJ
CJ>=90?
CJ>=80?
CJ>=70?
CJ>=60?
DC=“优”
DC=“良”
DC=“中”
DC=“及格”
N
N
Y
Y
Y
N
DC=“不及格”
N
输出学号、成绩、档次
是否还要查询?
Y
关闭表文件
结束
N
Y
输出找不到的信息
N
Y
Y
Company Logo
循环结构
对表文件中的记录逐条进行操作。
格式:DO WHILE .NOT. EOF()/BOF()
< 语句序列 >
SKIP/SKIP -1
ENDDO
功能:对当前打开的表文件中的记录自上而下或自下而上地逐条进行操作。
注意:记录指针由SKIP语句控制,循环结束的条件由函数EOF()和BOF()控制。
例题:
NOT EOF?
N
Y
语句序列
SKIP
Company Logo
循环结构
例7:逐条显示女生的姓名和出生日期,并统计女生的人数。不能用LIST和COUNT命令。
分析:
(1)打开表,指针在第一条记录
(2)如果是女生,则显示,并将个数加1;如果不是女生,则什么也不做,到下一步
(3)移动指针
(4)重复(2)(3)直到文件末尾
(5)关闭表
程序代码:
SET TALK OFF
CLEAR
USE 学生
N=0
DO WHILE !EOF()
IF !性别
DISP
N=N+1
ENDIF
SKIP
ENDDO
?"N=",N
USE
SET TALK ON
Company Logo
循环结构
例8:显示输出“学生”表中获得奖学金的学生姓名和奖学金数额。
流程图:
程序代码:
SET TALK OFF
CLEAR
USE 学生
DO WHILE !EOF()
IF 奖学金>0
?姓名,奖学金
ENDIF
SKIP
ENDDO
USE
SET TALK ON
Company Logo
循环结构
该题也可以用SCAN…ENDSCAN循环结构来实现。
格式:
SCAN [ NOOPTIMIZE ] [ 范围 ][ FOR<条件表达式1> ][WHILE<条件表达式2>]
< 语句序列 >
[LOOP]
[EXIT ]
ENDSCAN
功能:对当前打开的表文件在指定范围,满足条件的记录中进行自上而下逐个扫描操作,随着记录指针的移动,SCAN循环允许对指定的每条记录执行相同的< 语句系列 >操作。
程序代码:
SET TALK OFF
CLEAR
USE 学生
SCAN FOR 奖学金>0
?姓名,奖学金
ENDSCAN
USE
SET TALK ON
Company Logo
循环结构
例9:输出“学生”表中1971年或以前出生的学生姓名和出生年月。
流程图:
Y
开始
环境设置
打开表文件
文件未结束(找到否)?
继续查找
关闭表文件
结束
N
查找指定学生
显示姓名、出生年月
Company Logo
循环结构
程序代码:
SET TALK OFF
CLEAR
USE 学生
LOCATE FOR YEAR(出生年月)<=1971
DO WHILE !EOF()
?姓名,出生年月
CONTINUE &&查找下一个满足条件的记录
ENDDO
USE
SET TALK ON
问题:LOCATE命令能不能放在循环之内?为什么?
思考:该题如何用SCAN…ENDSCAN循环结构来实现?
Company Logo
循环结构
例10: (用LOCATE和SEEK实现)(在查找的过程中使用循环)( )
程序代码:
SET TALK OFF
USE 学生
LOCATE FOR SUBSTR(姓名,1,2)=“王”
DO WHILE .()
DISPLAY
CONTI