文档库 最新最全的文档下载
当前位置:文档库 › 程序设计基础

程序设计基础

重庆市专升本教案(程序部分)
文向波 138********
程序设计基础
一、 程序设计中常用的几条指令
1. 输入语句: ① WAIT 语句: ?格式:WAIT <屏幕提示信息> TO <变量名> ?说明:一次只能接收一个字符,专升本考试一般用不上。 ② INPUT 语句: ?格式:INPUT <屏幕提示信息> TO <变量名> ?说明: ? 可接收字符型、数值型、日期型、逻辑型数据;
? 但专升本考试时,建议只用来输入数值型数据。
③ ACCEPT 语句: ?格式:ACCEPT <屏幕提示信息> TO <变量名> ?说明: ? 只接收字符串,而且不能使用定界符;
? 但专升本考试时,建议只用来输入字符型数据。
2. 输出语句: ① ?/??语句 3. 其它语句: ① Set talk off ② Clear ③ Return
&&关闭响应 &&清屏幕 &&结束程序
二、 程序的构成
1. 程序的一般构成: 程序一般由:数据输入及初始化、数据加工及处理、数据输出及善后处理等三部分构成。如下图 2. 编程实例: 例 1 根据半径计算圆面积。
Set talk off Clear S=0 Input "请输入圆半径:" to r S=3.14*r^2 ? "圆面积为:",s Return
第 10 页
&& S=3.14*r**2
或 S=3.14*r*r

重庆市专升本教案(程序部分)
文向波 138********
三、 程序的基本结构
1.顺序结构: 顺序结构程序的执行:按照语句排列先后顺序,一条接一条地执行,它是程序中最基本的结构。 例2 Set talk off Clear S=0 Input "请输入圆半径:" to r S=3.14*r^2 ? "圆面积为:",s Return 2.选择结构: ① 条件语句: ?语句格式: IF <逻辑表达式> <语句序列> ELSE <语句序列> ENDIF ?说明: ? IF 和 ENDIF 语句必须成对出现;
? 本语句结构可以嵌套,但不能出现交叉; ? 为了方便阅读,可按缩进格式书写。
No
条件满足?
Yes
条件满足?
No
Yes
语句组 语句组 1 语句组 2
?举例: 例 3 输入三角形的三边,利用海伦公式求该三角形的面积。 海伦公式: S ?
SET TALK OFF CLEAR INPUT "请输入三角形的第一边:" TO a INPUT "请输入三角形的第二边:" TO b INPUT "请输入三角形的第三边:" TO c S=0 P=0 IF a+b>c and a+c>b and b+c>a p=(a+b+c)/2 s=(p*(p-a)*(p-b)*(p-c))^(1/2) ? "三角形面积为:",s ELSE ? “三角形的三边长度有误,两边之和不大于第三边! ” ENDIF RETURN 第 11 页
p( p ? a )( p ? b)( p ? c)
其中 p ?
a?b?c 2

重庆市专升本教案(程序部分)
文向波 138********
② 多分支语句: ?语句格式: DO CASE CASE <逻辑表达式 1> <语句序列> CASE <逻辑表达式 2> <语句序列> ...... CASE <逻辑表达式 n> <语句序列> [OTHERWISE <语句序列 n+1>] ENDCASE
CASE 命令的后续命令 逻辑表达式 n N OTHERWISE N Y 语句序列 n 语句序列 n+1 逻辑表达式 1 N 逻辑表达式 2 N ??? Y Y 语句序列 1 语句序列 2
Y
?说明:
? 不管有几个 CASE 条件成立,只有最先成立的那个 CASE 条件对应的命令序列被执行; ? 如果所有 CASE 条件都不成立,且没有 OTHERWISE 子句,则直接跳出本结构; ? 为了方便阅读,可按缩进格式书写。
?举例:
?2 x ? 1 ?3 x ? 5 ? ? 例题 4 计算分段函数值: f ( x) ? ? x ? 1 ?5 x ? 3 ? ?7 x ? 2 ?
SET TALK OFF CLEAR INPUT "输入 X 值:" TO x DO CASE CASE x<0 f=2*x-1 CASE x<3 f=3*x+5 CASE x<5 f=x+1 CASE x<10 f=5*x-3 OTHERWISE f=7*x+2 ENDCASE ? “f=”,f RETURN
( x ? 0) (0 ? x ? 3) (3 ? x ? 5) (5 ? x ? 10) ( x ? 10)
第 12 页

