当前位置:文档之家› 第2章VFP表达式及应用

第2章VFP表达式及应用

第2章VFP表达式及应用
第2章VFP表达式及应用

第2章VFP表达式及应用

数据是程序加工处理的对象,并以某种特定的形式存在。在VFP中,各个数据的类型可能不同,不同数据类型决定了数据不同的存储方式与运算方法。表达式是运算符连接常数、变量和函数等构成的运算式。表达式作为命令的重要组成部分,主要完成各种计算任务。

2.1 数据类型与常数

常数是在命令或程序执行过程中保持不变的量,而变量则指其值可以变化的量。2.1.1数值型数据

数值型数据,即能参与算术运算的数据,由数字0~9、小数点与正负号组成,其数据类型用符号N表示。数值型数据在内存中占8个字节,能表示1~20位数据,整数在-6899999999999998至6899999999999998之间无误差;能表示的小数位数为0~19,小数位数≤15位(不含符号位)无误差。

数值型常数是整数或实数,如:23、-153和123.48,也可以用科学计数法表示数值型数据,如:用2.34e+4表示2.34×104,即23400。

2.1.2字符型数据

字符型数据是英文字母、汉字或数字等符号组成的一串字符,其数据类型用符号C 表示。一个字符型数据最多可由16777184个字符组成,半角英文字符占一个字节,一个汉字或全角字符占两个字节。

字符型常数也称为字符串,是用定界符括起来的一串字符。定界符可以是半角的单引号、双引号或方括号,必须成对使用。如:’我是学生’、”I Study VFP”和[男]都是字符型常数。定界符本身不作为字符型常数的内容,当某种定界符是字符串中的内容时,必须用另一种定界符作为标志,如:’老师说:”明天交作业”’和[“Windows”操作]。

字符串长度是指字符串中所含字符的个数(1个半角字符长度为1,1个汉字或全角字符长度为2)。如:字符串常数”说:'What'”的长度为9。

2.1.3货币型数据

货币型数据作为一种特殊的数值型数据,用来表示货币值。其数据类型用符号Y表示。货币型常数是在数值前加货币符号$,如:$12.34。

货币型常数在存储和计算时,系统自动保留4位小数,小数多于4位时四舍五入。如:$123.456789将自动存储为$123.4568。货币型数据在内存中占8个字节,取值范围为-922337203685477.5807~922337203685477.5807。

与数值型数据不同,货币型常数不能用科学计数法表示。

2.1.4 日期型数据

日期型数据可表示某一个日期。数据类型用符号D表示,占8个字节,取值范围为:0001年1月1日~9999年12月31日。

日期型常数用一对大括号“{ }”括起来,其中包含年、月、日三部分内容,各部分内容之间可以用斜杠(/)、连字号(-)、小数点(.)或空格等进行分隔。

1. 设置传统/严格日期格式

日期型常数有传统和严格两种格式。传统的默认格式是美语日期格式{ mm/dd/yy}。传统格式受命令Set Date 和Set Century的影响。不同设置状态,VFP对同一个日期型常数的解释不一样。如:对日期型常数{08/10/01},VFP可能认为是2008年10月1日或2001年8月10日。

严格日期格式为{^yyyy-mm-dd}或{^yyyy/mm/dd}。用符号“^”作为严格日期常数的开始符号,年月日的次序不能改变,年份必须为4位,它不受命令Set Date和Set Century命令的影响,在任何情况下都表示唯一确切的日期。两种日期常数格式可通过命令进行设置:

命令格式:Set Strictdate To 0|1

命令说明:设置传统日期格式(0)或严格日期格式(1)。

【例2.1 】

Set Strictdate To 0 && 设置成传统日期格式

Set Date Ansi

Set Century On

X={07.10.01} && X赋值成:2007年10月1日

? X && 输出结果为:2007.10.01

Set Strictdate To 1 && 设置成严格日期格式

Y={^2008/10/01} && Y赋值成:2008年10月1日

? Y && 输出结果为:2008.10.01

2. 设置日期分隔符

命令格式:Set Mark To <字符表达式>

命令说明:设置显示日期时的分隔符。字符表达式值中的首字符为分隔符。若省略<字符表达式>,则恢复系统默认的分隔符。

【例 2.2 】

Set Date ANSI

Set Century On

Set Mark To “–”

? {^2007/10/01} && 输出结果为:2007-10-01

Set Mark To [.]

? {^2007/10/01} && 输出结果为:2007.10.01

Set Mark To ‘w’

? {^2007/10/01} && 输出结果为:2007w10w01

Set Mark To

? {^2007/10/01} && 输出默认的分隔符,结果为:2007.10.01

3. 设置世纪值

命令格式:Set Century To <世纪值> Rollover <年份参照值>

命令说明:世纪值范围为1~99,年份值范围为0~99。此命令仅对两位年份的日期有影响。执行此命令后,设某日期数据为MM/DD/YY,当YY≥年份参照值时,系统将该日期数据视为:MM/DD/世纪值*100+YY;当YY<年份参照值时,系统将该日期数据视为:MM/DD/(世纪值+1)*100+YY。

【例 2.3 】

Set Date ANSI

Set Century On

Set Century To 19 Rollover 10

Set Mark To "."

? Ctod(“49.10.01”) && 由于年份值49>年份参照值10,输出:1949.10.01

? Ctod(“09.10.01”) && 由于年份值09<年份参照值10,输出:2009.10.01

2.1.5 日期时间型数据

日期时间型数据表示日期和时间,其数据类型用符号T表示。日期时间型数据占8个字节。

日期时间型常数由日期和时间两部分组成,日期部分取值范围为0001年1月1日至9999年12月31日,时间部分为00:00:00 Am至11:59:59 Pm。

日期部分也有传统和严格两种格式。系统默认采用严格的日期时间格式:{^yyyy-mm-dd[,]hh:mm:ss [a|p]},日期和时间之间可以用逗号或空格分隔,a(或AM)表示上午;p(或PM)表示下午,默认是AM。如:

{^2008-8-1 8:18:30 } 表示2008年8月1日上午8点18分30秒。

{^2008-8-1 8:18:30 P} 表示2008年8月1日下午8点18分30秒。

2.1.6 逻辑型数据

逻辑型数据用来表示逻辑判断的结果,比如条件成立与否,事物的真或假、是与非等。其数据类型用符号L表示,逻辑型数据占1个字节。

逻辑型常数只有真和假两种值。用.T.、.t.、.Y.或.y.表示真;用.F.、.f.、.N.或.n.表示假。作为逻辑型常数定界符的前后小数点“.”不能省略。

2.2 简单内存变量

变量分为内存变量和字段变量两类。内存变量又分为简单变量和数组变量两类。

内存变量存储在内存中,用来存放程序执行中的原始数据或中间结果。内存变量名由字母、汉字、数字或下划线组成,不能以数字开头。如X、年龄和_No都是内存变量名。而1月工资、$12.3和a+B不是正确的内存变量名。

在VFP中,允许内存变量和字段变量同名,如果内存变量与当前表中的字段(变量)出现重名,在引用内存变量时,需要加前缀“M.”或“M->”,明确指出内存变量。如果不加前缀,将引用同名字段变量的值。如:M.姓名表示引用内存变量姓名的值。

2.2.1 内存变量赋值

使内存变量有确切值的操作称为内存变量赋值。在VFP 中,使用内存变量前必须先赋值。通过赋值命令为内存变量首次赋值时,就创建(定义)了内存变量,既规定了变量名,又指定了变量的值。所赋值的数据类型决定了内存变量的数据类型。有许多为内存变量赋值的命令,典型的命令有:

命令格式1:<内存变量名>=<表达式>

命令格式2:Store <表达式> To <内存变量名表>

命令说明:两条命令的功能都是将表达式的值赋给内存变量。

格式1只能给一个内存变量赋值;格式2可以同时给多个内存变量赋相同的值。

【例 2.4 】

M =”男” && 执行后m的值为:男,其数据类型为字符型

Store 2*3 To X,Y && 执行后X和Y的值都是6,数据类型都为数值型

2.2.2 内存变量的清除

内存变量使用完毕,应该从内存中将其清除,以便释放更多的可用内存空间。清除(释放)内存变量的命令有:

命令格式1:Clear Memory

命令格式2:Release <内存变量名表>

命令说明:格式1清除全部内存变量和数组,格式2清除指定的内存变量和数组。

【例 2.5】

Store 2*4 To X, Y, Z

Release X

? Y && 内存变量仍然存在,输出8

? X && 由于X被清除,故系统提示:找不到变量X

命令格式3:Clear All

命令说明:用于关闭所有打开的文件,清楚全部内存变量和数组,也称初始化命令。

命令格式4:Release All [Like <变量名通配符> | Except <变量名通配符>]

命令说明:变量名通配符中可以包含“?”或“*”,表示一批变量。其中“?”代表其出现位置的任意一个字符(如果出现在最后,也表示没有字符),例如,“X?”表示以X开头,最多由两个字符组成的一批变量名;通配符“*”代表其出现位置的任意多个(包括没有)字符, 即字符个数是任意的,每位上的字符也是任意的。如:“X*”表示变量名以X开头的所有变量。各选项的含义为:

