
《2VF程序设计基础ppt课件》由会员分享,可在线阅读,更多相关《2VF程序设计基础ppt课件(73页珍藏版)》请在文档大全上搜索。
1、2.6 多模块程序设计多模块程序设计 数据类型数据类型 字符型字符型(C)、数值型、数值型(N)、日期型、日期型(D)、逻、逻辑型辑型(L)、备注型、备注型(M)、通用型、通用型(G)、货币、货币型型(Y)等。等。2.1 常量与变量常量与变量 2.1.1 常量常量 常量的类型:常量的类型:N、C、D、T、L、Y等等1. 数值常量的指数表示法:数值常量的指数表示法:例:例:13亿亿 普通表示为:普通表示为:1300000000 指数表示法为:指数表示法为:1.3e9 0.000000089 指数表示法为:指数表示法为:8.9e-82. 字符串常量的定界符为:字符串常量的定界符为:“ ”、 、 下
2、列字符型常量的表示中,错误的选项是下列字符型常量的表示中,错误的选项是 。A) “65+13” B) “电脑商情电脑商情” C) x=y D) 中国中国3. 日期常量日期常量 系统默认的日期输出格式为:系统默认的日期输出格式为:MM/DD/YY 严格的日期输入格式为:严格的日期输入格式为:YYYY-MM-DD 4. 逻辑常量:逻辑常量:.t.或或 .y. 和和 .f. 或或 .n.日期格式的设置命令:日期格式的设置命令: (1) SET MARK TO 系统默认是:系统默认是:/ (2) SET DATE TO 系统默认是:系统默认是:AMERICAN (3) SET CENTURY ON|O
3、FF 系统默认是:系统默认是:2位数字显示年份位数字显示年份 2.1.2 变量变量 1. 字段变量字段变量 字段变量是属于数据表之中的多值变量,字段变字段变量是属于数据表之中的多值变量,字段变量的当前值即为当前记录的对应字段值,而记录指量的当前值即为当前记录的对应字段值,而记录指针所指记录为当前记录。针所指记录为当前记录。 字段变量的类型:字段变量的类型:C、N 、D 、L 、M、G等等 内存变量的类型:内存变量的类型:C、N、Y、L、D、T等。等。 2. 内存变量内存变量 内存变量是通过命令或程序中临时定义的独立于内存变量是通过命令或程序中临时定义的独立于数据表而存在的变量。变量名以字母、汉
4、字和下划数据表而存在的变量。变量名以字母、汉字和下划线开头,后接字母、数字、汉字和下划线构成。线开头,后接字母、数字、汉字和下划线构成。例:下列选项中,不能作为例:下列选项中,不能作为Visual FoxPro中变量名的是中变量名的是 A) _abc B) abc123 C) 123abc D) abc_123内存变量的赋值:内存变量的赋值:= STORE TO (1)赋值号赋值号“=”与数学中的等号不同;与数学中的等号不同; 如赋值语句如赋值语句: S=S+X N=N+1 (2)变量的类型取决于值的类型;变量的类型取决于值的类型; (3)该语句不能给字段变量赋值。该语句不能给字段变量赋值。
5、以下赋值语句正确的是以下赋值语句正确的是 。 A) STORE 8 TO x,y B) STORE 8,9 TO x,y C) x=8,y=9 D) x,y=8 表达式值显示命令:?|? ? a,b,c? d,e 例:例:A=1234 B=1234 C=DATE() D=56 E=$1234 AA=5678 ABC=AA-A STORE 0 TO A1,A2,A3 DISP MEMO 变量名变量名变量的类型变量的类型变量的属性变量的属性变量的值变量的值 内存变量的显示内存变量的显示: DISP MEMO LIKE DISP MEMO LIKE A* & 仅显示以仅显示以A开头的变量。开
6、头的变量。 例:语句例:语句LIST MEMORY LIKE a*能够显示的变量不包括能够显示的变量不包括_。 A) a B) a1 C) ab2 D) ba3 3. 数组变量数组变量 定义数组:定义数组:DIMENSION (Nexp1Nexp2),(Nexp1DECLARE (Nexp1Nexp2),(Nexp1例:例:DIME X(4),Y(2,3) 数组的赋值数组的赋值 整个数组的数据类型为数组型整个数组的数据类型为数组型A,初值为逻辑假,各个数组,初值为逻辑假,各个数组元素可以是不同类型的数据。元素可以是不同类型的数据。仅定义数组时,每个元仅定义数组时,每个元素的初值均为逻辑假。素的
7、初值均为逻辑假。例:例:X=0 & X数组所有元素均为数值数组所有元素均为数值0。 Y(1,1)=123 & Y数组第一个元素值为数值数组第一个元素值为数值123 Y(2,1)=“123” & Y数组第二行一列元素值为字符串数组第二行一列元素值为字符串“123” Y(5)=2019-9-6-12 & Y数组第数组第5元素元素(Y(2,2)值为日期值值为日期值 Y(2,3)=Y(1,1)-12 & Y数组第二行三列元素为数值数组第二行三列元素为数值111 2.2 表达式表达式 2.2.1. 数值、字符与日期时间表达式数值、字符与日期时间表达式 1. 数值表
8、达式数值表达式 运算符:运算符: 、%、()、() 参加运算的量只能是数值型,表达式的值也是数值型。参加运算的量只能是数值型,表达式的值也是数值型。 2. 字符表达式字符表达式 运算符:运算符: 、 参加运算的量只能是字符型,表达式的值也是字符型。参加运算的量只能是字符型,表达式的值也是字符型。 例例2:设:设Q1=“ABC”,Q2=“EFG”,则表达式则表达式Q2-Q2+Q1的值为的值为: A) ABC B) ABC C) EFGEFGABC D) EFGEFGABC例例1: 执行以下命令序列执行以下命令序列(表示空格表示空格)最后一条命令的最后一条命令的执行结果是:执行结果是: s1=计算
9、机计算机 s2=二级等级考试二级等级考试 ?s1+s2?len(s1+s2) ?s1-s2?len(s1-s2)3. 日期时间表达式日期时间表达式 、 例例:下列表达式中下列表达式中,运算结果为数值型的正确表达式是运算结果为数值型的正确表达式是 A) DATE()+TIME() B) DATE()+30 C) DATE()-CTOD(“01/01/98”) D) DATE()-DTOC(DATE() 2.2.2. 关系表达式关系表达式 1. 关系运算符:关系运算符: 、=、(#、!=)、=、= =、$参加运算的量可以是数值型、字符型及日期型,参加运算的量可以是数值型、字符型及日期型,表达式的值
10、是逻辑型。数值型数据以其值的大小进行表达式的值是逻辑型。数值型数据以其值的大小进行比较比较, 键盘字符以其键盘字符以其ASCII码值的大小进行比较,汉字码值的大小进行比较,汉字是以其是以其(拼音、内码、笔画拼音、内码、笔画)进行比较。进行比较。 (= =、$ 这两种运算,参加运算的量只能是字符型这两种运算,参加运算的量只能是字符型表达式)表达式)b7b6b5b4b3b2b10000000100100011010001010110011110001001101010111100110111101111NULSOHSTXETXEOTENQACKBELBSHTLFVTFFCRSOSIDLEDC1DC
11、2DC3DC4NAKSYNETBCANEMSUBESCFSGSRSUS空格!“#$%&()*+,-/0123456789:;?ABCDEFGHIJKLMNOPQRSTUVWXYZ 、abcdefghijklmnopqrstuvwxyz|-DEL000001010011100101110111例:例:?Aa ,处长处长科长科长 3. 字符串精确比较与字符串精确比较与EXACT设置设置 “=”运算,当运算,当EXACT开关处于常态开关处于常态OFF时,时,“=”号右边的字符串号右边的字符串(位位)与与“=”号左边的前位字号左边的前位字符相等,则表达式值为真。符相等,则表达式值为真。例:例:
12、?会计电算化会计电算化=会计会计, 会计会计=会计电算化会计电算化 ?管理会计管理会计=会计会计.T. .F. .F.F. .F.例例: 令令X=2, ?X=X+1 输出结果是输出结果是: A) 3 B) 命令语法错命令语法错 C) .T. D) .F. 当当EXACTEXACT开关开关ONON时时, , 先在较短的字符串的尾部加上若先在较短的字符串的尾部加上若干空格使两字符串长度相等,再精确比较。干空格使两字符串长度相等,再精确比较。 “$”运算,当运算,当“$”号左边字符串包含在号左边字符串包含在“$”号右号右边字符串之中边字符串之中,则表达式的值为真。则表达式的值为真。 例:例:?会计电
13、算化会计电算化 $ 会计会计,会计会计 $ 会计会计电算化电算化 ?会计会计 $ 管理会计管理会计 例:例:LIST FOR XM=“杨杨”将显示出数据表中所有姓将显示出数据表中所有姓“杨的人的记录。杨的人的记录。.F. .T. .T.例:例:LIST FOR 杨杨 $ XM将显示出数据表中所有名字中带将显示出数据表中所有名字中带“杨的人的记录。杨的人的记录。 “”运算,与运算,与EXACT开关的状态无关,只要开关的状态无关,只要“”号两边字符串完全相等,表达式值才为真。号两边字符串完全相等,表达式值才为真。 2.2.3. 逻辑表达式逻辑表达式 AND与)、与)、OR或)、或)、NOT非)非)
14、与运算:参加运算的量全为真,表达式的值才为真。与运算:参加运算的量全为真,表达式的值才为真。 A N D. B 真值表真值表ABEFA B F 0 0 00 1 0 0 01 1 1表达式:表达式:0150 只能表示成:只能表示成: X=0 .AND.X=500 .AND.JBGZ=1000例:表示基本工资不足例:表示基本工资不足500或超过或超过1000的表达式:的表达式: JBGZ1000 例:表示例:表示40岁以上具有高级职称的女教师的逻辑表达式岁以上具有高级职称的女教师的逻辑表达式 年龄年龄=40.AND.性别性别=“女女”.AND. (职称职称=“副教授副教授”.OR.职称职称=“教
15、授教授”)例:下面表达式是的含义是什么?例:下面表达式是的含义是什么? 年龄年龄=40.AND.性别性别=“女女”.AND.职称职称=“副教授副教授”.OR. 职称职称=“教授教授” 表示表示40岁以上的女副教授以及所有的正教授。岁以上的女副教授以及所有的正教授。2.2.4. 运算符优先级运算符优先级 (乘方)(乘方) - (负号)(负号)* (乘)(乘) /(除)(除)% (求余)(求余)+ (加)(加) -(减)(减)算术运算符算术运算符 逻辑运算符逻辑运算符 Not (逻辑非逻辑非) And (逻辑与逻辑与)Or (逻辑或逻辑或)算术运算算术运算字符串运算字符串运算日期运算日期运算逻辑运
16、算逻辑运算关系运算关系运算数值处理函数数值处理函数 ABS(Nexp)、SIGN(Nexp)、SQRT(Nexp)、PI()、INT(Nexp)、ROUND(Nexp1,Nexp2)、MOD(Nexp1,Nexp2)、 MAX(Nexp1,Nexp2,.)、 MIN(Nexp1,Nexp2,.) 分别为绝对值函数、符号函数、平方根函数、分别为绝对值函数、符号函数、平方根函数、圆周率函数、取整函数、四舍五入函数、取余数函数、圆周率函数、取整函数、四舍五入函数、取余数函数、求最大值函数、最小值函数。求最大值函数、最小值函数。常常 用用 函函 数数例:例:X=3.9 ?SIGN(x),SIGN(-x
17、) ?INT(x),INT(-x)Int(x/y)=x/yX能被能被Y整除的判别式:整除的判别式: 例:例:X=25 Y=7 ?MOD(x,y) X%Y=0或或 mod(x,y)=0X能被能被Y整除的判别式:整除的判别式:例:例:X=2567.5978 ?ROUND(X,2) ?ROUND(X,3) 2.3.2 字符函数字符函数 (1).函数值为数值型的函数:函数值为数值型的函数: LEN(Cexp)、AT(Cexp1,Cexp2,Nexp)、 OCCURS(Cexp1,Cexp2) 例例: A=“is” B=“This is a book” ?AT(A,B),AT(A,B,2),OCCURS
18、(A,B),LEN(B)3 6 2 14 (2). 取子串函数取子串函数SUBS(Cexp,Nexp1,Nexp2)、LEFT(Cexp,Nexp)、RIGHT(Cexp,Nexp)(3). 产生与删除空格函数产生与删除空格函数 SPACE(Nexp)、 TRIM(Cexp)、LTRIM(Cexp)、ALLTRIM(Cexp)例:字符串长度函数例:字符串长度函数LEN(SPACE(3)-SPACE(2)的值是的值是 A) 1 B) 5 C) 2 D) 3例例: 表示空格表示空格,输出命令的结果是输出命令的结果是 ?LEN(LTRIM(“ABCD”) A) 4 B) 6 C) 7 D)9例例:
19、STRING=“热爱大自然热爱大自然” ?SUBS(STRING,LEN(STRING)/2-4,4) A) 热爱热爱 B)爱大爱大 C)大自大自 D)自然自然 例例: ANS=“STUDENT.DBF” MYFILE=SUBS(ANS,1,AT(“.”,ANS)-1) ?MYFILE A) STUDENT.DBF B) STUDENT C) STUDENT.ANS D) 11 2.3.3 日期和时间函数日期和时间函数 (2). 求年份、月份、周、星期和天数函数求年份、月份、周、星期和天数函数YEAR(Dexp)、MONTH(Dexp)、WEEK(Dexp)、DOW(Dexp)、DAY(Dex
20、p) 函数值的类型均为数值型函数值的类型均为数值型表达式:表达式:year(date()-year(出生日期出生日期) & 计算年龄计算年龄 (1). 系统日期和时间函数系统日期和时间函数DATE()、TIME()、DATETIME() 函数值的类型分别为:函数值的类型分别为:D、C、T 2.3.4 数据类型转换函数数据类型转换函数 LOWERCexp) 大写大写 小写小写 UPPERCexp) CHRNexp) ASC码码 字字符符 ASCCexp) STRNexp,Nexp1,Nexp2) 数值数值 字符字符(数数字等字等) VALCexp) DTOCDexp,1) 日期日期 字符
21、字符 CTODCexp)* 假设系统日期为假设系统日期为2019年年5月月11日日 ?dtoc(date() 返回字符串返回字符串 05/11/03 ?dtoc(date(),1) 返回字符串返回字符串 20190511 例例: ?VAL(“3.14159PI”)+0.3563.498 例例: X=12345.6789?STR(X)?STR(X,10,2)?STR(X,9,2)?STR(X,8,2)?STR(X,7,2)?STR(X,4)字符总位数字符总位数小数点位数小数点位数例例:VAL(SUBSTR(P586,2,1)+RIGHT(STR(YEAR(DATE(),2)+3 的计算结果是假设
22、系统日期为的计算结果是假设系统日期为2019年年5月月28日)日) A) 600 B) 52019 C) 600.00 D) 出错信息出错信息字符串字符串20190913字符串字符串d 字符串字符串 124数值数值 8例例: 下列选项中得不到字符型数据的是下列选项中得不到字符型数据的是 A) DTOC(DATE(),1) B) CHR(100) C) STR(123.567) D) AT(“1”,STR(3121)例:计算结果不是字符串例:计算结果不是字符串Teacher的语句是的语句是_。A、at(MyTeacher,3,7) B、substr(MyTeacher,3,7)C、right(M
23、yTeacher,7) D、left(Teacher,7)例:下列函数返回类型为数值型的是例:下列函数返回类型为数值型的是_。A、STR B、VAL C、DTOC D、TTOC 例:设例:设a=”计算机等级考试计算机等级考试”,结果为考试的表达式是,结果为考试的表达式是_。 ALeft(a,4) BRight(a,4) CLeft(a,2) DRight(a,2) 例:下列程序段执行后,内存变量例:下列程序段执行后,内存变量s1的值是:的值是:s1=networks1=stuff(s1,4,4,BIOS)Anetwork BnetBIOS Cnet DBIOS例:例:LEFT(“12345.6
24、789”,LEN(“子串子串”)的计算结果是的计算结果是_。1234程序与程序文件程序与程序文件 程序的概念程序的概念 程序是能够完成一定任务的命令的有序集合。这组程序是能够完成一定任务的命令的有序集合。这组命令被存放在称为程序文件命令被存放在称为程序文件(.prg)的文本文件中。的文本文件中。 命令注释:以命令注释:以*开头的命令行为注释行。命令行的后开头的命令行为注释行。命令行的后面也可加注释,这种注释以符号面也可加注释,这种注释以符号&开头。开头。程序文件的建立、修改与运行程序文件的建立、修改与运行建立与修改命令文件:建立与修改命令文件: MODI COMM 执行命令文件:执行命
25、令文件: DO 程序的基本结构程序的基本结构 程序结构是指程序中的命令或语句执行的流程序结构是指程序中的命令或语句执行的流程结构。顺序结构、选择结构和循环结构是程程结构。顺序结构、选择结构和循环结构是程序的三种基本结构。序的三种基本结构。语句格式:语句格式: DO WHILE .ENDDO 循环条件循环条件 命令组命令组ENDDO的下一条命令的下一条命令YN流程图:流程图:循环体循环体 循环结构循环结构 Do While 循环语句循环语句 例:在例:在test.prg中第中第2条语句是错误的,修改该条条语句是错误的,修改该条语句注意:只能修改该条语句),使得程序执行的语句注意:只能修改该条语句
26、),使得程序执行的结果是在屏幕上显示结果是在屏幕上显示10到到1。i=10DO i=1 ? i i=i-1 ENDDOi=10DO while i=1 ? i i=i-1 ENDDO修改后:修改后:i=5DO WHILE i=1 ?i i=i-1ENDDO修改后:修改后:i=2DO WHILE i=10 ?i i=i+1ENDDO 例:打开例:打开one.prg文件,修改其中的一处错误,使文件,修改其中的一处错误,使得程序执行的结果是在屏幕上显示得程序执行的结果是在屏幕上显示2 4 6 8 10。注。注意:错误只有一处,文件修改之后要存盘。意:错误只有一处,文件修改之后要存盘。修改后:修改后:
27、i=2DO WHILE i0 y=y+x%10 x=INT(x/10) ENDDO ?yRETURN A) 54321 B) 12345 C) 15 D) 51 简单分支简单分支语句格式:语句格式: IF ENDIF 选择结构 条件条件语句序列语句序列 ENDIF的下一条语句的下一条语句N Y 流程图:流程图:例:给定例:给定“成绩学分表成绩学分表(如下图如下图),其中前,其中前4项已有数据。项已有数据。 请编写符合下列要求的程序:计算每一个学生的总学分并请编写符合下列要求的程序:计算每一个学生的总学分并存入对应的学分字段。学分的计算方法是:物理存入对应的学分字段。学分的计算方法是:物理60分
28、以上包分以上包括括60分分2学分,否则学分,否则0分,高数分,高数60分上包括分上包括60分分3学分,学分,否则否则0分,英语分,英语60分以上包括分以上包括60分分4学分,否则学分,否则0分。(要分。(要求用循环语句实现)求用循环语句实现)问题问题1: xf=0可以置于循环之前吗可以置于循环之前吗?问题问题2: 用一个用一个Do case语句可否语句可否?问题问题3:repl语句可以带语句可以带all短语吗?短语吗?Use 成绩学分成绩学分Scan Xf=0 If 物理物理=60 Xf=xf+2 Endif If 高数高数=60 Xf=xf+3 Endif If 英语英语=60 Xf=xf+
29、4 Endif Repl 学分学分 with xf EndscanreturnUse 成绩学分成绩学分Do while not eof() Xf=0 If 物理物理=60 Xf=xf+2 Endif If 高数高数=60 Xf=xf+3 Endif If 英语英语=60 Xf=xf+4 Endif Repl 学分学分 with xf SkipEnddoreturn SCAN循环语句循环语句 语句格式:语句格式: SCAN FOR ENDSCAN 循环体循环体 流程图:流程图: 指针是否指向文件尾?指针是否指向文件尾?循环体循环体 记录指针指向第一条记录记录指针指向第一条记录 ENDSCAN的下
30、一条命令的下一条命令 YN记录指针指向下一条记录记录指针指向下一条记录例:请修改并执行程序例:请修改并执行程序temp。temp.prg的功能是:根据的功能是:根据“教教师表师表和和课程表课程表计算讲授计算讲授数据结构数据结构这门课程、并且这门课程、并且工资工资“大于等于大于等于4000的教师人数。的教师人数。 注意,只能修改标有错误的语句行,不能修改其他语句。注意,只能修改标有错误的语句行,不能修改其他语句。39套套&下句只有一处有错误下句只有一处有错误SELECT 课程号课程号 FROM 课程表课程表;WHERE 课程名课程名=数据结构数据结构“;TO ARRAY a&下句
31、有错误下句有错误OPEN 教师表教师表 STORE 0 TO sum&下句两处有错误下句两处有错误SCAN OF 课程号课程号=a OR 工资工资=4000 &下句有错误下句有错误 sum+1ENDSCAN?sumUse 教师表教师表 Sum=sum+1SCAN for 课程号课程号=a and 工资工资=4000 into ARRAY a选择分支选择分支 语句格式:语句格式: IF ELSE ENDIF Y N 流程图流程图 :条条 件件语句序列语句序列 1语句序列语句序列 2 ENDIF的下一条语句的下一条语句 例:给定程序表单例:给定程序表单modi2.scx,其功,其功
32、能是请用户输入一个正整数,然后计算从能是请用户输入一个正整数,然后计算从1到该数字之间有到该数字之间有几个偶数、几个奇数、几个被几个偶数、几个奇数、几个被3整除的数,并分别显示出来,最后整除的数,并分别显示出来,最后给出总数目。请修改并调试该程序,使之正确运行。给出总数目。请修改并调试该程序,使之正确运行。 改错要求:在改错要求:在计算计算按钮的单击事件的程序中共有按钮的单击事件的程序中共有3处错误,请处错误,请修改修改*found*下面的错误,必须在原来位置修改,不得增加下面的错误,必须在原来位置修改,不得增加或删减程序行其中第一行的赋值语句不许减少或改变变量名)。或删减程序行其中第一行的赋
33、值语句不许减少或改变变量名)。 在在“退出按钮下有一处错误,该按钮的功能是关闭并释放表退出按钮下有一处错误,该按钮的功能是关闭并释放表单。单。27套套*found*x,s1,s2,s3=0 *found*x= (thisform.text1)do while x0 if int(x/2)=x/2 s1=s1+1 else s2=s2+1 endif*found* if div(x,3)=0 s3=s3+1 endif x=x-1enddothisform.text2.value=s1thisform.text3.value=s2thisform.text4.value=s3thisform.t
34、ext5.value=s1+s2+s3if mod(x,3)=0 store 0 to x,s1,s2,s3 x=val(thisform.text1.value)多分支选择语句多分支选择语句 语句格式:语句格式: DO CASE CASE CASE CASE OTHERWISE ENDCASE条件条件2条件条件1条件条件n命令组命令组1命令组命令组2命令组命令组n 命令组命令组n+1ENDCASE的下一条命令的下一条命令YN N N Y Y 例:设学生数据表当前记录的例:设学生数据表当前记录的“计算机字段的值计算机字段的值是是89,执行以下程序段之后,屏幕输出:,执行以下程序段之后,屏幕输出
35、:A)计算机成绩计算机成绩: 不及格不及格B)计算机成绩计算机成绩: 及格及格 C)计算机成绩计算机成绩: 良良 D)计算机成绩计算机成绩: 优优DO CASE CASE 计算机计算机=60 ?计算机成绩计算机成绩: +及格及格 CASE 计算机计算机=70 ?计算机成绩计算机成绩: +中中 CASE 计算机计算机=80 ?计算机成绩计算机成绩: +良良 CASE 计算机计算机=90 ?计算机成绩计算机成绩: +优优ENDCASE DO CASE CASE 计算机计算机=90 ?计算机成绩计算机成绩: +优优CASE 计算机计算机=80 ?计算机成绩计算机成绩: +良良CASE 计算机计算机=
36、70 ?计算机成绩计算机成绩: +中中CASE 计算机计算机=60 ?计算机成绩计算机成绩: +及格及格ENDCASE 例:给定例:给定“成绩加分表成绩加分表(如下图如下图),其表,其表结构是:学号结构是:学号C(10)、少数民族、少数民族L、优秀干部、优秀干部L、三好生、三好生L、考试成绩考试成绩I、总成绩、总成绩I。其中,前五项已有数据。其中,前五项已有数据。 请编写符合下列要求的程序:请编写符合下列要求的程序:计算每一个学生的总成绩。总成计算每一个学生的总成绩。总成绩的计算方法是:绩的计算方法是:考试成绩考试成绩+加分,加分的规则是:加分,加分的规则是:如果该生是少数民族相应数据如果该生
37、是少数民族相应数据字段为字段为 .T.)加分)加分5分,优秀分,优秀干部,加分干部,加分10分,三好生加分分,三好生加分20分,加分不累计,取最高的。分,加分不累计,取最高的。例如,如果该生既是少数民族又是三好学生,加分为例如,如果该生既是少数民族又是三好学生,加分为20分。分。如果都不是,总成绩如果都不是,总成绩=考试成绩考试成绩 (要求用循环语句实现)(要求用循环语句实现)Use 成绩加分成绩加分 Scan jf=0 Do case Case 三好学生三好学生 Jf=20 Case 优秀干部优秀干部 Jf=10 Case 少数民族少数民族 Jf=5 Endcase Repl 总成绩总成绩
38、with 考试成绩考试成绩+jf Endscan Return 问题问题1: Case 条件的顺序可否调换条件的顺序可否调换? FOR循环语句循环语句 语句格式:语句格式: FOR = TO STEP ENDFOR/NEXT循环体循环体 Nexp1-初值初值 Nexp2-终值终值 Nexp3-步长步长循环次数由初值、终值和步长来确定:循环次数由初值、终值和步长来确定:循环次数循环次数=(终值终值-初值初值)/步长步长)+1 流程图:流程图: 循环变量超过终值?循环变量超过终值?循环体循环体 循环变量循环变量=初值初值 ENDFOR的下一条命令的下一条命令 YN循环变量循环变量=循环变量循环变量
39、+步长值步长值以下以下FOR语句决定的循环次数?语句决定的循环次数?For i=100 to 1 step -1For k=2.5 to 10 step 2For m=8 to 2 step -1For n=10 to 5例:程序执行结果:例:程序执行结果:a=0 for j=1 to 15 a=a+mod(j,3)endfor ?a k=5 for j=3 to 7 k=k+j endfor ?k+j step -1例:下列程序段执行时在屏幕上显示的结果是例:下列程序段执行时在屏幕上显示的结果是_。 DIME a(6) a(1)=1 a(2)=1 FOR i=3 TO 6 a(i)=a(i-
40、1)+a(i-2) NEXT ?a(6) A、5 B、6 C、7 D、8 应用程序一般都是多模块程序,包含多个程序应用程序一般都是多模块程序,包含多个程序模块。模块是一个相对独立的程序段。它可以被其模块。模块是一个相对独立的程序段。它可以被其他模块所调用,也可以去调用其他的模块。通常,他模块所调用,也可以去调用其他的模块。通常,把被其他模块调用的模块称为子程序,把调用其他把被其他模块调用的模块称为子程序,把调用其他模块而没有被其他模块调用的模块称为主程序。模块而没有被其他模块调用的模块称为主程序。 多模块程序 过程的定义格式:过程的定义格式:定义一般过程:定义一般过程: PROCDURE PA
41、RAMETERS RETURN 定义函数过程:定义函数过程:FUNCTION PARAMETERS RETURN 过程的调用格式:过程的调用格式:调用一般过程:调用一般过程:DO with RETURN调用函数过程:调用函数过程:过程名过程名 (实参表实参表) RETURN *主程序:主程序:P.prg* STORE 2 TO X1,X2,X3 X1=X1+1 DO P1 ?X1+X2+X3 RETURN *子程序子程序1:P1.prg*PROCEDURE P1 X2=X2+1 DO P2 X1=X1+1 RETURN *子程序子程序2:P2.prg*PROCEDURE P2 X3=X3+1R
42、ETURN TO MASTER 例:例:A) 3 B) 4 C) 9 D) 10 *本程序的功能为输入圆柱体的半径和高,计算圆柱体表面积。本程序的功能为输入圆柱体的半径和高,计算圆柱体表面积。*请将程序修改为函数调用方式请将程序修改为函数调用方式(注意不得增删语句行注意不得增删语句行)。 CLEAR LOCAL carea INPUT “请输入圆柱体的半径请输入圆柱体的半径” TO r &键盘输入数值键盘输入数值 INPUT “请输入圆柱体的高请输入圆柱体的高” TO h &键盘输入数值键盘输入数值 DO cya WITH r,h,carea ?圆柱体的表面积为:圆柱体的表面积
43、为:,carea RETURN PROCEDURE cya PARAMETERS a,b,c LOCAL pai pai=3.14159 c=2*(pai*a2)+2*pai*a*b RETURN ENDPROC carea=cya(r,h) RETURN c 过程中参数语句的格式为:过程中参数语句的格式为: PARAMETER & 形参为私有变量形参为私有变量 LPARAMETER & 形参为局部变量形参为局部变量 被调用的过程中必须包含参数语句,并且参数语句必被调用的过程中必须包含参数语句,并且参数语句必须是过程的第一个语句。其须是过程的第一个语句。其要与过程调用命令要与过
44、程调用命令中的中的一一顺次对应,并且数据类型要相符。一一顺次对应,并且数据类型要相符。 带参数的过程调用命令格式: DO WITH 例:例:CLEARx=10m=2n=3DO SUB1 WITH m,n DO SUB1 WITH m,n RETURNPROCEDURE SUB1 PARAMETERS m,n x=m+10m=m+n?x,m,nENDPROCRETURNA) 12 5 3 B) 12 8 3 12 8 3 15 8 3 C) 12 5 3 D) 12 2 3 15 8 3 12 8 3 变量的作用域变量的作用域 1. 公共变量公共变量 (Pub) PUBLIC 程序中用程序中用P
45、UBLIC说明的变量以及命令状态下定义说明的变量以及命令状态下定义的变量均为全局变量,全局变量只能用的变量均为全局变量,全局变量只能用CLEAR MEMORY、RELEASE等命令清除。等命令清除。 2. 私有变量私有变量 (Priv) 在程序中直接使用的变量,它的作用域是建立它的在程序中直接使用的变量,它的作用域是建立它的模块中及其下属各层模块。一旦建立它的程序运行结模块中及其下属各层模块。一旦建立它的程序运行结束,这些私有变量自动清除。束,这些私有变量自动清除。 3. 局部变量局部变量 (本地)(本地) LOCAL 程序中用程序中用LOCAL说明的变量是局部变量,它只能在说明的变量是局部变
46、量,它只能在建立它的模块中使用。不能在上层或下层模块中使用。建立它的模块中使用。不能在上层或下层模块中使用。当建立它的程序运行结束,局部变量自动清除。当建立它的程序运行结束,局部变量自动清除。 4. PRIVATE 命令命令 PRIVATE 该命令并不建立内存变量,它的作用是:隐藏指定的该命令并不建立内存变量,它的作用是:隐藏指定的在上层模块中可能已经存在的内存变量。使得这些变量在上层模块中可能已经存在的内存变量。使得这些变量在当前模块程序中暂时无效。这样,这些变量可以用来在当前模块程序中暂时无效。这样,这些变量可以用来命名当前模块或其下属模块中需要的私有变量或局部变命名当前模块或其下属模块中
47、需要的私有变量或局部变量。量。CLEARDO ARETURNPROCEDURE AS=5DO B?SRETURNPROCEDURE BPRIVATE SS=0S=S+10RETURN例:例:A) 5 B) 10 C) 15 D) 程序错误,找不到变量程序错误,找不到变量LOCAL a & 局部变量局部变量aSTORE 10 TO a,b ?执行过程前执行过程前a,b的值的值,a,bDO p1 & 调用过程调用过程p1?执行过程后执行过程后a,b的值的值,a,b?c=,cPROC p1 & 过程过程p1STORE 20 TO a,b?执行过程时执行过程时a,b的值的值,a,bPUBLIC c & 全局变量全局变量c C=30ENDPROC10 1010 20C=3020 20