1、计算机程序设计基础程序与程序文件 以前所学的在命令窗口中逐条输入命令或选择菜单来执行命令是以交互方式来操作。一、 程序:能够完成一定任务的命令的有序集合。这组命令被存放在称为程序文件或命令文件的文本文件中。 set talk off 设置交互方式开关为关 set talk on 。开 return 退出程序 以note或*开头的代码行为注释行。 无实际意义 命令行后也可添加注释,以&开头。 无实际意义 命令分行符“;” 程序中每条命令都以回车键结尾,一行只能写一条命令例: 计算圆的周长与面积: Clear &清除VFP主窗口或当前用户自定义窗口里的全部内容 *设置半径 r=3 *依次计算周长和
2、面积 P=2*pi( )*r &函数pi( )返回圆周率 a=pi( )*r2 *输出计算结果 ?“周长=”,p ?“面积=”,a return二、 程序文件的建立与执行1、 建立与修改(默认扩展名prg)建立步骤: “文件”“新建”“程序” 在文本编辑窗口输入程序内容。 保存程序文件:“文件”“保存”或ctrl+w打开修改程序文件步骤: “文件”“打开”,“文件类型”“程序” 选定文件文件,单击“确定” 编辑修改后,选择“保存”。 若要放弃本次修改,“文件”“还原”或按Esc键。 用命令建立和修改: modify command 注:文件名可以写全称,也可以省略扩展名 若指定的文件名存在,则
3、打开修改;若不存在,则建立一个新文件2、 执行程序文件 菜单方式:“程序”“运行”,然后从文件列表框中选择程序文件, 单击“运行” 命令方式: do 文件中的一些命令:a) cancal:终止程序运行,清除所有的私有变量,返回命令窗口b) do:转移执行另一个程序(实现程序的嵌套)c) return:结束当前程序的执行,返回调用它的上级程序,若无上级程序则返回到命令窗口。d) quit:退出VFP系统,返回到操作系统。3、 简单的输入输出命令(三种) input to 该命令等待用户从键盘输入数据,可输入任何类型的合法的表达式。 输入字符串、逻辑型常量、日期时间型常量时必须加定界符。不能不 输
4、任何内容直接按回车。 例: open data d use 学生 in 0 clear input 请输入年龄: to mm sele * from 学生 where 年龄mm close data return accept to 该命令等待用户从键盘输入字符串,且该命令只能输入字符串,输入时不需要加定界符。若不输入任何内容按回车,系统会把空串赋给内存变量。 wait to windowat ,.该命令只能输入字符串,不用按回车,直接自动执行例: open data d use 11 in 0 wait 输入查询的姓: to ss sele * from 11 where 姓名=ss clo
5、se data return三、 程序的基本结构程序结构是指程序中命令或语句执行的流程结构。三种基本结构:顺序结构、选择结构、循环结构1、 选择结构(条件语句和分支语句) 条件语句: if 注意:if 和endif必须成对出现,if是本结 构的入口,endif是出口;条件语句 else 可以嵌套,但不能交叉。系统规定 endif与最近的一条if 配对。 endif 例:某地至北京的邮路里程为1043KM,“特快专递”时应在24小时内到达,计费标准每克0.05元,但超过100克后,超出的每克0.02元。试编写程序计算邮费。 Input 请输入邮件重量: to w If w=100 f=w*0.0
6、5 else f=100*0.05+(w-100)*0.02 endif ?邮费为:,f例: open data d use 11 accept 请输入学生姓名: to name locate for 姓名=name if not eof() disp else ?查无此人! endif close data 分支语句 do case case case . otherwise endcase例:计算分段函 f(x)= set talk off input 输入X的值: to x do case case x0 f=2*x-1 case x3 f=3*x+5 case x5 f=x+1 cas
7、e x10 f=5*x-3 otherwise f=7*x+2 endcase ? f(,x,)=,f set talk on return2、 循环结构(三种)do while 循环体enddo 注意:当循环体包含exit命令,那么遇到时,就结束该语句的执行,转去执 行enddo后面的语句。即跳出本层循环。 当循环体包含loop命令,那么遇到时,就结束循环体的本次执行,不 在执行其后面的语句,而是转回do while处重新判断条件。 例:计算s=1+2+3.+100? S=0 i=1 do while i=100 s=s+I i=i+1 enddo ? s=,s 求1/1!+1/2!+1/3
8、!+1/10!=? i=1 u=1 s=0 do while i=10u=u/i s=s+u i=i+1 enddo ? s例7.8 : 逐条输出1982年出生的学生记录。 Clear open data 学生 use 学生 in 0 sele 学生 locate for year(出生日期)=1982 do while not eof() display wait continue enddo close data3、 for = to step endfor/next 步长默认值为1,若为正,则判断条件为循环变量小于等于终值;若为负, 则判断条件为循环变量大于等于终值。 For s=2 t
9、o 100 step 4 For s=100 to 2 step -4例:找出100-999之间的所有水仙花数。 Clear for i=100 to 999 a=int(i/100) b=int(i-100*a)/10) c=i-int(i/10)*10 if i=a3+b3+c3 ?i endif endfor return 例:从键盘输入10个数,然后找出其中的最大值和最小值。 Clear input 输入一个数据: to a stor a to ma,mi for i=2 to 10 input 请输入一个数: to a if maa mi=a endif endfor ?最大值:,m
10、a ?最小值:,mi return判断: (1) s=0 for i=1 to 100 s=s+i endfor ?s(2) s=0p=1for i=1 to 100p=p*is=s+pendfor?s4、 scan forwhere endscan 范围默认为all 例: 统计专业代码(学号的第3、4位)为03的男、女生人数。 open data 学生 use 学生 in 0 sele 学生 store 0 to m,w scan for subs(学号,3,2)=03 if 性别=.t. m=m+1 else w=w+1 endif endscan clear ?男生人数:,m ?女生人数
11、:,w close data return四、 多模块程序应用程序一般都是多模块程序,包含多个程序模块。模块是一个相对独立的程序段,它可以被其他模块所调用,也可以调用其他的模块。通常,把被调用的模块称为子模块;把调用其他模块而没有被其他模块所调用的模块称为主程序。一般大型的程序是有多个人分工合作来完成的,每个人可以编写一个程序模块,最后合成一个总程序。 1、模块的定义和调用在vfp中,模块可以是命令文件,也可以是过程。 过程的定义: Procedure/function return endproc/endfunc过程文件的建立仍使用modify command命令,文件的扩展名是prg打开过
12、程文件的命令格式为: set procedure to ,additive此命令若不带任何文件名,将关闭所有打开的过程文件。关闭个别过程文件命令: release procedure, 模块调用格式: 格式1: do| 格式2: |() 注意:上面两种格式中,如果模块是程序文件代码,用;否则用。例:7.17 2、参数传递(实参、形参) 接收参数的命令有: parameters,, lparameters,, 注意:第一条命令声明的形参变量是私有变量 第二条命令声明的形参变量是局部变量 不管是哪一条命令,都应该是模块程序中第一条可执行的命令。 调用模块程序格式: 格式1:do|with, 格式2
13、:|(,)注意:调用模块时,系统会自动把实参传递给对应的形参。形参的数目不能少于实参的数目,否则系统会产生运行时错误。如果形参的数目多于实参的数目,那么多于的形参取初值逻辑假.F. 采用格式1调用模块程序时,如果实参是常量或表达式,传递时按值传递;如果实参是变量,传递时按引用传递。 采用格式2调用模块时,默认情况下都以按值方式传递参数。如果实参是变量,可以通过命令set udfparms to value/reference 重新设置参数传递方式。 例:7.18 注意:当实参是数组元素时,总是采用按值传递。当实参是数组名时,若传递方式是按值传递,那么就传递数组的第一个元素值给形参变量;若是按引
14、用传递,那么传递的将是整个数组。 例:7.193、 变量的作用域 按作用域来分,内存变量可分为公共变量、私有变量、局部变量。(1) 公共变量:在任何模块中都可使用,它必须通过命令先建立后使用。 命令建立: public 该命令建立公共变量后,并赋初值逻辑假.F. 公共变量一旦建立就一直有效,即使程序运行结束返回到命令窗口也不会消失。除非执行clear memory 、release、 quit等命令后才被释放。(2) 私有变量:在程序中直接使用而有系统自动隐含建立的变量以及用户自己定义的变量都是私有变量。 例: x=5作用域是建立它的模块及其下属的各层模块,一旦建立它的模块程序运行结束,私有变
15、量将自动清除。 (3)局部变量:只能在建立它的模块中使用。建立它的模块程序运行结束,局部变量将自动清除。 命令建立: local 在开发程序中,子程序与主程序有可能所用的变量名同名,即子程序用到的变量在主程序中已经建立,那么子程序的运行会无意间改变主程序中变量的取值。为了解决这个问题,可以使用private命令隐藏主程序中可能存在的变量,使它在子程序中暂时无效。Private Private all like/except 例:7.21用local定义了局部内存变量,若与上一级的变量名同名时,局部变量优先,即它具有隐藏上层模块中建立的同名变量的作用。例;7.22 4、 程序的调试(了解) 调用调试器的方法两种: (1)工具调试器 (2)在命令窗口输入debug命令。 了解它包含哪些子窗口以及子窗口的作用。 设置断点: 类型1:在定位处断点 类型2:如果表达式为真则在定位处中断。 类型3:当表达式为真时中断 类型4:当表达式值改变时中断。 例:7.23
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1