(1)All:清除所有内存变量和数组。

(2)All Like <变量名通配符>:清除与“变量名通配符”匹配的变量和数组。

(3)All Except <变量名通配符>:清除与“变量名通配符”不能匹配的变量和数组。

【例 2.6 】

Store 1 To X, X1, X11, X12, Y, Y1, Y2, Y11, Y12, M1, M12, N1, N12

Release All Like Y1? && 清除Y1, Y11和Y12

Release All Like X* && 清除X, X1, X11和X12

Release All Except M* && 仅保留M1和M12

Clear All && 释放全部内存变量,并关闭所有文件

2.2.3 输出表达式值

可以通过VFP命令输出表达式的值(即运算结果)。

命令格式1:? [<表达式表>]

命令格式2:?? [<表达式表>]

命令说明:先计算“表达式表”中每个表达式的值,再依次输出这些值。格式1从下一行开始位置输出计算结果,若省略“表达式表”,则输出一个空行。格式2从当前位置开始输出计算结果。

【例 2.7 】

? '总成绩', 62+20

?? "分" &&输出:总成绩82分

2.3 数值型表达式

表达式是运算符连接常数、变量和函数等运算对象所构成的运算式。运算符是对数

据进行操作的符号。单个常数、变量和函数是表达式的特例,即只有一个运算对象,没有运算符。表达式的运算结果称为表达式的值,根据表达式值的数据类型可分为数值表达式、字符表达式、日期表达式、关系表达式和逻辑表达式。在VFP中只有同类型的数据(除日期与数值运算外)才能进行运算。

2.3.1 数值运算符

VFP中的数值运算符如表2.1。

表2.1 数值运算符

在表2.1中,取负运算的优先级别最高,其次是乘方,然后是乘、除法与求余运算(同级),最后是加与减运算(同级)。

当两个同符号数求余运算(%)时,结果为第一个数除以第二个数的余数;当两个异符号数求余时,结果为第一个数除以第二个数的余数再加上第二个数。

【例 2.8 】

? 8%3, 8 %-3, -8%3, -8%-3 && 输出结果为:2 -1 1 -2

2.3.2 常用数值型函数

函数作为一种特殊的表达式,可分为系统函数和用户自定义函数。系统函数也称为标准函数,是VFP系统定义的函数,可以直接使用。自定义函数是用户编写的子程序。通常调用一个函数需要带有参数,调用结束后会有一个运算结果,称运算结果为函数返回值或函数值。返回值的类型决定了函数的数据类型。数值型函数指函数值为数值型。

1. 符号函数

函数格式:Sign(<数值表达式>)

函数说明:返回值表示数值表达式值的符号。表达式的值为正、零和负值时,函数值分别是1、0和-1。

【例 2.9 】

X=2*4

? Sign(X), Sign(X-8), Sign(-X) && 输出结果为:1 0 -1

2. 求绝对值函数

函数格式:Abs(<数值表达式>)

函数说明:返回值为数值表达式的绝对值。

【例 2.10 】

X= -2*3

? Abs( X+3 ) && 输出结果为:3

3. 求平方根函数

函数格式:Sqrt(<数值表达式>)

函数说明:返回值是数值表达式值的算术平方根,数值表达式值必须大于或等于0。

【例 2.11 】

? Sqrt(16) && 输出结果为:4.00

4. 求指数函数

函数格式:Exp(<数值表达式>)

函数说明:若数值表达式的值为x,则函数返回值是e x。

【例 2.12 】

? Exp(0),Exp(2) && 输出结果为:1.00 7.39

5. 求自然对数函数

函数格式:Log (<数值表达式>)

函数说明:函数返回值是以e为底数,表达式值的对数。数值表达式值必须大于0。

【例 2.13 】

? Log( 10 ) , Log ( Exp (2) ) && 输出结果为: 2.30 2.00

6. 求余函数

函数格式:Mod (<数值表达式1> ,<数值表达式2>)

函数说明:函数值是数值表达式1除以数值表达式2的余数。功能与“<数值表达式1>%<数值表达式2>”相同。

【例 2.14 】

? Mod(8,3) , Mod(8,-3) , Mod(-8,3) , Mod(-8,-3) && 输出结果是:2 -1 1 -2

7. 求圆周率函数

函数格式:Pi( )

函数说明:函数返回值是圆周率。其精度与Set Decimal to <小数位数>命令有关,系统默认显示到小数点后两位。

【例 2.15 】

Set Decimal to 10 && 设置小数点后显示10位

? Pi( )*10*10 && 输出结果为:314.1592653590

8. 求最大值和最小值函数

函数格式:Max(<表达式表)

Min(<表达式表)

函数说明:Max函数是求表达式表中所有表达式值的最大者。Min函数是求最小者。

各表达式的数据类型必须一致,,可以是数值型、字符型、货币型、日期型、日期时间型或逻辑型等。此类函数可以有多个参数,至少要有两个参数。

【例 2.16 】

? Max(8,-2*3,10,3), Min(8,-2*3,10,3) && 输出:10 -6

? Max(‘A’,’B’,’C’),max(.f.,.T.,.n.) && 输出: C .T.

? Max($200,$100,$300) && 输出:300.0000

9. 求整函数

函数格式1:Int(<数值表达式>)

函数格式2:Ceiling(<数值表达式>)

函数格式3:Floor(<数值表达式>)

函数说明:Int函数的值是数值表达式的整数部分,而不是四舍五入;Ceiling函数值是大于或等于数值表达式值的最小整数;Floor函数值是小于或等于数值表达式值的最大整数。

【例 2.17 】

? Int (2.8) , Int (-2.8 ) && 输出结果为:2 -2

? Ceiling (2.8) , Ceiling(-2.8) && 输出结果为:3 -2

? Floor (2.8) , Floor(-2.8) && 输出结果为:2 -3

10. 四舍五入函数

函数格式:Round (<数值表达式1>,<数值表达式2>)

函数说明:返回值为数值表达式1的值在指定位置上四舍五入后的结果。四舍五入位置由数值表达式2的值决定。若数值表达式2的值小于0,数值表达式2的绝对值表示对数值表达式1在整数位(0为个位)上进行四舍五入,即0表示在小数点后第一位上进行四舍五入,保留到个位;-1表示在个位上进行四舍五入,保留到十位;依次类推。

【例 2.18 】

? Round(2.56,1), Round(2.56,0), && 输出:2.6 3

? Round(2.56,-1),Round(7.56,-1) && 输出:0 10

11. 求ASCII码值函数

函数格式:Asc (<字符表达式>)

函数说明:返回值是字符表达式值中首字符的ASCII码值。

【例 2.19 】

? Asc(”English Abc”) && 输出结果为E的ASCII码值: 69

12. 求字符串长度函数

函数格式:Len(<字符表达式>)

函数说明:返回值是字符表达式值中所含字符的个数,空格也计算在内。每个汉字占两个字符位置。

【例 2.20 】

? Len(”学习︼VFP6.0”) && 输出结果为:11

13. 求子串起始位置函数

函数格式:At (<字符表达式1>,<字符表达式2>[,<数值表达式>])

Atc(<字符表达式1>,<字符表达式2>[,<数值表达式>]) 函数说明:设<数值表达式>值的整数部分为n,当n=1时,可以省略<数值表达式>。函数值是字符表达式1的值在<字符表达式2>值中第n出现(由左至右)的开始位置,如果出现次数小于n,则函数值为0。At函数区分字母大小写,而Atc函数不区分字母大小写,其余功能两个函数一致。

【例 2.21 】

? AT('AR','cadARA'), AT('AA','cadAARA',2), ATC('A','cadARA') && 输出: 4 0 2

14.求子串出现次数函数

函数格式:Occurs (<字符表达式1>,<字符表达式2>)

函数说明:计算字符表达式1的值在字符表达式2值中出现的次数。

【例 2.22 】

? Occurs(“ab”,”cabdabe”),Occurs(“ab”,”cadbaeb”) && 输出:2 0

15. 求年份函数

函数格式:Year(<日期表达式>)

函数说明:函数值是日期表达式值的年份值,值范围为0001~9999。

【例 2.23 】

? Year({^2007-10-01}) && 输出: 2007

16. 求月份函数

函数格式:Month (<日期表达式>)

函数说明:函数值是日期表达式值中的月份值,值范围为1~12。

【例 2.24 】

? Month ( {^2007-10-01} ) && 输出:10

17. 求星期函数

函数格式:Dow(<日期表达式>)

函数说明:函数值是日期表达式值对应的星期几。值范围为1~7,其中1代表星期日、2代表星期一、……、7代表星期六。

【例 2.25 】

? Dow({^1949/10/01}) && 输出:7,代表星期六

18. 求日数函数

函数格式:Day(<日期表达式>)

函数说明:函数值是日期表达式值的日数,值范围为1~31。

【例 2.26 】

? Day({^2007-03-15}) && 输出:15

19. 求小时函数

函数格式:Hour(<日期时间表达式>)

函数说明:函数值表示小时,采用24小时制。

【例 2.27 】

? Hour({^2007-05-01 1:22:33 p}) && 输出: 13

20. 求分钟函数

函数格式:Minute(<日期时间表达式>)

