版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、会计学1数据类型及表达式数据类型及表达式4.1 4.1 数数 据据 结结 构构4.2 C4.2 C语言程序中数据的表示方法语言程序中数据的表示方法4.3 4.3 运算符及其表达式运算符及其表达式4.4 C4.4 C语言中的类型转换语言中的类型转换第1页/共66页4.1 4.1 数数 据据 结结 构构 数据结构是程序设计中计算机的操作对象数据结构是程序设计中计算机的操作对象以及操作对象之间关系和操作的描述。一个函以及操作对象之间关系和操作的描述。一个函数体中包括两大部分内容:其一是数据描述部数体中包括两大部分内容:其一是数据描述部分,其二是算法实现部分。要完成数据描述部分,其二是算法实现部分。要
2、完成数据描述部分的内容,就必须寻找问题中的操作对象以及分的内容,就必须寻找问题中的操作对象以及它们之间的关系,然后用计算机语言加以描述它们之间的关系,然后用计算机语言加以描述。第2页/共66页 著名的计算机科学家沃斯(著名的计算机科学家沃斯(Nikilaus Wirth)提出了公式:)提出了公式: 数据结构算法程序数据结构算法程序 该公式表明除算法之外,一个程序中的数该公式表明除算法之外,一个程序中的数据结构是编写程序首先要解决的问题。例据结构是编写程序首先要解决的问题。例4.1中中的的“链表链表”、“树树”和和“图图”就是数据结构中就是数据结构中的重要类型。当然一个好的程序除了应该具备的重要
3、类型。当然一个好的程序除了应该具备公式中两个主要因素外,还应该选择合适的程公式中两个主要因素外,还应该选择合适的程序设计语言和程序设计方法。序设计语言和程序设计方法。 C语言提供的数据结构是以数据类型形式语言提供的数据结构是以数据类型形式表示的。表示的。 第3页/共66页 C语言提供了丰富的数据类型,主要有以语言提供了丰富的数据类型,主要有以下类型:下类型:数据类型 基本类型 基本型(int,2byte) 长整型(long,4byte) 短整型(short,2byte) 无符号整型(unsigned,2byte) 整型 浮点型 单精度浮点型 (float,4byte)双精度浮点型 (doubl
4、e,8byte) 字符型(char,1byte) 无值型(void) 指针类型 数组类型 结构体类型 联合体类型 枚举类型 构造类型 注:其中()括起来的是对应类型的类型关键字及该类型在内存中所占的字节数。注:其中()括起来的是对应类型的类型关键字及该类型在内存中所占的字节数。第4页/共66页4.2 C4.2 C语言程序中数据的表示方法语言程序中数据的表示方法 数据是组成程序的必要元素,根据数据在数据是组成程序的必要元素,根据数据在程序中值的变化与否,数据在程序中值的变化与否,数据在C语言程序中以常语言程序中以常量和变量两种形式表示。量和变量两种形式表示。第5页/共66页常量常量1整型常量整型
5、常量 数据类型为整型的常量即为整型常量,又称整数据类型为整型的常量即为整型常量,又称整常数。在语言中,使用的整型常量有八进制、常数。在语言中,使用的整型常量有八进制、十六进制和十进制十六进制和十进制3种。其中八进制、十六进制主种。其中八进制、十六进制主要用于表示整型常量在内存中的存储形式,也就要用于表示整型常量在内存中的存储形式,也就是表示某整型常量的机器码;十进制表示外部数是表示某整型常量的机器码;十进制表示外部数据,其值表示的是真值。据,其值表示的是真值。第6页/共66页(1)八进制整型常量)八进制整型常量 八进制整型常量必须以八进制整型常量必须以0开头,即以开头,即以0作作为八进制数的前
6、缀。其数码取值为为八进制数的前缀。其数码取值为07。由。由于八进制数主要用于表示某整型常量的机器于八进制数主要用于表示某整型常量的机器码,所以当表示某数机器码时,八进制数前码,所以当表示某数机器码时,八进制数前面没有符号;如果有符号,则是对其所代表面没有符号;如果有符号,则是对其所代表的真值取反。如的真值取反。如 0123,0123代表的真值为代表的真值为83, 0123代表的常量则为代表的常量则为 83。第7页/共66页(2)十六进制整型常量)十六进制整型常量 十六进制整型常量的前缀为十六进制整型常量的前缀为0X或或0 x。其。其数码取值为数码取值为09,AF或或af。当十六进制。当十六进制
7、数中出现数中出现af或或AF时,数符码中出现字母时,数符码中出现字母时字母的大小写应和前缀相匹配,即要么全部时字母的大小写应和前缀相匹配,即要么全部大写,要么全部小写。十六进制数主要也是用大写,要么全部小写。十六进制数主要也是用于表示某整型常量的机器码,所以当表示某数于表示某整型常量的机器码,所以当表示某数机器码时,十六进制数前面没有符号;如果有机器码时,十六进制数前面没有符号;如果有符号,则是对其所代表的真值取反。如符号,则是对其所代表的真值取反。如 0 x23,0 x23代表的真值为代表的真值为35, 0 x23代表的常量代表的常量则为则为 35。第8页/共66页(3)十进制整型常量)十进
8、制整型常量十进制整型常量没有前缀。十进制整型常量没有前缀。整型常量的几点说明如下。整型常量的几点说明如下。 常量的类型常量的类型 常量的类型可以根据整型常量描述的数值常量的类型可以根据整型常量描述的数值来确定其类型。来确定其类型。 当整型常量的值为当整型常量的值为 32768 32767时,时,可以看作基本型整型常量。可以看作基本型整型常量。 当整型常量的值为当整型常量的值为065535时,可以看时,可以看作无符号整型常量。作无符号整型常量。 当整型常量的值在大于当整型常量的值在大于32767或小于或小于 32768时,可以看作长整型常量。时,可以看作长整型常量。第9页/共66页 整型常数的后
9、缀整型常数的后缀 十进制无符号整型常量的范围为十进制无符号整型常量的范围为065535,有符号数为,有符号数为 32768 32767。八进制数表示的机器码范围为八进制数表示的机器码范围为00177777。 十六进制数表示的机器码范围为十六进制数表示的机器码范围为0X00XFFFF。 如果希望将整型常量按照长整型常量来如果希望将整型常量按照长整型常量来运算,可以使用长整型数的后缀运算,可以使用长整型数的后缀“L”或或“l”来表示。例如,来表示。例如, 十进制长整型常量十进制长整型常量 158L 358000L第10页/共66页2浮点常量浮点常量 实型也称为浮点型。实型常量也称为实实型也称为浮点
10、型。实型常量也称为实数或者浮点数。实型常量不分单、双精度,数或者浮点数。实型常量不分单、双精度,都按双精度都按双精度double型处理,其有效位数为型处理,其有效位数为1516位。位。第11页/共66页(1 1)小数形式)小数形式 小数形式由数码小数形式由数码0 0 9 9和小数点组成。当和小数点组成。当某浮点数整数部分或小数部分为某浮点数整数部分或小数部分为0 0时,时,0 0可以省可以省略,但小数点不可省略。略,但小数点不可省略。例如:例如:0.00.0,.25.25,5.7895.789,0.130.13,5.05.0,300.300., 267.8230267.8230, 123.12
11、3.等均为合法的实数。等均为合法的实数。345345(无小数点),(无小数点),a7.a7.(数码不可以是字母(数码不可以是字母)等均为非法的浮点数。)等均为非法的浮点数。第12页/共66页(2 2)指数形式)指数形式 指数形式由尾数加阶码标志指数形式由尾数加阶码标志e e或或E E以及阶码以及阶码(只能为整数,可以带符号)组成。(只能为整数,可以带符号)组成。 其一般形式为其一般形式为a Ea En n(a a为尾数,为尾数,n n为阶码)为阶码)其值为其值为 a a1010n n 例如,例如,2.12.110105 5可以表示为可以表示为2.1E52.1E5,3.73.7可以表示为可以表示
12、为3.7E3.7E 2 2 第13页/共66页3单字符常量单字符常量 单字符常量是用单引号括起来的一个字符。单单字符常量是用单引号括起来的一个字符。单字符常量可以有如下几种表示方法。字符常量可以有如下几种表示方法。(1)直接形式)直接形式 直接形式即在单引号内直接书写字符。例如直接形式即在单引号内直接书写字符。例如a、b、 、 、?(2)八进制形式)八进制形式 八进制形式格式为八进制形式格式为ddd,其中,其中“ddd”表示表示13位八进制数,其值代表的是某字符的位八进制数,其值代表的是某字符的ASCII值。值。“”是转义字符。八进制形式可以表示所有的字符。是转义字符。八进制形式可以表示所有的
13、字符。例如例如101(等于(等于A),),007(响铃控制字符),(响铃控制字符),343(表示(表示ASCII值为值为227的字符的字符)。)。 第14页/共66页(3)十六进制形式)十六进制形式 十六进制形式格式为十六进制形式格式为xhh,其中,其中“hh”表示表示12位十六进制数,其值代表的是某字符的位十六进制数,其值代表的是某字符的ASCII值,值,“”是转义字符,是转义字符,“x”是十六进制前是十六进制前缀。十六进制形式可以表示所有的字符。例如缀。十六进制形式可以表示所有的字符。例如x41(等于(等于A),),x07(响铃控制字符),(响铃控制字符),xe3(表示(表示ASCII值为
14、值为227的字符的字符)。)。(4)转义字符)转义字符 转义字符是一种特殊的字符常量。转义字符转义字符是一种特殊的字符常量。转义字符以反斜线以反斜线“”开头,后跟一个或几个字符。转义开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,字符具有特定的含义,不同于字符原有的意义,故称故称“转义转义”字符。字符。第15页/共66页表4-5常用的转义字符转 义 字 符转义字符的意义转 义 字 符转义字符的意义n回车换行r回车t横向跳到下一制表位置f走纸换页v竖向跳格反斜线符b退格单引号符双引号 第16页/共66页4字符串常量字符串常量 字符串常量是由一对双引号括起的字符字符串常量是
15、由一对双引号括起的字符序列,可以没有字符,也可以只有一个字符序列,可以没有字符,也可以只有一个字符。例如,。例如,CHINA ,How are you ! , $12.5, ,A,nc234 等都是合法等都是合法的字符串常量。的字符串常量。 字符串字符串 program在内存存储的形式如在内存存储的形式如图图4.1所示。所示。 第17页/共66页p r o g r a m 0 该字符串占用该字符串占用8个字节的存储空间,但其个字节的存储空间,但其有效字符的个数却是有效字符的个数却是7,最后一个字节存储字,最后一个字节存储字符串结束标志符串结束标志“0”。图4.1 字符串存储形式 第18页/共6
16、6页 字符串的有效字符的个数是第一个字符串的有效字符的个数是第一个“0”前字前字符的个数的总和,有效字符的个数也称为字符串符的个数的总和,有效字符的个数也称为字符串长度。长度。例如:例如:computer 长度为长度为8。 n 长度为长度为1。abcn3450china 长度为长度为5,而不是,而不是16,因为,因为“0”后的字符是无意义的,后的字符是无意义的,“n”是一个转义字符是一个转义字符,“345”是八进制表示的一个字符。是八进制表示的一个字符。 长度为长度为3,因为,因为“”、“”与与“”分别为一分别为一个字符。个字符。第19页/共66页5符号常量符号常量 在语言中,可以用一个标识符
17、来表示在语言中,可以用一个标识符来表示一个常量,称之为符号常量。符号常量在使用一个常量,称之为符号常量。符号常量在使用之前必须先定义,其一般形式为:之前必须先定义,其一般形式为: #define 标识符标识符 常量常量 其功能是把该标识符定义为其后的常量值。其功能是把该标识符定义为其后的常量值。 第20页/共66页例例44.22 #define PI 3.14159 /*定义符号常量定义符号常量PI*/main() float area,r; /*定义定义area,r为为float型变量型变量*/ r=5; /*使使r的值为的值为5*/ area=PI*r*r; /*计算以计算以r为半径的圆面
18、积为半径的圆面积*/ printf(area=%fn,area); /*输出圆面积输出圆面积*/第21页/共66页变量变量1变量的基本知识变量的基本知识 在程序的执行过程中值可以发生变化的在程序的执行过程中值可以发生变化的量称为变量。量称为变量。(1)变量的命名。)变量的命名。 变量的命名符合标识符的规定。变量名变量的命名符合标识符的规定。变量名决定了某一变量在内存中的位置,即地址。决定了某一变量在内存中的位置,即地址。如变量如变量a a的地址就是的地址就是&a&a。 第22页/共66页(2 2)一个变量占据一定字节的存储空间。)一个变量占据一定字节的存储空间。 在存储空间中存
19、放变量的值。由于变量在存储空间中存放变量的值。由于变量所表示的数据可以是除所表示的数据可以是除voidvoid以外的任意类型以外的任意类型的数据,所以变量在内存中所占的存储空间的数据,所以变量在内存中所占的存储空间根据数据类型的不同而不同。根据数据类型的不同而不同。 每一个变量有而且只能有一种类型,变每一个变量有而且只能有一种类型,变量的类型决定了该变量在内存中所占的字节量的类型决定了该变量在内存中所占的字节数。在变量进行相关运算时,变量的类型是数。在变量进行相关运算时,变量的类型是编译系统检查运算是否合法的依据。编译系统检查运算是否合法的依据。第23页/共66页(3 3)一个变量在使用前必须
20、有一个确)一个变量在使用前必须有一个确定的值。定的值。 变量定义后,由于变量占据一定的变量定义后,由于变量占据一定的内存空间,所以变量是有值的,但是该内存空间,所以变量是有值的,但是该值是不确定。如果用该不确定的值参与值是不确定。如果用该不确定的值参与运算,所得到的值也是不确定的。运算,所得到的值也是不确定的。 第24页/共66页2 2变量定义的格式变量定义的格式变量定义的一般形式为:变量定义的一般形式为: 修饰符修饰符 类型说明符类型说明符 变量表列;变量表列; 是可选项是可选项 第25页/共66页定义变量时应注意以下几点。定义变量时应注意以下几点。(1)变量定义应该位于函数体的数据描述部分
21、。)变量定义应该位于函数体的数据描述部分。(2)类型符说明变量从属的类型,有:)类型符说明变量从属的类型,有:int、float、double和和char。(3)修饰符部分可有可无,如)修饰符部分可有可无,如int有有long、short和和unsigned修饰符。修饰符。(4)“修饰符修饰符 类型符类型符”部分决定了变量的类型部分决定了变量的类型,确定了变量在内存中所占的字节数。,确定了变量在内存中所占的字节数。(5)变量表列部分是所定义变量的变量名,如果)变量表列部分是所定义变量的变量名,如果定义多个同一类型变量的话,变量名中间用定义多个同一类型变量的话,变量名中间用“,”作为分隔符构成变
22、量表列。作为分隔符构成变量表列。(6)变量定义的每一项应有空格作为分隔符。)变量定义的每一项应有空格作为分隔符。(7)变量定义的结束符是分号。)变量定义的结束符是分号。第26页/共66页3变量的初始化变量的初始化 变量在使用前应该有确定的值。在程序中常常变量在使用前应该有确定的值。在程序中常常需要对变量赋初值,以便使用变量。需要对变量赋初值,以便使用变量。 修饰符修饰符 类型说明符类型说明符 变量变量1= 1= 值值1 1,变量,变量2= 2= 值值2 2,;例如:例如: int a =5; /int a =5; /* *初始化变量初始化变量a a为为5 5* */ /float x=3.2,
23、y=1.2e10; /float x=3.2,y=1.2e10; /* *初始化初始化x x为为3.23.2,y y为为1.2x10101.2x1010* */ /char ch=K; /char ch=K; /* *初始化初始化chch为为KK* */ /int d=5; /int d=5; /* *初始化初始化d d为为5 5* */ /int b=d; /int b=d; /* *初始化初始化b b为为5 5,在,在int b=d;int b=d;定义时定义时d d应有确定的值应有确定的值* */ / 第27页/共66页4不同类型变量的说明不同类型变量的说明(1)整型变量)整型变量 整型
24、变量可分为基本型、短整型、长整型和整型变量可分为基本型、短整型、长整型和无符号型无符号型4类。类。 基本型基本型 基本型的类型说明符为基本型的类型说明符为int,在内存中占,在内存中占2个个字节,其取值的范围为字节,其取值的范围为 215215 1,即,即 3276832767。 短整型短整型 短整型的类型说明符为短整型的类型说明符为short int或或short,所,所占字节和取值范围均与基本型相同。占字节和取值范围均与基本型相同。第28页/共66页 长整型长整型 长整型的类型说明符为长整型的类型说明符为long int或或long,在,在内存中占内存中占4个字节,其取值范围是个字节,其取
25、值范围是 231231 1,即即 21474836482147483647。第29页/共66页 无符号型无符号型 无符号型的类型说明符为无符号型的类型说明符为unsigned。无符。无符号型又可与上述号型又可与上述3种类型匹配而构成。种类型匹配而构成。 无符号基本型。类型说明符为无符号基本型。类型说明符为unsigned int或或unsigned,取值范围是,取值范围是065535。 无符号短整型。类型说明符为无符号短整型。类型说明符为unsigned short,与无符号基本型一样。,与无符号基本型一样。 无符号长整型。类型说明符为无符号长整型。类型说明符为unsigned long in
26、t 或或unsigned long,取值范,取值范围为围为0232 1,即,即04294967295。第30页/共66页整型变量的说明形式为:整型变量的说明形式为: 修饰符修饰符 int 变量表列;变量表列;(2)浮点变量)浮点变量 浮点变量分为单精度浮点型和双精度浮点变量分为单精度浮点型和双精度浮点型两类。单精度浮点型类型说明符为浮点型两类。单精度浮点型类型说明符为float,双精度浮点型类型说明符为,双精度浮点型类型说明符为double。 第31页/共66页浮点变量说明的格式为:浮点变量说明的格式为:float变量表列;变量表列;或或double 变量表列;变量表列;例如:例如: floa
27、t x,y; /*定义定义x,y为单精度浮点型为单精度浮点型*/ double a,b,c; /*定义定义a,b,c为双精度浮点型为双精度浮点型*/float x=1234.56789; /*定义定义x为单精度浮点型,并初始化值为为单精度浮点型,并初始化值为1234.567*/ 第32页/共66页(3)字符型变量)字符型变量 字符型变量的取值是字符型数据。字符型字符型变量的取值是字符型数据。字符型变量的类型说明符是变量的类型说明符是char。 字符型变量类型说明的格式:字符型变量类型说明的格式: char 变量表列;变量表列;例如:例如: char c1,c2; /*定义定义c1,c2为字符型
28、为字符型*/第33页/共66页4.3 4.3 运算符及其表达式运算符及其表达式运算符概述运算符概述 运算是对数据进行加工的过程,描述各种运算是对数据进行加工的过程,描述各种不同运算的符号称为运算符。参加运算的数据不同运算的符号称为运算符。参加运算的数据称为运算对象或操作数。用运算符和括号将运称为运算对象或操作数。用运算符和括号将运算对象连接起来的符合算对象连接起来的符合C语言语法规则的式子称语言语法规则的式子称为为C语言表达式。语言表达式。 语言的运算符不仅具有不同的优先级,语言的运算符不仅具有不同的优先级,而且还有结合性的特性。表达式中各运算对象而且还有结合性的特性。表达式中各运算对象参与运
29、算的先后顺序不仅要遵守运算符优先级参与运算的先后顺序不仅要遵守运算符优先级别的规定,还要受运算符结合性的制约,以便别的规定,还要受运算符结合性的制约,以便确定运算符是和左侧的运算对象结合,还是和确定运算符是和左侧的运算对象结合,还是和右侧的运算对象结合。右侧的运算对象结合。 第34页/共66页算术运算符及算术表达式算术运算符及算术表达式1算术运算符算术运算符C语言提供了语言提供了5个基本的算术运算符:个基本的算术运算符: 加法运算符加法运算符- - 减法运算符,负号运算符减法运算符,负号运算符* 乘法运算符乘法运算符 除法运算符除法运算符% 取余运算符或称模运算符取余运算符或称模运算符 运算符
30、运算符 , 的优先级相同,的优先级相同,*,/,%的优先级相同,的优先级相同,*,/,%的优先级高于的优先级高于 和和 运算符,算术运算符都是左结运算符,算术运算符都是左结合的运算符。合的运算符。第35页/共66页2算术表达式算术表达式 用算术运算符和括号运算符将运算对象连接起来的符合用算术运算符和括号运算符将运算对象连接起来的符合C语言规则的式子,称为算术表达式。语言规则的式子,称为算术表达式。 算术表达式的计算符合运算符优先级和结合性的原则。计算表达式时的具体过程是:对表达式自左向右扫描运算对象,然后考察运算对象两侧的运算符。如果优先级不相同,则该运算对象和高优先级的运算符结合,当某运算符
31、所需的运算对象全部都和该运算符结合后进行运算,运算后的结果就是下一个被处理的运算对象,否则继续扫描下一个运算对象;如果两侧的运算符优先级相同,则按照运算符的结合性原则去结合运算。如果运算符是左结合的,则和左侧的运算符结合,如果是右结合的,则和右侧的运算符结合。算术表达式的计算符合运算符优先级和结合性的原则。计算表达式时的具体过程是:对表达式自左向右扫描运算对象,然后考察运算对象两侧的运算符。如果优先级不相同,则该运算对象和高优先级的运算符结合,当某运算符所需的运算对象全部都和该运算符结合后进行运算,运算后的结果就是下一个被处理的运算对象,否则继续扫描下一个运算对象;如果两侧的运算符优先级相同,
32、则按照运算符的结合性原则去结合运算。如果运算符是左结合的,则和左侧的运算符结合,如果是右结合的,则和右侧的运算符结合。第36页/共66页例如,表达式例如,表达式a+b*5/6 /*假定假定a=3,b=1*/ (5) (0)532 a + b * 5 / 6 146 (3) 图4.3 表达式计算过程第37页/共66页自增自减运算符及含自增自减表达式自增自减运算符及含自增自减表达式 C语言中提供了两个特殊的运算符,自增语言中提供了两个特殊的运算符,自增运算符运算符和自减运算符和自减运算符。它们都是单目运算。它们都是单目运算符,运算对象可以位于运算符前面,也可以位符,运算对象可以位于运算符前面,也可
33、以位于运算符后面。当运算符位于运算对象前面时于运算符后面。当运算符位于运算对象前面时,称为前缀运算符,如,称为前缀运算符,如 i和和i;当运算符位;当运算符位于运算对象后面时,称为后缀运算符,如于运算对象后面时,称为后缀运算符,如i和和i。 自增自减运算符的功能是将运算对象加自增自减运算符的功能是将运算对象加1或或减减1后,再将结果保存到运算对象中去,如后,再将结果保存到运算对象中去,如i等同于等同于i i 1。自增自减运算符的运算对象只能。自增自减运算符的运算对象只能是变量。是变量。第38页/共66页 当表达式中出现自增自减运算符时,表达式的求值当表达式中出现自增自减运算符时,表达式的求值过
34、程如下。过程如下。(1)自增自减运算符是后缀运算符时,应先使用自增)自增自减运算符是后缀运算符时,应先使用自增自减运算符的运算对象计算整个表达式的值,然后再计自减运算符的运算对象计算整个表达式的值,然后再计算自增自减。算自增自减。例例44.44main() int i=2,j=3; int k; k=(i+)+(j+)+4; printf(result:k=%d,i=%d,j=%dn,k,i,j);程序运行结果为:程序运行结果为:result:k=9,i=3,j=4表达式表达式k (i) (j) 4的运算可理解为:先运算表达式的运算可理解为:先运算表达式k i j 4,再计算,再计算i和和j。
35、第39页/共66页(2)自增自减运算符是前缀运算符时,应先完)自增自减运算符是前缀运算符时,应先完成自增自减,然后使用运算后的结果计算整个成自增自减,然后使用运算后的结果计算整个表达式的值。表达式的值。例4.5main() int i=2,j=3; int k; k=(+i)+(+j)+4; printf(result:k=%d,i=%d,j=%dn,k,i,j);第40页/共66页result:k=11,i=3,j=4 表达式表达式k (i) (j) 4的运算可理解的运算可理解为:先运算为:先运算i和和j,再计算表达式,再计算表达式k i j 4。程序运行结果为:程序运行结果为:第41页/共
36、66页(3)当表达式中既含有后缀自增自减运算符,又)当表达式中既含有后缀自增自减运算符,又含有前缀自增自减运算符时,应先计算所有的前含有前缀自增自减运算符时,应先计算所有的前缀自增自减运算,再计算整个表达式的值,最后缀自增自减运算,再计算整个表达式的值,最后计算所有的后缀自增自减运算。计算所有的后缀自增自减运算。例例44.66 main() int i=2,j=3; int k; k=(i+)+(j+)+4+(+i)+(+j); printf(result:k=%d,i=%d,j=%dn,k,i,j);第42页/共66页程序运行结果为:程序运行结果为:result:k=18,i=4,j=5 表
37、达式表达式k (i) (j) 4 (i) (j)的运算的运算可理解为:先运算可理解为:先运算i和和j,再计算表达式,再计算表达式k i j 4 i j,最后计算,最后计算i和和j。注意:在运算的时候变量注意:在运算的时候变量i,j是变化的,但在某是变化的,但在某瞬间值是确定的。瞬间值是确定的。第43页/共66页1简单的赋值运算符和赋值表达式简单的赋值运算符和赋值表达式 C语言的赋值运算符是语言的赋值运算符是“ ”,该运算符是双目,该运算符是双目运算符,它的优先级仅高于逗号运算符,是右结合性运算符,它的优先级仅高于逗号运算符,是右结合性的。的。 由赋值运算符构成的赋值表达式的格式为:由赋值运算符
38、构成的赋值表达式的格式为:变量变量 确定的值确定的值 赋值表达式会得到两个值。一个是赋值运算符赋值表达式会得到两个值。一个是赋值运算符左侧变量的值;另一个是赋值表达式的值,表达式的左侧变量的值;另一个是赋值表达式的值,表达式的值与变量的值是相同的。值与变量的值是相同的。赋值运算符和赋值表达式赋值运算符和赋值表达式第44页/共66页下列表达式是合乎下列表达式是合乎C语言表达式规则的表达式语言表达式规则的表达式: a=123 a=123.456c=a+Ax=a+ca+(x=a+4)/c /*算术表达式算术表达式*/(x=a)+(b=3) /*合法的算术表达式合法的算术表达式*/第45页/共66页2
39、复合的赋值运算符和复合的赋值表达复合的赋值运算符和复合的赋值表达式式 在赋值运算符在赋值运算符“ ”前加上其他的运算前加上其他的运算符,可以构成复合的赋值运算符。如在符,可以构成复合的赋值运算符。如在“ ”前加上前加上“ ”运算符就构成了运算符就构成了“”运算符运算符。 C语言提供了语言提供了10种复合的赋值运算符,种复合的赋值运算符,它们是它们是+=,- -=,*=,=,%=,=,&=,=,|= 其中前其中前5个是复合的算术赋值运算符,个是复合的算术赋值运算符,后后5个是复合的位运算赋值运算符。复合的赋个是复合的位运算赋值运算符。复合的赋值运算符是双目运算符,优先级和赋值运算值运算符
40、是双目运算符,优先级和赋值运算符相同,也是右结合性的。符相同,也是右结合性的。第46页/共66页 由复合的赋值运算符构成的赋值表达式的由复合的赋值运算符构成的赋值表达式的格式为:格式为:变量变量 确定的值确定的值 它等效于它等效于变量变量=变量变量 确定的值确定的值例如:例如:a+=5 等价于等价于a=a+5x*=y+7 等价于等价于x=x*(y+7)r%=p 等价于等价于r=r%p第47页/共66页逗号运算符和逗号表达式逗号运算符和逗号表达式 在语言中逗号在语言中逗号“,”也是一种运算符,称也是一种运算符,称为逗号运算符。为逗号运算符。 逗号运算符的优先级是最低的。逗号运算符的优先级是最低的
41、。其功能是把两个表达式连接起来组成一个表达式其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式。,称为逗号表达式。逗号表达式的一般形式为:逗号表达式的一般形式为:表达式表达式1,表达式,表达式2 逗号表达式的求值过程是顺序求解表达式逗号表达式的求值过程是顺序求解表达式1、表达式、表达式2的值,并以表达式的值,并以表达式2的值作为整个逗号的值作为整个逗号表达式的值。表达式的值。第48页/共66页例例44.77main() int a=2,b=4,c=6,x,y; y=(x=a+b),(b+c); printf(y=%d,x=%d,y,x);程序运行结果为:程序运行结果为:y=6,x=6
42、本例中的本例中的y等于等于6,而逗号表达式的值,而逗号表达式的值y (x a b),(b c)是是10。第49页/共66页表达式小结表达式小结 判断表达式类型应根据表达式中出现的运判断表达式类型应根据表达式中出现的运算符的优先级来判定。如果某一运算符在整个表算符的优先级来判定。如果某一运算符在整个表达式的运算过程中优先级是最低的,或者是最后达式的运算过程中优先级是最低的,或者是最后运算的运算符,那么表达式的类型就是该运算符运算的运算符,那么表达式的类型就是该运算符所从属的类型。例如:所从属的类型。例如: x=(a=3,b*3) 是赋值表达式;是赋值表达式;x=a=3,6*a 是逗号表达式;是逗
43、号表达式;(x=8)(y=9)+6 是关系表达式;是关系表达式;(k=i+)/3*a 是算术表达式。是算术表达式。第50页/共66页4.4 C4.4 C语言中的类型转换语言中的类型转换 C语言规定不同类型的数据不能够直接语言规定不同类型的数据不能够直接进行运算,只有相同类型的数据才可以。但进行运算,只有相同类型的数据才可以。但是在描述表达式时,参与运算的运算对象却是在描述表达式时,参与运算的运算对象却可以是不同类型的数据,于是在表达式进行可以是不同类型的数据,于是在表达式进行运算的时候存在类型的转换问题。运算的时候存在类型的转换问题。C语言中语言中有两种形式的类型转换。有两种形式的类型转换。第
44、51页/共66页类型的自动转换类型的自动转换1赋值表达式中的类型转换赋值表达式中的类型转换 其转换的依据是将赋值运算符右侧的确定其转换的依据是将赋值运算符右侧的确定的值按照左侧变量定义的类型存储,即要把确的值按照左侧变量定义的类型存储,即要把确定的值转换为变量定义的类型。定的值转换为变量定义的类型。 为了方便描述,以下所有的示例都假定有为了方便描述,以下所有的示例都假定有如下的变量说明:如下的变量说明:int a;long int b;unsigned int c;float x;char c1;第52页/共66页(1)浮点型数据赋给整型变量)浮点型数据赋给整型变量 浮点型数据赋给整型变量转换
45、的方法是舍浮点型数据赋给整型变量转换的方法是舍去浮点型数据的小数部分,将整数部分赋给整去浮点型数据的小数部分,将整数部分赋给整型变量。型变量。(2)整型数据赋给浮点型变量)整型数据赋给浮点型变量 整型数据赋给浮点型变量转换的方法是数整型数据赋给浮点型变量转换的方法是数值保持不变,只是将整型数据以浮点型数据的值保持不变,只是将整型数据以浮点型数据的存储形式存储到相应的浮点变量中。存储形式存储到相应的浮点变量中。第53页/共66页(3)字符型数据赋给整型变量)字符型数据赋给整型变量 具体转换的方法是将字符型数据的具体转换的方法是将字符型数据的ASCII码码存储到整型变量的低字节中,整型变量的高字节
46、存储到整型变量的低字节中,整型变量的高字节的所有位存储的是低字节的的所有位存储的是低字节的“高位扩展高位扩展”。如果。如果低字节的最高位为低字节的最高位为0,则高字节的所有位全部扩,则高字节的所有位全部扩展为;如果低字节的最高位为展为;如果低字节的最高位为1,则高字节的,则高字节的所有位全部扩展为。例如:所有位全部扩展为。例如: c1=A,a=c1 整型变量整型变量a的值为的值为65。字符型数据。字符型数据c1和整型和整型变量变量a的存储如图的存储如图4.4所示。所示。第54页/共66页图4.4 变量c1,a的存储 c1: 0 1 0 0 0 0 0 1 a: 0 0 0 0 0 0 0 0
47、0 1 0 0 0 0 0 1 第55页/共66页(4)整型数据赋给字符型变量)整型数据赋给字符型变量 整型数据赋给字符型变量时的具体转换方整型数据赋给字符型变量时的具体转换方法是将整型数据的低字节存储的内容存储到字符法是将整型数据的低字节存储的内容存储到字符型变量中去,即型变量中去,即“高位截断高位截断”。例如:。例如:c1=254 运算后运算后c1的的ASCII码值为码值为254。字符型变。字符型变量量c1,整型常量,整型常量254的存储如图的存储如图4.6所示。所示。 254: 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 c1: 1 1 1 1 1 1 1 0 图4.
48、6 变量c1,常量254的存储第56页/共66页(5)int型数据赋给型数据赋给long int型变量型变量 int型数据赋给型数据赋给long int型变量时,具体转换型变量时,具体转换的方法是将的方法是将int型数据的值存储到型数据的值存储到long int变量的变量的低字中。低字中。图4.8 变量a,b的存储 a: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 b: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 第57页/共66页(6)long int型数据赋给型数据赋给int 型或型或u
49、nsigned int型变量型变量 具体转换的方法是将具体转换的方法是将long int型数据的低型数据的低字的内容存储到字的内容存储到int型或型或unsigned int型变量中型变量中去。去。图4.10 变量b, a和c的存储 b: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 a或c: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 第58页/共66页(7)unsigned int型数据赋给型数据赋给long int型变型变量量 具体转换的方法是将具体转换的方法是将unsigned int型数型数据的值存储到据的值存储到long int型变量的低字中,型变量的低字中,long int型变量的高字的所有位存储的是型变量的高字的所有位存储的是。 第59页/共66页(8)相同长度的整型数据赋给相同长度的整)相同长度的整型数据赋给相同长度的整型变量型变量 相同长度的整型数据赋给相同长度的整型相同长度的整型数据赋给相同长度的整型变量转换的规则是存储形式不发生变化,但代变量转换的规则是存储形式不发生变化,但代表的真值不一定相同。表的真值不一定相同。第60页/共66页2不同类型
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年收费的生产服务项目建议书
- 小学一年级简短游记作文10篇
- 一年级小学生新学期日记11篇
- Tetrasul-Standard-生命科学试剂-MCE
- Unit 6 Section B 训练题 人教版八年级上册英语
- 四年级语文楚才杯我不信7
- 2025届高考地理一轮复习练习40世界主要国家含解析新人教版
- 2024年钡氧化物合作协议书
- 2023届新高考新教材化学人教版一轮训练-第九章第4讲 生物大分子
- 玉溪师范学院《电磁学》2021-2022学年期末试卷
- GB 6675.3-2014玩具安全第3部分:易燃性能
- 黑布林英语阅读 A test for Jess公开课课件
- 北师大版九年级数学上册 6.2反比例函数的图像与性质教学课件 (共19张PPT)
- 2023年12月大学英语六级真题及答案解析(全三套)
- 习作我最喜欢的玩具说课稿
- 墨菲定律(参考课件)
- 做个好女生主题班会课件
- 公路交通情况调查基础知识课件
- 码头平台桩基施工方案
- 医院进修生结业鉴定表
- 四年级上册英语试题-Unit 4 School单元测试 Join in外研 剑桥英语(含答案)
评论
0/150
提交评论