刘卫国 VFP 第三章实验习题分析更新到第35题文档格式.docx
《刘卫国 VFP 第三章实验习题分析更新到第35题文档格式.docx》由会员分享,可在线阅读,更多相关《刘卫国 VFP 第三章实验习题分析更新到第35题文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
备注文件上课也说了,后缀名是.fpt,你可以按照题目的意思多写几个备注值看一看是不是会生成多个.fpt文件,你试过就知道不会。
备注型文件*.fpt是可以用记事本打开的,当然显示可能有出入,因为.fpt的文件的标准打开方法只能是在VFP中双击memo打开,你也可以强记这题的答案吧,一个表中一列的备注都是放在一个.fpt文件里。
6、选D,这题要强记,纠正下老师上课说4个字节是memo,这种说法不对,memo仅仅显示给人看的,真正的存放是答案D里的指针,这个指针又与上课说的记录指针不是一个意思,这是编程语言里的指针,不需要大家了解。
这题大家只要记住答案即可。
同理,通用型的4个字节,上课说的gen显示也只是给人看的,里面存放的也是4个字节大小的指针。
还是解释下这里说的指针吧,(没兴趣的同学直接看下一题),指针就是一个地址,这里4字节的指针,就是4字节的地址。
4个字节是32位,32位的地址完全够寻址很大的文件空间了。
具体多大的空间就不说了那是计算机专业人士的活)
7、这个也是死记的题,备注型输入的是文字,OLE对象PPT上有解释,OLE是ObjectLinkingandEmbedding的缩写,直译为对象连接与嵌入。
就是在里面可以插入图片,公式等等对象。
8、上课说了数值型常量的特征有数字,小数点,负号,和字母E(大小写都可),字母e就代表10^(),比如1e5代表1*10^5(1乘以10的5次方)。
所以题目中的5.6e-4,不要认为是(5.6e减去4),记住e后要有整数,所以-4是一个整体,代表5.6*10^(-4),汉语:
5.6乘以10的负4次方。
明白了吧,结果很显然是一个数值型常量。
E前要有数字,E后要是整数这个规则还记得吧
9、这是个好题目,因为与实际相连,我们上课时候说过,VFP这个软件的功能很多根据实际需要而产生,也因为实际中的无意义而禁止,比如我们说发生运算的左右两边至少在实际意义上要是同等类型的东西。
比如人与桌子无法发生运算,而一个人+一个人就等于两个人。
到题目这里,A选项是时间日期型常量(严格格式),注意后面它没带小时:
分钟:
秒,所以它的单位是天,它+10的意思就是日期往后算10天,是VFP系统允许的。
那么看B选项,date()函数返回的是当前的日期,注意我们说过日期越往后越大,所以这个差首先是可以计算的,意义就是天数之差,它的值一定是一个负数,不信可以自己实验,?
{^2002-5-1}-date()
我们上课说了,日期与日期是不能相加的,因为没有意义,所以VFP软件在开发的时候微软就禁止这种运算,所以C是不正确的表达式。
10、这个选D,内存的英文是memory,在中国南方地区--台湾称内存为“记忆体”,也就是这个意思。
顾名思义应该选D。
-----------关于内存变量文件,我们上课没有说,因为我个人觉得不重要,但是这里题目出现了,大家就要注意了。
在理论课本上的39页,例3.1的下面(3)可以看到,默认扩展名为.mem。
大家可以自己做这个实验,比如在VFP里定义变量a=123回车,b=”123”回车,c=’456’回车,d=$123回车。
之后我们上课说过的命令displaymemory我们先看下它的类型,注意这个display是要人工翻页的,就是说你任意的键盘鼠标操作都是翻页,这个要注意了。
首页会显示内存变量的个数,类型,N是数值型,C是字符型,Y是货币型。
这个演示过多次。
题目的意思就是把这个显示的内容存进一个文件中,后缀名是.mem。
存入这些内存变量的目的不是为了显示它,而是为了恢复它,就是说做一个备份。
将内存变量存入工作目录的的命令是saveto文件名
例如我们要把这个文件保存到工作目录的neicun.mem中,就下面这样输入:
savetoneicun
这样即可,不需要输入后缀名.mem了。
那么之后如果要恢复你存入前的内存变量,用命令:
restorefromneicun
那么下面我们怎么设计一个实验,能练习上面的操作呢。
我说下思路大家自己想想。
首先按照上面说的那样定义4个变量:
a=123回车,b=”123”回车,c=’456’回车,d=$123回车
displaymemory,显示的变量名都是大写的
看到了吧,4个变量,类型都有。
值也在后面。
然后我们要做内存变量文件的实验,因为这个实验有存入后的恢复,所以我们可以这么做,思路如下:
第一步:
定义好4个变量后,我们把它存入savetoneicun,之后我们再clearmemory-----把内存中的内存变量擦除,但是这之前的命令savetoneicun已经把内存变量保存在工作目录下的neicun.mem这个文件里了。
(自己找下在不在)
第二步:
然后此刻我们再displaymemory一定看不到任何内存变量。
第三步:
我们此刻恢复这些内存变量restoreformneicun回车。
完毕后,我们再次执行displaymemory会发现又出现了之前的4个变量。
这就是内存变量文件的用途。
(未完待续)
11、注意为什么不能选A,有的同学会说01/10/2003是一个数值型常量。
这么说其实不准确,怎么说准确呢?
应该说01/10/2003的计算结果是一个数值型常量,而01/10/2003只是一个表达式。
而B选项很明显是一个逻辑型常量。
C选项是变量,注意我上课时说的,Ture它只可能是一个变量,而是什么类型的变量要看对它赋什么值,而且我们说变量名是不区分大小写的也就是说ture和Ture和TURE是同一个变量。
D选项75%它根本就是一个不完全的表达式,%是取余数的符号,还记得PPT上给的异号求余数的步骤吧。
注意,第8题的那个5.6E-4那是一个常量,这个带E的数值型常量的表示方法,这个概念上课反复强调但是每过一个星期问大家感觉都没几个人回应,这里需要注意记忆!
!
12、这题不解释了。
我只说它声明了一个3行4列的数组,声明的方法两种-----也就是两个关键字declare和dimension。
13、像这样的题目,就是需要计算机专业的老师来解释的,因为涉及到存储的过程。
下面解释这题。
首先定义了一个数组A(6),我们说计算机只关心数组的大小,不关心数组是几维的,不管几唯在计算机内存中都是顺序存放。
几维只是便于人类的设计。
-----我们VF中最大就只有2维数组。
声明一个数组,declare/dimensionA(6)就是在内存中给名为A的这个数组开辟了6个长度的空间。
开辟空间后,如果不赋值,默认全部是.F.----逻辑型常量。
注意数组名A也是一个变量,所以它也是大小写一样的。
并且,数组名也是一个标识符,它的命名也遵循标识符的规则-----数字不能开头。
好,题目对声明的数组A(6)的前4个单元赋值之后,又定义了一个二维数组A(2,3),注意,定义就是声明,它们完全是一个意思,所以说这里等于又新声明了一个数组A(2,3),我们看到这个二维数组名也是A,那么这一次的声明同样也开辟了6个单元的内存空间,同样的,这些空间一开始都是逻辑型常量.F.有些同学会有疑问,那之前的A(6)里前4个单元的值去哪了?
-----被后来相同名称的数组冲掉了啊。
因为A(6)和A(2,3)数组名都是A,也就是说变量名都是A,后定义的就覆盖了前面的了。
类似于下面的VFP命令:
A=123回车,A=345回车,那么此刻你再?
A看到的肯定是345了。
14、这题不用说了,13题中都有解答了。
15、肯定选C。
我上课给大家说了很多关于这方面的,大家作为文科生,以后需要更多与人打交道,分析很多问题要从人性化的角度去理解,VFP为什么要允许一个数组中存在各种不同的数据类型?
因为VFP是数据库软件,它的数组也是为数据库中的表服务的,而表也是有行有列的,可以看作二维数组。
那么每一行中的的数据元素类型是各不相同的,比如学号是数值型,姓名、性别是字符型,出生日期是日期型,等等。
那么如果表在与二维数组之间发生数据传递的时候,就需要允许二维数组中的每一行有不同的数据类型。
关于软件的需求,这里再多说几句,还记得上课时候我说的为什么这么多的函数,比如数值型转字符型,日期型转字符型等等,都是有需求才产生的。
比如让你写一个排序条件---(这是后面的内容)按性别排序,若性别相同则按出生日期排序。
你写表达式的时候得这么写:
性别+DTOC(出生日期)
因为字段变量出生日期的值是一个日期型常量,它与字段变量性别的值是一个字符型的常量,它们之间由于类型不同是不能直接运算的。
要让他们类型相同就得把出生日期的值变成字符型,也就用到了函数DTOC(),-----D日期toC字符
16、还是关于数组的本质的题目,我们上课说了数组本质在计算机内存上是连续存放的-----即使它被定义成二维的。
如果不会做这题的自己画出这个二维数组的图,然后自己编号,编号方法还记得吧,一行一行编号。
Q这个数组我们人类是这样认为它的:
Q(1,1)
Q(1,2)
Q(1,3)
Q(2,1)
q(2,2)
q(2,3)
Q这个数组在内存中实际上是这样的:
Q
(1)
Q
(2)
q(3)
Q(4)
Q(5)
q(6)
在我们VF中你不管是写q(1,2)或者是q
(2),它都懂是第二个单元,同理,Q(2,2)它也知道是第5个单元q(5)
我故意把几个Q写成小写的,你懂的~~不要告诉我你不懂?
?
------变量名大小写是相同的。
17、我们说过,字段变量和内存变量重名时,默认访问字段变量----什么叫访问。
输出符号?
变量就是对变量的一种访问。
18、这题选B,上课时候,包括PPT上可能说的不清楚,简单变量就是指a=123回车b=”123”回车,这种a,b都叫简单变量。
而数组变量就是declareq(2,3)回车这种,声明之后可以称变量q是数组变量。
它们都是内存变量。
这题可以当作概念题去记忆,
------内存变量的两种类型:
简单变量和数组变量。
下面做一个图,总结变量的分类:
一般我们说的内存变量意思都是自定义的内存变量,但是别忘了还有系统内存变量-----以下划线开头的都是。
注意内存变量和系统内存变量都用displaymemory这个命令查看。
19、这题上课也没有特别强调过,是细节题,选B,大家在建表的时候可以看到这种类型。
内存变量里跟它相似是数值型----代号N。
只是类似,数值型和浮点型它们并不相同。
这个题其实出的有问题,在VFP6.0里那个是叫“浮动型”。
大家不信可以自己建立一张表,在字段类型中自己看有没有浮点型。
。
只有浮动型的。
20、同样是一个概念题,正是看到这个题我才下决心用那个画图程序画上面18题的那个图。
大家对着图看吧。
很明显了,选A吧。
B和C对照上面分类的图,都看到了吧它们说的都不完全。
有同学问为什么不选D,因为局部变量顾名思义只能在局部使用,你在其他地方就使用不了。
并不符合题意。
这个今后遇到再做具体解释,在很后面的章节。
21、题目居然有重复的。
这题跟15题一样啊。
正确的选项不要解释了吧,上课时候重复了N次了。
B那个选项的说法一般般吧,但是总体没错,为什么,大家都是学文科的,我们看B选项的结构,....Is......,主系表结构是吧。
把内存变量前的形容词给去掉-------数组是内存变量。
总的结构没错。
具体所谓的一定顺序排列,其实在内存中就是连续的。
22、这题又重复了,这是什么节奏?
看第10题的解答。
注意一点,文件名也是大小写不敏感的,因为上面说了它也是标识符-----VF的标识符好像整体都是大小写相同的,至少我没发现反例。
但是注意字符串“”是区分大小写!
因为字符串是按照ACSII码存储的,ACSII码大小写字母不同的。
关于标识符,我就再画个图吧:
23、这题涉及到通配符,大家都是本科生,英语中like是像...的意思,except是除了....这个肯定知道。
我只解释通配符?
和*,注意在微软公司编的软件中,甚至可以说是世界上大多数的软件中,广泛使用这两种通配符,通配符,顾名思义就是通用的匹配符号。
作用:
?
这个符号代表可以匹配任意的一个字符-----仅仅是一个
*这个符号就强大了,可以匹配任意长度的字符
这里的字符是什么意思,就是你手里的键盘上的所有的按钮只要能在屏幕上打出东西的几乎都算是字符。
注意空格space键也是一个字符。
还记得上课说的space(5)生成5个空格字符的函数吧。
我是怎么表示它的?
直接打两个双引号对吧,然后再里面打5个空格。
””这就是space(5)。
所以23题选什么很容易了吧,两个问号代表任意开头两个字符,第三个字符固定是M(这里你打小写m也可以),之后是一个*号,这个表达式?
m*--------就等于汉语:
第三个字母是M,这解释的不能再清楚了吧。
24、substr()取子串函数,我解释下这个函数,串就是字符串的意思。
我先说这个名字-----大家是学文学的。
取子串函数----你就从这5个字里能得到什么信息?
首先有子串,有子串就说明有父串,被取的串就称为父串吧---说明括号里被取的东西一定是一个字符串。
取出来的就是子串吧-----子串首先它是一个串,一个字符串。
说这些就是让大家记住,取子串函数Substr(x,m,n),它里面的参数x是一个字符串,它的返回值(也就是函数值)也是一个字符串-----是x的子串。
那m和n是什么意思?
就是从x这个字符串的第m个长度的位置开始取,取多长?
取n个长度。
回到这个题,”中南大学信息院”我们说一个汉字占两个长度,第5个长度开始应该是”大”这个字,那”大学”两个汉字显然占4个字节长度----一个字符的长度就是一个字节;
一个汉字的长度是两个字节。
25、我知道很多人会看这题的解答,这题我要好好说。
首先这题你要看结构,str()函数在理论书上的48面,它的结果虽然书上说的很复杂,但是归根结底,str()返回值(函数值)是一个字符串。
再看后面的subs()这个就是简写了,就是24题substr()函数的简写---这要知道。
上面说了它也是返回一个字符串。
那么还记得“减号”在字符串中代表是什么吗?
+-这两个符号在字符串里都是拼接的意思,效果不同,+这个符号是直接把后面的字符串拼接到前面
-这个符号是把第一个字符串后的空格移到整个两个字符串拼接后的末尾---------这在PPT上说了。
那么可以来做题了,str(x,2)这个函数本来是3个参数,书上也说了如果省略第3个参数,代表将整个小数部分四舍五入。
注意理论书48面的例子,可以看到舍去小数的部分是四舍五入的,但是它书上的解释并没有四舍五入,所以大家千万要注意!
很多同学说不要在意这些细节,如果不在意你就选A了,就错了!
所以这本书的这个函数说的不好啊,还好它后面有几个例子说明了结果要四舍五入!
看下面的解释:
Str(56.789,2)的结果是字符串“57”,继续看,subs(‘56.789’,5,1)这个是从字符串的第5个位置起取1个长度的子串。
注意小数点是算位置长度的!
那么第5个位置取1个长度的字符应该是”8”,这题就相当于是问“57”-“8”,答案显然是B了,这题中间的减号和加号的结果是一样的。
都是”578”,显示结果是在屏幕上,上课说了字符串里是什么东西就显示什么东西,?
”578”就显示578,?
”57+8”就显示57+8,不信自己试试。
再试试?
57+8看结果是个啥?
不要告诉我不能显示,你双引号英文了吗,问号英文了吗。
26、这题我们实验课应该演示过吧。
宏替换&
还记得吗,vartype()求数据类型函数还记得吗,把下面的命令输入VFP自己试一试看看。
Date=’99/11/20’
&
date----------看&
date值到底是什么
vartype(&
date)----------看&
date值的类型是什么
这个符号后面一定是一个字符串类型的变量。
注意&
符号后面的两个要求缺一不可:
1、是字符串类型
2、是变量
实验课上也说了,宏替换的结果就是把字符串的定界符给去掉,里面是什么结果就是什么。
所以&
date就被替换为99/11/20,注意没有外面定界符。
那么?
date就相当于?
99/11/20,不要告诉我结果是显示日期,日期是{}。
你自己试试?
99/11/20结果是啥,自己动手试试就知道结果了吧,看到结果你就知道了这个意思是99除以11再除以20。
不要被出题的忽悠了,这题很难。
你可以记,宏替换&
效果就是扒掉字符串的定界符,替换出里面的东西。
这个宏替换不好说,我能力有限只能说成这样了。
这个符号在理论书的44面。
27、这个题也设计到本质概念,day()函数你至少知道它是日期时间那个范围内的吧,再想想顾名思义它是求一个日期的天数的,也就是严格格式里{^yyyy-mm-dd},翻译成汉语就是年,月,日,显然它就是“日”的意思,就是多少号。
求一个日期型或者日期时间型是多少号的意思,假如现在是2014年3月21号,你用?
day(datetime())回车,?
day(date())回车,都会返回21。
这里再说下datetime()这个返回的是时间日期,单位是秒;
date()返回的是日期,单位是天。
这些函数都是需要数次练习才能掌握的函数,大家要明白不是练习一次两次就记得住的,你要是一次都不练习,那能记得住就怪了。
上面说了这么多该知道day()里面的应该是日期或者日期时间了吧。
很明显里面参数是个字符型的,函数里参数不匹配肯定会出错。
上课也说了,像这些系统内部函数只能使用,不能改变它的结构和功能,函数也只有两个东西就是---结构和功能。
第一节课说面向对象的时候就说过,面向对象的程序员要记忆的就是各种函数的结构和功能。
结构:
有两方面含义。
一就是这个函数括号里有几个参数;
二就是每个参数应该是输入什么类型的数据。
功能:
功能就是这个函数是干啥的?
也就是说它会返回什么类型的值?
也就是说它的函数值是什么。
记住这就是面向对象的精髓,一般人我不告诉他。
28、这是个很有难度的题。
首先正确选项应该很容易选是A,我们要说的是为什么其他三个是错的。
B选项,对比A选项就该知道他是错了的。
把1个数赋给两个变量的写法是A选项才对--------不要问我为什么。
这是VFP的语法我也不知道为什么。
微软的设计师就是这么规定它是这么写的。
现在不会还有人会问“这跟微软有啥关系”这样的话了吧?
这VFP就是微软公司的产品啊。
再看C选项,我们说这样写是错误的,在VFP中一行不能有两个赋值语句,在VFP中一行也不能同时赋值后输出-------例如?
x=3这也是错的!
必须一行赋值一行输出:
X=3回车
x
这才对。
---------这也是微软设计师的规定。
再看D选项,关于两个等号。
怎么样,实验课说的重点来了吧。
我这里直接说看到这种两个等号的式子怎么分析它的结果,或者怎么判断是不是合法(合乎VFP语法)
还记得实验课的PPT上说的吗,这种两个=号的式子,比如
a=b=c只有一种情况下是正确的,因为上面说了,VFP不允许一行中有两次赋值,就算你加括号也不行a=(b=3)也是错的,不信你自己试试。
那么什么情况下可以一行写两个等号呢?
那就是------b和c都是字符串,常量和变量都无所谓。
下面说一个例子,从这个例子中你就会明白:
我们先赋值,让b和c都变成字符串变量:
B=”123”回车不要告诉我不能赋值之类的。
亲你确定是打开英文输入法了吗
C=”234”回车对于变量不要在意大小写这些细节!
A=b=c回车计算机运算时一定是a=(b=c)这样从右往左算
看看A的值是什么,这个等于是把b和C比较的结果赋值给a
a回车结果是.F.对吧有没有明白了什么?
对了,这是b和c两个字符串的非精确比较,也就是默认的setexactoff的字符串比较情形。
顺便提下还记得我们说的两个字符串比较如果用==两个等号就是精确比较------也就是setexacton时的=一个等号的比较吧。
(关于这个非精确比较我自己都要说吐了对吧,我想你也听吐了-----在右端字符串结束前,如果与左端相同就返回.T.否则返回.F.)
顺便我们复习下字符串其他的比较方法吧,如果比较大小,用>
<
>
=,<
=,<
>
#!
=三个都是不等于。
还记得我实验课说的吗,字符串”100”>
”90”是怎么比较?
这个结果是.T.还是.F.?
字符型默认按pinyin表比较,理论书的52面上有。
比较