函数说明:函数值表示分钟。

【例 2.28 】

? Minute({^2007-05-01 1:22:33 p}) && 输出: 22

21. 求秒钟函数

函数格式:Sec(<日期时间表达式>)

函数说明:函数值表示秒数。

【例 2.29 】

? Sec({^2007-05-01 1:22:33 p}) && 输出结果为: 33

22. 字符转换成数值函数

函数格式:Val(<字符表达式>)

函数说明:将字符表达式值的首部可转换的子串转换成数值型数据,作为函数的返回值。如果字符串的首字符不是可转换符号,则函数返回值为0。

【例 2.30 】

? Val("-2")*3, Val("1.2E1")*3 && 输出结果为:-6.00 36.00

? Val("1.23a56")*2, Val("A123") && 输出结果为: 2.46 0.00

2.4 字符型表达式

字符表达式是字符运算符连接字符型数据的运算式,运算结果是字符型数据。2.4.1 字符运算符

VFP中有两种字符运算符:

(1)+:将两个字符型数据依次连接起来,构成一个新的字符型数据。

(2)-:先将第一个字符型数据的尾部空格移动到第二个字符型数据的尾部,再依次连接成一个新的字符型数据。

【例 2.31 】

S1='︼学︼生︼︼'

S2='︼成︼绩︼'

? S1 + S2 + '︼表︼A' && 输出:︼学︼生︼︼︼成︼绩︼︼表︼A

? S1-S2 + '︼表︼A' && 输出:︼学︼生︼成︼绩︼︼︼︼表︼A 可见运算符“-”并不移动第一个字符型数据的中间空格位置。

2.4.2 常用字符型函数

字符型函数是指函数值为字符型数据的函数。

1. 生成空格函数

函数格式:Space(数值表达式)

函数说明:数值表达式的值应大于或等于0。设其整数部分为n,利用此函数可以产生由n个空格的字符串。若n等于0,则函数产生一个空字符串,即长度为0的字符串。

【例 2.32】

? ’VFP’+Space(3)+’6.0版’ && 输出结果为: VFP︼︼︼6.0版

2. 删除空格函数

函数格式:Ltrim(<字符表达式>)

Trim(<字符表达式>)

Rtrim(<字符表达式>)

Alltrim(<字符表达式>)

函数说明:利用Ltrim、Trim 和Alltrim函数可分别去掉字符表达式值的左端空格、尾部空格和两端空格。Trim和Rtrim功能相同。

【例 2.33 】

? Ltrim('︼成︼绩︼') && 输出:成︼绩︼

? Trim ( '︼成︼绩︼' ) && 输出:︼成︼绩

? Alltrim(')成)绩)' ) && 输出:成︼绩

可见这3个函数都不能去掉字符表达式值的中间空格。

3. 取左子串函数

函数格式:Left (<字符表达式>,<长度>)

函数说明:<长度>是数值表达式。设其值的整数部分为n,从字符表达式值的左端第一个字符开始取n个字符作为函数值。

【例 2.34 】

? Left(”VFP 6.0”,3) && 输出结果为: VFP

4. 取右子串函数

函数格式:Right(<字符表达式>,<长度>)

函数说明:从字符表达式值的最右端开始向左取子串,其他同left函数。

【例 2.35】

? Right(”吉林大学”,4) && 输出结果为:大学

5. 取任意子串函数

函数格式:Substr(<字符表达式>,<起始位置>[,<长度>])

函数说明:从<字符表达式>值的<起始位置>取指定<长度>的子串作为函数值。<起始位置>和<长度>都是数值表达式,系统对<起始位置>和<长度>自动取整。

【例 2.36 】

X=”2008年北京奥林匹克运动会”

? Substr(X,7,6)+ Substr(X,19,2)+ Substr(X,23,2) && 输出结果为:北京奥运会

6. 复制字符函数

函数格式:Replicate (<字符表达式>,<数值表达式>)

函数说明:将字符表达式值复制后形成新的字符串,复制次数由数值表达式值的整数部分确定。

【例 2.37 】

? Replicate(”***”,4) && 输出结果为:************

7. 子串替换函数

函数格式:Stuff(<字符表达式1>,<开始位置>,<长度>,<字符表达式2>)

函数说明:<开始位置>,<长度>都为数值表达式,系统自动取整,设<长度>值的整数部分为n。函数的功能是用字符表达式2的值替换字符表达式1值中开始位置的n个字符。若长度值是0,则将字符表达式2的值插在开始位置字符之前;若字符表达式2的值是空字符串,则删除字符表达式1中开始位置的n个字符。

【例 2.38 】

? Stuff('ABC',2,1,'XY'), Stuff('ABCDE',3.98,0,’XY’) && 输出:AXYC ABXYCDE

? Stuff('ABCDE', 3.98 , 2, ’’) && 输出: ABE

8. 字符翻译函数

函数格式:Chrtran(<字符表达式1>,<字符表达式2>,<字符表达式3>)

函数说明:对字符表达式1值中的每个字符在字符表达式2值中确定其出现位置n,若n>0且小于或等于字符表达式3值的长度,则用字符表达式3值中的第n个字符替换字符表达式1中的当前字符;若n大于字符表达式3值的长度,则从字符表达式1值中删除当前字符;若n=0,则字符表达式1值中的当前字符不变。

【例 2.39 】

? Chrtran('ABACAD','AC','XY') && 输出结果: XBXYXD

? Chrtran('ABCDE','BC','XYZ ') && 输出结果: AXYDE

? Chrtran('ABCD','AC','X') && 输出结果: XBD

9. 字符匹配函数

函数格式:Like(<字符表达式1>,<字符表达式2>))

函数说明:若字符表达式1与字符表达式2的值相匹配,则函数值是.T.,否则函数值是.F.。字符表达式1中允许使用“*”和“?”通配符。字符表达式2中出现的“*”

和“?”是普通字符。

【例 2.40 】

? Like('*A*','GCADFR'), Like('GCADFR','*A*') && 输出结果: .T. .F.

10. 大小写字母转换函数

函数格式:Lower(<字符表达式>)

Upper(<字符表达式>)

函数说明:Lower函数将字符表达式值中的大写字母转换为小写;Upper函数将字符表达式值中的小写字母转换为大写。在转换时其他字符不变。

【例 2.41 】

? Lower(”英语2AbC”),Upper(”英语2AbC”) && 输出:英语2abc 英语2ABC

11. 系统时间函数

函数格式:Time ([<数值表达式>])

函数说明:函数返回值为字符型数据,值为系统当前时间,数值表达式可以是任意值,表示时间精确到百分秒。格式为:hh:mm:ss[.<百分秒>],采用24小时制。

【例 2.42 】

? ”现在时间是”+ Time( ) && 输出:现在时间是14:20:30

? ”现在时间是”+ Time(1) && 输出:现在时间是14:20:30.85

12. 数值转换成字符函数

函数格式:Str(<数值表达式>[,<长度>[,<小数位数>]])

函数说明:将数值表达式值转换成字符型数据。<长度>和<小数位数>是数值型表达式,系统自动取整。<长度>指转换后字符串的整数、小数和1位小数点的总长度。

【例 2.43 】

? Str(3.146,5,3) && 输出结果为:3.146

? Str(3.146,6,1) && 输出结果为:︼︼︼3.1

设: <长度>为m,<小数位数>为n,<数值表达式>值的整数位数为k。

(1)省略m和n:系统默认m是10,n是 0。若k>10,则用科学记数法表示结果;若k<10,则数据右对齐且左补空格。

【例 2.44 】

? Str(12345678999.123) && 输出结果为:︼1.234E+10

? Str(123.456) && 输出结果为:︼︼︼︼︼︼︼123 (2)m=0:则结果为空串。

【例 2.45 】

? Str(123456789.983,0,3)

(3)m=6,则结果为整数,且用科学记数法表示结果。

【例 2.46 】

? Str(12345.987,4,3) && 输出结果为:****

? Str(123456789.983,7,3) && 输出结果为: ︼1.2E+8

(4)在m,n和k不能全满足要求时:保证顺序:m→k→n。当m>k时,则保留m-k-1位小数(留1位放小数点),转换时在保留位的后1位上进行四舍五入。

【例 2.47 】

? Str(123.45678,6,3) && 输出结果为: 123.46

(5)转换后的字符串长度小于m:则数据右对齐且左补空格。

【例 2.48 】

? Str(1.234,6,2) && 输出结果为:︼︼1.23

13. 日期转换成字符函数

函数格式:Dtoc(<日期表达式>)

函数说明:将日期表达式的值转换成字符型数据。函数值的格式与Set Date和Set Century的设置有关。

【例 2.49 】

Set Date ANSI

Set Century On

? '建国日期是' +Dtoc({^1949/10/01}) && 输出:建国日期是1949.10.01

14. 数据类型函数

函数格式:Vartype(<表达式>)

Type(’<表达式>’)

函数说明:Vartype与Type函数的功能类似,函数值都是大写数据类型符号,用以指出表达式值的数据类型。

