




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第4章数据类型及表达式 4.1 4.1 数数 据据 结结 构构4.2 C4.2 C言语程序中数据的表示方法言语程序中数据的表示方法4.3 4.3 运算符及其表达式运算符及其表达式4.4 C4.4 C言语中的类型转换言语中的类型转换4.1 4.1 数数 据据 结结 构构 数据构造是程序设计中计算机的操作对象数据构造是程序设计中计算机的操作对象以及操作对象之间关系和操作的描画。一个函以及操作对象之间关系和操作的描画。一个函数体中包括两大部分内容:其一是数据描画部数体中包括两大部分内容:其一是数据描画部分,其二是算法实现部分。要完成数据描画部分,其二是算法实现部分。要完成数据描画部分的内容,就必需寻
2、觅问题中的操作对象以及分的内容,就必需寻觅问题中的操作对象以及它们之间的关系,然后用计算机言语加以描画。它们之间的关系,然后用计算机言语加以描画。 著名的计算机科学家沃斯著名的计算机科学家沃斯Nikilaus Wirth提出了公式:提出了公式: 数据构造算法程序数据构造算法程序 该公式阐明除算法之外,一个程序中的数该公式阐明除算法之外,一个程序中的数据构造是编写程序首先要处理的问题。例据构造是编写程序首先要处理的问题。例4.1中中的的“链表、链表、“树和树和“图就是数据构造中的重图就是数据构造中的重要类型。当然一个好的程序除了应该具备公式中要类型。当然一个好的程序除了应该具备公式中两个主要要素
3、外,还应该选择适宜的程序设计言两个主要要素外,还应该选择适宜的程序设计言语和程序设计方法。语和程序设计方法。 C言语提供的数据构造是以数据类型方式表言语提供的数据构造是以数据类型方式表示的。示的。 C言语提供了丰富的数据类型,主要有以下言语提供了丰富的数据类型,主要有以下类型:类型: 数据类型 基本类型 基本型(int,2byte) 长整型(long,4byte) 短整型(short,2byte) 无符号整型(unsigned,2byte) 整型 浮点型 单 精 度 浮 点 型 ( float, 4byte)双精度浮点型 (double,8byte) 字符型(char,1byte) 无值型(v
4、oid) 指针类型 数组类型 结构体类型 联合体类型 枚举类型 构造类型 注:其中括起来的是对应类型的类型关键字及该类注:其中括起来的是对应类型的类型关键字及该类型在内存中所占的字节数。型在内存中所占的字节数。4.2 C4.2 C言语程序中数据的表示方法言语程序中数据的表示方法 数据是组成程序的必要元素,根据数据在程数据是组成程序的必要元素,根据数据在程序中值的变化与否,数据在序中值的变化与否,数据在C言语程序中以常量言语程序中以常量和变量两种方式表示。和变量两种方式表示。4.2.1 常量常量1整型常量整型常量 数据类型为整型的常量即为整型常量,又称整数据类型为整型的常量即为整型常量,又称整常
5、数。在言语中,运用的整型常量有八进制、十常数。在言语中,运用的整型常量有八进制、十六进制和十进制六进制和十进制3种。其中八进制、十六进制主要种。其中八进制、十六进制主要用于表示整型常量在内存中的存储方式,也就是表用于表示整型常量在内存中的存储方式,也就是表示某整型常量的机器码;十进制表示外部数据,其示某整型常量的机器码;十进制表示外部数据,其值表示的是真值。值表示的是真值。1八进制整型常量八进制整型常量 八进制整型常量必需以八进制整型常量必需以0开头,即以开头,即以0作作为八进制数的前缀。其数码取值为为八进制数的前缀。其数码取值为07。由。由于八进制数主要用于表示某整型常量的机器于八进制数主要
6、用于表示某整型常量的机器码,所以当表示某数机器码时,八进制数前码,所以当表示某数机器码时,八进制数前面没有符号;假设有符号,那么是对其所代面没有符号;假设有符号,那么是对其所代表的真值取反。如表的真值取反。如0123,0123代表的真值代表的真值为为83,0123代表的常量那么为代表的常量那么为83。2十六进制整型常量十六进制整型常量 十六进制整型常量的前缀为十六进制整型常量的前缀为0X或或0 x。其数。其数码取值为码取值为09,AF或或af。当十六进制数中。当十六进制数中出现出现af或或AF时,数符码中出现字母时字母时,数符码中出现字母时字母的大小写应和前缀相匹配,即要么全部大写,的大小写应
7、和前缀相匹配,即要么全部大写,要么全部小写。十六进制数主要也是用于表示要么全部小写。十六进制数主要也是用于表示某整型常量的机器码,所以当表示某数机器码某整型常量的机器码,所以当表示某数机器码时,十六进制数前面没有符号;假设有符号,时,十六进制数前面没有符号;假设有符号,那么是对其所代表的真值取反。如那么是对其所代表的真值取反。如0 x23,0 x23代表的真值为代表的真值为35,0 x23代表的常量那么代表的常量那么为为35。3十进制整型常量十进制整型常量十进制整型常量没有前缀。十进制整型常量没有前缀。整型常量的几点阐明如下。整型常量的几点阐明如下。 常量的类型常量的类型 常量的类型可以根据整
8、型常量描画的数值常量的类型可以根据整型常量描画的数值来确定其类型。来确定其类型。 当整型常量的值为当整型常量的值为 32768 32767时,可时,可以看作根本型整型常量。以看作根本型整型常量。 当整型常量的值为当整型常量的值为065535时,可以看作时,可以看作无符号整型常量。无符号整型常量。 当整型常量的值在大于当整型常量的值在大于32767或小于或小于 32768时,可以看作长整型常量。时,可以看作长整型常量。 整型常数的后缀整型常数的后缀 十进制无符号整型常量的范围为十进制无符号整型常量的范围为065535,有符号数为,有符号数为 32768 32767。八进制数表示的机器码范围为八进
9、制数表示的机器码范围为00177777。 十六进制数表示的机器码范围为十六进制数表示的机器码范围为0X00XFFFF。 假设希望将整型常量按照长整型常量来假设希望将整型常量按照长整型常量来运算,可以运用长整型数的后缀运算,可以运用长整型数的后缀“L或或“l来表示。例如,来表示。例如, 十进制长整型常量十进制长整型常量 158L 358000L2浮点常量浮点常量 实型也称为浮点型。实型常量也称为实数实型也称为浮点型。实型常量也称为实数或者浮点数。实型常量不分单、双精度,都或者浮点数。实型常量不分单、双精度,都按双精度按双精度double型处置,其有效位数为型处置,其有效位数为1516位。位。1小
10、数方式小数方式 小数方式由数码小数方式由数码0 9和小数点组成。当某和小数点组成。当某浮点数整数部分或小数部分为浮点数整数部分或小数部分为0时,时,0可以省略可以省略,但小数点不可省略。,但小数点不可省略。例如:例如:0.0,.25,5.789,0.13,5.0,300., 267.8230, 123.等均为合法的实数。等均为合法的实数。345无小数点,无小数点,a7.数码不可以是字母数码不可以是字母等均为非法的浮点数。等均为非法的浮点数。2指数方式指数方式 指数方式由尾数加阶码标志指数方式由尾数加阶码标志e或或E以及阶码以及阶码只能为整数,可以带符号组成。只能为整数,可以带符号组成。 其普通
11、方式为其普通方式为a Ena为尾数,为尾数,n为阶码为阶码其值为其值为 a10n 例如,例如,2.1105可以表示为可以表示为2.1E5,3.7可以可以表示为表示为3.7E 2 3单字符常量单字符常量 单字符常量是用单引号括起来的一个字符。单单字符常量是用单引号括起来的一个字符。单字符常量可以有如下几种表示方法。字符常量可以有如下几种表示方法。1直接方式直接方式 直接方式即在单引号内直接书写字符。例如直接方式即在单引号内直接书写字符。例如a、b、?2八进制方式八进制方式 八进制方式格式为八进制方式格式为ddd,其中,其中“ddd表示表示13位八进制数,其值代表的是某字符的位八进制数,其值代表的
12、是某字符的ASCII值。值。“是本义字符。八进制方式可以表示一切的字符。是本义字符。八进制方式可以表示一切的字符。例如例如101等于等于A,007响铃控制字符,响铃控制字符,343表示表示ASCII值为值为227的字符的字符。 3十六进制方式十六进制方式 十六进制方式格式为十六进制方式格式为xhh,其中,其中“hh表示表示12位十六进制数,其值代表的是某字符的位十六进制数,其值代表的是某字符的ASCII值,值,“是本义字符,是本义字符,“x是十六进制前缀。十是十六进制前缀。十六进制方式可以表示一切的字符。例如六进制方式可以表示一切的字符。例如x41等等于于A,x07响铃控制字符,响铃控制字符,
13、xe3表示表示ASCII值为值为227的字符的字符。4本义字符本义字符 本义字符是一种特殊的字符常量。本义字符以本义字符是一种特殊的字符常量。本义字符以反斜线反斜线“开头,后跟一个或几个字符。本义字开头,后跟一个或几个字符。本义字符具有特定的含义,不同于字符原有的意义,故符具有特定的含义,不同于字符原有的意义,故称称“本义字符。本义字符。表4-5常用的本义字符转 义 字 符本义字符的意义转 义 字 符本义字符的意义n回车换行r回车t横向跳到下一制表位置f走纸换页v竖向跳格反斜线符b退格单引号符双引号 4字符串常量字符串常量 字符串常量是由一对双引号括起的字符序字符串常量是由一对双引号括起的字符
14、序列,可以没有字符,也可以只需一个字符。列,可以没有字符,也可以只需一个字符。例如,例如,CHINA ,How are you ! , $12.5, ,A,nc234 等都是合法等都是合法的字符串常量。的字符串常量。 字符串字符串 program在内存存储的方式如图在内存存储的方式如图4.1所示。所示。 p r o g r a m 0 该字符串占用该字符串占用8个字节的存储空间,但其个字节的存储空间,但其有效字符的个数却是有效字符的个数却是7,最后一个字节存储字,最后一个字节存储字符串终了标志符串终了标志“0。图4.1 字符串存储方式 字符串的有效字符的个数是第一个字符串的有效字符的个数是第一
15、个“0前字符前字符的个数的总和,有效字符的个数也称为字符串长度。的个数的总和,有效字符的个数也称为字符串长度。例如:例如:computer 长度为长度为8。 n 长度为长度为1。abcn3450china 长度为长度为5,而不是,而不是16,由于,由于“0后的字符是无意义的,后的字符是无意义的,“n是一个本义字符,是一个本义字符,“345是八进制表示的一个字符。是八进制表示的一个字符。 长度为长度为3,由于,由于“、“与与“分别为分别为一个字符。一个字符。5符号常量符号常量 在言语中,可以用一个标识符来表示一在言语中,可以用一个标识符来表示一个常量,称之为符号常量。符号常量在运用之个常量,称之
16、为符号常量。符号常量在运用之前必需先定义,其普通方式为:前必需先定义,其普通方式为: #define 标识符标识符 常量常量 其功能是把该标识符定义为其后的常量值。其功能是把该标识符定义为其后的常量值。 例例44.22# #def fine PI 3I 3.14114159 /*定义符号常量定义符号常量PI I*/mamain()() float ar float areaa,r r; /*定义定义arareaa,r r为为floatfloat型型变量变量*/ r r=5; /*使使r r的值为的值为5*/ ar areaa=PI I*r r*r r; /*计算以计算以r r为半径的圆面积为半
17、径的圆面积*/ pr printf(tf(arareaa=%f%fn,ararea)a); /*输出圆面积输出圆面积*/44.22.2 2 变量变量11变量的根本知识变量的根本知识 在程序的执行过程中值可以发生变化的在程序的执行过程中值可以发生变化的量称为变量。量称为变量。11变量的命名。变量的命名。 变量的命名符合标识符的规定。变量名决变量的命名符合标识符的规定。变量名决议了某一变量在内存中的位置,即地址。如议了某一变量在内存中的位置,即地址。如变量变量aa的地址就是的地址就是&a&a。 2一个变量占据一定字节的存储空间。一个变量占据一定字节的存储空间。 在存储空间中存放变量
18、的值。由于变量在存储空间中存放变量的值。由于变量所表示的数据可以是除所表示的数据可以是除void以外的恣意类型的以外的恣意类型的数据,所以变量在内存中所占的存储空间根数据,所以变量在内存中所占的存储空间根据数据类型的不同而不同。据数据类型的不同而不同。 每一个变量有而且只能有一种类型,变量每一个变量有而且只能有一种类型,变量的类型决议了该变量在内存中所占的字节数的类型决议了该变量在内存中所占的字节数。在变量进展相关运算时,变量的类型是编。在变量进展相关运算时,变量的类型是编译系统检查运算能否合法的根据。译系统检查运算能否合法的根据。3一个变量在运用前必需有一个确一个变量在运用前必需有一个确定的
19、值。定的值。 变量定义后,由于变量占据一定的内变量定义后,由于变量占据一定的内存空间,所以变量是有值的,但是该值存空间,所以变量是有值的,但是该值是不确定。假设用该不确定的值参与运是不确定。假设用该不确定的值参与运算,所得到的值也是不确定的。算,所得到的值也是不确定的。 2 2变量定义的格式变量定义的格式变量定义的普通方式为:变量定义的普通方式为: 修饰符修饰符 类型阐明符类型阐明符 变量表列;变量表列; 是可选项是可选项 定义变量时应留意以下几点。定义变量时应留意以下几点。1变量定义应该位于函数体的数据描画部分。变量定义应该位于函数体的数据描画部分。2类型符阐明变量从属的类型,有:类型符阐明
20、变量从属的类型,有:int、float、double和和char。3修饰符部分可有可无,如修饰符部分可有可无,如int有有long、short和和unsigned修饰符。修饰符。4“修饰符修饰符 类型符部分决议了变量的类型,类型符部分决议了变量的类型,确定了变量在内存中所占的字节数。确定了变量在内存中所占的字节数。5变量表列部分是所定义变量的变量名,假设定变量表列部分是所定义变量的变量名,假设定义多个同一类型变量的话,变量名中间用义多个同一类型变量的话,变量名中间用“,作为,作为分隔符构成变量表列。分隔符构成变量表列。6变量定义的每一项应有空格作为分隔符。变量定义的每一项应有空格作为分隔符。7
21、变量定义的终了符是分号。变量定义的终了符是分号。3变量的初始化变量的初始化 变量在运用前应该有确定的值。在程序中经常需变量在运用前应该有确定的值。在程序中经常需求对变量赋初值,以便运用变量。求对变量赋初值,以便运用变量。修饰符修饰符 类型阐明符类型阐明符 变量变量1= 值值1,变量,变量2= 值值2,;例如:例如: int a =5; /*初始化变量初始化变量a为为5*/float x=3.2,y=1.2e10; /*初始化初始化x为为3.2,y为为1.2x1010*/char ch=K; /*初始化初始化ch为为K*/int d=5; /*初始化初始化d为为5*/int b=d; /*初始化
22、初始化b为为5,在,在int b=d;定义时定义时d应有确应有确定的值定的值*/ 4不同类型变量的阐明不同类型变量的阐明1整型变量整型变量 整型变量可分为根本型、短整型、长整型和整型变量可分为根本型、短整型、长整型和无符号型无符号型4类。类。 根本型根本型 根本型的类型阐明符为根本型的类型阐明符为int,在内存中占,在内存中占2个字个字节,其取值的范围为节,其取值的范围为2152151,即,即3276832767。 短整型短整型 短整型的类型阐明符为短整型的类型阐明符为short int或或short,所占,所占字节和取值范围均与根本型一样。字节和取值范围均与根本型一样。 长整型长整型 长整型
23、的类型阐明符为长整型的类型阐明符为long int或或long,在内,在内存中占存中占4个字节,其取值范围是个字节,其取值范围是 231231 1,即即 21474836482147483647。 无符号型无符号型 无符号型的类型阐明符为无符号型的类型阐明符为unsigned。无符号。无符号型又可与上述型又可与上述3种类型匹配而构成。种类型匹配而构成。 无符号根本型。类型阐明符为无符号根本型。类型阐明符为unsigned int或或unsigned,取值范围是,取值范围是065535。 无符号短整型。类型阐明符为无符号短整型。类型阐明符为unsigned short,与无符号根本型一样。,与无
24、符号根本型一样。 无符号长整型。类型阐明符为无符号长整型。类型阐明符为unsigned long int 或或unsigned long,取值范围为,取值范围为0232 1,即,即04294967295。整型变量的阐明方式为:整型变量的阐明方式为: 修饰符修饰符 int 变量表列;变量表列;2浮点变量浮点变量 浮点变量分为单精度浮点型和双精度浮点浮点变量分为单精度浮点型和双精度浮点型两类。单精度浮点型类型阐明符为型两类。单精度浮点型类型阐明符为float,双精度浮点型类型阐明符为双精度浮点型类型阐明符为double。 浮点变量阐明的格式为:浮点变量阐明的格式为:float变量表列;变量表列;或
25、或double 变量表列;变量表列;例如:例如: float x,y; /*定义定义x,y为单精度浮点型为单精度浮点型*/ double a,b,c; /*定义定义a,b,c为双精度浮点型为双精度浮点型*/float x=1234.56789; /*定义定义x为单精度浮点型,为单精度浮点型,并初始化值为并初始化值为1234.567*/ 3字符型变量字符型变量 字符型变量的取值是字符型数据。字符型字符型变量的取值是字符型数据。字符型变量的类型阐明符是变量的类型阐明符是char。 字符型变量类型阐明的格式:字符型变量类型阐明的格式: char 变量表列;变量表列;例如:例如: char c1,c2
26、; /*定义定义c1,c2为字符型为字符型*/4.3 4.3 运算符及其表达式运算符及其表达式44.33.1 C1 C运算符概述运算符概述 运算是对数据进展加工的过程,描画各种运算是对数据进展加工的过程,描画各种不同运算的符号称为运算符。参与运算的数据称不同运算的符号称为运算符。参与运算的数据称为运算对象或操作数。用运算符和括号将运算对为运算对象或操作数。用运算符和括号将运算对象衔接起来的符合象衔接起来的符合CC言语语法规那么的式子称为言语语法规那么的式子称为CC言语表达式。言语表达式。 言语的运算符不仅具有不同的优先级,而言语的运算符不仅具有不同的优先级,而且还有结合性的特性。表达式中各运算
27、对象参与且还有结合性的特性。表达式中各运算对象参与运算的先后顺序不仅要遵守运算符优先级别的规运算的先后顺序不仅要遵守运算符优先级别的规定,还要受运算符结合性的制约,以便确定运算定,还要受运算符结合性的制约,以便确定运算符是和左侧的运算对象结合,还是和右侧的运算符是和左侧的运算对象结合,还是和右侧的运算对象结合。对象结合。 44.33.2 2 算术运算符及算术表达式算术运算符及算术表达式1算术运算符算术运算符C言语提供了言语提供了5个根本的算术运算符:个根本的算术运算符: 加法运算符加法运算符- 减法运算符,负号运算符减法运算符,负号运算符* 乘法运算符乘法运算符/ 除法运算符除法运算符% 取余
28、运算符或称模运算符取余运算符或称模运算符 运算符运算符,的优先级一样,的优先级一样,*,/,%的优先级一样,的优先级一样,*,/,%的优先级高于的优先级高于和和运算符,算术运算符都是左运算符,算术运算符都是左结合的运算符。结合的运算符。2算术表达式算术表达式 用算术运算符和括号运算符将运算对象衔接用算术运算符和括号运算符将运算对象衔接起来的符合起来的符合C言语规那么的式子,称为算术表达言语规那么的式子,称为算术表达式。式。 算术表达式的计算符合运算符优先级和结算术表达式的计算符合运算符优先级和结合性的原那么。计算表达式时的详细过程是:合性的原那么。计算表达式时的详细过程是:对表达式自左向右扫描
29、运算对象,然后调查运对表达式自左向右扫描运算对象,然后调查运算对象两侧的运算符。假设优先级不一样,那算对象两侧的运算符。假设优先级不一样,那么该运算对象和高优先级的运算符结合,当某么该运算对象和高优先级的运算符结合,当某运算符所需的运算对象全部都和该运算符结合运算符所需的运算对象全部都和该运算符结合后进展运算,运算后的结果就是下一个被处置后进展运算,运算后的结果就是下一个被处置的运算对象,否那么继续扫描下一个运算对象的运算对象,否那么继续扫描下一个运算对象;假设两侧的运算符优先级一样,那么按照运;假设两侧的运算符优先级一样,那么按照运算符的结合性原那么去结合运算。假设运算符算符的结合性原那么去
30、结合运算。假设运算符是左结合的,那么和左侧的运算符结合,假设是左结合的,那么和左侧的运算符结合,假设是右结合的,那么和右侧的运算符结合。是右结合的,那么和右侧的运算符结合。例如,表达式例如,表达式a+b*5/6 /*假定假定a=3,b=1*/ (5) (0)532 a + b * 5 / 6 146 (3) 图4.3 表达式计算过程44.33.3 3 自增自减运算符及含自增自减表达式自增自减运算符及含自增自减表达式 CC言语中提供了两个特殊的运算符,自增言语中提供了两个特殊的运算符,自增运算符运算符和自减运算符和自减运算符。它们都是单目。它们都是单目运算符,运算对象可以位于运算符前面,也可运算
31、符,运算对象可以位于运算符前面,也可以位于运算符后面。当运算符位于运算对象前以位于运算符后面。当运算符位于运算对象前面时,称为前缀运算符,如面时,称为前缀运算符,如 i和和i;当;当运算符位于运算对象后面时,称为后缀运算符,运算符位于运算对象后面时,称为后缀运算符,如如i和和i。 自增自减运算符的功能是将运算对象加自增自减运算符的功能是将运算对象加11或或减减11后,再将结果保管到运算对象中去,如后,再将结果保管到运算对象中去,如i等同于等同于ii11。自增自减运算符的运算。自增自减运算符的运算对象只能是变量。对象只能是变量。 当表达式中出现自增自减运算符时,表达式的求值过当表达式中出现自增自
32、减运算符时,表达式的求值过程如下。程如下。1自增自减运算符是后缀运算符时,应先运用自增自增自减运算符是后缀运算符时,应先运用自增自减运算符的运算对象计算整个表达式的值,然后再计算自减运算符的运算对象计算整个表达式的值,然后再计算自增自减。自增自减。例例4.4main() 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的运算可了解为:先运算的运算可了解为:先运算表达式表达式kij4,再计算,再计算i和和j
33、。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);result:k=11,i=3,j=4 表达式表达式k (i) (j) 4的运算可了解的运算可了解为:先运算为:先运算i和和j,再计算表达式,再计算表达式k i j 4。程序运转结果为:程序运转结果为:3当表达式中既含有后缀自增自减运算符,又当表达式中
34、既含有后缀自增自减运算符,又含有前缀自增自减运算符时,应先计算一切的前含有前缀自增自减运算符时,应先计算一切的前缀自增自减运算,再计算整个表达式的值,最后缀自增自减运算,再计算整个表达式的值,最后计算一切的后缀自增自减运算。计算一切的后缀自增自减运算。例例4.6 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);程序运转结果为:程序运转结果为:result:k=18,i=4,j=5 表达式表达式k (i) (j) 4 (i) (j)的运算可的运算可了解为:先运算了解为
35、:先运算i和和j,再计算表达式,再计算表达式k i j 4 i j,最后计算,最后计算i和和j。留意:在运算的时候变量留意:在运算的时候变量i,j是变化的,但在某是变化的,但在某瞬间值是确定的。瞬间值是确定的。1简单的赋值运算符和赋值表达式简单的赋值运算符和赋值表达式 C言语的赋值运算符是言语的赋值运算符是“,该运算符是双目运,该运算符是双目运算符,它的优先级仅高于逗号运算符,是右结合性的。算符,它的优先级仅高于逗号运算符,是右结合性的。 由赋值运算符构成的赋值表达式的格式为:由赋值运算符构成的赋值表达式的格式为:变量变量确定的值确定的值 赋值表达式会得到两个值。一个是赋值运算符左赋值表达式会
36、得到两个值。一个是赋值运算符左侧变量的值;另一个是赋值表达式的值,表达式的值侧变量的值;另一个是赋值表达式的值,表达式的值与变量的值是一样的。与变量的值是一样的。44.33.4 4 赋值运算符和赋值表达式赋值运算符和赋值表达式以下表达式是符合以下表达式是符合C言语表达式规那么的表达式言语表达式规那么的表达式: a=123 a=123.456c=a+Ax=a+ca+(x=a+4)/c /*算术表达式算术表达式*/(x=a)+(b=3) /*合法的算术表达式合法的算术表达式*/2复合的赋值运算符和复合的赋值表达式复合的赋值运算符和复合的赋值表达式 在赋值运算符在赋值运算符“前加上其他的运算符,前加
37、上其他的运算符,可以构成复合的赋值运算符。如在可以构成复合的赋值运算符。如在“前加前加上上“运算符就构成了运算符就构成了“运算符。运算符。 C言语提供了言语提供了10种复合的赋值运算符,种复合的赋值运算符,它们是它们是+=,-=,*=,=,%=,=,&=,=,|= 其中前其中前5个是复合的算术赋值运算符,后个是复合的算术赋值运算符,后5个是复合的位运算赋值运算符。复合的赋值个是复合的位运算赋值运算符。复合的赋值运算符是双目运算符,优先级和赋值运算符运算符是双目运算符,优先级和赋值运算符一样,也是右结合性的。一样,也是右结合性的。 由复合的赋值运算符构成的赋值表达式的由复合的赋值运算符构
38、成的赋值表达式的格式为:格式为:变量变量 确定的值确定的值 它等效于它等效于变量变量=变量变量 确定的值确定的值例如:例如:a+=5 等价于等价于a=a+5x*=y+7 等价于等价于x=x*(y+7)r%=p 等价于等价于r=r%p44.33.5 逗号运算符和逗号表达式逗号运算符和逗号表达式 在言语中逗号在言语中逗号“,也是一种运算符,称为,也是一种运算符,称为逗号运算符。逗号运算符。 逗号运算符的优先级是最低的。其逗号运算符的优先级是最低的。其功能是把两个表达式衔接起来组成一个表达式,功能是把两个表达式衔接起来组成一个表达式,称为逗号表达式。称为逗号表达式。逗号表达式的普通方式为:逗号表达式
39、的普通方式为:表达式表达式11,表达式,表达式2 2 逗号表达式的求值过程是顺序求解表达式逗号表达式的求值过程是顺序求解表达式11、表达式表达式22的值,并以表达式的值,并以表达式22的值作为整个逗号的值作为整个逗号表达式的值。表达式的值。例例44.77mamain()() int at a=22,b b=44,c c=66,x,y; y=( (x=aa+b)b),(b(b+c)c); pr printf(tf(y=% %d,x=% %d,y,x) );程序运转结果为:程序运转结果为:y=66,x=6 6 本例中的本例中的y等于等于66,而逗号表达式的值,而逗号表达式的值y( (xaab)b)
40、,(b(bc)c)是是110。44.33.6 6 表达式小结表达式小结 判别表达式类型应根据表达式中出现的运算判别表达式类型应根据表达式中出现的运算符的优先级来断定。假设某一运算符在整个表达符的优先级来断定。假设某一运算符在整个表达式的运算过程中优先级是最低的,或者是最后运式的运算过程中优先级是最低的,或者是最后运算的运算符,那么表达式的类型就是该运算符所算的运算符,那么表达式的类型就是该运算符所从属的类型。例如:从属的类型。例如:x=(a(a=33,b b*3)3) 是赋值表达式;是赋值表达式;x=aa=33,66*aa 是逗号表达式;是逗号表达式;( (x=8)(8)(y=9) )+66
41、是关系表达式;是关系表达式;( (k=i+) )/33*aa 是算术表达式。是算术表达式。4.4 C4.4 C言语中的类型转换言语中的类型转换 C言语规定不同类型的数据不可以直接进言语规定不同类型的数据不可以直接进展运算,只需一样类型的数据才可以。但是展运算,只需一样类型的数据才可以。但是在描画表达式时,参与运算的运算对象却可在描画表达式时,参与运算的运算对象却可以是不同类型的数据,于是在表达式进展运以是不同类型的数据,于是在表达式进展运算的时候存在类型的转换问题。算的时候存在类型的转换问题。C言语中有两言语中有两种方式的类型转换。种方式的类型转换。44.44.1 1 类型的自动转换类型的自动
42、转换11赋值表达式中的类型转换赋值表达式中的类型转换 其转换的根据是将赋值运算符右侧确实定其转换的根据是将赋值运算符右侧确实定的值按照左侧变量定义的类型存储,即要把确的值按照左侧变量定义的类型存储,即要把确定的值转换为变量定义的类型。定的值转换为变量定义的类型。 为了方便描画,以下一切的例如都假定有为了方便描画,以下一切的例如都假定有如下的变量阐明:如下的变量阐明:int at a;lolong int bt b;u uns signed int ct c;float float x;char c1char c1;1浮点型数据赋给整型变量浮点型数据赋给整型变量 浮点型数据赋给整型变量转换的方法
43、是舍浮点型数据赋给整型变量转换的方法是舍去浮点型数据的小数部分,将整数部分赋给整去浮点型数据的小数部分,将整数部分赋给整型变量。型变量。2整型数据赋给浮点型变量整型数据赋给浮点型变量 整型数据赋给浮点型变量转换的方法是数整型数据赋给浮点型变量转换的方法是数值坚持不变,只是将整型数据以浮点型数据的值坚持不变,只是将整型数据以浮点型数据的存储方式存储到相应的浮点变量中。存储方式存储到相应的浮点变量中。3字符型数据赋给整型变量字符型数据赋给整型变量 详细转换的方法是将字符型数据的详细转换的方法是将字符型数据的ASCII码码存储到整型变量的低字节中,整型变量的高字节存储到整型变量的低字节中,整型变量的
44、高字节的一切位存储的是低字节的的一切位存储的是低字节的“高位扩展。假设高位扩展。假设低字节的最高位为低字节的最高位为0,那么高字节的一切位全部,那么高字节的一切位全部扩展为;假设低字节的最高位为扩展为;假设低字节的最高位为1,那么高字,那么高字节的一切位全部扩展为。例如:节的一切位全部扩展为。例如: c1=A,a=c1 整型变量整型变量a的值为的值为65。字符型数据。字符型数据c1和整型和整型变量变量a的存储如图的存储如图4.4所示。所示。图4.4 变量c1,a的存储 c 1 : 0 1 0 0 0 0 0 1 a : 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 4整型数据
45、赋给字符型变量整型数据赋给字符型变量 整型数据赋给字符型变量时的详细转换方法整型数据赋给字符型变量时的详细转换方法是将整型数据的低字节存储的内容存储到字符型是将整型数据的低字节存储的内容存储到字符型变量中去,即变量中去,即“高位截断。例如:高位截断。例如: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.6 变量c1,常量254的存储5int型数据赋给型数据赋给long
46、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 6long int型数据赋给型数据赋给int 型或型或unsigned int型型变量变量 详细转换的方法是将详细转换的方法是将long int型数据的低字型数据的低字
47、的内容存储到的内容存储到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 7unsigned int型数据赋给型数据赋给long int型变量型变量 详细转换的方法是将详细转换的方法是将unsigned int型数据型数据的值存储到的值存储到long int型变量的低字中,型变量的低字中,long int型变量的高字的一切位存储的是。型变量的高字的一切位存储的是。 8一样长度的整型数据赋给一样长度的整一样长度的整型数据赋给一样长度的整型变量型变量 一样长度的整型数据赋给一样长度的整型一样长度的整型数据赋给一样长度的整型变量转换的规那么是存储方式不发生变化,但变量转换的规那么是存储方式不发生变化,但代表的真值不一定一样。代表的真值不一定一样。2不同类型数据的混合运算不同类型数据的混合运算 当某一运算符两侧的运算对象类型不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年有机磷系阻燃剂项目评估报告
- 公司雇佣合同范本(6篇)
- 工地食堂承包合同书(19篇)
- 2025年火电厂实习报告格式范文
- 2025公司老员工的辞职报告(32篇)
- 三沟千分尺行业深度研究分析报告(2024-2030版)
- 2025年中国工程起重机市场供需发展前景及投资战略预测报告
- 2025-2030年中国萤光黄项目投资可行性研究分析报告
- 美甲店合作战略合同10篇
- 二手手机转让协议书范本8篇
- 节目招商合同协议
- 甘肃酿皮子制作方法
- 2025年小学英语毕业模拟试卷:英语短剧表演脚本创意构思与舞台排练试题
- 食堂节约管理制度规范
- 预留印鉴变更管理制度
- 2025年浙江省金华市九年级中考一模语文试题(含答案)
- 2024年江苏事业单位真题下载
- ISO27001:2022信息安全管理体系全套文件+表单
- 招标代理服务投标方案(技术标)
- 市政工程施工组织设计方案
- 2024年(学习强国)思想政治理论知识考试题库与答案
评论
0/150
提交评论