资源描述
前 言
学习数据库程序设计,上机实训是十分重要的环节。为了方便读者上机练习,本实训指导书设计了12个实训。这些实训和课堂教学紧密配合,通过有针对性的上机实训,可以更好地熟悉 Visual FoxPro的功能,掌握 Visual FoxPro程序设计的方法,并培养一定的应用开发能力。建议每个实训安排2机时左右,也可以根据实际情况从每个实训中选择部分内容上机练习。
为了达到理想的实训效果,请务必做到以下几点:
1、实训前认真准备,要根据实训目的和实训内容,复习好实训中可能要用到的命令,想好编程的思路,做到胸有成竹,提高上机效率。
2、实训过程中积极思考,要深入分析命令、程序的执行结果以及各种屏幕信息的含义、出现的原因并提出解决办法。
3、实训后认真总结,要总结本次实训有哪些收获,还存在哪些问题,并完成实训指导书要求填写的内容。
程序设计和应用开发能力的提高需要不断的上机实践和长期的经验积累,在上机过程中会碰到各种各样的问题,分析问题和解决问题的过程就是经验积累的过程。只要按照上面3点要求去做,在学完本课程后就一定会有很大的收获,计算机应用能力就会有很大提高。
第1章 程序设计基础实训
【实训1.1】熟悉VFP环境
实训目的:
1.熟悉VFP系统的操作环境。
2.掌握VFP系统的启动和退出方法。
3.掌握MSDN帮助文件的使用方法。
实训内容:
1.VFP系统的启动
(1)点击“开始”菜单中的“程序”选项。
(2)找到Visual FoxPro 6.0的快捷方式来启动VFP。
注:Visual FoxPro 6.0的可执行文件为vfp6.exe,其所在目录随安装的位置的不同而不同,一般为:“C:\Program Files\Microsoft Visual Studio\Vfp98\VFP6.EXE"。
2.在桌面上建立vfp6.exe的快捷方式
(1) 首先找到VFP的可执行文件vfp6.exe,依次打开C:\Program Files\Microsoft Visual Studio\Vfp98文件夹,找到VFP的可执行文件为vfp6.exe。(根据具体实训环境的不同,该文件的位置可能不同)
(2)选中vfp6.exe文件。
(3)右键拖动vfp6.exe文件到桌面空白处,在弹出的快捷菜单中选择“在当前位置创建快捷方式”菜单项,即可在桌面上建立vfp6.exe的快捷方式。双击刚刚建好的快捷方式也可以启动vfp环境。
3.退出VFP(以下方法并列)
方法1:在“命令”窗口中,输入命令“quit”。
方法2:直接按Alt+F4。
方法3:在“文件”菜单中,选择“退出”命令。
方法4:双击主窗口左上角的控制菜单框。
方法5:在主窗口控制菜单中,选择“关闭”。
4.认识VFP界面
(1) 在vfp主窗口中依次找到标题栏、菜单栏、工具栏、状态栏的位置。
(2) “常用”工具栏的关闭。
①单击“显示”菜单中的“工具栏”菜单项。
②在弹出的窗口中,找到“工具栏”列表框中的“常用”项,鼠标单击去掉“常用”工具栏前面的选中标记。
③单击“确定”按钮,即可关闭“常用”工具栏。
(3) “常用”工具栏的显示。
①单击“显示”菜单中的“工具栏”菜单项。
②在弹出的窗口中,找到“工具栏”列表框中的“常用”项,鼠标单击选中“常用”工具栏前面的选中标记。
③单击“确定”按钮,即可显示“常用”工具栏。
注:其他工具栏的显示与关闭与上面的方法相同,请读者自己练习。
(3)命令窗口显示与关闭。
方法1:单击“窗口”菜单中的”命令窗口” 菜单项来显示命令窗口,再次单击“窗口”菜单中的”命令窗口”菜单项可关闭命令窗口。
方法2:CTRL+F2(显示命令窗口)/ CTRL+F4(关闭命令窗口)
5.利用MSDN帮助文件查找要解决的问题
(1)进入帮助系统有三种方法。
方法1:在命令窗口中,输入“help”命令后,回车。
方法2:调用“帮助”菜单。
方法3:在VFP窗口中的任一位置选中需要获得帮助的内容,按“F1”功能键。
(2)选择“活动子集”为“Visual Foxpro文档”,保证用户查看到的是关于vfp的帮助内容。
(3)选中“搜索”标签,输入要搜索的关键字。例如输入“系统容量”四个字,单击“列出主题”按钮列出符合条件的主题。
(4)用鼠标双击找到的主题,在右边的窗口部分即可看到要查找主题的相关内容。(当然用户也可以在“目录”选项卡下以目录的形式来浏览vfp的帮助内容。)
注:帮助文件的位置:通常情况下,VFP6的MSDN帮助文件位置在c:\program files\Microsoft Visual studio\msdn98\98vs\2502,文件名为foxhelp.chm。
(5)请读者找到所在的实训环境下,VFP6的MSDN帮助文件foxhelp.chm的存放位置。
实验时间
指导教师
评 语
【实训1.2】项目管理器的基本操作
实训目的:
1.掌握工作目录的设置方法。
2.掌握项目管理器的基本操作。
3.掌握如何建立表文件及备注和通用字段内容的输入方法。
实训内容:
1.设置D:\VFPLX文件夹为工作目录(两种方法)
首先在D盘新建立一个名为VFPLX的文件夹。
方法1:菜单方法
(1)依次单击“工具”菜单中的“选项”菜单项。
(2)单击选中”文件位置”选项卡中的“默认目录”项。
(3) 单击“修改”按钮,在弹出的“更改文件位置”对话框中,选中“使用默认目录”选项。
(4)在“定位默认目录”下面的文本框输入新的工作目录文件夹路径,单击“确定”按钮。例如输入:D:\VFPLX。
方法2: 命令操作的格式为:set default to 目录名
(1)在命令窗口中输入:set default to D:\VFPLX
(2)回车执行上面的命令即可。
注意:要设置为工作目录的文件夹必须已经存在,否则,不能设置成功。在vfp环境下,一旦设置了工作目录后,用户使用VFP工作过程中所产生的文件默认都会存到已经设置好的工作目录下,不会与vfp系统文件混在一起,方便管理与查找。
2.项目管理器的基本操作
(1)建立项目文件
①单击“文件”菜单中的“新建”菜单项,在弹出的窗口中选择文件类别为“项目”。
②单击“新建文件”按钮。
③在弹出的创建窗口中输入项目文件名。例如输入:XM1(注意项目文件的扩展名为.PJX)。
④ 单击“保存”按钮,便建立了名为XM1的项目文件,同时打开了项目管理器窗口。
(2)建立数据库文件
①在项目管理器中,单击选中“数据”选项卡下面的“数据库”类别。
②单击“新建”按钮,单击“新建数据库”按钮。
③输入文件名:如“教工”(注意数据库文件的扩展名为.dbc)。
④单击“保存”按钮,便建立了名为“教工”的数据库,同时打开了数据库设计器窗口。
⑤单击数据库设计器窗口右上角的“x”形图标按钮来关闭设计器。
(3)关闭项目文件
单击项目管理器右上角的“x”(关闭按钮)。
(4)打开项目文件。
①单击“文件”菜单中的“打开”菜单项。
选择文件类型为“项目”,选中要打开的项目文件XM1.PJX,单击“确定”。
(5)建立表文件
①单击“数据库”左边的“+”,就会列出刚刚建好的“教工”数据库。
②单击“教工”左边的“+”,选中“表”。(选自由表,可建立自由表)
③单击“新建”/单击“新建表”按钮(此时建立的是数据库表)。
④输入文件名:如“zgda”(注意表文件的扩展名为.dbf)。
⑤单击“保存”按钮,便打开了表设计器窗口。
⑥输入表的结构(如下表所示)后,单击“确定”按钮。
字段
字段名
类型
宽度
1
编号
字符型
4
2
姓名
字符型
6
3
性别
字符型
2
4
年龄
数值型
2
5
职称
字符型
6
6
工作时间
日期型
8
7
婚否
逻辑型
1
8
简历
备注型
4
9
照片
通用型
4
⑦ 系统提示是否现在“输入记录”,选择“是”,并在全屏幕编辑窗口中输入下列记录。
编号
姓名
性别
年龄
职称
工作时间
婚否
简历
照片
1
张黎黎
女
26
助教
05/24/99
.T.
memo
Gen
2
李艳
女
30
助教
09/24/99
.T.
memo
Gen
3
刘强
男
38
讲师
12/24/95
.T.
memo
Gen
4
王秋燕
女
45
讲师
10/09/93
.T.
memo
Gen
5
姜丽萍
女
45
讲师
10/09/93
.T.
memo
Gen
6
陈丽丽
女
38
讲师
09/27/95
.T.
memo
Gen
7
刘刚
男
50
副教授
06/28/88
.T.
memo
Gen
8
王良
男
39
讲师
08/09/95
.T.
memo
Gen
注意:
1.备注字段的输入方法:双击相应记录的备注字段(简历),打开备注字段的输入窗口,既可输入文本内容。
2.通用字段的输入方法:
(1)双击相应记录的通用字段(照片字段),打开通用字段的输入窗口。
(2)单击“编辑”菜单中的“插入对象”命令。
(3)选择“对象类型”为“Microsoft Word 图片”,即可打开Word程序。
(4)在Word程序依次单击插入/图片/剪贴画/选择一个剪贴画插入。
(5)关闭Word程序,回到vfp,即可看到插入的图片,关闭通用字段的输入窗口。
(6)已经插入内容的备注字段和通用字段的外表分别显示为Memo和Gen,第一个字母大写;没有插入内容的备注字段和通用字段的外表分别显示为memo和gen。
小结:建立表文件的过程分2步。首先建立表结构,即定义表的列数及每一列的数据类型、宽度等;再输入记录信息,即决定表有多少行的数据。
(6)修改表文件的结构
① 在项目管理器中,选中zgda.dbf表。
② 单击“修改”按钮,即可打开表设计器,对表的结构进行修改。(可增加、插入、删除字段、改变字段的位置)
③ 在表设计器的字段选项卡上的字段列表中最后一个字段后面单击鼠标来增加一个备注型字段,输入字段名为“备注”,选择字段类型为“备注型”。
④ 删除“工作时间”字段:选中“工作时间”字段,单击“删除”按钮。
⑤ 改变字段的位置(顺序):拖动字段名前的移动按钮到目标位置松开鼠标即可。
注:可以在命令窗口中输入:modify structure命令,来修改表文件的结构,但必须先打开zgda表。
(7)浏览表的内容(记录)
①在项目管理器中,选中zgda.dbf表。
②单击“浏览”按钮,即可打开浏览窗口对表的记录进行修改。
(8)移去一个(表)文件
①在项目管理器中,选中要移去:如zgda.dbf表。
②单击“移去”按钮,单击“移去”按钮,仅仅是将表从项目管理器中移去,不删除该表文件;(单击“删除”按钮,是将表从项目管理器中移去,同时删除该表文件)。
注:如果是数据库表,移去后该表变为自由表。
(9)在项目中添加已有的文件
①在项目管理器中,选中要添加的文件类型:如选中“自由表”类别。
②单击“添加”按钮,选择要添加的表文件,如:刚刚移去的zgda.dbf
③单击“确定”,即可添加到项目中。
(10)项目管理器展开与折叠、选项卡拖离和顶层显示操作
①展开与折叠:单击“其他”选项卡右边的“向上箭头”图标,即可折叠项目管理器窗口,同时“向上箭头”图标变成“向下箭头”图标;单击“其他”选项卡右边的“向下箭头”图标,即可展开项目管理器窗口,
②选项卡的拖离:在“折叠”状态下,拖动相应的“选项卡”到新的位置松开鼠标即可。
③选项卡的顶层显示:单击拖离后的选项卡上的“图钉”图标即可使该选项卡变成“顶层显示”状态,不被其他的“选项卡”所遮盖。
【实训1.3】数据类型与常用函数的用法
实训目的:
1.熟练掌握各种数据类型常量的表示方法。
2.熟练掌握常用函数的用法。
相关知识:
1.常量的表示方法
数值型(N):直接由数字或+、-、小数点构成,无定界符号。
字符型(C):
(1)由字符、汉字组成,需加定界符(单引号、双引号、中括号)。
(2)如’沈阳’、”沈阳”、[沈阳]。
(3)同一定界符不能嵌套,如:“AB”CD””,但 ‘AB”CD”’是合法的。
日期型(D):用{}定界。如:{^2005-08-30}或CTOD(“01/08/30”)。
日期时间型(T):用{}定界。如:{^2005-08-30 11:15:30 A}
逻辑型(L):用.定界。如用.t.或.Y.表示逻辑真, 用.F.或.N.表示逻辑假。
货币型(Y):用$符号开头,后跟数字。如:$90。
2.函数的学习要点
(1)函数名是什么?
(2)该函数有几个参数、参数的数据类型是什么?
(3)该函数的功能是什么?
(4)返回值的数据类型是什么?
对于任何的一个函数,只要注意以上4点,应用起来就不成问题!
实训内容:在窗口中输入下列函数表达式,回车运行后分析运行结果,具体练习过程中请查阅帮助文件以了解下述函数的具体用法。
1.sign( ) 函数功能:当指定数值表达式的值为正、负或 0 时,分别返回 1、-1 或 0
? sign(0) &&0
? sign(-8) &&-1
2.平方根函数sqrt():返回指定数值表达式的平方根
? sqrt(9) &&3 (参数不能为负数)
3.圆周率函数pi():返回圆周率常数
? pi() &&3.14
set decimals to 4 &&指定数值型数据显示的小数位数为4位,系统默认为2位
? pi() && 3.1416
4.取整函数int()、floor()、ceiling()
? int(12.56) &&12
? int(-12.56) && -12
? int(.56) &&0 注:int()函数返回值为参数的整数部分。
? floor(-4.5) && -5
? floor(3.5) &&3
注:floor()函数返回值为小于或者等于参数值的最大的整数。
? ceiling(-4.5) &&-4
? ceiling(3.5) &&4
注:ceiling()函数返回值为大于或者等于参数值的最小的整数。
5.四舍五入函数Round()
? Round(7556.5678,2) &&7556.57
? Round(7556.5678,0) &&7557
? Round(7556.81,-2) &&7600
? Round(7556.5678,-1) &&7560
注:第二个参数为负数时,表示对相应的整数位进行四舍五入
6.最值函数max()、min()
? max(10,20,30,25) &&30
? max(10,20) &&20
? max("a","ab") &&ab
? max($10,$20) &&$20
? max({^2005-4-16},{^2004-4-16}) &&{^2005-4-16}
注:参数至少有二个,参数可以是字符型、数值型、货币型、日期型;将上面的max改写成min后运行并分析运行结果。
7.求字符串长度函数len()
? len("abcde") &&5
? len("*") &&1 *为空格字符
? len("中国") &&4 一个汉字占2个宽度
? len("") &&0 空字符串长度为0
8.大小写转换函数
? lower("AbCd12OK") &&abcd12ok
? upper("AbCd12OK") &&ABCD12OK
注:只转换字符串中的大小写,其他字符不变。
9.空格字符生成函数
? "a"+space(3)+"b" &&a***b *为空格字符
? len(space(3)+space(2)) &&5 +为字符连接运算符
? len(space(3)-space(2)) &&5 -为字符连接运算符
10.删除空格字符函数
? trim("abcd***")+"ef" &&abcdef *为空格字符
? trim("abc*d*****")+"ef" &&abc*def *为空格字符
? ltrim("*ab*")+"ef" &&ab*ef *为空格字符
? alltrim("*ab*")+"ef" &&abef *为空格字符
11.取子串函数
? left("abcdef",2) &&ab
? left("abcdef",100) && abcdef
? right("abcdef",3) &&def
? substr("abcdef",2,3) &&bcd
? substr("abcdef",3) &&cdef
? substr("中华人民共和国",5,4) &&人民
12.occurs()函数
? occurs("ab","cabkabk") &&2 串ab在串cabkabk中出现了2次
? occurs("ab","ckk") &&0 串ab在串ckk中出现了0次
13、at()函数
? at("ab","ccabkabk",1) &&3 串ab在串cabkabk中第1次出现的起始位置是3
? at("ab","ccabkabk",2) &&6 串ab在串cabkabk中第1次出现的起始位置是6
14.子串替换函数
? stuff("abcdef",2,4,"ok") &&abokef 替换串abcdef第2个位置开始的4个字符,用串ok来替换
? stuff("abcdef",2,0,"ok") &&abokcdef 相当于插入ok
? stuff("abcdef",2,4,"") &&af 相当于删除bcde
15.日期函数
? date() &&返回系统日期
set century on &&用4位数字显示年份
? date()
set date to ansi &&设置日期的显示格式为ansi
? date()
? time() &&以字符串形式返回系统当前时间
? datetime() &&返回系统日期和时间
? year({^2004-04-16}) &&2004 返回日期中的年份数值
? month({^2004-04-16}) &&4 返回日期中的月份数值
? day({^2004-04-16}) &&16
? hour(datetime()) &&分别显示当前系统时间的小时数
? minute(datetime()) &&分别显示当前系统时间的分钟数
? sec(datetime()) &&分别显示当前系统时间的秒数
16.转换函数
? str(123.5678,8,2) &&**123.57 *为空格
? str(123.5678,6,3) &&123.57
? val("123.45")+100 &&223.45
? val("12a3.45") &&12
? val("a1212a3.45") &&0 第1个字符不是数字也不是+-号,返回0
set date to usa &&设置日期的显示格式为美国日期格式
? ctod("04-16-05") &&{^2005-4-16}
? ctod("04-16-05")+1 &&{^2005-4-17}
? dtoc(date()) &&将系统日期转换为字符格式
17.宏替换函数
x="123"
? &x+100 && 223 &&相当于? 123+100
? x+"100" && 123100
18.iif()函数
x=100
? iif(x>100,x-50,x+50) &&150
? iif(x<0,-1,iif(x=0,0,1)) &&1
19.数据类型测试函数type()、vartype()
? type("123") &&N
? type("04/06/09") &&N
? type("time()") &&C
? vartype(123) &&N
? vartype(“123”) &&C
? vartype($123) &&Y
? vartype(Datetime()) &&T
? vartype({^2005-04-19}) &&D
? vartype(3>5) &&L
思考题:如何用IIF()函数实现SIGN()的功能?
(提示:IIF(X>0,1,IIF( x=0 ,0,-1)))
20.测试函数bof()、eof()、recno()
use zgda
? bof() &&.f.
? recno() &&1 刚刚打开的表,指针指向首记录
skip –1 && 指针向上移动一条记录
? bof() &&.t.
? recno() &&1 表可访问的最小记录号为1
go bottom && 指针指向尾记录
? eof() &&.f.
? recno() &&8 假设表中只有8条记录,指针指向首记录
skip &&指针向下移动一条记录
? eof() &&.t.
? recno() &&9 表可访问的最大记录号为记录总数+1, 假设表中只有8条记录
? reccount() &&8 假设表中只有8条记录
21.信息窗口函数MessageBox()
格式:MESSAGEBOX(信息文本, [,对话框类型数值 [,标题栏文本]])
例子:MESSAGEBOX(“您好,VFP!”,64,“提示信息”)
36
【实训1.4】运算符与表达式
实训目的:
1.掌握各种类型表达式的书写方法。
2.掌握运算符的优先级别。
实训内容:
依次在命令窗口中输入下列表达式,回车运行来输出表达式的值,并分析运行结果。
1.数值表达式
? -3**2 &&9 负号的运算级别高于乘方
? (3+4)/2^2+int(12.5) &&13.75
相关知识:
(1)书写数值表达式,乘号一定不能省略。
(2)数值表达式是由算术运算符和数值型常数、变量、函数组成,运算结果为数值型数据。算术运算符为:+ - * / % ^ ( ) 。
(3)算术运算符的优先次序由高到低依次为:括号、负号、乘方、乘除、模运算(取余)、加减,同级运算从左到右依次进行。
2.字符表达式
? “abc**”+”*cd*” &&abc***cd* *为空格,+号为字符串完全连接运算
?“abc**”-”*cd*” &&abc*cd*** *为空格,-号为字符串不完全连接运算
相关知识:
(1)字符表达式是由字符运算符和字符型常数(即用定界符括起来的字符串)、变量、函数组成,运算结果是字符型数据或逻辑值。
(2)二种字符串运算符,优先级别相同。
(3)完全连接是指两个字符串合并,即包括空格在内的字符串中所有字符相加。不完全连接运算是将串1尾部的空格移到串2的尾部后,再连接。
3.关系表达式
set collate to “machine” &&设置数据的比较序列为机内码方式
? 8>100 &&.f.
? “8”>”100” &&.t.
? {^2004-5-19}>{^2003-5-19} && .t.
? $80<$60 &&.f.
? “abc”=”ab” &&.t. 系统默认“=”为非精确比较,右边是左边的左子串,则成立。
Set exact on &&设置“=”为精确比较,off为非精确比较
“abc”=”ab” && .f. 精确比较要求两边的字符串必须完全相等才成立。
? “ok”$”abokd” &&.t. 前一个串“ok”包含在后一个串中,返回逻辑真
相关知识:
(1)关系表达式描述的同类数据的大小比较关系,其结果是一个逻辑值,关系成立结果取真(.T.),不成立结果取假(.F.)。
(2)关系运算符两边的数据类型要一致,只有同类型的数据才能进行比较。
(3)数据比较规律
①数值和货币类型:数越大,其值越大。如:1000>800 $90>$10
②日期数据:未来>历史 如:{^2007-5-19}>{^2007-5-18}
③逻辑常量:逻辑真大于逻辑假,即:.t.>.f.
④字符串比较:依次对应比较两个串的字符,直到比较出结果即停止比较。例如:"abc">"ab", "abc">"aBc"。
⑤字符的比较规律
ASCII字符:比较字符的ASCII码值的大小。总结规律为:空格<0-9<A-Z<a-z。
汉字字符:是按照汉字的机内码值的大小来进行比较的,即比较汉字的拼音字符串的大小。例如:汉字“男”的拼音为“nan”, 汉字“女”拼音为“nv”,所以“男”小于“女”。
注意:上述字符的比较规律的前提是必须设置数据的比较序列为机内码方式。设置的命令为:set collate to “machine” 或者依次单击“工具”菜单中的“选项”菜单项,单击“数据”选项卡,设置“排序序列”为“machine”选项即可。
4.逻辑表达式:逻辑运算符的优先级别为:.NOT. .AND. .OR.
? not(10+3)>5 and ”ab”$”ab”+”cde” or 3>=4 &&.f.
? 3>2 AND NOT 5>6 &&
相关知识:
(1)当表达式中出现了多种运算符时,各种运算符的优先顺序由高到低依次为:
算术或字符或日期运算→关系运算→逻辑运算
(2)相同优先级的运算按从左到右的顺序计算
5.日期和日期时间表达式
? {^2005-3-29}-{^2005-3-21} &&8 两日期相差的天数为8天
? {^2005-3-29}+{^2005-3-21} && 两日期表达式相加,属非法表达式
? {^2005-3-25}+3 &&{^2005-3-28}
? {^2005-3-25}-3 &&{^2005-3-22} (用严格日期格式表示)
? datetime()+30 &&其值为当前时间的30秒后的日期时间
? datetime()-30 &&其值为当前时间的30秒以前的日期时间
? {^2005-5-5 10:10:20 a}-datetime() &&2个日期时间相差的秒的数值
相关知识:
(1)一个日期与一个数值相加,&&日期,表示从当前日期往后数N天。
(2)一个日期与一个数值相减,&&日期,表示从当前日期向前数N天。
(3)两个日期相减,&&数值,表示两日期之间相差的天数。
【实训1.5】程序结构
实训目的:
(1)理解VFP的2种工作方式:交互方式和程序执行方式。
(2)掌握程序文件的建立、存盘、调用方法和注释语句的使用方法。
(3)熟悉3种程序结构。
(4)会用调试器来分析程序的执行流程。
相关知识:
行首注释语句: NOTE | * 注释内容
功能:在程序文件中指示注释行的开始,注释行不被执行。
行尾注释语句: && 注释内容
功能:在程序文件中代码行的行尾注释,注释内容不被执行。
实训内容:完善下列程序横线处的代码,并调试运行。
1.建立并执行程序p1.prg,程序功能是判断用户输入的整数是否是偶数。
(1)在命令窗口中输入:modify command p1,在弹出的文本编辑器窗口中输入程序代码如下:
input "一个整数" to x
if x/2=int(x/2)
? “您输入的是偶数”
else
? “您输入的不是偶数”
endif
(2)按CTRL+W键,存盘。
(3)在命令窗口中输入命令:DO p1后,回车执行该程序。
2.参照上面的例子来建立并执行p2.prg,程序功能:判断用户输入的整数是正数、负数还是零,代码如下:
input "一个整数" to x
if x>0
? "您输入的是一个正数"
else
if x<0 &&此处为if语句的嵌套结构。
? "您输入的是一个负数"
else
? "您输入的是零"
endif
endif
3.参照上面的例子来建立并执行p3.prg,程序功能:根据学生的分数情况给出成绩等级,代码如下:
Input "分数 " to x &&从键盘接收来个成绩的数值赋值给X变量
Do case
Case x>=90 and x<100
? "优秀"
Case x>=80 and x<90
? "良好"
Case x>=70 and x<80
? "中等"
Case x>=60 and x<70
? "及格"
otherwise
? "悲惨,您可能不及格阿!"
Endcase
4.建立sum.prg,程序功能是求 1+2+3+…+10的和,代码如下所示
S=0
K=1
DO WHILE K<=10
S=S+K
K=K+1
ENDDO
? “1+2+…+10=”,S
注意:S=S+K为求和表达式,在循环中的作用是累加变量K的值,将结果保存到S变量中。
思考:
(1)若s=s+k分别改为s=s+k**2和s=s+1/k,程序的功能又是什么?
(2)请分析下面的程序段的功能是什么,S中累加的是哪些数的和?
S=0
K=1
DO WHILE K<=10
K=K+1
S=S+K
ENDDO
? “S=”,S
操作练习:使用调试器来跟踪该程序的执行情况,具体步骤为:
(1)单击“工具”菜单中的“调试器”菜单项,打开“调试器”窗口。
(2)在调试器窗口中单击“文件”菜单中的“打开”菜单项,打开要跟踪的程序,如sum.prg。
(3)执行“调试”菜单中的“单步跟踪”命令,来跟踪程序的执行,并观察分析“局部”窗口中变量值的变化情况。
5.在程序功能不变的情况下,用FOR循环来改写第4题sum.prg,并对比FOR循环与DO While循环的区别。
参考代码如下,读者也可以自己写出类似的程序。
S=0
For k=1 to 10 step 1
S=S+k
Endfor
? “S=”,S
6.编写程序JC.PRG,程序功能是求5的阶乘(5!=1*2*3*4*5),参考代码如下。
Y=1 &&存放阶乘结果的变量要赋初值为1
FOR X=1 TO 5 step 1 && step 1 可省略
Y=Y*X &&累计变量X的乘积到变量Y中。
ENDFOR
? "5!=",Y
注:请打开调试器,来跟踪该程序的执行情况。
7.参照上一题的程序,编写程序求S=1!+2!+3!+4!+5!的值。
S=0
Y=1
FOR X=1 TO 5
Y=Y*X &&循环执行过程中,Y中存放的分别是1、2、3、4、5的阶乘值
S=S+Y &&累加Y中存放的分别是1、2、3、4、5的阶乘值
ENDFOR
? "S=",S
8.用调试器跟踪下面程序的执行情况,并写出运行结果。
Store 0 to x, y, s1, s2, s3
Do while x<10
x=x+1
Do case
Case int(x/2)=x/2 &&判断X是偶数
S1=s1+x/2 &&S1中累加的是2、4、6、8、10几个数和的一半
Case mod(x,3)=0 &&判断X是3的倍数
S2=s2+x/3 &&S2中累加的是3、9两个数和的三分之一
Case x%2!=0 &&判断X不是偶数
s3=s3+1 &&S3存放的是非偶数的个数(1、5、7)
Endcase
Enddo
? s1,s2,s3
运行结果: 15.0000 4.0000 3
9.找出100—900之间的“水仙花数”(指一个三位数,其各位数字的立方和等于该数本身,如:153=13+53+33),下面是部分代码,调试该程序。
*****SXH.PRG求水仙花数****
CLEAR
FOR K=100 TO 999
A=INT(K/100) &&取百位数字
B=INT((K-100*A)/10) &&取十位数字
C=MOD(K,10) &&取个位数字,看看取十位是否还有别的方法?
IF k=A**3+B**3+c**3
? K
ENDIF
ENDFOR
运行结果:153,370,371,407
10.用scan-endscan循环结构来显示zgda表中所有女讲师的记录信息。
USE ZGDA
SCAN for 性别=“女” and 职称=“讲师”
DISPLAY
ENDSCAN
11
展开阅读全文