《C语言程序设计课件完整版电子教案.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计课件完整版电子教案.ppt(374页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第2章 基本数据类型和运算符及表达式 共共95页页第2页主要内容常量与变量整型数据实型数据字符型数据运算符和表达式数据类型的转换程序案例小结共共95页页第3页2-1 常量与变量常量和符号常量变量共共95页页第4页常量常量所谓常量,是指在程序运行过程中其值保持不变的量。如程序中的具体数字、字符等。常量被区分为不同的类型。共共95页页第5页符号常量符号常量用一个标识符代表一个常量,称为符号常量,即标识符形式的常量。共共95页页第6页2-1-2 变量变量的概念变量的概念变量的定义变量的初始化共共95页页第7页变量的概念变量的概念C语言中的变量是指在一个程序运行过程中,其值能被改变的量。一个变量应该有
2、一个名字作为标识,变量名的命名规则也就是相关标识符的命名规则。共共95页页第8页变量的定义变量的定义在C语言中,所有变量必须在使用之前给予说明。也就是“先定义,后使用”,说明主要是指出变量的类型。变量定义的一般格式为:数据类型标识符 变量名1,变量名2,变量名n;共共95页页第9页变量的存储共共95页页第10页变量的初始化 在定义变量时同时初始化变量在定义变量时同时初始化变量 int a=8;int a=8;/*/*指定指定a a为整型变量为整型变量,初值为初值为8*/8*/float f=8.24;float f=8.24;/*/*指定指定f f为实型变量为实型变量,初值为初值为8.24*/
3、8.24*/char c=a;char c=a;/*/*指定指定c c为字符型变量为字符型变量,初值为初值为a*/a*/给被定义变量的部分赋初值给被定义变量的部分赋初值 int a,b,c=-6;int a,b,c=-6;它表示指定它表示指定a a、b b、c c均为整型变量,而只对均为整型变量,而只对c c进行进行初始化,且初始化,且c c的初值为的初值为-6-6。共共95页页第11页变量的初始化 对几个变量赋给同一个初值若对几个变量赋同一个初值,不能写成:int a=b=c=6;而应写成:int a=6,b=6,c=6;初始化不是在编译阶段完成的,而是在程序运行时执行本函数时赋给初值的,相
4、当于有一个赋值语句。共共95页页第12页2-2 整型数据整型常量整型变量共共95页页第13页2-2-1 整型常量十进制的整型常量:十进制数允许出现的数字是0-9共10个阿拉伯数字,并以非0数字开头。如456、-789、0等。八进制的整型常量:以0开头的整型常量是八进制整型常量。十六进制的整型常量:以0 x开头的整型常量是十六进制整型常量。共共95页页第14页2-2-2 整型变量整型变量的分类整型变量的分类整型数据在内存中的存放形式整型数据在内存中的存放形式整型变量的定义整型变量的定义整型数据的溢出共共95页页第15页整型变量的分类整型变量的分类基本整型,以int表示。短整型,以short in
5、t表示,或以short表示。长整型,以long int表示,或以long表示。共共95页页第16页整型变量的表示方法共共95页页第17页C语言整型变量数值的表示范围 共共95页页第18页整型数据在内存中的存放形式 数据在内存中是以二进制形式存放的。如果定义了一个整型变量i,系统就给变量i分配相应的存储单元。共共95页页第19页整型变量的定义整型变量的定义定义变量一般要在程序块的首部进行,以免在编译中出现定义变量一般要在程序块的首部进行,以免在编译中出现变量未定义的错误。变量定义的位置决定了被定义变量的变量未定义的错误。变量定义的位置决定了被定义变量的作用域,这一概念将在以后介绍。作用域,这一概
6、念将在以后介绍。描述数据类型的关键字与被定义的变量之间至少要有一个描述数据类型的关键字与被定义的变量之间至少要有一个以上的空格隔开,这样做的目的一是便于阅读程序,二是以上的空格隔开,这样做的目的一是便于阅读程序,二是便于编译系统识别。便于编译系统识别。多个变量是同一数据类型时,可以用一个数据类型的关键多个变量是同一数据类型时,可以用一个数据类型的关键字进行定义,但必须注意,变量间要用逗号隔开,结尾要字进行定义,但必须注意,变量间要用逗号隔开,结尾要用分号结束。用分号结束。变量可以以任意顺序进行定义,不必与它们在代码块中出变量可以以任意顺序进行定义,不必与它们在代码块中出现的顺序相对应。现的顺序
7、相对应。在定义在定义short intshort int型、型、long int long int 型和型和unsigned int unsigned int 型变量时,可型变量时,可以只用以只用shortshort,longlong和和unsignedunsigned进行定义。进行定义。共共95页页第20页整型变量的定义整型变量的定义一个整型常量,其值在一个整型常量,其值在-32 768-32 76832 76732 767范围内,认为它是范围内,认为它是intint型,它可以赋值给型,它可以赋值给intint型和型和short intshort int型变量。型变量。一个整型常量,其值若超
8、过了上述范围,在一个整型常量,其值若超过了上述范围,在-2 147 483 648-2 147 483 6482 147 483 6472 147 483 647范围之内,则认为它是范围之内,则认为它是long int long int 型,可以将型,可以将它赋值给一个它赋值给一个long int long int 型变量。型变量。如果如果C C语言版本(如语言版本(如Turbo CTurbo C)确定)确定short int short int 与与int int 型数据在型数据在内存中占据的长度相同,则它的表数范围与内存中占据的长度相同,则它的表数范围与int int 型相同。型相同。因此
9、,一个因此,一个intint型的常量也同时是一个型的常量也同时是一个short int short int 型常量,可型常量,可以赋值给以赋值给int int 型或型或short int short int 型变量。型变量。常量中无常量中无unsignedunsigned类型。但一个非负值的整型常量可以赋类型。但一个非负值的整型常量可以赋值给值给unsignedunsigned型的整型变量,只要它的范围不超过变量数型的整型变量,只要它的范围不超过变量数值的表示范围即可。值的表示范围即可。在一个整型常量后面加一个字母在一个整型常量后面加一个字母l l 或或L L,则认为是,则认为是long in
10、t long int 型常量。型常量。共共95页页第21页整型数据的溢出 共共95页页第22页2-3 实型数据实型常量实型变量共共95页页第23页2-3-1 实型常量实型常量的形式实型常量的形式实型常量的类型实型常量的类型共共95页页第24页实型常量的形式实型常量的形式十进制数形式 由数字09和小数点组成(注意,必须有小数点)。如3.14159、0.123、.321、21.0、0.0等。注意:在用十进制数书写实型常量时,必须包含小数点,小数点的两边不一定要求都有数字,例如,21.0可以写成21.;而0.123可以写成.123。共共95页页第25页实型常量的形式实型常量的形式指数形式指数形式 实
11、型常量的指数形式类似于数学中的指数表示法,就实型常量的指数形式类似于数学中的指数表示法,就是把其是把其1010的多少次幂中的的多少次幂中的1010用用E E(e e)代替。一般格式)代替。一般格式为:为:尾数尾数E(e)E(e)整数指数整数指数 如如5.1105.1102727,7.210237.21023。在。在C C语言程序中表示为:语言程序中表示为:5.1e-275.1e-27,7.2e237.2e23或或7.2e+237.2e+23。注意:在用指数形式书写实型常量时,注意:在用指数形式书写实型常量时,e e(或(或E E)的前)的前面和后面必须有数字,且面和后面必须有数字,且e e后面
12、的指数必须为整数,后面的指数必须为整数,而尾数可以是整数也可以是小数。例如,而尾数可以是整数也可以是小数。例如,.0e0.0e0、1E01E0、0e50e5合法,而合法,而e3e3、2.1e3.52.1e3.5、.e3.e3、e e等都不是合法的指数等都不是合法的指数形式。形式。共共95页页第26页实型常量的类型实型常量的类型许多编译系统将实型常量作为双精度来处理。例许多编译系统将实型常量作为双精度来处理。例如,已定义一个实型变量如,已定义一个实型变量f f,有如下语句:,有如下语句:f=3.86435*6620.87 f=3.86435*6620.87 系统将系统将3.864353.8643
13、5和和6620.876620.87按双精度数据存储(占按双精度数据存储(占6464位)和运算,得到一个双精度的乘积,然后取前位)和运算,得到一个双精度的乘积,然后取前1616位赋给实型变量位赋给实型变量f f。这样做可以保证计算结果更。这样做可以保证计算结果更精确,但是运算速度降低了。若在数的后面加字精确,但是运算速度降低了。若在数的后面加字母母f f或或F F(如(如1.65f1.65f、654.87F654.87F),这样编译系统就会),这样编译系统就会按单精度(按单精度(3232位)处理。位)处理。共共95页页第27页实型常量的类型实型常量的类型一个实型常量可以赋给一个float型、do
14、uble型或long double型变量。根据变量的类型截取实型常量中相应的有效位数字。共共95页页第28页2-3-2 实型变量实型变量的分类实型变量的定义实型变量的定义实型数据在内存中的存放形式实型数据在内存中的存放形式实型数据的误差共共95页页第29页实型变量的分类实型变量的分类实型变量分为单精度(float型)、双精度(double型)和长双精度(long double型)3类。共共95页页第30页 实型变量共共95页页第31页实型变量的定义 使用单精度型变量之前,必须在程序块的首部对其进行定义。定义单精度型变量的关键字是float。定义i为长双精度实数。C编译系统将为其分配8个字节(1
15、28bit)的存储空间。共共95页页第32页实型数据在内存中的存放形式 共共95页页第33页实型数据在内存中的存放形式 共共95页页第34页实型数据的误差 由于实型变量是用有限的存储单元存储的,因此,能提供的有效数字总是有限的,在有效位以外的数字将被舍去。由此可能会产生一些误差。共共95页页第35页2-4 字符型数据字符常量转义序列字符串常量符号常量字符型变量字符数据在内存中的存放形式及其使用方法共共95页页第36页2-4-1 字符常量C语言中字符型常量是由一对单引号括起来的单个字符构成。例如:x,y,7,%,;等都是有效的字符型常量。共共95页页第37页2-4-2 转义序列除了以上介绍的字符
16、常量之外,C语言还允许用一种特殊形式的字符常量,就是以一个“”开头的字符序列。共共95页页第38页转义序列 共共95页页第39页2-4-3 字符串常量C语言中除了允许使用字符型常量外,还允许使用字符串常量。字符串常量是用一对双引号括起来的字符序列。共共95页页第40页2-4-4 符号常量C语言中,常量可以用符号代替,代替常量的符号称之为符号常量。为了便于与一般标识符、变量名相区别,符号常量一般用大写英文字母序列构成,符号常量在使用之前必须预先进行定义。其定义的一般格式是:#define 符号常量名 常量共共95页页第41页2-4-4 符号常量使用符号常量增强了程序的可读性。使程序易于修改。共共
17、95页页第42页2-4-5 字符型变量字符型变量是用来存放字符常量的,在一个字符变量中只能放一个字符,而不能存放一个字符串(包括若干字符)。字符型变量和整型变量一样也需要先定义,其定义应该在程序块的首部,其关键字是“char”。字符型变量的定义形式如下:char c1,c2;或char c1;char c2;共共95页页第43页2-4-6 字符数据在内存中的存放形式及其使用方法字符常量在内存中的存放形式及使用字符常量在内存中的存放形式及使用字符串常量在内存中的存放形式共共95页页第44页字符常量在内存中的存放形式及使用 将一个字符常量放到一个字符型变量中,实际上并不是把该字符本身放到内存单元中
18、去,而是将该字符的相应的ASCII代码放到存储单元中。共共95页页第45页字符常量在内存中的存放形式共共95页页第46页字符串常量在内存中的存放形式字符串常量在内存中的存放形式字符串常量在内存中存储时,系统自动在该字符串的末尾加一个“字符串结束标志”,这个结束标志就是0(ASCII码值为0的字符),也用NULL表示。它是一字节(8bit)的代码,因此,长度为n个字符的字符串常量,在内存中要占用n+1个字节的存储空间。共共95页页第47页2-5 运算符和表达式 运算符的分类运算符的分类运算符的优先级与结合性运算符的优先级与结合性算术运算符和算术表达式算术运算符和算术表达式增增1 1、减、减1 1
19、运算符及表达式运算符及表达式赋值运算符和赋值表达式赋值运算符和赋值表达式关系运算符和关系表达式关系运算符和关系表达式逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式逗号运算符和逗号表达式逗号运算符和逗号表达式sizeofsizeof运算符运算符共共95页页第48页2-5-1 运算符的分类 圆括号运算符:圆括号运算符:()()。算术运算符:算术运算符:+、-、*、%。增增1 1、减、减1 1运算符:运算符:+、-。赋值运算符:赋值运算符:=及其扩展赋值运算符。及其扩展赋值运算符。关系运算符:、关系运算符:、=、=、=、!=!=。逻辑运算符:逻辑运算符:&、!。逗号运算符:逗号运算符:,。求字节数运算
20、符:求字节数运算符:sizeofsizeof。共共95页页第49页2-5-1 运算符的分类 强制类型转换运算符:(类型)。条件运算符:?、:。下标运算符:。指针运算符:*、&。分量运算符:、。位运算符:、|、。共共95页页第50页2-5-2 运算符的优先级与结合性运算符的优先级运算符的优先级运算符的结合性运算符的结合性共共95页页第51页运算符的优先级 所谓运算符的优先级就是在一个表达式中运算符所具有的运算优先次序。优先级数字越大,表示优先级越高,越优先被执行。在C语言中,运算符的优先顺序共分15个等级,最低为1,最高为15。处在同一级别的运算符,它们的优先级相同。共共95页页第52页运算符的
21、结合性运算符的结合性所谓运算符的结合性就是同一优先级的运算符的结合方向。自左至右的结合方向,称为“左结合性”;反之称为“右结合性”。除单目运算符、赋值运算符和条件运算符是“右结合性”,即第14、3、2级。其他运算符都是“左结合性”。共共95页页第53页2-5-3 算术运算符和算术表达式算术运算符算术运算符算术表达式算术表达式算数运算符的优先级、结合性共共95页页第54页算术运算符算术运算符C语言有如下5个算术运算符。+:加法运算符,或正值运算符,如1+4,+8。-:减法运算符,或负值运算符,如5-2,-9。*:乘法运算符,如2*6。/:除法运算符,如7/4。%:模运算符,或称求余运算符,如5%
22、3。共共95页页第55页算术运算符算术运算符两个整数相除的结果为整数,如5/3的结果值为1,舍去小数部分。但是,如果除数或被除数中有一个为负值,则舍入的方向是不固定的。模运算是取整数除法的余数。共共95页页第56页算术表达式算术表达式算术运算符和操作数结合构成算术表达式。操作数包括常量、变量、函数等。共共95页页第57页算数运算符的优先级、结合性算数运算符的优先级、结合性算术运算符中的“*、/、%”运算符指定优先级是第13级,它们优先于优先级小于13级的各种运算符,但它们低于优先级为第15级和第14级的运算符。而运算符+、-的优先级是第12级。也就是说在一个表达式中有加、减、乘和除运算时要先进
23、行乘、除运算,而后进行加、减运算。共共95页页第58页2-5-4 增1、减1运算符及表达式增1、减1运算符增1、减1表达式共共95页页第59页增1、减1运算符C语言中除了基本运算符外,还包括两个特殊的算术运算符:增1运算符“+”,减1运算符“-”。表达形式有4种:+操作数操作数操作数操作数+-操作数操作数操作数操作数-共共95页页第60页增1、减1表达式 由增由增1 1、减、减1 1运算符和变量构成的表达式是增运算符和变量构成的表达式是增1 1、减、减1 1表达式。表达式。使用增使用增1 1、减、减1 1操作时需注意:操作时需注意:增增1 1、减、减1 1运算的操作对象只能是变量,而不允许运算
24、的操作对象只能是变量,而不允许是常量或表达式、函数调用等。是常量或表达式、函数调用等。增增1 1、减、减1 1运算符的操作数通常是整型或字符型,运算符的操作数通常是整型或字符型,因为上述类型的数据操作后其值是确定的;而实因为上述类型的数据操作后其值是确定的;而实型数操作前后并不能确保其差的绝对值是型数操作前后并不能确保其差的绝对值是1 1。增增1 1、减、减1 1操作又分前置和后置操作两类,它们有操作又分前置和后置操作两类,它们有质的区别。质的区别。共共95页页第61页增1、减1表达式 增增1 1、减、减1 1运算是除了第运算是除了第1515级以外优先级最高的运级以外优先级最高的运算。但是后置
25、操作则要注意:必然先引用其值参算。但是后置操作则要注意:必然先引用其值参加运算,再做后置操作。加运算,再做后置操作。注意增注意增1 1、减、减1 1操作的副作用。操作的副作用。增增1 1、减、减1 1运算一般用于如下两种场合:运算一般用于如下两种场合:计数。最常用的场合是修改循环控制变量,因为计数。最常用的场合是修改循环控制变量,因为n+n+不不论是从书写的角度还是从阅读的角度都比论是从书写的角度还是从阅读的角度都比n=n+1n=n+1来得简来得简捷方便;且生成的目标码较之捷方便;且生成的目标码较之n=n+1n=n+1短。短。指针增指针增1 1、减、减1 1操作。操作。在增在增1 1或减或减1
26、 1表达式不是其他表达式的一部分时,表达式不是其他表达式的一部分时,其前置操作和后置操作的效果是一样的。其前置操作和后置操作的效果是一样的。共共95页页第62页2-5-5 赋值运算符和赋值表达式赋值运算符赋值运算符复合的赋值运算符复合的赋值运算符赋值表达式赋值表达式共共95页页第63页赋值运算符 赋值符号“=”就是赋值运算符,它的作用是将一个数据赋给一个变量。例如:a=10;/*把常量10赋给变量a*/b=2;/*把常量2赋给变量b*/x=a/b;/*将表达式a/b的值赋给x*/如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换。共共95页页第64页复合的赋值运算符
27、复合的赋值运算符在赋值符“=”之前加上其他运算符,可以构成复合的运算符。凡是二目运算符,都可以与赋值符一起组合成复合赋值符。C语言规定可以使用10种复合赋值运算符。它们是:+=*=/=%=&=|=共共95页页第65页复合的赋值运算符复合的赋值运算符C语言中采用这种复合运算符,一是为了简化程序,使程序精炼;二是为了提高编译效率,下面是复合赋值运算符的例子:a+=6a+=6等价于等价于a=a+6a=a+6。a-=5a-=5等价于等价于a=a-5a=a-5。x*=y+6x*=y+6等价于等价于x=x*(y+6)x=x*(y+6)。x/=6x/=6等价于等价于x=x/6x=x/6。x%=4x%=4等价
28、于等价于x=x%4x=x%4。共共95页页第66页赋值表达式赋值表达式定义定义 由赋值运算符将一个变量和一个表达式连接起来的式子称由赋值运算符将一个变量和一个表达式连接起来的式子称为为“赋值表达式赋值表达式”。其一般形式为:其一般形式为:变量变量=表达式表达式赋值表达式可以嵌套,并可以放在任何可以放置表达式的赋值表达式可以嵌套,并可以放在任何可以放置表达式的地方。例如:地方。例如:a=(b=5)a=(b=5)赋值表达式也可以包含复合的赋值运算符赋值表达式也可以包含复合的赋值运算符 其一般形式为:其一般形式为:变量变量 双目运算符双目运算符=表达式表达式共共95页页第67页赋值表达式赋值表达式先
29、进行先进行“x*=x-2”x*=x-2”的计算,此式子相当于的计算,此式子相当于x=x*(x-2)x=x*(x-2),因为赋值运算符的优先级别最低,所以根据运,因为赋值运算符的优先级别最低,所以根据运算规则,将算规则,将x=5x=5代入此式,即得:代入此式,即得:x=x*(x2)x=5*(52)x=15x=x*(x2)x=5*(52)x=15 再计算再计算x+=x*=x-2x+=x*=x-2,此时即是计算,此时即是计算x+=xx=x+xx=15+15x=30 x+=xx=x+xx=15+15x=30。最后计算整个式子的值:最后计算整个式子的值:x+=x+=x*=x-x+=x+=x*=x-2x+
30、=x+=xx+=xx=x+xx=30+30 x=602x+=x+=xx+=xx=x+xx=30+30 x=60该赋值表达式的值是该赋值表达式的值是6060,x x的值为的值为6060。共共95页页第68页2-5-6 关系运算符和关系表达式关系运算符关系运算符关系表达式关系表达式共共95页页第69页关系运算符关系运算符所谓所谓“关系运算符关系运算符”实际上就是实际上就是“比较运算比较运算”,即将两个数据进行比较,判断两个数据是否符合即将两个数据进行比较,判断两个数据是否符合制定的条件。制定的条件。C C语言提供了语言提供了6 6种关系运算符。种关系运算符。说明:关系运算符说明:关系运算符 、=、
31、=的优先级别相同,的优先级别相同,关系运算符关系运算符=、!=!=的优先级别相同,前面的优先级别相同,前面4 4种高于种高于后面两种。关系运算符是双目运算符,结合性方后面两种。关系运算符是双目运算符,结合性方向都是从左向右,即左结合性。关系运算符优先向都是从左向右,即左结合性。关系运算符优先级低于算术运算符,但它们高于赋值运算符。级低于算术运算符,但它们高于赋值运算符。共共95页页第70页关系运算符共共95页页第71页关系表达式关系表达式关系表达式的概念关系表达式的概念 关系表达式是指,用关系运算符将两个表达式连接起来进行关系表达式是指,用关系运算符将两个表达式连接起来进行关系运算的式子。其一
32、般形式为:关系运算的式子。其一般形式为:表达式表达式1 1 关系运算符关系运算符 表达式表达式2 2 关系运算符两边的运算对象可以是算术表达式、关系表达式、关系运算符两边的运算对象可以是算术表达式、关系表达式、逻辑表达式、赋值表达式、字符表达式等任意合法的表达式。逻辑表达式、赋值表达式、字符表达式等任意合法的表达式。关系表达式的值关系表达式的值逻辑值(逻辑值(“真真”或或“假假”)由于由于C C语言没有逻辑型数据,所以用整数语言没有逻辑型数据,所以用整数“1”1”表示表示“逻辑真逻辑真”,用整数,用整数“0”0”表示表示“逻辑假逻辑假”。因为关系表达式的值为。因为关系表达式的值为“1”1”或或
33、“0”0”,所以可参与其他种类的运算,如算术运算、,所以可参与其他种类的运算,如算术运算、逻辑运算等。逻辑运算等。关系表达式的求值过程关系表达式的求值过程 首先计算关系运算符两边的表达式的值,然后比较这两个值首先计算关系运算符两边的表达式的值,然后比较这两个值的大小。的大小。共共95页页第72页2-5-7 逻辑运算符和逻辑表达式逻辑运算符逻辑表达式共共95页页第73页逻辑运算符逻辑运算符C C语言提供了语言提供了3 3种逻辑运算符,分别是:种逻辑运算符,分别是:&:逻辑与:逻辑与:逻辑或:逻辑或!:逻辑非:逻辑非其中,其中,&和和 运算符是双目运算符,如运算符是双目运算符,如(x=1)&(x=
34、1)&(x9)和和(x5)(x5)。!运算符是单目运算符,应该出现在运算对象的左运算符是单目运算符,应该出现在运算对象的左边,如边,如!(ab)!(ab)。逻辑运算符结合方向都是从左向右,即左结合性。逻辑运算符结合方向都是从左向右,即左结合性。逻辑运算符的运算规则。逻辑运算符的运算规则。共共95页页第74页逻辑运算符逻辑运算符逻辑运算就是将关系表达式用逻辑运算符连接起来,并对其求值的一个运算过程。a&ba&b:若:若a a、b b同时为同时为“真真”,则,则a&ba&b为为“真真”,否则,否则a&ba&b为为“假假”。abab:若:若a a、b b同时为同时为“假假”,则,则abab为为“假假
35、”,否,否则则abab为为“真真”。!a!a:若:若a a为真,则为真,则!a!a为为“假假”;若;若a a为为“假假”,则,则!a!a为为“真真”。共共95页页第75页逻辑运算符逻辑运算符逻辑运算符的优先级逻辑运算符的优先级 逻辑运算符的优先级顺序是:逻辑运算符的优先级顺序是:!(!(逻辑非逻辑非)级别最高,级别最高,&(逻辑与逻辑与)次之,次之,(逻辑或逻辑或)最低。最低。逻辑运算与算术运算、关系运算和赋值运算之间从高逻辑运算与算术运算、关系运算和赋值运算之间从高到低的运算顺序是:到低的运算顺序是:!(!(逻辑非逻辑非)、算术运算、关系运算、算术运算、关系运算、&(&(逻辑与逻辑与)、(逻
36、辑或逻辑或)、赋值运算。、赋值运算。根据这个优先级关系,下列表达式可以简化为:根据这个优先级关系,下列表达式可以简化为:(ab)&(xy)(ab)&(xy)可写成可写成 ab&xy ab&xy (a=b)(x=y)(a=b)(x=y)可写成可写成 a=bx=y a=bx=y (!a)(ab)(!a)(ab)可写成可写成 !aab!aab (a+b)&(x%y)(a+b)&(x%y)可写成可写成 a+b&x%y a+b&x%y 共共95页页第76页逻辑运算符的运算规则共共95页页第77页逻辑表达式 用逻辑运算符将算术表达式、关系表达式或逻辑量连接起来的式子就是逻辑表达式。C语言用整数“1”表示“
37、逻辑真”,用整数“0”表示“逻辑假”。但在判断一个数据是“真”或“假”时,却以0和非0为根据:如果为0,则判定为“逻辑假”;如果为非0,则判定为“逻辑真”。共共95页页第78页2-5-8 逗号运算符和逗号表达式逗号运算符逗号运算符逗号运算符逗号运算符C C语言提供一种特殊的运算符,即逗号语言提供一种特殊的运算符,即逗号“,”运算运算符。符。逗号运算符又称为逗号运算符又称为“顺序求值运算符顺序求值运算符”,其优先,其优先级为级为1 1,即最低优先级;结合方向是从左至右。操,即最低优先级;结合方向是从左至右。操作数的类型不受限制。此运算符不进行算术转换。作数的类型不受限制。此运算符不进行算术转换。
38、2 2逗号表达式逗号表达式逗号表达式逗号表达式用逗号表达式连接的表达式称为逗号表达式。用逗号表达式连接的表达式称为逗号表达式。逗号表达式的一般形式为:逗号表达式的一般形式为:表达式表达式1,1,表达式表达式2,2,表达式表达式n n共共95页页第79页2-5-9 sizeof运算符sizeof运算符是一个单目运算符,有下面两种不同的用法,格式为:sizeof 表达式 或:sizeof(类型名)它是以字节为单位给出操作数所占用存储空间的大小。当操作数是类型名时,必须用圆括号将其括起来;当操作数是表达式时,圆括号可以省略。共共95页页第80页2-6 数据类型的转换 隐式类型转换强制类型转换共共95
39、页页第81页2-6-1 隐式类型转换算术转换赋值转换赋值转换共共95页页第82页算术转换 当表达式中的运算对象不同时,系统会进行类型的自动转换。转换的基本原则是:自动将精度低、表示范围小的运算对象类型向精度高、表示范围大的运算对象转换。共共95页页第83页算术转换规则共共95页页第84页数据转换 共共95页页第85页赋值转换 将实型数据(包括单、双精度)赋给整型变量时,将实型数据(包括单、双精度)赋给整型变量时,舍弃实数的小数部分。舍弃实数的小数部分。将整型数据赋给单、双精度变量时,数值不变,将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中,如将但以浮点数形式存储到变量中,
40、如将3535赋给赋给floatfloat变量变量f f,即,即f f3535,先将,先将3535转换成转换成35.0000035.00000,再存储,再存储到到f f中。如果将中。如果将3535赋给赋给doubledouble型变量型变量d d,即,即d d3535,则将则将3535补足有效位数字为补足有效位数字为35.0000000000000035.00000000000000,然,然后以双精度浮点数形式存储到后以双精度浮点数形式存储到d d中。中。将一个将一个doubledouble型数据赋给型数据赋给floatfloat变量时,截取其前面变量时,截取其前面7 7位有效数字,存放到位有效
41、数字,存放到floatfloat变量的存储单元(变量的存储单元(3232位)位)中。但应注意数值范围不能溢出。中。但应注意数值范围不能溢出。共共95页页第86页赋值转换 字符型数据赋给整型变量时,由于字符只占字符型数据赋给整型变量时,由于字符只占1 1个字节,而个字节,而整型变量为整型变量为2 2个字节,因此,将字符数据(个字节,因此,将字符数据(8 8位)放到整型位)放到整型变量低变量低8 8位中。位中。将一个将一个intint、shortshort、longlong型数据赋给一个型数据赋给一个charchar型变量时,只型变量时,只将其低将其低8 8位原封不动地送到位原封不动地送到char
42、char型变量(即截断)。型变量(即截断)。将带符号的整型数据(将带符号的整型数据(intint型)赋给型)赋给longlong型变量时,要进行型变量时,要进行符号扩展,将整型数的符号扩展,将整型数的l6l6位送到位送到longlong型低型低l6l6位中位中将将unsigned intunsigned int型数据赋给型数据赋给long intlong int型变量时,不存在符号扩型变量时,不存在符号扩展问题,只需将高位补展问题,只需将高位补0 0即可。将一个即可。将一个unsignedunsigned型数据赋给型数据赋给一个占字节数相同的整型变量。一个占字节数相同的整型变量。intint,
43、unsigned longlongunsigned longlong,unsigned shortshortunsigned shortshort),将),将unsignedunsigned型变量的内容原样送到非型变量的内容原样送到非unsignedunsigned型变量中,如果型变量中,如果数据范围超过相应整型的范围,则会出现数据错误。数据范围超过相应整型的范围,则会出现数据错误。共共95页页第87页赋值转换 将将unsigned intunsigned int型数据赋给型数据赋给long intlong int型变量时,不存型变量时,不存在符号扩展问题,只需将高位补在符号扩展问题,只需将高
44、位补0 0即可。将一个即可。将一个unsignedunsigned型数据赋给一个占字节数相同的整型变量。型数据赋给一个占字节数相同的整型变量。intint,unsigned longlongunsigned longlong,unsigned unsigned shortshortshortshort),将),将unsignedunsigned型变量的内容原样送到型变量的内容原样送到非非unsignedunsigned型变量中,如果数据范围超过相应整型型变量中,如果数据范围超过相应整型的范围,则会出现数据错误。的范围,则会出现数据错误。将非将非unsignedunsigned型数据赋给长度相同
45、的型数据赋给长度相同的unsignedunsigned型变型变量,也是原样照赋(连原有的符号位也作为数值量,也是原样照赋(连原有的符号位也作为数值一起传送)。一起传送)。共共95页页第88页2-6-2 强制类型转换强制类型转换是利用强制类型转换运算符将一个强制类型转换是利用强制类型转换运算符将一个表达式转换成所需数据类型的转换。强制类型转表达式转换成所需数据类型的转换。强制类型转换常被称为显式类型转换。其一般形式为:换常被称为显式类型转换。其一般形式为:(类型标识符类型标识符)表达式表达式其功能就是把表达式结果的数据类型强制转换为其功能就是把表达式结果的数据类型强制转换为圆括号中的类型。其中,
46、类型标识符可以是圆括号中的类型。其中,类型标识符可以是intint、charchar、floatfloat、doubledouble、longlong等,也可以是后面章节等,也可以是后面章节介绍的指针、结构体类型标识符等。注意,类型介绍的指针、结构体类型标识符等。注意,类型转标识符两边的圆括号不可省略,此圆括号就是转标识符两边的圆括号不可省略,此圆括号就是C C语言中的强制类型转换符。语言中的强制类型转换符。共共95页页第89页2-7 程序案例#include main()int a=99;int b=5;int c=11;int d=3;int result;float r;共共95页页第9
47、0页接上 result=a-b;result=a-b;printf(a-b=%dn,result);printf(a-b=%dn,result);result=b*c;result=b*c;printf(b*c=%dn,result);printf(b*c=%dn,result);result=a/b;result=a/b;printf(a/b=%dn,result);printf(a/b=%dn,result);result=a%b;result=a%b;printf(a%b=%dn,result);printf(a%b=%dn,result);result=a%d+b/c;result=a
48、%d+b/c;printf(a%d+b/c=%dn,result);printf(a%d+b/c=%dn,result);r=(float)(a+b)/2;r=(float)(a+b)/2;printf(float)(a+b)/2=%fn,r);printf(float)(a+b)/2=%fn,r);共共95页页第91页接上运行结果为:a-b=94b*c=55a/b=19a%b=4a%d+b/c=0(float)(a+b)/2=52.000000共共95页页第92页2-8 小结C C语言的数据类型:基本类型、构造类型、指针类型和空语言的数据类型:基本类型、构造类型、指针类型和空类型。其中基本数
49、据类型包括整型、实型(包括单精度实类型。其中基本数据类型包括整型、实型(包括单精度实型和双精度实型)、字符型和枚举类型等。构造类型包括型和双精度实型)、字符型和枚举类型等。构造类型包括数组类型、结构体类型和共用体类型。数组类型、结构体类型和共用体类型。常量是指在程序运行过程中其值不能被改变的量。常量通常量是指在程序运行过程中其值不能被改变的量。常量通常有常有4 4种类型,整型常量、实型常量、字符型常量、字符种类型,整型常量、实型常量、字符型常量、字符串常量。整型常量有十进制、八进制和十六进制表示。实串常量。整型常量有十进制、八进制和十六进制表示。实型常量有小数和指数两种表示形式,均按型常量有小
50、数和指数两种表示形式,均按doubledouble类型处理。类型处理。字符常量是用单引号(即撇号)括起来的单个可视字符或字符常量是用单引号(即撇号)括起来的单个可视字符或转义字符。字符串常量是用一对双引号括起来的若干字符转义字符。字符串常量是用一对双引号括起来的若干字符序列,存储时系统会自动在其末尾加序列,存储时系统会自动在其末尾加00作为字符串的结束作为字符串的结束标志,因此字符串常量所占存储空间等于字符串长度加标志,因此字符串常量所占存储空间等于字符串长度加1 1。共共95页页第93页接上在程序运行时,其值能被改变的量叫做变量,变量必须先在程序运行时,其值能被改变的量叫做变量,变量必须先定