重庆市专升本教案(程序部分)
文向波 138********
3.循环结构: ① 条件循环: ? 语句格式: DO WHILE <逻辑表达式> <语句序列> ENDDO ?说明:
? “逻辑表达式”的值为“真” ,循环继续;否则结束循环; ? 如果第一次判断条件时条件为假,则循环体将一次都不会被执行; ? 如果循环体包含 LOOP 命令,那么遇到 LOOP 时,就结束循环体的本次循环,后面的语句将被忽
No 条件成立? Yes 循环体部分
略,程序进入下一次循环;
? 如果循环体包含 EXIT 语句,那么遇到 EXIT 时,就结束整个循环。
? 举例: 例 5 编写计算 S=1+2+…+10 的程序
SET TALK OFF CLEAR s=0 i=1 DO WHILE i<=10 s=s+i i=i+1 ENDDO ?”s=”,s RETURN
例题 6 输入一个整数,然后计算各位数字之和。 程序:
SET TALK OFF CLEAR INPUT "x=" TO x s=0 DO WHILE x!=0 s=s+MOD(x,10) x=int(x/10) ENDDO ?s RETURN
&&假如用户输入:5678
例题 7 分析下列程序执行结果。 程序:
SET TALK OFF CLEAR 第 13 页

重庆市专升本教案(程序部分) x=34357 y=0 DO WHILE x>0 y=x%10+y*10 x=int(x/10) ENDDO ?y RETURN
文向波 138********
② 步长循环: ?语句格式: FOR <循环变量>=<初值> TO <终值> [STEP <步长>] <语句序列> ENDFOR 条件成立? No
Yes ?说明: 循环体部分 ? “循环变量”超出[初值,终值]构成的范围,循环结束; ? 如果缺省<步长>,其步长为 1; ? 步长可以为“正数” ,也可以为“负数” ; ? 步长可以为“整数” ,也可以为“小数” ; ? 在循环过程中,最好不要改变循环变量的值,否则会影响循环的次数。 ?举例: 例 8 编写计算 S=1+2+…+10 的程序 程序:
SET TALK OFF CLEAR s=0 FOR i=1 TO 10 s=s+i ENDFOR ?”s=”,s RETURN
例题 9 分析下列程序执行结果。 程序:
SET TALK OFF CLEAR DIME a(6) a(1)=1 a(2)=1 FOR i=3 TO 6 a(i)=a(i-1)+a(i-2) ENDFOR ? a(6) RETURN
第 14 页

重庆市专升本教案(程序部分)
文向波 138********
③ 辅助循环语句:LOOP、EXIT
四、 子程序的定义与使用
4.1 子程序(模块)的定义:
1.主程序的概念:调用其它程序,并没有被其它程序调用的程序称为主程序。 2.子程序的概念:被其它程序调用的程序称为子程序。 3.子程序的定义格式:
● 子程序: PROCEDURE <过程名> [PARAMETERS <参数表>] <命令序列> [RETURN [<表达式>]] [ENDPROC]
4.子程序使用注意事项:
● 用户自定义函数
FUNCTION <过程名> [PARAMETERS <参数表>] <命令序列> [RETURN[<表达式>]] [ENDFUNC]
? 过程结束语句[ENDPROC]|[ENDFUNC]可以缺省。如果缺省,过程将结束于下一个过程的开始处; ? 当程序遇到 RETURN 指令时,控制将转回到调用程序(或命令窗口) ,并返回表达式的值; ? 如果缺省 RETURN 命令,则整个程序文件结束时自动执行一条隐含 RETURN 语句;
4.2 子程序的调用及参数传递:
1.子程序调用及参数传递递格式:
子程序调用:DO 过程名 WITH 参数 1[,参数 2,…] 函数调用: 过程名( 参数 1[,参数 2,…] )
&&(常量) &&(变量)
说明:参数可以是常量,也可以是变量。如:DO abc WITH 100 DO abc WITH x
2.参数传递的格式:
格式:PARAMETERS 形式变量 1[,形式变量 2,…]
&&如:PARAMETERS x,y
功能:定义本模块的私有变量,并接收上层程序传来的参数。
3.关于参数传递语句的几点说明:
? 参数传递语句必须是过程或自定义函数的第一条语句;
第 15 页

