第3章 数据类型运算符和表达式精选PPT.ppt

上传人:石*** 文档编号:70109182 上传时间:2023-01-16 格式:PPT 页数:50 大小:2.08MB
返回 下载 相关 举报
第3章 数据类型运算符和表达式精选PPT.ppt_第1页
第1页 / 共50页
第3章 数据类型运算符和表达式精选PPT.ppt_第2页
第2页 / 共50页
点击查看更多>>
资源描述

《第3章 数据类型运算符和表达式精选PPT.ppt》由会员分享,可在线阅读,更多相关《第3章 数据类型运算符和表达式精选PPT.ppt(50页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第3章 数据类型运算符和表达式第1页,本讲稿共50页 整型 基本类型 字符型 单精度型 实型(浮点型)空类型 双精度型数据类型 数组类型 结构体类型 构造类型 共用体类型 枚举类型 指针类型 我们可以把基本数据类型按照一定的规则构造成复杂的数据类型,如基本类型的数组,含有各种类型的结构和联合,也是可以构造成指向各种数据的类型的指针。还可以构造成程序设计设计中需要用到的表、树、栈等数据结构。第2页,本讲稿共50页3.2 常量与变量常量与变量3.2.1 常量和符号常量常量和符号常量 一个量有计算机运行过程中其值不能改变的称为常量,一个量有计算机运行过程中其值不能改变的称为常量,根据常量的类型有整型

2、常量、实型常量、字符常量等。根据常量的类型有整型常量、实型常量、字符常量等。例:例:3 3.1415926 c例:例:#define PI 3.1415926#define n 100使用符号常量的优点:使用符号常量的优点:(1)含义清楚含义清楚(2)修改方便修改方便第3页,本讲稿共50页3.2.2 变量变量 相对于常量来说变量在计算机运行时是可以改变的,相对于常量来说变量在计算机运行时是可以改变的,C语言语言的变量与常量一样有整型变量、实型变量、字符变量等。由于的变量与常量一样有整型变量、实型变量、字符变量等。由于变量的值在运行其间可以改变因此需为变量在内存中开辟一块变量的值在运行其间可以改

3、变因此需为变量在内存中开辟一块存储空间存放变量的值以便变量的存取。其存储空间在内存中存储空间存放变量的值以便变量的存取。其存储空间在内存中也有相应的地址,但如果用变量的地址作为存取数据的依据那也有相应的地址,但如果用变量的地址作为存取数据的依据那么存取变量时会很不方便,也不太直观。么存取变量时会很不方便,也不太直观。C语言和其它高级语言语言和其它高级语言一样是用标识符来表示变量。一样是用标识符来表示变量。C语言的标识符规定:语言的标识符规定:是以字母或下划线开头由数字、字母和下划线组成的是以字母或下划线开头由数字、字母和下划线组成的与保留字不同的符号串。与保留字不同的符号串。第4页,本讲稿共5

4、0页例:例:ma pi price student02 a3214 _s例:例:1ma t3.1 int double 标识允许的最大长度各版本不同,如标识允许的最大长度各版本不同,如Turbo C规定长度为规定长度为32个,即前个,即前32个有效。个有效。变量也有类型变量也有类型,变量的类型既决定了该变量的取值范围,变量的类型既决定了该变量的取值范围,也决定了在该变量上所能执行的运算,所以也决定了在该变量上所能执行的运算,所以C语言规定所有变语言规定所有变量必需在使用前加以说明量必需在使用前加以说明“先定义,后使用先定义,后使用”C语言中变量说明形式:语言中变量说明形式:类型名类型名 变量名

5、,变量名,变量名,变量名,变量名;变量名;例:例:int lower,upper,step;例:例:float x,y;例:例:char c,a100;第5页,本讲稿共50页使用变量与标识符应注意:使用变量与标识符应注意:1.在程序的同一作用域中,一个标识符只能说明一次。在程序的同一作用域中,一个标识符只能说明一次。2.C语言的标识符是区分大小写的语言的标识符是区分大小写的,即大小写字母为不同的符即大小写字母为不同的符号。号。3.标识符虽然不能与保留字相同但可以与标准标识相同,当标标识符虽然不能与保留字相同但可以与标准标识相同,当标准标识符重新定义后,会失去原来的含义。准标识符重新定义后,会失

6、去原来的含义。4.虽然用标识符标识变量,但标识符与变量的意义不同虽然用标识符标识变量,但标识符与变量的意义不同:(1)标识符是描述变量名的一种手段。标识符是描述变量名的一种手段。(2)一个标识符可以标识多个变量,一个变量也可以有多个变量一个标识符可以标识多个变量,一个变量也可以有多个变量标识。标识。5.C语言中的变量与数学中的变量的意义不同:语言中的变量与数学中的变量的意义不同:(1)C语言中的变量瞬时只有一个值,而数学中的变量没有一定语言中的变量瞬时只有一个值,而数学中的变量没有一定值。值。(2)C语言中的变量的值是离散的,而数学中的变量是连续语言中的变量的值是离散的,而数学中的变量是连续的

7、。在的。在C语言中可以有语言中可以有x=x+1,而数学中不能有而数学中不能有x=x+1。第6页,本讲稿共50页例:例:int i;float i;例:例:char sin;例:例:int i;float i;例:例:int Ma;float ma;第7页,本讲稿共50页3.3 整型数据整型数据 3.3.1 整型常量整型常量 虽然人们常用的是十进制数但计算机内都是二进制数的形虽然人们常用的是十进制数但计算机内都是二进制数的形式,八进制和十六进制是可以来表示二进制数的,因此在式,八进制和十六进制是可以来表示二进制数的,因此在C语语言中还可以使用八进制和十六进制。言中还可以使用八进制和十六进制。(1

8、)十进制整数十进制整数 由正负号和由正负号和0-9十个数符组成的,逢十进一,借一十个数符组成的,逢十进一,借一当十。当十。C语言的十进制整数与普通格式相同,如:语言的十进制整数与普通格式相同,如:123 -49 7(2)八进制整数八进制整数 由正负号和由正负号和0-7八个数符组成的,逢八进一,借八个数符组成的,逢八进一,借一当八。一当八。C语言的八进制整数是以语言的八进制整数是以0开头(开头(0在正负号后)的数,在正负号后)的数,如:如:0123-012。但。但080不是八进制数不是八进制数(3)十六进制整数十六进制整数 由正负号和由正负号和0-9、a-f十六个数符组成的,逢十十六个数符组成的

9、,逢十六进一,借一当十六。六进一,借一当十六。(0 x在正负号后在正负号后,表示十六进制数表示十六进制数)0 x123-0 xa都是十六进制数都是十六进制数第8页,本讲稿共50页3.3.2 整型变量整型变量1.整型数据在内存中的存放形式整型数据在内存中的存放形式 无论是十进制、八进制还是十六进制数在计算机内部都是有二无论是十进制、八进制还是十六进制数在计算机内部都是有二进制形式存放的,它的存放形式关系到数的内部转换问题,因此要进制形式存放的,它的存放形式关系到数的内部转换问题,因此要对数的内部形式有所了解。对数的内部形式有所了解。一个整数在计算机内的长度不是一定的,如一个整数在计算机内的长度不

10、是一定的,如turbo C是二个是二个字节,而字节,而VC+是四个字节,现以二个字节为例。正数的最高位表示是四个字节,现以二个字节为例。正数的最高位表示正负号,用表示正,表示负。其余正负号,用表示正,表示负。其余15位表示数,如:位表示数,如:int i=10;其内部形式为:其内部形式为:第9页,本讲稿共50页 但负数怎样在计算机中表示是需要考虑的问题,一般微型机但负数怎样在计算机中表示是需要考虑的问题,一般微型机中以所谓补码形式的存放,补码的正数形式与原码相同,而负中以所谓补码形式的存放,补码的正数形式与原码相同,而负数的补码是该数的绝对值求补,求补的方法是求反加或者是数的补码是该数的绝对值

11、求补,求补的方法是求反加或者是最后一个前面求反。最后一个前面求反。例:例:int i=-10;i的内部形式是:的内部形式是:第10页,本讲稿共50页 使用补码形式表示的优点是:不管正负数,只要结果使用补码形式表示的优点是:不管正负数,只要结果在表示范围内直接相加即可。如:(在表示范围内直接相加即可。如:(-35)+48=13 11111111 11011101 +)00000000 00110000 00000000 00001101如:(如:(-63)+37=26 11111111 11000001 +)00000000 00100101 11111111 11100110第11页,本讲稿共

12、50页2.整型变量的分类整型变量的分类 整形变量可以分为:基本型、短整型、长整型三类,而每一类整形变量可以分为:基本型、短整型、长整型三类,而每一类又可以加无符号(又可以加无符号(unsigned)修饰)修饰(一般不用有符号一般不用有符号signed).(1)基本型基本型 用用int表示表示(2)短整型短整型 用用short int 或或short表示表示(3)长整型长整型 用用long int 或或long表示表示加上无符号修饰又有:加上无符号修饰又有:(4)无符号基本型无符号基本型 用用unsigned int表示表示(5)无符号短整型无符号短整型 用用unsigned short int

13、 或或unsigned short表示表示(6)无符号长整型无符号长整型 用用unsigned long int 或或unsigned long表示表示第12页,本讲稿共50页 值得指出的是对于各类型的数据的字节数值得指出的是对于各类型的数据的字节数C语言没有统一的语言没有统一的标准,各版本有所不同,如标准,各版本有所不同,如Turbo C中的中的short和和int都是都是16位,即位,即二个字节,而二个字节,而long是是32位的。位的。下面介绍下面介绍Turbo C的类型长度和取值范围。的类型长度和取值范围。类型大小取值范围unsigned short16065535short16-32

14、76832767unsigned int16065535int16-3276832767unsigned long3204294967295long32-21474836482147483647第13页,本讲稿共50页3.整型变量的定义整型变量的定义整型变量的定义与其它变的定义形式一样。整型变量的定义与其它变的定义形式一样。例:例:int a,b,c;unsigned int d,e long p,q4.整型数据的溢出整型数据的溢出 当当C语言的整数超出其表示范围时称为溢出,如在语言的整数超出其表示范围时称为溢出,如在Turbo C中中的整型数超过其表示范围的整型数超过其表示范围-327683

15、2767时称为溢出。时称为溢出。例:例:#include main()int a=-26532,b=-13456;Printf(“%d”,a+b);其运行结果为:其运行结果为:25728第14页,本讲稿共50页 那么二个负数为什么会加出来一个正数呢?这是因为那么二个负数为什么会加出来一个正数呢?这是因为-26352和和-13456的内部表示分别为:的内部表示分别为:1001100100010000和和1100101101110000其其和为和为0110010010000000,即,即25728。因此需要程序设计者注意在运。因此需要程序设计者注意在运算过程中不要超过其表示范围。算过程中不要超过其

16、表示范围。第15页,本讲稿共50页3.3.3 整型常量的类型整型常量的类型 一个整型常量是否有类型?回答是有类型的。那么如何确定其一个整型常量是否有类型?回答是有类型的。那么如何确定其类型呢?其规则如下:类型呢?其规则如下:(1)如其值在如其值在-3276832767默认为默认为int型,如超过型,如超过int的表示范围而的表示范围而在在-21474836482147483647则默认为则默认为long型。型。(2)Turbo C中的中的short和和int型都是型都是16位的,称其类型是等价的,位的,称其类型是等价的,它们是可以相互赋值的,其常量也是等价的。它们是可以相互赋值的,其常量也是等

17、价的。(3)一个数后面加一个数后面加U或或u表示无符号常量表示无符号常量(4)一个数后面加一个数后面加L或或l表示长整型常量,如表示长整型常量,如20L在在Turbo C也是也是存入四个字节。存入四个字节。第16页,本讲稿共50页3.4 浮点型数据浮点型数据 浮点型数据又称实型数,它也是计算机中常用数据形式。浮点型数据又称实型数,它也是计算机中常用数据形式。3.4.1 浮点型常量的表示方法浮点型常量的表示方法(1)普通形式普通形式 C语言的小数普通形式与普通表示的十进制数基本相同,语言的小数普通形式与普通表示的十进制数基本相同,但它允许以小数点开始或以小数点结束的小数形式。但它允许以小数点开始

18、或以小数点结束的小数形式。例:例:345.3.1415926 0.0 1.1564(2)指数形式指数形式C语言的指数形式是由尾数语言的指数形式是由尾数e或或E和阶码组成的。和阶码组成的。例:例:2.1e05 .123E2 4096e-5因此因此C语言实型数是由整数部分(十进制串)、小数点(小语言实型数是由整数部分(十进制串)、小数点(小数部分标志)、小数部分(十进制串)、数部分标志)、小数部分(十进制串)、e或或E(阶码标志)、(阶码标志)、整数阶码(可带正负号)组成的,其中整数部分和小数部整数阶码(可带正负号)组成的,其中整数部分和小数部分是可以省略的,但不能同时省略;小数点和分是可以省略的

19、,但不能同时省略;小数点和e或或E也不能同也不能同时省略。时省略。第17页,本讲稿共50页例:例:345 e5 .-12 123.-e3 3.0e 2e1.0 都不是合法的都不是合法的C语言实语言实数。数。使用实数时应注意:使用实数时应注意:实数的输入形式可以是满足实数的任何形式,而在以指数形式实数的输入形式可以是满足实数的任何形式,而在以指数形式输出时以规范化形式输出,即小数点前面保留一位。如输出时以规范化形式输出,即小数点前面保留一位。如:31415926e-2 0.031415926e+3和和0.31415926e2均输出均输出3.1415926e+01第18页,本讲稿共50页3.4.2

20、 浮点型变量浮点型变量1.浮点型数据在内存中的存放形式浮点型数据在内存中的存放形式 一个单精度实型数在一个单精度实型数在C语言中一般存放成四个字节,其中语言中一般存放成四个字节,其中一个字节存放尾数,另三个字节存放阶码,如图:一个字节存放尾数,另三个字节存放阶码,如图:其表示的值为:(1+2-2+2-11)X 210=1024+256+0.5=1280.5内部存放的数大多数是规格化的,即尾数的第一位为1。第19页,本讲稿共50页2.浮点型变量的分类浮点型变量的分类 C语言中的型变量分为单精度和双精度型二类,即语言中的型变量分为单精度和双精度型二类,即float和和double二种形式,有的二种

21、形式,有的C语言系统还提供长双精度(语言系统还提供长双精度(long double)型。型。一个四字节的数表示的绝对值最大的数是一个四字节的数表示的绝对值最大的数是 (1-2-22)X 2127,绝对值最小的数是,绝对值最小的数是1 X 2-128,即即3.4X10-38和和3.4X1038C的实型数据长度和取值范围:的实型数据长度和取值范围:类型大小|x|的取值范围float323.4X10-383.4X1038double641.7X10-3081.7X10308long double1281.2X10-49321.2X104932第20页,本讲稿共50页Turbo C的实型数据长度和取值

22、范围:的实型数据长度和取值范围:类型大小|x|的取值范围float323.4X10-383.4X1038double641.7X10-3081.7X10308long double641.7X10-3081.7X103083.实型数据的舍入误差 由于实型数存放在内存中是以一定的长度表示的,一些十进制实数转换成二进制实数时会有一些误差,如输入0.3后,输出其值不一定是0.3。x/3*3也不一定等于x,另外二个阶码相差较大的数进行加减时需对阶,即把阶码小的转换成阶码大的值,这样有可能移出一定的位数影响其精度,造成一定的误差。第21页,本讲稿共50页3.5 字符型数据字符型数据 3.5.1 字符常量

23、字符常量 C的字符变量是用单引号括起的一个字符,如的字符变量是用单引号括起的一个字符,如C,x。C语语言的字符是以言的字符是以ASCII码存放的(见附录),在码存放的(见附录),在ASCII码表中除了码表中除了可见字符外还有许多控制字符,可见字符外还有许多控制字符,C语言也提供了控制字符的常量。语言也提供了控制字符的常量。这些特殊字符称为转义字符。它是由反斜线这些特殊字符称为转义字符。它是由反斜线和一个字符组成的,它和一个字符组成的,它表示一个字符。表示一个字符。3.4.3 浮点型常量的类型浮点型常量的类型 C语言中一般将浮点常量看作是双精度来处理的语言中一般将浮点常量看作是双精度来处理的,即

24、浮点数即浮点数2.0也也是用四个字节表示的。这样可以提高计算的精度,但增加了存储是用四个字节表示的。这样可以提高计算的精度,但增加了存储量和计算时间,如要将常量表示单精度数可在数的后面加字母量和计算时间,如要将常量表示单精度数可在数的后面加字母f或或F。第22页,本讲稿共50页常用转义字符表:字符形式功能ASCII码值n换行10t横向跳格(一个Tab)9b退格8r回车13f换页12单个符号92单个符号39”单个符号“34ddd13位八进制数代表的符号0255xhh12位十六进制数代表的符号0255第23页,本讲稿共50页使用转义字符应注意:使用转义字符应注意:若反斜线(若反斜线()之后不是转义

25、字符中所列的字符()之后不是转义字符中所列的字符(n,t等),等),则反斜线不起作用,也即把则反斜线不起作用,也即把和后面的字符看成是二个字符。和后面的字符看成是二个字符。3.5.2 字符变量字符变量 字符变量是用来存放字符型数据的,每个字符变量只能存放一个字符字符变量是用来存放字符型数据的,每个字符变量只能存放一个字符例:例:char c1,c2;c1=a;c2=A;3.5.3 字符数据在内存中的存储及使用方法字符数据在内存中的存储及使用方法 字符在内存中是以字符在内存中是以ASCII码存放的,它既可以作为字符输出也码存放的,它既可以作为字符输出也可以将其可以将其ASCII码作为整数输出码作

26、为整数输出第24页,本讲稿共50页例:例:main()char c1,c2;c1=97;c2=122;printf(“%c%c”,c1,c2);例:例:main()char c1,c2;c1=0-48;c2=9-48;printf(“%d%d”,c1,c2);在C语言中一个字符型变量的值实质上是一个八位的整型量,因此其取值范围为-123+127,有时为了不出现负号可用unsigned修饰,如unsigned char c;此时c的取值范围为0255,但其内部形式仍然的ASCII码。第25页,本讲稿共50页3.5.4 字符串常量字符串常量 C语言当需要表示多个字符时,用双引号把它们括起,如:语言

27、当需要表示多个字符时,用双引号把它们括起,如:“C is good language.”“I am a student.”C语言的字符串实际上是一个字符语言的字符串实际上是一个字符“数组数组”,它将字符一个个连续存,它将字符一个个连续存放在一起,最后存放一个放在一起,最后存放一个0作为字符串结束符。作为字符串结束符。例:例:“C is good language.”存放为:存放为:使用字符或字符串应注意:0的ASCII码值为0,而空格的ASCII码值为32。3.6 变量的赋初值变量的赋初值 在C语言中允许在定义变量时同时给变量赋初值,这其定义格式为:类型名 变量项,变量项变量项;第26页,本讲

28、稿共50页其中变量项为变量或者为变量其中变量项为变量或者为变量=常量常量例:例:int a=3;float f=3.14;char c=a;int a,b,c=5;int a=5,b=5,c=5;使用变量赋初值应注意:使用变量赋初值应注意:除静态变量和外部变量外,变量的初值是在编译阶段完成的,它相当于除静态变量和外部变量外,变量的初值是在编译阶段完成的,它相当于二部分一部分分配存储单元,另一部分在运行时存放其值。二部分一部分分配存储单元,另一部分在运行时存放其值。例:例:int a=30;相当于:相当于:int a;a=30;第27页,本讲稿共50页3.7 各类数值型数据的混合运算各类数值型数

29、据的混合运算 整型、实型(单、双精度)、字符型数据间可以混合运算。整型、实型(单、双精度)、字符型数据间可以混合运算。例如:例如:10+a+1.5-8765.1234*b 高高 doublefloat long unsigned 低低 intchar,short:为必定的转换:为必定的转换 :表示当运算对象为不同表示当运算对象为不同类型时转换的方向。类型时转换的方向。C语言处理混合类型数据运算时,将低字节转换成高字节,整型转换成实型后统一类型后进行运算,其运算结果也就是最复杂的类型。第28页,本讲稿共50页3.8 算术运算符和算术表达式算术运算符和算术表达式3.8.1 运算符的简介运算符的简介

30、1算术运算符算术运算符 */%2关系运算符关系运算符 =!=3逻辑运算符逻辑运算符 !&|4位运算符位运算符|&5赋值运算符赋值运算符 =及其扩展赋值运算符及其扩展赋值运算符6条件运算符条件运算符?:7逗号运算符逗号运算符 ,8指针运算符指针运算符 *&9求字节数运算符求字节数运算符 sizeof10强制类型转换运算符强制类型转换运算符 类型类型11分量运算符分量运算符 12下标运算符下标运算符 13其它其它 如函数调用运算符()如函数调用运算符()第29页,本讲稿共50页3.8.2 算术运算符和算术表达式算术运算符和算术表达式 1.基本的算术运算符基本的算术运算符 (1)+表示单目运算符正和

31、双目运算符加表示单目运算符正和双目运算符加 (2)-表示单目运算符负和双目运算符减表示单目运算符负和双目运算符减 (3)*表示乘运算符(在指针运算中可以表示为取内容)表示乘运算符(在指针运算中可以表示为取内容)(4)/表示除运算符表示除运算符 (5)%表示求余数运算符表示求余数运算符第30页,本讲稿共50页使用算术运算符应注意:使用算术运算符应注意:(1)不同类型运算时自动进行转换不同类型运算时自动进行转换 (2)/运算符的两个操作对象均为整型(或运算符的两个操作对象均为整型(或short、char)其结果为整)其结果为整型(或型(或short、char)即为整除。当)即为整除。当5/2需要得

32、值需要得值2.5时应写成时应写成5.0/2 (3)负数求整时应注意各版可能有所不同负数求整时应注意各版可能有所不同 (4)%运算符只能作用在整型类运算对象(运算符只能作用在整型类运算对象(char、short、int、long)第31页,本讲稿共50页 2.算术表达式和运算符的优先级与结合性算术表达式和运算符的优先级与结合性 C语言算术运算符的优先级:语言算术运算符的优先级:+,-(正、负)(正、负)*,/,%(乘、除、求余)(乘、除、求余)+,-(加、减)(加、减)C语言算术运算符的结合性:都是左结合的,所谓左结合当运行语言算术运算符的结合性:都是左结合的,所谓左结合当运行符优先级相同时,其

33、运行符是从左到右计算的。符优先级相同时,其运行符是从左到右计算的。例:例:a+b+c+d第32页,本讲稿共50页3.强制类型转换运算符强制类型转换运算符 当在运算过程中需要将一种类型转换成另一种类型时可以用强制,当在运算过程中需要将一种类型转换成另一种类型时可以用强制,其格式如下:其格式如下:(类型)表达式(类型)表达式例:例:(double)3.2 (int)(x+y)(float)(5/2)使用强制转换类型时应注意:使用强制转换类型时应注意:(1)由于强制运算符的优先级较高(仅次于括号和成员运算符),故在由于强制运算符的优先级较高(仅次于括号和成员运算符),故在一般表达式时转换类型时需用括

34、号一般表达式时转换类型时需用括号 (2)强制不是函数不能写成:类型(表达式)强制不是函数不能写成:类型(表达式)例:例:(double)(3+5*a)例:不能写成例:不能写成int(3.5)第33页,本讲稿共50页4自增、自减运算符自增、自减运算符 +,-运算符是自增和自减运算符,它的含义是将原变量的值加运算符是自增和自减运算符,它的含义是将原变量的值加1或减或减1后放回原变量中,其格式如下:后放回原变量中,其格式如下:+变量变量 先加先加1再取值再取值 变量变量+先取值再加先取值再加1变量变量 先减先减1再取值再取值 变量变量-先取值再减先取值再减1例:例:int x=5,y;y=x+;pr

35、intf(“%d”,y);第34页,本讲稿共50页例:例:int x=5,y;y=-x;printf(“%d”,y);使用自增、自减运算符应注意:使用自增、自减运算符应注意:(1)自增(自减)运算符只能作用于变量,不能作用于常量或其它表自增(自减)运算符只能作用于变量,不能作用于常量或其它表达式达式(2)+和和是右结合的是右结合的(3)各计算机版本处理各计算机版本处理+和和有所不同有所不同例:例:k=(i+)+(i+)+(i+)若若i的初值为的初值为3,在,在Tc,Msc系统中系统中k=9,i=6 例:例:k=(+i)+(+i)+(+i)若若i的初值为的初值为3,在,在Tc,Msc系统中系统中

36、k=18,i=6例:例:printf(“%d,%d”,i,i+);若若i的初值为的初值为3,在,在Tc,Msc系统中结系统中结果为果为4,3第35页,本讲稿共50页例:#defined x 5 printf(“%d”,+x);结果结果:出错出错例:例:x=5;printf(“%d”,-x+);结果结果:-5例:例:x=5;printf(“%d”,(x+)+(x+)+(x+);Turbo C结果结果:15而而 (+x)+(+x)+(+x)却为却为24 第36页,本讲稿共50页5.有关表达式使作中的问题说明有关表达式使作中的问题说明(1)C语言的没有规定子表达式的求值顺序语言的没有规定子表达式的求

37、值顺序例:例:a=f1()+f2()例:例:(x+)+(x+)+(x+)(2)C语言对于语言对于i+j表示为表示为(i+)+j,i+j在在Turbo C中出错中出错(3)C语言的函数求值各版本不同,可能是从左到右也可能是从右语言的函数求值各版本不同,可能是从左到右也可能是从右到左到左例:例:printf(“%d”,%d”,i,i+);自已编写程序时应注意尽量避免各种版本不同处理的情况,但参自已编写程序时应注意尽量避免各种版本不同处理的情况,但参加省或全国统考时应注意参考书使用的版本。加省或全国统考时应注意参考书使用的版本。第37页,本讲稿共50页3.9 赋值运算符和赋值表达式赋值运算符和赋值表

38、达式1.赋值运算符赋值运算符 符号符号=为为C语言中的赋值运算符,其意义是将赋值号语言中的赋值运算符,其意义是将赋值号后面的表达式的值存放在赋值号前面的变量中。后面的表达式的值存放在赋值号前面的变量中。例:例:a=5使用赋值号应注意:使用赋值号应注意:(1)赋值号(赋值号(=)与数学中的等号()与数学中的等号(=)意义不同)意义不同(2)赋值号(赋值号(=)是右结合的)是右结合的例:例:x=y=z=5第38页,本讲稿共50页2.类型转换类型转换当赋值运算时其类型不一致时:当赋值运算时其类型不一致时:(1)实型数赋给整型变量(含字符变量)时,先舍去实数的小数点部分,其实型数赋给整型变量(含字符变

39、量)时,先舍去实数的小数点部分,其次其值如超过其表示范围时,则舍去高位。次其值如超过其表示范围时,则舍去高位。(2)将整型数赋给实型数时,按浮点格式存储,如有效数字不够时舍去存放将整型数赋给实型数时,按浮点格式存储,如有效数字不够时舍去存放实数尾数的后面位数。实数尾数的后面位数。例:例:main()long x;float a;x=214783647;a=x;printf(“%f”,a);第39页,本讲稿共50页(3)当整型数(含字符型数)赋给整型变量,由低字节向高字节转当整型数(含字符型数)赋给整型变量,由低字节向高字节转换时高位部分补低字节的符号位;由高字节向低字节转换时舍去换时高位部分补

40、低字节的符号位;由高字节向低字节转换时舍去高位部分。高位部分。(4)当整型数赋给实型变量,由低字节向高字节转换时数值不变,虽然当整型数赋给实型变量,由低字节向高字节转换时数值不变,虽然其有效数位扩大但无实际意义;由高字节向低字节转换时,如不在低字其有效数位扩大但无实际意义;由高字节向低字节转换时,如不在低字节表示范围内则出错,否则截去高字节的尾数放入低字节中去。节表示范围内则出错,否则截去高字节的尾数放入低字节中去。(5)整型类有符号数据赋给无符号变量和无符号数据赋给有符号变整型类有符号数据赋给无符号变量和无符号数据赋给有符号变量,长度相同直接赋值,长度不同按整型数的方法转换。量,长度相同直接

41、赋值,长度不同按整型数的方法转换。第40页,本讲稿共50页赋值运算符和其它运算符还可以组成复合运算符赋值运算符和其它运算符还可以组成复合运算符,如:如:x=x+2可可以表示成以表示成x+=2;使用复合运算符的优点是产生的目标代码较短,运算使用复合运算符的优点是产生的目标代码较短,运算时间较少。时间较少。C语言还允许使用的复合运算符有:语言还允许使用的复合运算符有:+=、-=、*=、/=、%=、=、&=、=、|=例:例:a+=3 即即 a=a+3 x*=y+8 即即 x=x*(y+8)x%=3 即即 x=x%3使用复合赋值运算符可以:使用复合赋值运算符可以:简化程序,使程序精炼。简化程序,使程序

42、精炼。提高编译效率。提高编译效率。第41页,本讲稿共50页赋值表达式 由于由于C语言的赋值号是运算符,由赋值运算符组成的就是赋语言的赋值号是运算符,由赋值运算符组成的就是赋值表达式,如:值表达式,如:=。格式:格式:意义:意义:其整个表达式的值为赋值运算符后的其整个表达式的值为赋值运算符后的的值的值例:例:a=b=c=5 a+=b=a=5;a=5+(c=6)a=(b=4)+(c=6)a+=a-=a*a第42页,本讲稿共50页3.10 逗号运算符和逗号表达式逗号运算符和逗号表达式 C语言提供了一些特殊的运算符语言提供了一些特殊的运算符逗号运算符,它可以用来连接逗号运算符,它可以用来连接若干表达式

43、,如若干表达式,如x+y,5%2,y-7。格式:格式:表达式,表达式,表达式,表达式,表达式表达式意义:意义:从左到右依次求表达式的值,并把最后表达式的作为整个表达式的值。从左到右依次求表达式的值,并把最后表达式的作为整个表达式的值。使用逗号运算符应注意:使用逗号运算符应注意:逗号运算符的优先级最低和其它运算符混合运算时一般要加括号。逗号运算符的优先级最低和其它运算符混合运算时一般要加括号。例:例:a=(a,b,c,d);例:例:printf(“%d,%d”,(a,b),(c,d);例:例:a=3*5,a*4 a的值为的值为15,表达式的值为,表达式的值为60 x=(a=3,6*3)赋值表达式

44、赋值表达式 x=a=3,6*a 逗号表达式逗号表达式第43页,本讲稿共50页3.11 其它运算符其它运算符 1.关系运算符 C语言有关系运算符:语言有关系运算符:、=、=和和!=其优先级为大小类(其优先级为大小类(、=)高于等类()高于等类(=和和!=)C语言的关系运算符的值为语言的关系运算符的值为true和和false其内部用其内部用0和和1表示。表示。例:例:printf(“%d”,3x5);例:例:printf(%d”,3x&x3&!x+5|y例:例:if(0=9)printf(“c is digit%cn”,c)使用使用C语言的逻辑表达式时应注意:语言的逻辑表达式时应注意:(1)C语言

45、在处理逻辑运算时非零为语言在处理逻辑运算时非零为true,零为,零为false(2)在在C语言具体实现中一般采用的是所谓短路表达式,也就是处理语言具体实现中一般采用的是所谓短路表达式,也就是处理A|B时,时,当当A的值为的值为true时,整个表达式的值为时,整个表达式的值为true而不计算表达式而不计算表达式B的值,处的值,处理理A&B时,当时,当A的值为的值为false时,整个表达式的值为时,整个表达式的值为false而不计算表而不计算表达式达式B的值。的值。例:例:x=5;x+&!(x+3)|(x=7);x+|!(x+3)&(x=7);第45页,本讲稿共50页3.条件运算符 C语言还提供了

46、一种所谓条件表达式,它的形式是:语言还提供了一种所谓条件表达式,它的形式是:表达式表达式1?表达式?表达式2:表达式:表达式3意义:意义:当表达式当表达式1的值为的值为true(非(非0)时,结果为表达式)时,结果为表达式2的值,否则为表达的值,否则为表达式式3的值。的值。例:例:(ab)?a:b a0?a:-a运算符?:是右结合的。运算符?:是右结合的。第46页,本讲稿共50页4.位运算符 C语言中的位逻辑运算符有以下四个:语言中的位逻辑运算符有以下四个:&(位逻辑与)、(位逻辑与)、|(位逻辑或)、(位逻辑非)、(位逻辑或)、(位逻辑非)、(位逻辑异或)(位逻辑异或)其优先级如下:、其优先

47、级如下:、&、|其结合性如下:右结合,其余左结合的其结合性如下:右结合,其余左结合的例:例:0 x317f&0 x6152例:例:0 x317f|0 x6152例:例:0 x317f0 x6152例:例:0 x6152例:例:(-5)使用位逻辑运算符应注意:使用位逻辑运算符应注意:其运算符只能作用在整型或字符型,其结果为原类型。其运算符只能作用在整型或字符型,其结果为原类型。例:将某几位清零、某几位求反、某几位置例:将某几位清零、某几位求反、某几位置1、加密、加密第47页,本讲稿共50页5.移位运算符 C语言还提供了移位运算符,有语言还提供了移位运算符,有(右移右移)二个。二个。格式:格式:移

48、位符号移位符号 移位长度移位长度例:例:83使用移运算符应注意:使用移运算符应注意:左移时右部空位补左移时右部空位补0,右移时左部空位补最高位。,右移时左部空位补最高位。这样左移相当于乘法,右移相当于除法。这样左移相当于乘法,右移相当于除法。第48页,本讲稿共50页6.求字节数运算符 由于由于C语言的各版本有所不同,在语言的各版本有所不同,在C语言中允许使用语言中允许使用sizeof运算符求运算符求相应的字节数。相应的字节数。例:例:printf(“%d”,sizeof(int);7.其它运算符 常用于数组常用于数组()常用于函数()常用于函数和和-常用于成员常用于成员第49页,本讲稿共50页3.12 运算符总结运算符总结 1.括号类运算符优先级相对最高,其次是单目运算符接着是算术括号类运算符优先级相对最高,其次是单目运算符接着是算术运算符、移位运算符、关系运算符、位逻辑运算符、逻辑运算符、运算符、移位运算符、关系运算符、位逻辑运算符、逻辑运算符、条件运算符、赋值运算符和逗号运算符。条件运算符、赋值运算符和逗号运算符。2.只有单目运算符、条件运算符和赋值运算符是右结合的。只有单目运算符、条件运算符和赋值运算符是右结合的。3.由于由于C语言的运算符种类较多,其优先级和结合性模糊时可多加语言的运算符种类较多,其优先级和结合性模糊时可多加括号。括号。第50页,本讲稿共50页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 资格考试

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