省二级VFP-第05章-01
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
闰年问题
• 判断2000~2110年之间的闰年 • 一个年份满足以下条件之一即为闰年: – 能被4整除且不能被100整除 – 能被400整除
nyear%4=0 and nyear%100<>0 or nyear%400=0
**"判闰年" clear for nyear=2000 to 2110 if nyear%4=0 and nyear%100<>0 or nyear%400=0 ? str(nyear)+"是闰年" inkey(0.5) endif endfor
clear input "请输入考试成绩:" to chj do case case chj<60 dj=―不合格" case chj<90 说明:case 的个数与需要 dj="通过" 判断的情况有关 otherwise dj="优秀" endcase ?"成绩等级:"+dj return
循环结构
FOR X =a TO b STEP c
<语句序列> ENDFOR
相当于 X =a DO WHILE X<= b <语句序列> X =X+c ENDDO
例:求1至100之间的整数和
方法一: S=0 I=1 DO WHILE I<=100 S=S+I I=I+1
方法二: S=0 FOR I=1 TO 100 S=S+I ENDFOR ?S
江苏省普通高校计算机等级考试教程
Visual FoxPro
程序设计基础
程序设计基本概念
程序是为了完成某一具体任务而编写的一系列指令, VFP程序由一系列代码组成,代码可以包括以命令形 式出现的指令、函数或VFP可以理解的任何操作 程序设计是利用系统所提供的设计工具,按照程序设 计语言的规范编写程序的过程 程序方式是命令方式的连续化和自动化,目的在于进 一步提高数据操作的灵活性和效率 通常在程序中可以完成的任务都可以通过界面操作或 命令操作来完成,但时间耗费大
语句序列 2
endif之后的语句
输入考试成绩chj Y
Chj<60
N
dj=―不合格”
Y dj=―通过”
Chj<90
N dj=―优秀”
输出成绩等级
clear input "请输入考试成绩:" to chj if chj<60 dj=―不合格" else if chj<90 dj="通过" else dj="优秀" endif endif ?"成绩等级:"+dj return
ENDDO
?S
求1!+2!+….10! clear p=1 s=0 for i=1 to 10 p=p*i s=s+p ?p,s endfor ?p,s
FOR循环举例
• 打印10个“*” • 将上面的程序循环执行10次 * • 打印右侧图形 ** • 打印右侧图形
*** **** ***** ***** **** *** ** *
NO
循环什么时候结束? 怎么实现循环的结束?
ENDDO后面语句
I
计算1+2+3+……100
引入变量S和I S保存累加的结果
I I
0+1+2+3+4+……+100
S +2 S +3 …… S + 100 S
I
I保存被累加的数据
算法:先对前面的 数求和,保存在 一个变量中,再 与当前数相加
S=0 I=1
i<=100
Y S=s+i I=i+1
N
输出S
• 编程求1+2+3+……+100之和。
CLEAR S=0 I=1 DO WHILE I<=100 S=S+I I=I+1 ENDDO ? ”S=”,S &&可改为 RETURN
?‖S=‖+STR(S)
循环变量=初值
DO WHILE 条件
命令组 改变循环变量的语句 ENDDO
累乘示例
• 计算P=3*5*7*…*25 P=1 FOR K=3 TO 25 STEP 2 P=P*K ENDFOR • 计算10! F=1 FOR I=1 TO 10 F=F*I ENDFOR
随机数示例
• 随机产生10个10~50的随机整数 DIME A(10) FOR I=1 TO 10 A(I)=INT((50-10+1)*RAND())+10 ENDFOR • 随机生成一个4行8列的矩阵 DIME B(4,8) FOR I=1 TO 4 FOR J=1 TO 8 B(I,J)=INT(10*RAND()) NEXT J NEXT I
循环结构也称为重复结构,是指程序在 执行的过程中,其中的某段代码被重复 执行若干次。 被重复执行的代码段,通常称之为循环体。 – DO WHILE……ENDDO – FOR……ENDFOR – SCAN……ENDSCAN
•
DO WHILE – ENDDO语句 根据条件表达式的值决定循环 体内语句的执行次数。 条件成立? 【语句格式】 YES DO WHILE < 条件 > < 命令序列 > 循环体 ENDDO
– 跳过LOOP后面的语句进入下一次循环 – 例:显示1~100之间非3的倍数的所有奇数 – 例5.7
• EXIT退出语句
– 直接退出循环 – 例:找到80~90之间的随机数 – 例5.13
LOOP和EXIT
FOR I=1 TO 100 step 2 if mod(I,3)=0 X=0 Do while .t.
补充:VFP基本输入操作
input [ <提示字符> ] to <变量名> 键盘赋值。所键入的常数可为C、N、D、L型中 任意一种(以界定符区分) accept [ <提示字符> ] to <变量名> 键盘赋值。所键入的常数只可为C型一种(可省 略界定符)
wait [ <提示字符> ] [ to <变量名>]
初值—>循环变量
条件成立 否
是
命令组
改变循环变量
特点:循环次数不固定
DO WHILE循环举例
• 打印10个“*” • ASCII字符串的反序显示 • 求级数 Y=1+1/2+1/3+……+1/N+…当1/N<10^-6结 束
循环语句中两条重要的命令: LOOP和EXIT命令
• 一般放在IF嵌套中 • LOOP短路语句
Input to a If a=10 s=0 Endif S=1 ?s
【语句格式】 IF <条件> <语句序列1> ELSE <语句序列2> ENDIF 【功能注释】 如果<条件>成立, 则执行<语句序列1>; 否则,执行<语句序列 2>。然后转向ENDIF的 下
语句序列 1
分情形语句逻辑功能:
条件 1
.F .
条件 2
.F .
…
条件 n
.F .
.T.
语句序列 1
.T.
语句序列 2
.T.
…
语句序列 n
语句序列 n+1
endcase之后的语句
语句执行时,依次判断CASE后面的条件是否 成立。当发现某个CASE后面的条件成立时,就 执行该CASE和下一个CASE之间的命令序列,然 后执行ENDCASE后面的命令。如果所有的条件都 不成立,则执行OTHERWISE 与ENDCASE之间的命 令序列,然后转向ENDCASE后面的语句。 【功能注释:】 不管有几个CASE条件成立,只有最先成立 的那个CASE条件的对应命令序列被执行。 如果所有CASE条件都不成立,且没有 OTHERWISE子句,则直接跳出本结构。 DO CASE和ENDCASE必须成对出现,DO CASE 是本结构的入口,ENDCASE是本结构的出口。
执行程序
菜单方式和按钮方式 【程序】→【执行】,给定程序文件名 工具栏上的按钮:! 命令方式
Do <文件名> [ with 参数]
编辑老程序
菜单方式 【文件】→【打开】→(程序),给定文件名
进入文本编辑状态
命令方式
Modify Command[<文件名>] 进入文本编辑状态
程序的生成和调用
创建程序(生成一 .prg 文件)
菜单方式 【文件】→【新建】→(程序) 进入文本编辑状态 命令方式 Modify Command[<文件名>] 进入文本编辑状态 保存
存盘,继续编辑: 【文件】→【保存】(或【另存为】),给文件名 存盘,退出编辑:^W(或^End) 不存盘,退出编辑:^Q(或Esc)
循环结构的语法格式——FOR
FOR 循环变量=初值 TO 终值 [STEP 步长]
初值—>循环变量
循环变量<=终值 步长为负时, 要求>=终值 否
命令组
ENDFOR
是
命令组
循环变量+初值
特点:循环次数固定
计算1+2+3+……100
算法:先对前面的数求和,保存在一个变量中, 再与当前数相加 S=0 For I=1 to 100 S=S+I ENDFOR ?S 问题:循环结束后I的值?
暂停并赋值。只能键入一个字符(无需回车); (通常用于暂停程序的执行,等候用户的应答)
分支结构
程序中设置条件运算(称判断),由判断结 果决定在预置的两支或多支程序段(语句序 列)中选择一支执行。具体又分两种形式:
选择结构
1、条件语句 【语句格式】
条件成立? y 语句1
N
IF <条件>
<语句序列1> ENDIF 【功能注释】 ENDIF 后面的语句 如果<条件>成立,则执行<语句序列1> ,然后转向 ENDIF的下一条语句;否则直接转向ENDIF的下一条语句 去执行。 IF和ENDIF必须成对出现,IF是本结构的入口,ENDIF 是本结构的出口。 条件语句可以嵌套,但不能出现交叉。在嵌套时,为 了使程序清晰、易于阅读,可按缩进格式书写。
• 如果换成这个图形呢?
* *** ***** ******* *********
FOR循环举例
• 计算1+2+3+……10 • 计算1*2*3*……10 • 计算1!+2!+3!+……+10!
累加示例
• 计算S=1+3+5+…+99 S=0 FOR I=1 TO 99 STEP 2 S=S+I ENDFOR • 计算N=1*1+2*2+3*3+…+10*10 N=0 FOR J=I TO 10 N=N+J*J ENDFOR
程序结构:是指根据不同的情况和条件,控制 程序去执行相应的语句序列。VFP中有一类特 殊的命令,在这些命令的控制下,可以根据一 定的条件控制程序执行某一组命令而不执行另 一组命令,或者使其他的一组命令或函数重复 执行多次 VFP的程序流程控制有四种基本结构
顺序结构 语句执行顺序就是语句书写顺序 P139顺序例,请思考如何将其进行修改,可以 根据任何输入的半径计算圆面积?
loop
endif
x=rand()*100
if x>70 and x<80 exit endif Enddo
?I
ENDFOR
?x
输入>=3的自然数 F=0 i=2 i<=? Y N
Y
Mod(n,i)<>0
N
i=i+1
F=1
根据F输出结果
CLEAR INPUT "请输入自然数(>=3):" TO N F=0 I=2 DO WHILE I<=INT(SQRT(N)) IF F=0 ? n,"是素数" IF MOD(N,I)<>0 ELSE I=I+1 ? n,"不是素数 LOOP " ELSE ENDIF F=1 RETURN EXIT ENDIF ENDDO
程序设计的主要方法
结构化程序设计方法: 主要思想:自顶向下,逐步求精,模块化,限制使 用转移语句 基本结构:顺序,分支,循环
面向对象的程序设计方法(OOP): 主要思想:任何事物都是对象,包括有形的实体和 抽象的概念,定理等 基石:对象与类() 基本机制:方法和消息(对象交流的唯一手段,前述) 四个基本特性:封装,继承,多态,抽象()
DO WHILE < 条件 > < 命令序列 > ENDDO
初值—>循环变量 条件成立 是 否
命令序列
循环什么时候结束? 怎么实现循环的结束? •改变循环变量 •执行EXIT语句
改变循环变量
显示教材表中JCMC,CBSMC:
clear input "请输入考试成绩:" to chj dj=iif(chj<60,"不合格", iif(chj>=90,"优秀","通过")) ?"成绩等级:"+dj return
多分支── 由分情形语句构成
DO CASE CASE <条件1> <语句序列1> CASE <条件2> <语句序列2> ┇ CASE <条件n> <语句序列n> [OTHERWISE <语句序列 n+1>] ENDCASE