重庆市专升本教案(程序部分)
文向波 138********
? 参数语句中定义的参数,最好与调用程序的调用命令中的参数一一对应,或多于调用命令参数,不得少 于调用命令中参数,否则将出现错误; 如:调用命令:DO abc WITH x,y,100 参数定义:PARAMETERS a1,a2,a3,a4 4.3 子程序调用举例: 例题 10 下面是一个模块定义和调用的程序示例。涉及三个文件:f1.prg、f2.prg、f3.prg。其中,f1.prg 为 主程序,另外包含一个过程 p1;f2.prg 被主程序调用;f3.prg 包含两个过程 p2 和 p3。 特别提醒:本题的学习重点是看懂子程序的执行顺序
&&主程序: ? "主程序开始" SET PROCEDURE TO f3 F2() DO p1 ? "主程序结束" &&子程序 p1 PROCEDURE p1 ? "过程 p1 开始" ? "调用 p3()" ? "返回值:",p3() ? "过程 p1 结束" ENDPROC &&子程序文件:f2.prg ? "子程序 f2 开始" ? "调用 p2()" X=p2() ? "返回值为:",x ? "子程序 f2 结束" RETURN ⑷ ⑸ ⑹ ⑼ ⑽ ⑾ ⒀ ⒁ ⒂ ⒃ ⒆ ⒇ 执行顺序 ⑴ ⑵ ⑶ ⑿
(21)
&& 3 个实际参数(简称为“实参”) && 4 个形式参数(简称为“形参”)
&&子程序文件:f3.prg PROCEDURE p2 ⑺ RETURN ⑻ PROCEDURE p3 ⒄ RETURN 100 ⒅
运行结果为: 主程序开始 子程序 f2 开始 调用 p2() 返回值为:.T. 子程序 f2 结束 过程 p1 开始 调用 p3() 返回值:100 过程 p1 结束 主程序结束
例题 11 分析下列程序执行结果。 特别提醒:本题的学习重点是学会子程序的参数传递
&&主程序 Set talk off Clear x=100 y=200 DO abc WITH x,y ? x,y RETURN &&子程序 PROCEDURE abc PARAMETERS a,b ? a,b z=a a=b b=z ? a,b RETURN ENDPROC 运行结果为: 100 200 200 200 100 100
例题 12 设计一个计算圆面积的子程序,并要求在主程序中带参数调用它。 特别提醒:本题的学习重点是了解子程序的具体应用
&&主程序: Set talk off &&子程序: PROCEDURE js 第 16 页

重庆市专升本教案(程序部分) Clear ymj=0 Input "请输入半径:" to bj DO js WITH bj,ymj ? "ymj=",ymj RETURN
文向波 138******** PARAMETERS r,s s=3.14*r*r RETURN ENDPROC
4.4 子程序设计方法及技巧:
1.子程序设计方法: ? 按照题目程序功能,设计出普通程序; ? 根据题目的要求,在以上普通程序中找到并确定做为子程序的程序片段; ? 将上一步确定的程序片段移动到整个程序的最后(与主程序留一行距离) ; ? 在被移动的程序片段前、后分别加上:Proc <子程序名>、Endproc; ? 在 Endproc 语句前添加 Return; ? 在被移动程序的 Proc <子程序名>的下方添加 Para <参数变量表>,并根据被移动程序部分的变量情况,确定 Para <参数变量 表>中的变量; ? 根据 Para <参数变量表>中变量,在主程序中相应位置添加指令 Do <子程序名> with <参数变量表> 。 2.子程序设计举例:
例题 13 设计一个计算圆面积的子程序,并要求在主程序中带参数调用它。
? 照题目程序功能,设计出普通程序 Set talk off Clear ymj=0 Input "请输入半径:" to bj ymj=3.14*bj*bj ? "ymj=",ymj RETURN ? 根据题目的要求,在以上普通程序中找到并确定做为子程序的程序片段; Set talk off Clear ymj=0 Input "请输入半径:" to bj ymj=3.14*bj*bj ? "ymj=",ymj RETURN ? 将上一步确定的程序片段移动到整个程序的最后(与主程序留一行距离) ; Set talk off Clear ymj=0 Input "请输入半径:" to bj ? "ymj=",ymj RETURN ymj=3.14*bj*bj &&作为子程序的语句 &&作为子程序的语句
? 在被移动的程序片段前、后分别加上:Proc <子程序名>、Endproc; Set talk off Clear ymj=0 Input "请输入半径:" to bj 第 17 页

重庆市专升本教案(程序部分) ? "ymj=",ymj RETURN Proc js ymj=3.14*bj*bj endproc ? 在 Endproc 语句前添加 Return; Set talk off Clear ymj=0 Input "请输入半径:" to bj ? "ymj=",ymj RETURN Proc js ymj=3.14*bj*bj return endproc &&作为子程序的语句 &&作为子程序的语句
文向波 138********
? 在被移动程序的 Proc <子程序名>的下方添加 Para <参数变量表>,并根据被移动程序部分的变量情况,确定 Para <参数变量 表>中的变量; Set talk off Clear ymj=0 Input "请输入半径:" to bj ? "ymj=",ymj RETURN Proc js Para ymj,bj ymj=3.14*bj*bj return endproc ? 根据 Para <参数变量表>中变量,在主程序中相应位置添加指令 Do <子程序名> with <参数变量表> 。 Set talk off Clear ymj=0 Input "请输入半径:" to bj Do js with ymj,bj ? "ymj=",ymj RETURN Proc js Para ymj,bj ymj=3.14*bj*bj return endproc &&作为子程序的语句 &&作为子程序的语句
特别注意:在子程序的改造过程中,某些题可能要求不止一个子程序,可能存在多个子程序。
第 18 页

相关文档
相关文档 最新文档