两个函数的区别:Type函数将字符常数的内容作为表达式测试,而Vartype函数直接测试表达式;若表达式值为.Null.,则Vartype函数值为X,而Type函数值可能为U 或某种数据类型符号;若测试的表达式中包含运算符和不符合运算要求的运算项(如未定义的变量和数据类型不一致等)只能用Type函数测试(函数值为U),而Vartype函数可以直接测试一个未定义的变量(函数值为U)。

【例 2.50 】

? Vartype(123.4), Vartype('123.4'), Vartype($123.4) && 输出: N C Y

? Type('123.4 '),Type(" [123.4] "), Type([$123.4]) && 输出: N C Y

? Vartype(Date()), Vartype( Time()), Vartype(Datetime()) && 输出:D C T

M =”A”

N =1

K=3

K= .Null.

? Vart(M), Vart(N), Vart(Y) , Vart (.Null.),Vart(K) && 输出: C N U X X

? Type( 'M'),Type("N"),Type([M+N]),Type([.Null.]),Type([K]) && 输出:C N U U N

2.5 日期及日期时间型表达式

日期型表达式是日期运算符连接日期或数值型数据所构成的运算式,运算结果可能是日期或数值型数据。日期时间型表达式是日期时间运算符连接日期时间或数值型数据所构成的运算式,运算结果可能是日期时间或数值型数据。

2.5.1 日期运算符

日期运算符有“+”和“-”。

1. 日期与数值运算

运算格式:<日期表达式>±<数值表达式>

运算说明:数值表达式的值表示天数,运算时对数值表达式自动取整。设数值表达式值的整数为n,则“+”表示求日期表达式值n天后的日期;“-”表示求日期表达式值n天前的日期。

【例 2.51 】

Set Century On

Set Date ANSI

? {^2008-09-10}+1,{^2008-09-10}-1 && 输出:2008.09.11 2008.09.09

? {^2008-10-01}+1.56 && 对1.56自动取为1。输出: 2008.10.02

? {^2008-10-03}-1.12 && 对1.12自动取为2。输出:2008.10.01

2. 日期与日期运算

运算格式:<日期表达式>-<日期表达式>

运算说明:运算结果表示两个日期之间相差的天数。

【例 2.52 】

? {^2007-05-04}-{^2006-05-04}, {^2005-05-04}-{^2005-05-06} && 输出:365 -2 2.5.2 日期时间运算符

日期时间运算符有“+”和“-”。

1. 日期时间与数值运算

运算格式:<日期时间表达式>±<数值表达式>

运算说明:数值表达式的值表示秒数,运算时取整数为n。则“+”表示求日期时间表达式值n秒后的日期时间;“-”表示求日期时间表达式值n秒前的日期时间。

【例 2.53 】

Set Century On

Set Date ANSI

? {^2007-05-01 22:22:33}+3 && 输出结果为:2007.05.01 10:22:36 PM

? {^2007-05-01 22:22:33}+3.12 && 输出结果为:2007.05.01 10:22:36 PM

? {^2007-05-01 22:22:33}+3.98 && 输出结果为:2007.05.01 10:22:37 PM

? {^2007-05-01 22:22:33}-1.2 && 输出结果为:2007.05.01 10:22:32 PM

? {^2007-05-01 22:22:33}-1.98 && 输出结果为:2007.05.01 10:22:31 PM

2. 日期时间与日期时间运算

运算格式:<日期时间表达式>-<日期时间表达式>

运算说明:运算结果表示两个日期时间之间相差的秒数。

【例 2.54 】

? {^2007-05-01 22:22:33}-{^2007-05-01 22:21:33} && 输出结果为:60

? {^2007-05-01 22:22:33}-{^2007-05-01 22:23:33} && 输出结果为:-60

2.5.3 常用日期型函数

日期函数的返回值是日期型数据。

1. 系统日期函数

函数格式:Date( )

函数说明:函数值为系统当前日期。

【例 2.55 】

Set Date ANSI

Set Century On

? Date( ) && 输出系统的当前日期

2. 字符转换成日期函数

函数格式:Ctod(<字符表达式>)

函数说明:将符合日期格式的字符表达式值转换成日期型数据。若字符表达式值不符合日期格式要求,则返回空日期型数据。

【例 2.56 】

Set Date ANSI

Set Century On

? Ctod('2008.10.01') + 2 && 输出结果为:2008.10.03

2.6 关系表达式

关系表达式,也称为比较表达式,采用关系运算符将同类型数据连接起来,以便进行比较。可以对字符型、数值型、日期、日期时间型或逻辑型数据进行关系运算。关系运算的结果是逻辑型数据。当关系成立时,运算结果为真(.T.);否则运算结果为假

(.F.)。关系运算符如表2.2。

表2.2 关系运算符

各种关系运算符的优先级别相同,运算符“$”只能对字符型数据进行比较。在进行关系运算时,数值型数据依据数学上的比较规则;日期及日期时间型数据比较时,较后的日期(时间)大于较前的日期(时间);逻辑型数据比较时,逻辑真(.T.)大于逻辑假(.F.)。字符型数据的比较结果取决于当前的比较规则和“排序次序”。

2.6.1 字符型数据的比较规则

字符型数据的比较规则有精确比较和非精确比较两种规则。在不同规则下,两个字符型数据的比较结果可能不同。通过VFP命令可以设置字符型数据的比较规则。

命令格式:Set Exact On | Off

命令说明:Set Exact On是精确比较规则;Set Exact Off(系统默认)是非精确比较规则。

运算符“==”不受Set Exact状态影响,它要求两个字符串(包含空格)必须完全一致,运算结果才是真(.T.)。

1.精确比较规则

精确比较是对两个字符型数据去掉尾部空格后的字符串自左向右按对应字符进行比较。如果比较到某位字符不相等,则包含小字符的字符串较小;如果比较到较短字符串的末尾还没比较出大小关系,则短字符串较小;如果两个字符串完全相同(对应字符和长度均相同),则运算结果为相等(=)。

【例 2.57 】

Set Exact On

? 'BAG'='BAG︼', 'CAME'<'COM', 'BEE'<='BE' && 输出为:.T. .T. .F.

2.非精确比较规则

非精确比较是对两个字符型数据(含空格)自左向右按对应字符进行比较。如果比较到某位字符不相等,则包含小字符的数据较小;如果运算符右侧整个数据是左侧数据的首部子串,或两个数据完全相同,则运算结果为相等(=);如果运算符左侧整个数据是右侧数据的首部子串,则左侧数据较小。

【例 2.58 】

Set Exact Off

? 'BAG'<'BAY', 'BEE'='BE', 'BAG'<'BAG︼', '李'<'李明' && 输出为:.T. .T. .T. .T.

无论执行字符型数据的哪个比较规则和“排序次序”,字符的排序规律为:数字小于英文字母,英文字母小于汉字。

2.6.2 字符数据的“排序次序”

VFP的“排序次序”对字符串比较结果有影响。系统提供了Machine(机内码)、Pinyin (拼音)和Stroke(笔划)3种“排序次序”,系统默认“排序次序”是Machine。设置字符“排序次序”的方法有:

方法一:“工具”菜单→“选项”→“数据”选项卡→从“排序序列”下拉列表框中选择排序次序→“设置为默认值”→“确定”。

方法二:在命令窗口或程序中使用VFP命令方式。

命令格式:Set Collate To “<排序次序名>”

命令说明:排序次序名为Machine、Pinyin或Stroke之一,必须用单引号、双引号或方括号将排序次序名括起来。

1. Machine(机内码)

按机内码顺序:'︼' < '0' < '1' …< '9' < 'A' <'B' …<' Y' < 'Z' < 'a' < 'b' …<'y'< 'z' < '<汉字>',汉字按拼音顺序由小到大排列。

【例 2.59 】

Set Collate To 'Machine'

? '︼'<'2', '8'<'A’, ’a'<'A', ’Z’<’a’ && 输出:.T. .T. .F. .T.

? 'zz'<'阿', '阿'<'子' && 输出: .T. .T.

2. Pinyin(拼音)

按拼音排序:'︼' < '0' < '1' …< '9' < 'a' <'A'< 'b' <'B' …<'y'< 'Y'<'z' < 'Z' < '<汉字>',汉字按拼音顺序由小到大排列。

【例 2.60 】

Set Collate To 'PinYin'

? '︼'<'2', '8'<'A’, ’a'<'A',‘Z’<’a’ && 输出:.T. .T. .T. .F.

? 'zz'<'阿','阿'<'子' && 输出:.T. .T.

3. Stroke(笔划)

排序次序:'︼' < '0' < '1' …< '9' < 'a' <'A'< 'b' <'B' …<'y'< 'Y'<'z' < 'Z' < '<汉字>'。汉字依据书写笔划的多少排序,笔划少的汉字小。

【例 2.61 】

Set Collate To 'Stroke'

? '︼'<'2', '8'<'A’, ’a'<'A', 'Z’<’a’ && 输出:.T. .T. .T. .F.

? 'zz'<'阿', '阿'<'子' && 输出:.T. .F.

2.6.3 子串包含运算

运算格式:<字符表达式1> $ <字符表达式2>

运算说明:若字符表达式1的值是字符表达式2值的子串,即字符表达式2的值完整地包含字符表达式1的值,则运算结果为真(.T.);否则,运算结果为假(.F.)。

