版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本章导读本章导读 数据是程序处理的对象,是程序设计中数据是程序处理的对象,是程序设计中的重要组成部分。的重要组成部分。C语言提供了丰富的数据类语言提供了丰富的数据类型和运算符及语法规则。型和运算符及语法规则。 内容内容:C语言的基本数据类型、标识符和语言的基本数据类型、标识符和关键字、常量和变量,运算符与表达式以及关键字、常量和变量,运算符与表达式以及数据类型之间的转换等。数据类型之间的转换等。 要求要求:掌握掌握C语言数据和数据类型的相关知语言数据和数据类型的相关知识,熟练掌握运算符和表达式的使用方法。识,熟练掌握运算符和表达式的使用方法。2.1.1 数据类型概述数据类型概述整型(整型(in
2、t)数据类型基本类型基本类型整型整型单精度型(单精度型(float)字符型(字符型(char)长整型(长整型(long)短整型(短整型(short)实型实型双精度型双精度型(double)枚举类型(枚举类型(enum)(第)(第9章)章)共用体类型(共用体类型(union)(第)(第9章)章)构造类型构造类型结构体类型(结构体类型(struct)(第)(第9章)章)数组类型(第数组类型(第6章)章)空类型(空类型(void)指针类型(指针类型(* *)(第(第8章)章)2.1 数据类型数据类型2.1.2 整型整型 根据存储长度的不同,根据存储长度的不同,C语言中的整型又可分语言中的整型又可分为
3、:为:基本整型:基本整型: int无符号基本整型:无符号基本整型: unsigned int短整型短整型: short/short int 无符号短整型无符号短整型: unsigned short/unsigned short int长整型:长整型: long/long int 无符号长整型无符号长整型: unsigned long/unsigned long int2.1 数据类型数据类型表表2-1 整数类型整数类型 类 型 字节数 取值范围 int2-32768 32767 即即 -215 (215 1)unsigned int 20 65535 即即 0 (216 1)short2-32
4、768 32767 即即 -215 (215 -1)unsigned short20 65535 即即 0 (216 -1)long4-21474836482147483647 即即 -231 (231 -1)unsigned long404294967295 即即 0 (232 -1)2.1.3 实实 型型 实数类型的数据即通常的实型数据,例如实数类型的数据即通常的实型数据,例如123.45、-36.9、0. 6等。等。 由于计算机中存储实型数据时小数点位置不确定,由于计算机中存储实型数据时小数点位置不确定,C语言中实型数据语言中实型数据又称浮点型数据又称浮点型数据。Turbo C提供了三提
5、供了三种表示实数的类型:单精度浮点数类型种表示实数的类型:单精度浮点数类型float;双精度;双精度浮点数类型浮点数类型double;长双精度类型;长双精度类型long double。 所有整数类型和实数类型统称为算术类型。所有整数类型和实数类型统称为算术类型。表表2-2 实数类型实数类型 类 型字节数有效数字数值范围float47-3.410-38 3.41038double816-1.710-308 1.710308long double1019-3.410-4932 3.4104932以上数据为理论上的参考数据,实际上不同机器可能有以上数据为理论上的参考数据,实际上不同机器可能有差异,例
6、如在有的机器上测试为:差异,例如在有的机器上测试为:-1.2E-383.4E+38(float) -2.3E-3081.7E+308(double)-9.0E-49286.3E+4931(long double)。注意:在注意:在Turbo C 2.0中默认输出中默认输出6位小数,输出位小数,输出double时加时加l修饰修饰,输出输出long double加加L修饰。修饰。 2.1.4 字符型字符型字符类型的数据即通常的字符。字符类型的数据即通常的字符。 C语言中字符数据的书写形式是用单引语言中字符数据的书写形式是用单引号括起的单个字符,例如用号括起的单个字符,例如用a、B、4分别表示分别表
7、示a、B、4字符等,以与源程序中所字符等,以与源程序中所用的字符相区别。用的字符相区别。 字符数据主要用于表示信息,例如程序字符数据主要用于表示信息,例如程序的输入和输出信息。的输入和输出信息。 字符类型的数据包括计算机所用编码字符集字符类型的数据包括计算机所用编码字符集中的所有字符。常用的中的所有字符。常用的ASCII字符集,其中的字字符集,其中的字符包括所有大小写英文字母、数字、各种标点符符包括所有大小写英文字母、数字、各种标点符号字符,还有一些控制字符,一共号字符,还有一些控制字符,一共128个。扩展个。扩展的的ASCII字符集包括字符集包括ASCII字符集中的全部字符和字符集中的全部字
8、符和另外的另外的128个字符,总共个字符,总共256个字符。个字符。 字符类型数据在内存中存储的是它的字符类型数据在内存中存储的是它的ASCII码编码值,例如码编码值,例如A和和8分别存储分别存储ASCII值值65和和56。一个字符通常占用内存一个字节一个字符通常占用内存一个字节。 2.1.4 字符型字符型ASCII的相关知识l 美国标准信息交换标准码美国标准信息交换标准码( American Standard Code for Information Interchange, ASCII ) 在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机比较傻,只有0和1两位数的二进制
9、比较适合于它使用),同样的,象a、b、c、d这样的52个字母(包括大写)、以及0、1、2等数字还有一些常用的符号(例如*、#、等)在计算机中存储时也要使用二进制数来表示,而具体用哪个数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通讯而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了所谓的ASCII编码,统一规定了上述常用符号用哪个二进制数来表示。 ASCII 码使用指定的 7 位或 8 位二进制数组合来表示 128 或 256 种可能的字符。标准 ASCII 码也叫基础ASCII码,使用 7 位二进制数来表示所有的大写和小写字母
10、,数字 0 到 9、标点符号, 以及在美式英语中使用的特殊控制字符。 其中: 031及及127(共共33个个)是控制字符或通讯专用字符,是控制字符或通讯专用字符,如控制符:LF(换行)、CR(回车)等; 32126(共95个)是字符(32是空格),其中4857为0到9十个阿拉伯数字; 6590为26个大写英文字母,97122号为26个小写英文字母,其余为一些标点符号、运算符号等。 字符数据与整型数据是相似的。字符数据与整型数据是相似的。C语言规定字符语言规定字符类型与整型基本一致,即也有有符号和无符号两种类型与整型基本一致,即也有有符号和无符号两种类型:类型: 有符号类型用有符号类型用char
11、(-128127)表示表示; 无符号类型用无符号类型用unsigned char(0255 )表示表示;类类 型型字节数字节数取值范围取值范围char1-128 127 即即 -27 (27 1)unsigned char10 255 即即 0 (28 -1)2.1.4 字符型字符型2.2 标识符、常量与变量标识符、常量与变量 2.2.1 标识符标识符1. 标识符标识符 是指程序中的变量、符号常量、数组、函是指程序中的变量、符号常量、数组、函数、类型、文件等对象的名字。数、类型、文件等对象的名字。 在在C语言中,标识符只能由字母、数字和语言中,标识符只能由字母、数字和下划线组成,且第一个字符必
12、须为字母或下划下划线组成,且第一个字符必须为字母或下划线。线。使用标识符的具体规则如下:使用标识符的具体规则如下:1. 标识符使用规则标识符使用规则(1) 只能由下划线、只能由下划线、09与大小写字母与大小写字母az,AZ构成。构成。Turbo C最多识别由最多识别由32个字符组成的标识个字符组成的标识符。符。 (2) 首字符必须是字母或下划线,而不能是数字首字符必须是字母或下划线,而不能是数字或其它符号。或其它符号。(3) 在标识符中,大写字母和小写字母代表不同在标识符中,大写字母和小写字母代表不同的意义。的意义。(4) 标识符不能使用系统的关键字标识符不能使用系统的关键字,因为关键字,因为
13、关键字是系统保留的,它们已有特定的含义。是系统保留的,它们已有特定的含义。 (5) 系统预定义标识符,如预编译命令名系统预定义标识符,如预编译命令名(define、include)、系统函数名、系统函数名(scanf、printf、getchar、putchar)等可作为用户等可作为用户标识符,但建议不作它用。标识符,但建议不作它用。(6) 尽量作到尽量作到“见名知义见名知义”,例如,例如max、score等。等。(7) 避免使用易混字符,如避免使用易混字符,如1、l、i;0、o;2、z等。等。1. 标识符使用规则标识符使用规则2. 关键字关键字关键字关键字是指系统预定义的保留标识符,又称之为
14、是指系统预定义的保留标识符,又称之为保留字。它们有特定的含义,不能再作其它用途保留字。它们有特定的含义,不能再作其它用途使用。使用。ANSI C定义的关键字共定义的关键字共32个:个: autodoubleintstructbreakelselongswitchcaseenumregistertypedefcharexternreturnunionconstfloatshortunsigned continue forsignedvoiddefault gotosizeofvolatile doifwhilestatic2.2.2 常常 量量1.整型常量整型常量(1) 十进制整数:十进制整数:
15、如如256、-565、6523。十进制写。十进制写法中除非要写的整数本身就是法中除非要写的整数本身就是0否则第一个数字字否则第一个数字字符不能为符不能为0。如果是十进制无符号整数则在数据后加如果是十进制无符号整数则在数据后加u或或U,如,如65535u,12345U等。等。(2) 八进制整数:八进制整数:以以0开头,由开头,由07八个数字组成八个数字组成的数是八进制数。如的数是八进制数。如0101、-045等是合法的八进等是合法的八进制数,其中制数,其中0101相当于十进制数相当于十进制数65。而。而0185、 -02a3是错误的,不能表示八进制数是错误的,不能表示八进制数(3) 十六进制整数
16、:十六进制整数:以以0 x或或0X开头的数字序列表开头的数字序列表示十六进制数。如示十六进制数。如0 x12为十六进制数,它相当为十六进制数,它相当于十进制数于十进制数18。在十六进制写法中需要在十六进制写法中需要16个数字,超过个数字,超过9的数字的数字不能用单个数字表示,不能用单个数字表示,C语言采用字母语言采用字母af或或AF表示其余的表示其余的6个十六进制数字,其对应关系个十六进制数字,其对应关系如表如表2-4所示:所示:字字 母母a,Ab,Bc,Cd,De,Ef,F表示的数字表示的数字101112131415表2-4 十六进制数字的表示方法2.2.2 常常 量量注意注意1.八进制、十
17、进制和十六进制只是整数的不同八进制、十进制和十六进制只是整数的不同书写形式,可以根据需要选择适当的书写方式。计书写形式,可以根据需要选择适当的书写方式。计算机中存储的数据都是以二进制表示的算机中存储的数据都是以二进制表示的. 2.长整型常量的表示方法:长整型常量的表示方法: 在上述方法表示的整数后面后附一个字母在上述方法表示的整数后面后附一个字母l 或或L作后缀作后缀,即可表示该数据的类型是长整型的。即可表示该数据的类型是长整型的。 例如例如65L、-234234L表示十进制有符号长整型表示十进制有符号长整型数,数,345678lu,35LU等表示十进制无符号长整型数。等表示十进制无符号长整型
18、数。 C中,一般只使用无符号的八进制与十六进制中,一般只使用无符号的八进制与十六进制数,不使用有符号的八进制与十六进制数。因此没数,不使用有符号的八进制与十六进制数。因此没有专门的无符号八进制和十六进制标识符。有专门的无符号八进制和十六进制标识符。 3. 65与与65L相同吗?相同吗?2.2.2 常常 量量2.实型常量实型常量在在C语言中,把带小数的数称为实数或浮点数。语言中,把带小数的数称为实数或浮点数。实型常量只能用十进制形式表示。实型常量只能用十进制形式表示。表示方法:表示方法:(1)小数形式。小数形式。如如3.14159、-0.12、.5、2.等都是等都是合法的实数形式。合法的实数形式
19、。(2) 指数形式。指数形式。由一个整数或小数后面跟有一个由一个整数或小数后面跟有一个指数部分组成,指数部分以指数部分组成,指数部分以e或或E开头跟一个正的开头跟一个正的或负的整数,表示以或负的整数,表示以10为底的指数。为底的指数。如:如:3.4e-4/3.4E-4表示表示3.410-4,1.23E4、1.23E+4、1.23e4或或1.23e+4均表示均表示1.23104。 2.2.2 常常 量量注意:注意:字母字母e/E之前(即尾数部分)必须有数之前(即尾数部分)必须有数字,如字,如E2是不合法的表示。是不合法的表示。 e/E后面的指数部分必须是整数,指数后面的指数部分必须是整数,指数部
20、分无整数或为小数均是错误的,例如部分无整数或为小数均是错误的,例如1.0e 和和4e-4.5均是不合法的表示。均是不合法的表示。 3.14159可表示为:可表示为:0.0314159102 、C语言可语言可表示为表示为0.0314159e+2、3141.59e-3 尾数部分有且仅有一位非零整数的表示方法叫尾数部分有且仅有一位非零整数的表示方法叫做科学计数法做科学计数法(规范化指数形式规范化指数形式)。2.2.2 常常 量量3.字符常量字符常量 由一对单引号括起来的单个字符构成。由一对单引号括起来的单个字符构成。 例如:例如:a、B、2等等 一个字符型常量的存储值是该字符集中对应一个字符型常量的
21、存储值是该字符集中对应的的ASCII编码值。编码值。 常用字符的常用字符的ASCII编码值如下:编码值如下:AZ(6590),az(97122),09(4857),空格字符空格字符(32) 。 可以看出:大写字母、小写字母、数字字符可以看出:大写字母、小写字母、数字字符ASCII编码值都是连续的。编码值都是连续的。 2.2.2 常常 量量 除了可见字符以外,还有一些特殊的控除了可见字符以外,还有一些特殊的控制字符无法直接写出,例如换行符等。制字符无法直接写出,例如换行符等。C语语言为它们规定了特殊写法:以反斜杠(言为它们规定了特殊写法:以反斜杠()开)开头的一个字符或一个数字序列,这类字符称头
22、的一个字符或一个数字序列,这类字符称为转义字符为转义字符. 如如:n、214等等 ,具体见下表。具体见下表。转义字符转义字符2.2.2 常常 量量字符形式字符形式功功 能能n换行,将光标从当前位置移到下一行开头换行,将光标从当前位置移到下一行开头t横向跳格,光标跳到下一个水平制表位横向跳格,光标跳到下一个水平制表位b退格退格r回车,将光标从当前位置移到本行开头回车,将光标从当前位置移到本行开头f换页,将光标从当前位置移到下一页开头换页,将光标从当前位置移到下一页开头反斜杠字符反斜杠字符“”单引号字符单引号字符“”双引号字符双引号字符“”ddd1到到3位位8进制数所代表的字符进制数所代表的字符x
23、hh1到到2位位16进制数所代表的字符进制数所代表的字符2.2.2 常常 量量4.字符串常量字符串常量字符串常量是由一对双引号括起的字符序列字符串常量是由一对双引号括起的字符序列. 例如例如“abc”、“a”等等,其中其中“a”的存储形式的存储形式: 字符串常量与字符常量的区别:字符串常量与字符常量的区别: (1) 字符常量由单引号括起来,字符串常量由字符常量由单引号括起来,字符串常量由双引号括起来双引号括起来(2) 字符常量只占一个字节的内存字符常量只占一个字节的内存空间,字符串常量存储串中所有字符和串结束空间,字符串常量存储串中所有字符和串结束标记标记0,其,其ASCII值为值为0 (3)
24、 字符常量只能表示字符常量只能表示单个字符;而字符串常量则可以含一个或多个单个字符;而字符串常量则可以含一个或多个字符,甚至还可以没有字符。字符,甚至还可以没有字符。 a02.2.2 常常 量量5.符号常量符号常量 符号常量就是使用标识符定义一个常量,符号常量就是使用标识符定义一个常量,例如可用如下方法定义例如可用如下方法定义PI代表代表3.14159: #define PI 3.14159 这种常量定义在这种常量定义在C语言中被称之为语言中被称之为“宏定宏定义义”,具体方法将在本书第,具体方法将在本书第11章中介绍。章中介绍。 2.2.2 常常 量量#define PI 3.14159mai
25、n() float r,c,s; scanf(%f,&r); c=2*PI*r; s=PI*r*r; printf(r=%f,c=%f,s=%fn,r,c,s);【例例2-1】输入圆的半径,计算周长和面积输入圆的半径,计算周长和面积2.2.3 变变 量量变量是指在程序运行过程中其值可以被改变的量变量是指在程序运行过程中其值可以被改变的量 三个要素:三个要素:变量名变量名变量的存储单元变量的存储单元变量(存储单元存放)的值。变量(存储单元存放)的值。 1.变量的定义变量的定义类型类型 变量名变量名=初值初值,变量名,变量名=初值初值,;例如下面的两条变量定义语句例如下面的两条变量定义语句
26、 int a; float f; int a,b,c,max;int a=1,b=2,c=3,max;不能用不能用 int a=b=c=3;int a=3,b=3,c=3;注意普通变量的初始化不是在编译阶段完成注意普通变量的初始化不是在编译阶段完成的,而是在程序运行执行到本函数时才给变的,而是在程序运行执行到本函数时才给变量赋以初值。量赋以初值。2.2.3 变变 量量(1)编译系统将根据定义检测函数中的变量名。编译系统将根据定义检测函数中的变量名。 例如在语句例如在语句: maxx=3; 中变量中变量max错写成了错写成了maxx,编译系统将提示,编译系统将提示maxx没有被定义的错误信息。没
27、有被定义的错误信息。(2)编译系统将对每一个变量根据它被定义的类型编译系统将对每一个变量根据它被定义的类型分配相应的存储单元。分配相应的存储单元。 例如对上述被定义的变量例如对上述被定义的变量a、b、c和和max分别分分别分配配2字节的整型存储单元,对变量字节的整型存储单元,对变量f分配分配4字节的单字节的单精度实型存储单元。精度实型存储单元。2.2.3 变量定义的作用变量定义的作用 可以用长度运算符可以用长度运算符sizeof( )求出任意类型求出任意类型变量存储单元的字节数。变量存储单元的字节数。 例如对例如对int型变量型变量a和和float型变量型变量f,sizeof(a)和和size
28、of(f)的值分别为的值分别为2和和4。也可以。也可以用用sizeof( )作用到类型标识符上,如:作用到类型标识符上,如:sizeof(int)和和sizeof(float)得到同样的结果。得到同样的结果。2.2.3 变量定义的作用变量定义的作用2.2.3 变量定义的作用变量定义的作用(3)编译系统根据变量被定义的类型检查该变量进编译系统根据变量被定义的类型检查该变量进行运算的合法性。行运算的合法性。例如上述整型变量例如上述整型变量a、b、c和和max均可以参与求均可以参与求余运算,例如余运算,例如b对对c求余的结果赋给求余的结果赋给a: a=b%c;是合法的,而实型变量是合法的,而实型变量
29、f参加求余运算将是非法的。参加求余运算将是非法的。(4)可以给变量赋初始值。可以给变量赋初始值。如果没有赋初值,普通如果没有赋初值,普通变量将存储随机值,直到给它赋值为止。变量将存储随机值,直到给它赋值为止。定义变量应注意以下问题:定义变量应注意以下问题:(1)变量名可以是任何合法的标识符。变量名可以是任何合法的标识符。 例如例如a、b2、c_1、_3y等均是合法的变量名,而等均是合法的变量名,而#abc、.com、¥、¥b1、5fd2、for等均是不合法的变等均是不合法的变量名。量名。 .见名知义见名知义. 区分大小写字母区分大小写字母(2)在一个函数中,同一个变量不能被定义两次。在一个函数
30、中,同一个变量不能被定义两次。2.2.3 变量定义的作用变量定义的作用2. 变量的赋值变量的赋值 变量的赋值就是给变量的存储单元存储一定变量的赋值就是给变量的存储单元存储一定的值。赋值操作由赋值运算符的值。赋值操作由赋值运算符“=”实现。实现。 赋值方式赋值方式: (1)在定义变量时给变量初始化赋值在定义变量时给变量初始化赋值 (2)在程序运行时用赋值语句给变量赋值,如:在程序运行时用赋值语句给变量赋值,如: int a,b,c; a=2;b=5;c=10; 与初始化赋值不同,用赋值语句给多个变量与初始化赋值不同,用赋值语句给多个变量赋相同的值可以采用连续赋值的形式。如:赋相同的值可以采用连续
31、赋值的形式。如: a=b=c=10;3.整型数据的存储整型数据的存储 C中整数有中整数有6种,可按有符号、无符号分为两大类种,可按有符号、无符号分为两大类 无符号整数的存储较简单,存储单元的每个二进无符号整数的存储较简单,存储单元的每个二进制位存放的制位存放的0、1均表示数。均表示数。 有符号整数,有符号整数,C中用补码表示,以解决计算机不中用补码表示,以解决计算机不能直接表示负数的问题。能直接表示负数的问题。 有符号整数:首位为有符号整数:首位为0表示正整数,为表示正整数,为1表示负整表示负整数。数。3.整型数据的存储整型数据的存储补码补码216-|a| (-32768a0)a的补码的补码
32、=a (0a32767)4.整型数据的溢出整型数据的溢出 由于在计算机中只能用有限的二进制位存放由于在计算机中只能用有限的二进制位存放数据,数据的存储会有溢出问题。对整型数据的存数据,数据的存储会有溢出问题。对整型数据的存储,溢出的情况有:储,溢出的情况有: (1)由于存储的位数有限,绝对值大于存储范由于存储的位数有限,绝对值大于存储范围的数在存储时将溢出;围的数在存储时将溢出; (2)由于有符号的数用补码存储,当存储的补由于有符号的数用补码存储,当存储的补码改变到表示负数范围时将表示负数。码改变到表示负数范围时将表示负数。main( ) int a, b, c;a=32767;b=a+1;p
33、rintf(%d,%dn,a,b,);结果:结果:32767,-32768【例例2-2】整型数据的整型数据的溢出溢出4.整型数据的溢出整型数据的溢出(3)绝对值大的整数存入无符号整型变量绝对值大的整数存入无符号整型变量al原数为正数:原数以原数为正数:原数以2的的16次方次方(65536)为模求得的为模求得的余数即为溢出结果余数即为溢出结果l 原数为负数:原数加原数为负数:原数加2的的16次方次方(65536)的倍数,使的倍数,使结果在结果在0,65535内,此即溢出后内,此即溢出后a的值的值(4) 绝对值大的整数存入有符号整型变量绝对值大的整数存入有符号整型变量al原数为正数:原数以原数为正
34、数:原数以65536为模求得的余数,余数为为模求得的余数,余数为a的补码,当余数为的整数时为负数的的补码,当余数为的整数时为负数的补码,即存储结果补码,即存储结果a为负数为负数l 原数为负数:原数加原数为负数:原数加65536的倍数,使结果在的倍数,使结果在 -32768,32767内,此即溢出后内,此即溢出后a的值的值5.实型数据的存储实型数据的存储 为了扩大表示数的范围,实型数据是按指数形为了扩大表示数的范围,实型数据是按指数形式存储的。以微机中存储式存储的。以微机中存储float型数据为例,型数据为例,float型型数据在内存中占据数据在内存中占据4个字节即个字节即32位二进制信息,分位
35、二进制信息,分别存放符号位、规格化的尾数、阶符位和阶码。别存放符号位、规格化的尾数、阶符位和阶码。6.实型数据的舍入误差实型数据的舍入误差 除了溢出以外,整数存储是没有误差的。除了溢出以外,整数存储是没有误差的。 由于实型变量是用有限的存储单元存储较大范由于实型变量是用有限的存储单元存储较大范围的实数,提供的有效数字总是有限的,尾数在有围的实数,提供的有效数字总是有限的,尾数在有效位以外的部分将被舍去,因此实型数据是有误差效位以外的部分将被舍去,因此实型数据是有误差的。的。 (1)一个比较小的数与一个比较大的数求和,一个比较小的数与一个比较大的数求和,和的有效位数超过允许的范围,最后的结果是比
36、较和的有效位数超过允许的范围,最后的结果是比较小的数没起作用。小的数没起作用。 (2)4.0/3.0*3.0,按数学常识结果应等于,按数学常识结果应等于4.0,然而由于舍入误差,其结果并不一定等于然而由于舍入误差,其结果并不一定等于4.0。/* EX2-3.C */main( ) float x, y; x=123456.789E5; y=x+30.0; printf(x=%f, y=%fn, x, y);【例例2-3】实型数据的实型数据的舍入误差舍入误差7. 字符数据的存储与使用字符数据的存储与使用 字符类型数据的存储与整型数据的存储十分字符类型数据的存储与整型数据的存储十分相似,也分成有符
37、号和无符号两种,只是用一个相似,也分成有符号和无符号两种,只是用一个字节字节8位二进制信息存储字符类型数据。位二进制信息存储字符类型数据。 01000001c (0c127)28-|c| (-128c = = = = != 3.逻辑运算符逻辑运算符! & | 4.位运算符位运算符 | & 5.赋值类运算符赋值类运算符= 及及 自反赋值运算符自反赋值运算符 6.条件运算符条件运算符?:7.逗号运算符逗号运算符, 8.指针及求地址运算符指针及求地址运算符* &9.求存储单元字节数运算符求存储单元字节数运算符sizeof10.类型转换运算符类型转换运算符(类型)(类型)11.
38、结构体成员运算符结构体成员运算符 -12.下标运算符下标运算符 13.其他运算符其他运算符 如函数调用运算符如函数调用运算符( )等等 学习运算符要注意几个方面问题:学习运算符要注意几个方面问题:(1)运算符的功能;运算符的功能;(2)运算符与操作对象的关系:运算符与操作对象的关系:操作数的个数操作数的个数(单目、双目、三目单目、双目、三目);操作数的类型(如求余运算符操作数的类型(如求余运算符%要求操作数要求操作数是整型);是整型);结合方向(操作数到运算符):左结合、右结合方向(操作数到运算符):左结合、右结合;结合;(3)运算符的优先级;运算符的优先级;(4)运算结果的数据类型:不同类型
39、数据运算将运算结果的数据类型:不同类型数据运算将发生类型转换发生类型转换2.3 运算符与表达式运算符与表达式2.3.1 算术运算符与算术表达式算术运算符与算术表达式1基本算数运算符基本算数运算符C语言中基本的算术运算符共有语言中基本的算术运算符共有5个,分别为:个,分别为:+(加)(加), -(减)(减), *(乘)(乘), /(除)(除),%(取模,或称求余)(取模,或称求余)(1) 双目运算符,结合方向均为从左到右。双目运算符,结合方向均为从左到右。(2) %(取模)运算符仅用于整型变量或整型常量的运算,(取模)运算符仅用于整型变量或整型常量的运算,a%b结果为结果为a除以除以b的余数,余
40、数的符号与被除数相同的余数,余数的符号与被除数相同如:如:7%3的值为的值为1;17%-3的结果为的结果为2;-19%4的结果为的结果为-3。2.3 运算符与表达式运算符与表达式2.3 运算符与表达式运算符与表达式(3) +、-、*、/运算符的两个操作数既可以是整数运算符的两个操作数既可以是整数,也可以是实数。所有实数均按,也可以是实数。所有实数均按double型计算。型计算。(4) /(除法)运算符,两个整型的数据相除时结(除法)运算符,两个整型的数据相除时结果为整数。果为整数。如:如:7/3,其值为,其值为2,舍去小数部分,相当于整除,舍去小数部分,相当于整除操作;当操作数中有一个为负数时
41、,整除结果取操作;当操作数中有一个为负数时,整除结果取整为向整为向0靠拢如:靠拢如:-5/3=-1。2基本算术表达式基本算术表达式基本算术表达式基本算术表达式: 基本算术运算符、括号以及操作对象基本算术运算符、括号以及操作对象组成的符合组成的符合C语言语法规则的表达式语言语法规则的表达式.2.3.1 算术运算符与算术表达式算术运算符与算术表达式优先级:优先级:(*、/、%)同级较高,同级较高,(+、-)同级较低同级较低结合方向结合方向:当一个运算对象两侧的运算符的优先级别不当一个运算对象两侧的运算符的优先级别不同时,应遵循优先级高的先处理的规则。同时,应遵循优先级高的先处理的规则。 当一个运算
42、对象两侧的运算符的优先级别相同时,当一个运算对象两侧的运算符的优先级别相同时,应遵循运算符的结合方向。算术运算符的结合方向是从应遵循运算符的结合方向。算术运算符的结合方向是从左至右。左至右。 有时为了达到某种目的,需要将一个表达式有时为了达到某种目的,需要将一个表达式的类型转变成所需的类型,这时就要用到强制类的类型转变成所需的类型,这时就要用到强制类型转换运算符。型转换运算符。作用形式:作用形式: (类型类型) (表达式表达式)将表达式的值转换成相应类型将表达式的值转换成相应类型例如:例如: (double)a (int)(x+y) (float)5/3优先级:同所有单目运算符,高于基本算术运
43、优先级:同所有单目运算符,高于基本算术运算符。算符。3.强制类型转换强制类型转换( (显式转换显式转换) )运算符运算符3.强制类型转换强制类型转换( (显式转换显式转换) )运算符运算符注意:注意:表达式一定要加括号表达式一定要加括号(强制类型转换是单强制类型转换是单目运算,优先级高目运算,优先级高),例如上面最后一个表,例如上面最后一个表达式中只是将达式中只是将5转变成转变成float型,而不是将型,而不是将5/3转变成转变成float型。型。若对变量实行显式转换,将得到新类型的若对变量实行显式转换,将得到新类型的一个值,原变量的类型及其存储值均不变。一个值,原变量的类型及其存储值均不变。
44、 /* EX2-7.C */main( ) float x=3.6; printf(%d, (int)x); printf(%fn, x);【例例2-7】强制类型转换强制类型转换 由于求余(取模)运算只能针对整型数据,因由于求余(取模)运算只能针对整型数据,因此经常用强制类型转换的办法将一个实型量(变量此经常用强制类型转换的办法将一个实型量(变量或常量)变换成整型,然后才能进行取模运算,例或常量)变换成整型,然后才能进行取模运算,例如:如:(int)5.5%3。4. 自增自减运算符:自增自减运算符:+和和- - 自增自减运算符自增自减运算符+和和-是是C语言中最常用也语言中最常用也最难掌握的两
45、个单目运算符,具有右结合性。最难掌握的两个单目运算符,具有右结合性。他们的作用是:只作用于变量,使变量的值他们的作用是:只作用于变量,使变量的值自增自增1或自减或自减1。 如如+i相当于相当于i=i+1;-j相当于相当于j=j-1,因此,因此+、- -实质也有赋值作用。实质也有赋值作用。不能对常量或表达式赋值,不能对常量或表达式赋值,3+, (a+b)- -等等都是错误的。都是错误的。4. 自增自减运算符:自增自减运算符:+和和- - +和和-运算符的前缀运算与后缀运算运算符的前缀运算与后缀运算 (1)前缀运算前缀运算+i: 相当于相当于i=i+1且表达式的值与且表达式的值与i的值相同的值相同
46、(i先加先加1,再使用,再使用i的值的值);同样,;同样,-j相当于相当于j=j-1且表达式的值与且表达式的值与j的值相同的值相同 (j先减先减1,再使用,再使用j的值的值) (2)后缀运算后缀运算i+: 先取先取i的值作为表达式的值,的值作为表达式的值,i再自增再自增1 (先使用先使用i的值,的值,再使再使i增增1);同样,;同样,j-:先取先取j的值作为表达式的值,的值作为表达式的值,j再自减再自减1 (先使用先使用j的值,再使的值,再使j减减1)。4. 自增自减运算符:自增自减运算符:+和和- -自增自减运算符使用中的若干问题自增自减运算符使用中的若干问题(TURBO C中的规定中的规定
47、):(1)连续自增问题连续自增问题例例: int i=3;(i+)+(i+)+(i+)的值为的值为,而而i的值为的值为 (统一取值后逐步自增统一取值后逐步自增) int i=3;(+i)+(+i)+(+i)的值为的值为18,而而i的值为的值为6 (先逐步自增后统一取值先逐步自增后统一取值)(2)连续自增作为连续自增作为printf()函数输出项问题函数输出项问题例例: int i=3;printf(“%dn”,(i+)+(i+)+(i+)输出输出12 (逐步取值并自增逐步取值并自增) int i=3;printf(“%dn”,(+i)+(+i)+(+i)输出输出15 (逐步自增并取值逐步自增并
48、取值)(3)printf()中多输出项计算问题中多输出项计算问题(从右向左运算从右向左运算)例例:int i=3;printf(“%d,%dn”,i+2,i+)输出输出6,3/* EX2-8.C */main() int i=5,j; j=+i+i+; printf(i=%d,j=%dn,i,j); i=5; j=(+i)+(+i)+(i+); printf(i=%d,j=%dn,i,j); printf(%d %dn,i+j,j+); 【例例2-8】输出下面程序中输出下面程序中i i、j j的值的值2.3.2 赋值运算符与赋值表达式赋值运算符与赋值表达式 1.赋值运算符赋值运算符 C语言中赋
49、值运算符为语言中赋值运算符为“=”,它的作用的一般形,它的作用的一般形式为:式为: 变量变量=表达式表达式 即将即将“=”右边的表达式的值赋给其左边的变量。右边的表达式的值赋给其左边的变量。如:如: a=5; /* 表示把一个常量表示把一个常量5赋给变量赋给变量a */ x=a+5; /* 表示将表达式表示将表达式a+5的值赋给变量的值赋给变量x */ 如果赋值运算符两侧的类型不一致,在赋值时要如果赋值运算符两侧的类型不一致,在赋值时要将表达式将表达式值的类型值的类型转换成变量的类型,然后再赋给转换成变量的类型,然后再赋给变量变量 几点说明:几点说明:(1)“=”是赋值运算符,不是等于号(等于
50、号是是赋值运算符,不是等于号(等于号是=)。)。(2)赋值运算方向为自右向左。赋值运算方向为自右向左。(3)赋值运算的过程:先计算表达式,然后将计算结果转赋值运算的过程:先计算表达式,然后将计算结果转换成变量的类型后存到变量的存储单元中,该变量原有的换成变量的类型后存到变量的存储单元中,该变量原有的值被覆盖。值被覆盖。(4)赋值运算符左边只能是变量,不能是常量或表达式,赋值运算符左边只能是变量,不能是常量或表达式,如如2=a和和a+b=c都是错误的。都是错误的。(5)赋值运算符的优先级较低(只高于逗号运算符),因赋值运算符的优先级较低(只高于逗号运算符),因此一般情况下表达式无须加括号,如此一
51、般情况下表达式无须加括号,如a=2+7/3将值将值4赋给变赋给变量量a。(6)赋值运算是一个表达式,其值即赋值后变量的值,可赋值运算是一个表达式,其值即赋值后变量的值,可赋给其它变量赋给其它变量 。如。如b=(a=3+5)2.3.2 赋值运算符与赋值表达式赋值运算符与赋值表达式 C语言允许在赋值运算符语言允许在赋值运算符“=”之前加上其他运算之前加上其他运算符以构成复合的赋值运算符。符以构成复合的赋值运算符。 基本算术运算符和位运算符。有:基本算术运算符和位运算符。有:+=,-=,*=,/=,%=,=,&=,=,|= 2. 复合赋值运算符复合赋值运算符a+=5 等价于等价于a=a+5
52、c-=d 等价于等价于c=c-da*=b+5 等价于等价于 a=a*(b+5) g/=h-f 等价于等价于 g=g/(h-f)a%=5 等价于等价于 a=a%5 3. 赋值类运算符的副作用及限制赋值类运算符的副作用及限制 (1)费解,易于误解。费解,易于误解。(2)不定解:因机器不同得到不同的结果。不定解:因机器不同得到不同的结果。 (3)注意:对赋值类运算符,交换律不成立注意:对赋值类运算符,交换律不成立c=b*=a+2; j=3; i=(k=j+1)+(j=5); 若先算后面括号,结果为若先算后面括号,结果为i=11;若先算前面括号,结果为若先算前面括号,结果为i=9;(TC规定从左到右计
53、算规定从左到右计算)i=(j=5)+(k=j+1); 4. 算术表达式的计算算术表达式的计算 优先级优先级类型类型运算符运算符结合性结合性1结构类结构类( )2单目单目+、-、+、-、sizeof( )3双目双目*、/、%4双目双目+、-5赋值类赋值类=、+=、-=、*= 、 /= 、 %=1.圆括号优先级最高,有多层圆括号从内向外运算圆括号优先级最高,有多层圆括号从内向外运算2.(类型名类型名)(表达式表达式)为强制类型转换运算;为强制类型转换运算;3.先按运算符的优先级由高到低进行,如先按运算符的优先级由高到低进行,如5*-2相当相当于于5*(-2),结果为,结果为-10;同级的运算符按结
54、合方向进行;同级的运算符按结合方向进行 例:设有变量声明例:设有变量声明float a=3.0; int b=2; 计算表达式计算表达式: 2+sqrt(1.0+a)*b+/2解:解: 2+sqrt(1.0+a)*b+/22+sqrt(4.0)*b+/22+2.0*2/22+4.0/22+2.04.0 即表达式的值为即表达式的值为4.0,同时,同时b的值变为的值变为3,a的的值不变。值不变。 4. 算术表达式的计算算术表达式的计算 2.3.3 逗号运算符与逗号表达式逗号运算符与逗号表达式1.逗号运算符逗号运算符 用逗号运算符可以将两个表达式连接起来。如:用逗号运算符可以将两个表达式连接起来。如
55、: 2+3,2+52.逗号表达式逗号表达式 用逗号运算符连接两个或两个以上表达式所形用逗号运算符连接两个或两个以上表达式所形成的新表达式就是逗号表达式,其一般形式为:成的新表达式就是逗号表达式,其一般形式为:(表达式表达式1),(表达式表达式2) , (表达式表达式n) 求值过程:先求表达式求值过程:先求表达式1的值,再求表达式的值,再求表达式2的值的值,,最后求表达式最后求表达式n的值。表达式的值。表达式n的值就是整个逗的值就是整个逗号表达式的值。号表达式的值。 一个逗号表达式可以与另一个表达一个逗号表达式可以与另一个表达式构成一个新的逗号表达式。例如:式构成一个新的逗号表达式。例如: (a
56、=2+3,a*5),a+10 优先级优先级: 逗号运算符是所有运算符中级别逗号运算符是所有运算符中级别最低的最低的.结合性结合性:逗号表达式的结合性为自左向逗号表达式的结合性为自左向右的。右的。 2.3.3 逗号运算符与逗号表达式逗号运算符与逗号表达式/* EX2-9.C */main() int y=3,x=3,z=1; printf(%d %dn,(+x,y+),z+2); 【例例2-9】分析下面程序的运行结果分析下面程序的运行结果2.4 数据类型转换数据类型转换2.4.1类型转换概述类型转换概述 三种方式:三种方式: 类型自动转换、赋值类型转换和强制类型转换类型自动转换、赋值类型转换和强
57、制类型转换 1.不同数据类型的差异不同数据类型的差异 (1)floatdouble(2)(char,short,int,long)(float,double) (3)charshortintlong(4)signedunsigned2.数据类型转换产生的数据类型转换产生的6种效果种效果(1)数据类型提升与降格数据类型提升与降格(2)为保持数值不变,整型短数据转换成整型长数据时将为保持数值不变,整型短数据转换成整型长数据时将产生符号位扩展与零扩展。产生符号位扩展与零扩展。(3)最高位失去符号位功能最高位失去符号位功能(signed型转换成型转换成unsigned型型)与变成符号位与变成符号位(u
58、nsigned型转换成型转换成signed型型):长度不变,:长度不变,数值可能改变数值可能改变(4)丢失精度丢失精度(5)截去高位截去高位(溢出溢出)产生数值的变化:发生在长的整型数产生数值的变化:发生在长的整型数据转换成较短类型的整型数据时。据转换成较短类型的整型数据时。(6)给实数赋值,给实数赋值,float型只能接受型只能接受7位有效数字,位有效数字,double型只能接受型只能接受16位有效数字,多给无效。位有效数字,多给无效。2.4 数据类型转换数据类型转换系统自动按运算顺序将低级的数据直接转换成高级系统自动按运算顺序将低级的数据直接转换成高级的数据,以保证运算的精度,具体规则为:
59、的数据,以保证运算的精度,具体规则为:(1) float 在运算时自动转换成在运算时自动转换成double;(2) char和和short在运算时自动转换成整型数据在运算时自动转换成整型数据int;(3) int和和unsigned int混合运算时,将整型数据转混合运算时,将整型数据转换成无符号整型数据,即是用补码参加运算,不会换成无符号整型数据,即是用补码参加运算,不会影响结果的正确性;影响结果的正确性;(4) int或或unsigned int与与long混合运算时,都转换混合运算时,都转换成成long型。型。(5) int、unsigned、long与浮点型数据混合运算时,与浮点型数据
60、混合运算时,都转换成浮点型数据(都转换成浮点型数据(double)。)。2.4.2 自动类型转换自动类型转换 高高doublefloatlongchar,shortunsigned低自动类型转换规则int2.4.2 自动类型转换自动类型转换2.4.3 赋值类型转换赋值类型转换 赋值运算时,如果赋值运算符两侧的类型赋值运算时,如果赋值运算符两侧的类型(指基本类型)不一致,系统自动将表达式的(指基本类型)不一致,系统自动将表达式的值转换成变量的类型存到变量的存储单元,转值转换成变量的类型存到变量的存储单元,转换的结果可能会:换的结果可能会:(1)当整型数据赋给浮点型变量时,数值上不当整型数据赋给浮点型变量时,数值上不发生任何变化,但
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 成品油安全责任制度范本
- 房建质量责任制度
- 执法大队首问责任制度
- 技术推广责任制度
- 投标人安全责任制度
- 招商岗位责任制度
- 排污责任制度
- 插画师职位责任制度
- 支部第一责任制度
- 政工主官责任制度
- GB/T 41498-2022纤维增强塑料复合材料用剪切框测定面内剪切应力/剪切应变响应和剪切模量的试验方法
- GB/T 28733-2012固体生物质燃料全水分测定方法
- FZ/T 08001-2021羊毛絮片服装
- 博弈策略的生活解读 课件
- PSP问题分析与解决能力训练课件
- 灌注桩低应变法参数表
- 浦发银行个人信用报告异议申请表
- 综合实践六年级下册和灯做朋友-完整版课件
- 【自考练习题】中国矿业大学概率论与数理统计真题汇总(附答案解析)
- 主题班会-315诚信教育课件
- 数字化仿真概述课件
评论
0/150
提交评论