【例 2.62 】

X="VFP6.0中文版"

? 'VFP中文版'$X , 'VFP6.0'$X && 输出结果为:.F. .T.

事实上,子串包含运算与表达式:AT(<字符表达式1>,<字符表达式2>)>0的作用完全相同。

2.7 逻辑表达式

逻辑表达式是逻辑运算符连接逻辑型数据构成的运算式,运算结果仍然是逻辑型数据真(.T.)或假(.F.)。

2.7.1 逻辑运算符

逻辑运算有“非”、“与”以及“或”3种运算符,功能说明及优先级别如表2.3。书写时Not、And或Or前后应加一个半角圆点(.)或空格。

表2.3 逻辑运算符

1. 非运算

运算格式:.Not. <逻辑值表达式>

运算说明:对逻辑值表达式值取反。即:若逻辑值表达式的值为真(.T.),则非运算结果为假(.F.);若逻辑值表达式值为假(.F.),则运算结果为真(.T.)。

【例 2.63 】

? .NOT. 2>3 , !“a”<”ab” && 输出结果为: .T. .F.

2. 与运算

运算格式:<逻辑值表达式1> .And. <逻辑值表达式2>

运算说明:仅当逻辑值表达式1和逻辑值表达式2的值都为真(.T.)时,运算结果

才为真(.T.);否则,运算结果为假(.F.)。

【例 2.64 】

A=1

B=2

? A=1 And B<3, A>0 And B>5, A>2 .And. B<3, A>2 .And. B>3 && 输出:.T. .F. .F. .F.

3. 或运算

运算格式:<逻辑值表达式1>.Or.< 逻辑值表达式2>

运算说明:仅当逻辑值表达式1和逻辑值表达式2的值都为假(.F.)时,运算结果才为假(.F.);否则,运算结果为真(.T.)。

【例 2.65 】

Name=’张大伟’

? ‘张’$ Name.Or.‘伟’$ Name && 输出结果为:.T.

2.7.2 常用逻辑型函数

逻辑型函数是指返回逻辑值的函数。

1. 字母函数

函数格式:Isalpha(<字符表达式>)

函数说明:若字符表达式值的首字符是英文字母,则函数值为真(.T.);否则,函数值为假(.F.)。

【例 2.66 】

? Isalpha(”A12b34cd”),Isalpha(”1a”),Isalpha(”*1a”) && 输出为:.T. .F. .F.

2. 数字函数

函数格式:Isdigit(<字符表达式>)

函数说明:若字符表达式值的首字符是数字,则函数值为真(.T.);否则,函数值为假(.F.)。

【例 2.67 】

? Isdigit ("1a"), Isdigit("A12") && 输出结果为:.T. .F.

3. 小写字母函数

函数格式:Islower(<字符表达式>)

函数说明:若字符表达式值的首字符是小写英文字母,则函数值为真(.T.);否则,函数值为假(.F.)。

【例 2.68 】

? Islower (”aBc”), Islower (”Abc”) && 输出结果为:.T. .F.

4. 大写字母函数

函数格式:Isupper(<字符表达式>)

C语言试题:数据类型、运算符与表达式

3 数据类型、运算符与表达式 一、单项选择题 1、以下选项中,不正确的 C 语言浮点型常量是( C )。 A. 160. B. 0.12 C. 2e4.2 D. 0.0 分析:e 后面的指数必须为整数。 2、以下选项中,( D )是不正确的 C 语言字符型常量。 A. 'a' B. '\x41' C. '\101' D. "a" 分析:在C 语言中,’a ’表示字符常量,”a ”表示字符串。 3、 在 C 语言中,字符型数据在计算机内存中,以字符的(C )形式存储。 A.原码 B.反码 C. ASCII 码 D. BCD 码 分析:将一个字符常量放入一个字符变量中,实际上并不是将字符本身放到内存单元中,而是将字符的对应的ASCII 码放到储存单元中。 4、若x 、i 、j 和k 都是int 型变量,则计算下面表达式后,x 的值是( C )。 x=(i=4,j=16,k=32) A. 4 B. 16 C.32 D.52 分析:(i=4,j=16,k=32)的值为最后一个表达式的值,即为32,所以x=32. 5、算术运算符、赋值运算符和关系运算符的运算优先级按从高到低依次为(B )。 A. 算术运算、赋值运算、关系运算 B. 算术运算、关系运算、赋值运算 C. 关系运算、赋值运算、算术运算 D. 关系运算、算术运算、赋值运算 分析:算术运算符包括加法运算“+”符减法运算“-”符乘法运算符“*”以及除法运算符“/”,赋值运算符包括“=、+=、-=、*=、/=、……”,关系运算符包括“<、<=、>、>=”。 6、若有代数式bc ae 3 ,则不正确的C 语言表达式是( C )。 A.a/b/c*e*3 B. 3*a*e/b/c C.3*a*e/b*c D. a*e/c/b*3 分析:C 选项表达的是3ace/b 。 7、表达式!x||a==b 等效于( D )。 A. !((x||a)==b) B. !(x||y)==b C. !(x||(a==b)) D. (!x)||(a==b) 分析:由符优先级先后顺序在!x||a==b 中应先算“||”再算“!”,最后算“==”。选项B 不影响运算顺序。 8、设整型变量 m,n,a,b,c,d 均为1,执行 (m=a>b)&&(n=c>d)后, m,n 的值是( A )。 A. 0,0 B. 0,1 C. 1,0 D. 1,1 分析:先算括号里面的,a 不大于b ,则m=0,c 不大于d ,则n=0. 9、 设有语句 int a=3;,则执行了语句 a+=a-=a*=a;后,变量 a 的值是( B )。 A. 3 B. 0 C. 9 D. -12 分析:从后往前算,a*=a 即a=a*a ,a=9;然后a-=a=9,a=a-9,=0;a+=0,a=a+a=0. 10、在以下一组运算符中,优先级最低的运算符是( D )。

运算符与表达式练习题附答案

1. 以下运算符中优先级最高的是()。 A.&&B.+ C.!= D.?: 2.能正确表示逻辑关系:“a≥10或a≤0”的C语言表达式是()。 A.a>=10 or a<=0 B.a>=10| a<=0 C.a>=10 && a<=0 D.a>=10||a<=0 3. C语言中运算对象必需是整型的运算符是()。(A)+ (B)/ (C)% (D)* 4. 已知int i;float f;正确的表达式是()。 A)(int f)%i B) int(f)%i C) int(f % i) D) (int)f % i 5. 下列程序的输出结果是()。 void main( ) { int a=7,b=5; printf("%d\n",b=b%a); } (A)0 (B)1 (C)5 (D)不确定值6. 若有定义:int a=8,b=5,c;,执行语句c=a/b+0.4;

后,c的值为()。 (A)1.4 (B)1 (C)2.0 (D)2 7. 已知x=4.5,y=2.5,求表达式(x+y)/2+(int)y%(int)x的值()。 A) 3 B) 5 C) 3.5 D) 5.5 8. 已知各变量的类型如下 int i=8,k,a,b; unsigned long w=5; double x=1.42,y=5.2; 则以下符合C语言语法的表达式是()。 (A)a+=a-=(b=4)*(a=3)(B)a=a*3+2 (C)x%(-3)(D)y=float(i) 9. 已知int a,b;执行语句a=(b=3*2,b*4),a+6;后变量a的值为()。 A) 6 B) 12 C) 24 D)30 10. 若有以下程序 main() { int k=2,i=2,m; m=(k+=i*=k);

(完整word版)C语言运算符与表达式的练习题答案

C语言运算符与表达式的练习题 单项选择题 (1)以下选项中,正确的 C 语言整型常量是(D)。 A. 32L B. 510000 C. -1.00 D. 567 (2)以下选项中,(D)是不正确的 C 语言字符型常量。 A. 'a' B. '\x41' C. '\101' D. "a" (3)字符串的结束标志是(C)。 A. 0 B. '0' C. '\0' D. "0" (4)算术运算符、赋值运算符和关系运算符的运算优先级按从高到低依次为(B)。 A. 算术运算、赋值运算、关系运算 B. 算术运算、关系运算、赋值运算 C. 关系运算、赋值运算、算术运算 D. 关系运算、算术运算、赋值运算 (5)逻辑运算符中,运算优先级按从高到低依次为(D)。 A. && ! || B. || && ! C. && || ! D. ! && || (6)表达式!x||a==b 等效于(D)。 A. !((x||a)==b) B. !(x||y)==b C. !(x||(a==b)) D. (!x)||(a==b) (7)设整型变量 m,n,a,b,c,d 均为1,执行 (m=a>b)&&(n=c>d)后, m,n 的值是(A)。 A. 0,0 B. 0,1 C. 1,0 D. 1,1 *(8)设有语句 int a=3;,则执行了语句 a+=a-=a*=a; 后,变量 a 的值是(B)。 A. 3 B. 0 C. 9 D. -12 (9)在以下一组运算符中,优先级最低的运算符是(D)。 A. * B. != C. + D. = (10)设整型变量 i 值为2,表达式(++i)+(++i)+(++i)的结果是(B,上机13)。 A. 6 B. 12 C. 15 D. 表达式出错 (11)若已定义 x 和 y为double 类型,则表达式的值是(D)。

C语言运算符与表达式的练习题

C语言运算符与表达式的练习题 (作业写到纸质作业本上,在规定时间内交给助教批阅,不要 再网上提交) 一、单项选择题 (1) 以下选项中,正确的C 语言整型常量是。 A. 32L B. 510000 C. -1.00 D. 567 (2) 以下选项中,是不正确的C 语言字符型常量。 A. 'a' B. '\x41' C. '\101' D. "a" (3) 在C 语言中,字符型数据在计算机内存中,以字符 的形式存储。 A. 原码 B. 反码 C. ASCII 码 D. BCD码 (4) 字符串的结束标志是。 A. 0 B. '0' C. '\0' D. "0" (5) 算术运算符、赋值运算符和关系运算符的运算优先级按 从高到低依次为。 A. 算术运算、赋值运算、关系运算 B. 算术运算、关系运 算、赋值运算

C. 关系运算、赋值运算、算术运算 D. 关系运算、算术运算、赋值运算 (6) 逻辑运算符中,运算优先级按从高到低依次为。 A. &&,!,|| B. ||,&&,! C. &&,||,! D. !,&&,|| (7) 表达式!x||a==b 等效于。 A. !((x||a)==b) B. !(x||y)==b C. !(x||(a==b)) D. (!x)||(a==b) (8) 设整型变量m,n,a,b,c,d 均为1,执行(m=a>b)&&(n=c>d)后, m,n 的值是。 A. 0,0 B. 0,1 C. 1,0 D. 1,1 (9) int b=0,x=1;执行语句if(x++) b=x+1; 后,x,b 的值依次为。 A. 2,3 B. 2,0 C. 3,0 D. 3,2 (10) 设有语句int a=3;,则执行了语句a+=a-=a*=a; 后,变量 a 的值是。 A. 3 B. 0 C. 9 D. -12 (11) 在以下一组运算符中,优先级最低的运算符是。 A. * B. != C. + D. =

实验二 运算符和表达式

实验二运算符和表达式 实验时间:2010年10月8日 【实验目的】 1、掌握C语言各种基本数据类型的定义和表示方法; 2、掌握变量的定义、赋值方法; 3、掌握基本运算符的功能及其应用; 4、掌握基本运算符的优先级和结合性; 5、掌握表达式的概念及运算规则; 6、掌握常用数据类型的转换规则。 【实验内容】 1、常用基本数据类型的存储长度,求字节运算符的使用; 2、运算符及其表达式的应用; 3、数据类型的自动转换与强制转换。 【实验步骤】 一、在E或F盘上建立以自己的学号命名的文件夹。 二、内容与步骤 1、求字节运算符的使用 利用sizeof()函数,了解C语言各种数据类型所占用的存储空间大小,将编写的源程 2、写出下列程序运行的结果 ⑴、/*ex2_2.c*/ #include #define PRICE 12.5 main() { int num=3; float total; char ch1,ch2=…D?; total=num*PRICE; ch1=ch2-…A?+…a?; printf(“total=%f,ch1=%c\n”,total,ch1); } ⑵、/*ex2_3.c*/ # include main()

{ int i, j, k; int m, n, p; i = 8; j = 10; k = 12; /* 自增在操作数之前*/ m = ++i; printf("i = %d\n", i); printf("m = %d\n", m); /* 自减在操作数之后*/ n = j--; printf("j = %d\n", j); printf("n = %d\n", n); /* 自增、自减的混合运算*/ p = (++m)*(n++)+(--k); printf("k = %d\n", k); printf("p = %d\n", p); } 3、运算符的优先级别和结合性:请写出下列程序运行的结果,并进行分析。/*ex2_4.c*/ #include Main() { int x,y,z; x=y=z=-1; ++x&&++y||++z; printf(“x=%d\ty=%d\tz=%d\n”,x,y,z); /*”\t”为按横向跳格格式输出*/ x=y=z=-1; ++x||++y&&++z; printf(“x=%d\ty=%d\tz=%d\n”,x,y,z); x=y=z=-1; ++x&&++y&&++z; printf(“x=%d\ty=%d\tz=%d\n”,x,y,z); } 4、位运算符的使用 位运算符C语言提供了六种位运算符:

运算符和表达式教案

QBASIC语言程序设计之 运算符和表达式 科目:计算机 授课人:赵华 时间:2007年10月

《运算符和表达式》教案 教学目标: 1、识记运算符的分类及表达式的定义。 2、掌握算术运算符的运算规则。 3、掌握QBASIC表达式的书写规则。 4、掌握算术表达式的求值方法。 教学重点: 1、掌握算术运算符的运算规则。 2、掌握算术表达式的求值方法。 教学难点: 1、掌握算术运算符的运算规则。 2、掌握算术表达式的求值方法。 课前巩固: 1、函数SQR(X)的功能是什么?(举例介绍) 2、函数INT(X)的功能是什么?(举例介绍) 教学内容: 一、运算符的分类 运算符表示对数据进行的具体运算。在QBASIC中分为四类:算术运算符、字符串运算符、关系运算符、逻辑运算符本节我们重点学习算术运算符和算术表达式的有关内容。 二、算术运算符 1、种类: 2、运算规则: ①^ 是乘方运算符: 例如:6^2就表示数学上的62,其值等于36。 2^-2就表示数学上的2-2,其值等于0.25。

② \ 是整除运算符: 运算功能是:如果参与运算的两个数是整数,运算结果为商的整数部分;如果参与运算的量含有小数,则系统先将它们按四舍五入转换为整数,然后再进行运算。 例1: 7 \ 2 = 3 10 \ 4 = 2 例2: 8.7 \ 5 = 1 12.37 \ 4.78 = 2 ③ MOD 是求余运算符: 运算功能是:如果参与运算的两个数是整数,运算结果为两数相除后的余数;如果参与运算的量含有小数,则系统先将它们按四舍五入转换为整数,然后相除取它们的余数。 例1: 12 MOD 5 = 2 23 MOD 4 = 3 例2: 11.7 MOD 8 = 4 13.23 MOD 4.76 = 3 三、算术表达式 1、什么叫表达式? 是指用圆括号和运算符将常量、变量和函数连接起来的式子。 2 、表达式分为哪几类? 根据运算性质不同可分为四类: 算术表达式 、 字符表达式 、 关系表达式 、 逻辑表达式 3、什么是算术表达式? 就是用圆括号和算术运算符将数值常量、变量和函数连接起来的式子。 4、怎样把代数式写成QBASIC 的算术表达式 例1: 2X + Y +6 写成QBASIC 表达式为: 2*X +Y + 6 例2:A AC 24B +B -2-写成QBASIC 表达式为: (-B+SQR (B^2-4*A*C ))/(2*A) 例3: B A y x +写成QBASIC 表达式为: (ABS (X )* ABS (Y ))/(A+ B )

C++运算符和表达式

2.4C++的运算符和表达式 运算符是施加在数据上的重要操作,变量、常量通过操作符组合成C++的表达式,构成了C++程序的基本要素。本节将介绍C++语言中基本运算符和表达式。 2.4.1C++中的基本运算符 运算是对数据的加工过程,而标识不同运算的符号称职运算符,参与运算的数据称为操作数。表2.3列出了C++中的基本运算符、其优先级及对操作数的结合性。 注:优先级相同的运算符,其执行顺序由该运算符在语句中的位置先后决定。 根据参与运算的操作数的类型不同,运算符可以分为单目运算符(1个操作数)、双目运算符(2个操作数)、三目运算符(3个操作数)。有一些运算符既可以是单目的,也可以是双目的,根据赋予该运算符的操作数的不同,运算符具有不同的功能。 例如:*pFile; var1*var2;

运算符的优先级和数学运算中的优先级意义相同,它决定了一个操作符在表达式的运算顺序,优先级越高,运算次序越靠前。而结合性则决定一个操作符对其操作数的运算顺序。如果一个操作符对其操作数的操作运算是自左向右执行的,则称该操作符是右结合的;反之如果一个操作符对其操作数的操作运算是自右向左执行的,则称该操作符是左结合实际的。 根据操作符表示的运算的性质不同,可以将C++中的操作符分为算术运算、关系运算符、逻辑运算符、赋值运算符、条件运算符、自增自减运算符、位运算符和sizeof运算符等。下面分别进行讨论。 1、算术运算符 表2.4列出了C++中的算术运算符。 对于单目运算符-,其返回值的数据类型与操作数的数据类型相同.对于双目运算符+、-、*和/,若其两个操作数的数据类型相同,则返回值的数据类型与操作数的数据类型相同;若两操作数的数据类型不同,则返回值的数据类型与字长较长的操作数的数据类型相同。 注意:两个整数相除的结果仍然是整数。若被除数不能被除数整除,则相除的结果将被取整,其小数部分将被略去。 例如:34/7;12.5%3(非法)35%7 在某些情况下,算术运算表达式会产生某些问题,计算的结果将给出错误或没有定义的数值,这些情况称为运算异常。对不同的运算异常,将产生不同的后果。在C++中,除数为零和实数溢出被视为一个严重的错误而导致程序运行的异常终止。而整数溢出则不被认为是一个错误(尽管其运算结果有可能与预期值不同)。因此,在一些与硬件打交道的低级程序中利用整数溢出查看设备的状态位等。 2、关系运算符 表2.5列出了C++中的关系运算符,它们都是双目运算符。关系运算符的返回值只有逻辑真和逻辑假两种。当两个操作数满足关系运算符所要求的比较关系时,返回整型数1(真);否则返回整型数0(假)。 表2.5 C++中的关系运算符 var3=(var1

表达式与语句

表达式与语句 前面已经提到过表达式,相信大家对表达式也有了一个初步的认识,它是由常量、变量、运算符组合(到以后讲函数时,函数也可以是组成表达式的元素),计算以后返回一个结果值。表达式的结束标志是分号(;),C语言中所有的语句和声明都是用分号结束,在分号出现之前,语句是不完整的。例如: 1+2; Counter/3+5; Height*Width; 表达式本身什么事情都不做,只是返回结果值。在程序不对返回的结果值做任何操作的情况下,返回的结果值不起任何作用,表达式的作用有两点,一个是放在赋值语句的右边,另一个是作为函数的参数(以后再介绍)。 表达式返回的结果值是有类型的。表达式隐含的数据类型取决于组成表达式的变量和常量的类型。因此,表达式的返回值有可能是某种大小的整型,或者是某精度的浮点型,或者是某种指针类型。 这里面就有类型转化的问题了,在前面说整型运算的时候也提到过。类型转化的原则是从低级向高级自动转化(除非人为的加以控制)。计算的转换顺序基本是这样的:

字符型-->整型-->长整型-->浮点型-->单精度型-->双精度型 就是当字符型和整型在一起运算时,结果为整型,如果整型和浮点型在一起运算,所得的结果就是浮点型,如果有双精度型参与运算,那么答案就是双精度型了。 强制转换是这样的,在类型说明符的两边加上括号,就把后面的变量转换成所要的类型了。如: (int) a; (float) b; 第一个式子是把a转换成整型,如果原先有小数部分,则舍去。 第二个式子是把b转换成浮点型,如果原先是整数,则在后面补0。 每一个表达式的返回值都具有逻辑特性。如果返回值为非0,则该表达式返回值为真,否则为假。这种逻辑特性可以用在程序流程控制语句中。 有时表达式也不参加运算,如: if(a||b) ………… 5>3?a++:b++; 当a为真时,b就不参加运算了,因为不管b如何,条件总是真。 二、语句 (一)、赋值语句

作业━━第1章━━运算符与表达式

运算符与表达式 【学习要点】 1.掌握运算符的目数、优先级、结合性等概念。 2.掌握算术运算及其应用。 3.掌握自增、自减运算及其应用。 4.掌握关系、逻辑运算及其应用。 5.掌握位运算及其应用。 6.掌握赋值、复合赋值运算及其应用,掌握赋值兼容时的类型转换。 7.掌握表达式求值时类型的自动转换和强制转换。 8.掌握表达式的组成,掌握逻辑表达式的优化及其副作用。 9.掌握逗号运算符、sizeof运算符、条件运算符及其应用。 ------------------------------------------------------------------------------------------------------------------------------------------------- 【例题分析】 1.若int x,y,z;下列表达式中运算结果与x=y=24相同的是______。 A.x=(y=z=8,4*6) B.x=y=(z=8,4*6) C.x=y=z=8,4*6 D.x=(y=z=8),4*6 【答案】B 【解析】 ①C++语言的赋值运算有别于其它高级语言,逗号运算又是其它高级语言所没有的。 ②在赋值表达式中,可以有多个赋值运算符,计算顺序自右向左,运算优先级低,仅高于逗号运算符。 ③逗号既是分隔符,又是运算符,可以用一个逗号运算符或多个逗号运算符将多个表达式连接成逗号表达式,计算顺序自左向右,并将最后一个表达式的值作为整个逗号表达式的值,逗号运算优先级最低。 2.若int i=6,k=0;下列表达式中运算结果使k=7的是______。 A.k=i+++k B.k=k+i++ C.k=++i+k D.k=k+++i 【答案】C 【解析】 ①自增++、自减--运算符是C++语言特有的。 ②运算符++、--出现在变量的前面或后面,其运算结果是不同的。若++、--出现在变量前,则先将变量的值加1(或减1)后,再将变量的值参加运算;反之则先将变量的值参加运算,再将变量的值加1(或减1)。 ③自增、自减运算符的优先级高于算术运算符,因此对于k=i+++k:解释为i++,再加k;对于k=k+++i:解释为k++,再加i。 3.表达式‘A’+’B’+20的值是______。 【答案】151 【解析】不同类型的数据混合运算时,系统可以自动进行类型转换,将表示范围小的数据类型转换成另一操作数的相同类型后再参与运算,则转换为65+66+20=151。 4.若int e=8;double f=6.4,g=8.9;则f+int(e/3*int(f+g)/2)%4的值是______。 【答案】9.4 【解析】 ①不同类型的数据混合运算时,可以使用强制类型转换符,将一种数据类型强制转换成另一种数据类型后再参与

运算符和表达式

运算符和表达式 上课到这一课相隔了好长一段时间,这些日子里收到不少网友的来信支持和鼓励,要求尽快完成余下的部分。出门在外的人不得不先为吃饭而努力,似乎这也成为我的借口,以后每晚抽空打一些吧这样大家也就可以不用隔太久就能看到一些新东西。或许我的笔记并不是很正确,但我尽量的保证每课的实验都会亲自做一次,包括硬件的部分,已求不会误人子弟。 随着访问量不断的增加,网站已启用了https://www.doczj.com/doc/7212779906.html,的国际域名,在这里我感谢各位一直支持磁动力工作室的朋友,更要感激身在远方一直默默支持我的女友。 明浩2003-7-14 晚 呵,费话少说了。上两课说了常量和变量,先来补充一个用以重新定义数据类型的的语句吧。这个语句就是typedef,这是个很好用的语句,但我自己却不常用它,通常我定义变量的数据类型时都是使用标准的关键字,这样别人可以很方便的研读你的程序。如果你是个DELPHI编程爱好者或是程序员,你对变量的定义也许习惯了DELPHI的关键字,如int类型常会用关键字Integer来定义,在用C51时你还想用回这个的话,你可以这样写: typedef int integer; integer a,b; 这两句在编译时,其实是先把integer定义为int,在以后的语句中遇到integer就用int置换,integer就等于int,所以a,b也就被定义为int。typedef不能直接用来定义变量,它只是对已有的数据类型作一个名字上的置换,并不是产生一个新的数据类型。下面两句就是一个错误的例子: typedef int integer; integer = 100; 使用typedef可以有方便程序的移植和简化较长的数据类型定义。用typedef还可以定义结构类型,这一点在后面详细解说结构类型时再一并说明。typedef的语法是typedef 已有的数据类型新的数据类型名 运算符就是完成某种特定运算的符号。运算符按其表达式中与运算符的关系可分为单目运算符,双目运算符和三目运算符。单目就是指需要有一个运算对象,双目就要求有两个运算对象,三目则要三个运算对象。表达式则是由运算及运算对象所组成的具有特定含义的式子。C是一种表达式语言,表达式后面加";"号就构成了一个表达式语句。 赋值运算符 对于"="这个符号大家不会陌生的,在C中它的功能是给变量赋值,称之为赋值运算符。它的作用不用多说大家也明白,就是但数据赋给变量。如,x=10;由此可见利用赋值运

运算符和表达式练习题

第6讲:运算符和表达式 1.写出下列各逻辑表达式的值。设,a=3,b=4,c=5。 (1) a + b > c && b == c 0 (2) a || b + c && b - c 1 (3) !(a > b) && !c || 1 1 (4) !(x = a) && (y = b) && 0 0 (5) !(a + b) + c – 1 && b + c / 2 1 2.阅读程序,写出运行结果: #include int main() { int a=3,b=1, x=2, y=0; printf("%d, %d \n", (a > b) && (x > y) , a > b && x > y); printf("%d, %d \n", (y || b) && (y || a), y || b && y || a); printf("%d\n",!a || a > b); } 1,1 1,1 1 3.有以下程序 int main() { int a=1,b=2,m=0,n=0,k; k = (n = b > a) || (m = a < b); printf("%d, %d\n", k, m); } 程序运行后的输出结果是?1,0(短路) 4.以下程序的输出结果是? int main() { int a=4,b=5,c=0,d; d=!a && !b || !c; printf("%d\n", d); }1

5.以下程序的输出结果是? #include int main() { int a ,b,d=241; a=d/100%9; b=(-1) && (-1); printf("%d,%d\n", a, b); }2,1 6.为表示关系x≥y≥z,应使用C 语言表达式是?(x>=y&&y>=z) 7.已知:char c; int a, b, d; c=’w’; a=1; b=2; d=-5; 求下列表达式的值:。 (1) 'x'+1 < c 0 (2) 'Y' != c - 5 1 (3) –a – 5 * b >= d + 1 1 (4) 3 > d < -1 0 (5) d != b + 2 == 4 0 8.有以下程序,阅读后写出程序的运行结果。 int main() {0 int m=3, n=4,x; x=-m++; x=x + 8 / ++n; printf("%d\n", x); } 9.有以下程序,阅读后写出程序的运行结果。 #include int main() { int a=2,b=3,c=4; printf("%d\n", 1 / 3.0 * 3.0 == 1.0); 1 printf("%d\n", a + b > 3 * c); 0 printf("%d\n", (a <= b) == (b > c)); 0 printf("%d\n", 'A' != 'a'); 1 } 10.用条件表达式描述 (1) 取三个数a、b、c 中的最大者a>c?(a>b?a:b):(c>b?c:b) (2) 取三个数a、b、c 中的最小者a

变量运算符和表达式强化练习

一、【必做题】 1.下列哪些变量名是合法的?Ab?1, @abc , lname, _int, $25, private, ab*5, #abc(知识点:Java标识符命名规范) 2.写出以下表达式的值:(知识点:运算符、表达式) (1)int a = 2, b = 3, c; c = a / b * 8; (2)float a = 3.0F, b; b = a / 0; (3)double a = 3.0, k; Int b = 3, c = 2; k = a / c + b / c; (4)int a = 3, b = 6, c; c = (a++) + (++b) + a * 2 + b * 4; (5)int a = 10, b=3, c; c = ((a % b) == 0) ? ++a * 2:++b * 2; (6)int a = 5,b ; b = 5 << 2; (7)int a = 0, b = 12345, c = 0xffffffff, d, e, f; d = a & b; e = a | b; f = b & c; 3.写出以下程序的运行结果:(知识点:数据类型及分类、数据类型的转换)public class Test { public static void main (String args[]) { float a = 3.25F, b= -2.5F; int c , d; c = (int) (a * b); d = (byte) 386; System.out.println(“c=c” + c); System.out.println(“d=” +d); } } 4.编写一个程序,求圆的面积,圆的半径由命令行参数输入。(知识点:变量和运算符综合应用、命令行参数配置) 注:将命令行参数赋给半径r(double型)使用的语句为: double r = Double.parseDouble(args[0]); 5.华氏温度和摄氏温度互相转换,从华氏度变成摄氏度你只要减去32,乘以5再除以9就行了,将摄氏度转成华氏度,直接乘以9,除以5,再加上32即行。(知识点:变量和运算符综合应用)

算法与程序设计《运算符与表达式》教学案例

《运算符与表达式》教学案例 【教学课题】运算符与表达式 【适用年级】普通高中一年级 【所用教材】教科版《算法与程序设计》 【学生分析】本节课教学对象为高一学生,教学内容为程序设计的基础知识,教学方法类似于上节课“数据类型、常量和变量”,又有一定的数学知识作后盾,因此学习起来不会太困难。 【教材分析】运算符与表达式是第二章第二节第二课时的内容,现在把它调整为第三课时,而把本该是第四课的函数调整为第二课时,因为在书写表达式时涉及到函数。这部分内容仍为VB的基础知识,内容与数学知识仍有一定的相通。 【教学目的】1、知识和技能 (1)理解VB中表达式的概念。 (2)了解VB中各种运算符以及各种类型的表达式。 (3)记住运算符执行顺序。 2、过程和方法 引导学生积极思考和分析问题。 3、情感态度与价值观 培养学生严谨的思维习惯和团队协作精神。 【教学重点】VB表达式的书写 【教学难点】逻辑运算符的运算过程 【主要教法】讲授、演示、探究等方法 【主要学法】记忆、尝试、讨论 【教学用具】多媒体微机房 【教学过程】 一、创设情境,导入新课 1、老师出示一个式子:(-b+sqr(b^2-4*a*c))/(2*a),让学生说出这个式子由哪引些要素组成。 2、学生讨论得出:常量、变量、函数、运算符、圆括号组成。 3、教师告诉学生上面这个式子在VB中称为表达式。 二、合作讨论,学习新知 1、师生共同归纳总结“表达式”的概念:表达式是由常量、变量、函数、圆括号和运算符等按一定的规则组合成的式子。 2、你问我答学习“算术运算符和算术表达式”。 师:算术运算符中,哪些是数学课中没有学过的?现在明白了它们的含义了吗? 生:MOD和\,“MOD”是求余,“\”是带队整除。 师:在数学课中学过的算术运算符中,哪些写法和数学课上的写法不一样? 生:指数(^)和乘号(*)。 师:你能给算术表达式下个定义吗? 生:算术表达式是指由常量、变量、函数、圆括号和算术运算符等按一定的规则组合成的式子。 师:书写VB表达式必须满足下列规则:所有字符必须写在同一水平线上;乘号不能省略;只能用圆括号。根据以上规则请你把下面几个数学代数式写成VB表达式: ax2+bx+c sin(x) 64+|-5| 生:a*x^2+b*x+c sin(x*3.14/180) 64+abs(-5)

c语言关系运算符和表达式

关系运算符和表达式 在程序中经常需要比较两个量的大小关系,以决定程序下一步的工作。比较两个量的运算符称为关系运算符。在C语言中有以下关系运算符: < 小于 <= 小于或等于 > 大于 >= 大于或等于 == 等于 != 不等于 关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。在六个关系运算符中,<,<=,>,>=的优先级相同,高于==和!=,==和!=的优先级相同。 关系表达式 关系表达式的一般形式为:表达式关系运算符表达式例如:a+b>c-d,x>3/2,'a'+1

a>(b>c),a!=(c==d)等。关系表达式的值是“真”和“假”,用“1”和“0”表示。 如: 5>0的值为“真”,即为1。(a=3)>(b=5)由于3>5不成立,故其值为假,即为0。 void main(){ char c='k'; int i=1,j=2,k=3; float x=3e+5,y=0.85; printf("%d,%d\n",'a'+5=k+1); printf("%d,%d\n",1=k+1); printf("%d,%d\n",1

VBA编程系列之VBA的运算符和表达式

VBA编程系列之VBA的运算符和表达式

VBA编程系列之VBA的运算符和表达式 整理了近两天,贴出来供分享! VBA的运算符和表达式 [摘要] 本文从广义的角度将VBA的运算符进行了全面的归纳和总结,包括通常意义上的算术运算符、连接运算符、比较运算符和逻辑运算符,还包括了赋值运算符、点运算符以及Like运算符、AddressOf运算符等。同时,概述了表达式的知识。 提示学习是需要思考和实践的,只有举一反三,才能真正理解和掌握。因为VBA的一些运算符涉及到较强的逻辑关系,您在阅读本文时,可以不断思考它们之间的逻辑关系。同时,您可以在VBE编辑器的模块中测试本文中的一些语句和示例,以加深认识。 在使用VBA编程时,您一定会经常使用到VBA运算符,它是VBA程序的重要组成部分。在本文中,我将运算符分为两大类,一类是通常意义上的运算符,即:算术运算符、连接运算符、比较运算符和逻辑运算符;另一类是与语句相关的运算符,即:赋值运算符和点运算符。此外,还简略地介绍一下Like运算符和AddressOf运算符。 您通过使用运算符,对VBA各种元素进行连接,或者完成一些运算以形成了VBA表达式或语句。再进一步说,表达式是数字、字符串、常量、变量、对象成员、以及运算符的组合。 算术运算符和表达式 ■算术运算符包括+(加法运算符)、- (减法运算符)、/ (除法运算符)、\(整除运算符)、Mod(取模运算符)、^(乘幂运算符),下面逐一进行介绍。 + 加法运算符。形成数值表达式,并将数值或数值表达式相加。也可用于连接两个字符串变量,但建议用连接运算符进行连接。例如,结果=表达式1+表达式2。 - 减法运算符。形成数值表达式,将数值或数值表达式相减。也可用在数值之前,用于表示负数。例如,结果=表达式1-表达式2。 * 乘法运算符。形成数值表达式,将数值或数值表达式相乘。例如,结果=表达式1*表达式2。 / 除法运算符。形成数值表达式,将两个数值或数值表达式相除,其中除数不能为零,否则会得到一个错

C语言运算符与表达式练习(附答案)

1、写出下列各逻辑表达式的值。设,a=3,b=4,c=5。 (1)a+b>c&&b==c 0 (2)a||b+c&&b-c 1 (3)!(a>b)&&!c||1 1 (4)!(x=a)&&(y=b)&&0 0 (5)!(a+b)+c-1&&b+c/2 1 2、阅读程序,写出运行结果: #include main() { int a=3,b=1, x=2, y=0; printf("%d, %d \n",(a>b)&&(x>y) , a>b&&x>y); printf("%d, %d \n", (y||b)&&(y||a), y||b&&y||a); printf("%d\n",!a||a>b); } 1,1 1,1 1 4、有以下程序 main() { int a=1,b=2,m=0,n=0,k; k=(n=b>a)||(m=a main() { int a ,b,d=241; a=d/100%9; b=(-1)&&(-1); printf("%d,%d\n",a,b); } 7、为表示关系x≥y≥z,应使用C语言表达式是(y<=z)&&(y>=x)。 8、已知:char c; int a,b,d; c=’w’; a=1; b=2; d=-5; 求下列表达式的值:

相关主题
文本预览
相关文档 最新文档