第3讲 运算符运算符、、表达式&类型转换【课前思考课前思考】】1、回忆数学中的运算符回忆数学中的运算符、、表达式表达式,,C 语言中的运算符语言中的运算符、、表达式是什么样子表达式是什么样子??2、能否直接将一个浮点型数据赋值给整型变量能否直接将一个浮点型数据赋值给整型变量?? 【学习目标学习目标】】掌握C 语言中基本的运算符、表达式,掌握C 语言中数据类型转换的方法【学习指南学习指南】】联想数学中的运算符及表达式,找出C 语言与其区别进行学习【重 难 点】重点:算术运算符、关系运算符、逻辑运算符、赋值运算符、条件运算符及其优先级 “=”与“==”的区别 难点:自增、自减运算,逻辑运算,逗号运算【学时安排学时安排】】学时:2学时【知 识 点】第3讲 运算符、表达式&类型转换 (1)2.3 运算符与表达式 (2)2.3.1 算术运算符与算术表达式....................................................................................2 1. 算术运算符.................................................................................................................2 2. 算术表达式.................................................................................................................3 2.3.2 自增与自减运算....................................................................................................4 1. 自增、自减运算符的使用形式.................................................................................4 2. 自增、自减运算符的优先级和结合性....................................................................5 2.3.3 关系运算符与关系表达式....................................................................................5 1. 关系运算符.................................................................................................................5 2. 关系表达式.................................................................................................................6 2.3.4 逻辑运算符与逻辑表达式....................................................................................6 1. 逻辑运算符.................................................................................................................6 2. 逻辑表达式.................................................................................................................7 2.3.5 赋值运算符与赋值表达式....................................................................................8 2.3.6 条件运算符与求字节运算符................................................................................9 1. 条件运算符.................................................................................................................9 2. 求字节运算符.. (10)2.3.7 逗号运算符与逗号表达式 (10)2.4 数据类型转换 (11)2.4.1 自动类型转换 (11)2.4.2 赋值转换 (12)2.4.3 强制类型转换 (12)习题二 (13)2.3 运算符与表达式运算符用于向编译程序说明对数据操作的性质,即操作码。
C语言提供的运算符非常丰富,它们与运算量相结合可形成多种多样、使用灵活的表达式。
因而为数据处理带来了极大的方便和灵活性。
表2.6归纳了C语言运算符的主要种类。
更详细的内容请参阅附录3。
表2.6 C语言主要运算符运算符种类运算符形式运算符种类运算符形式算术运算符+ -* / % 条件运算符?:关系运算符> < >= <= = = != 求字节数运算符sizeof逻辑运算符! && | | 类型强制转换(类型)赋值运算符= += -= *= /= %= 下标运算符[ ]位运算符& | ~ ∧>> << 指针运算符* &自增、自减运算符++ --分量运算符.->取正、负运算符+ -逗号运算符,本节主要介绍算术运算符、关系运算符、逻辑运算符、赋值运算符等,以及由它们所组成的表达式。
其余运算符将在后续相关章节中介绍。
2.3.1 算术运算符与算术表达式1. 算术运算符C语言中的算术运算符有五个,它们的含义、结合性、优先级如表2.7所示。
表2.7 C语言中的算术运算符优先级运算符使用形式结合方向含义举例* 双目运算符自左向右乘法运算x * y 1/ 双目运算符自左向右除法运算x / y% 双目运算符自左向右求余运算x % y2 + 双目运算符自左向右加法运算x + y- 双目运算符 自左向右 减法运算 x - y说明:(1)所谓双目运算,是指运算符要求有两个操作数(即两个运算量)。
(2)运算符的优先级,决定了一个表达式中计算的先后顺序。
和数学上一样,算术运算应遵循“先乘除,后加减”。
所以,(*、/、%)的优先级高于(+、-)。
(3)C 语言的运算符具有“结合性”的特点。
所谓结合性,是指运算符在与运算量(运算对象)组合时的“结合方向”。
如表达式x + y - z ,由于(+、-)为同一优先级,且结合方向都是从左向右。
所以,y 先与 + 结合,执行x + y 运算,然后执行减z 的运算。
(4)当 + 、- 作为单目运算符使用时,则分别表示取正号和取负号。
其结合方向是“自右向左”结合。
+(取正号)、-(取负号)运算符的优先级高于算术运算符。
算术运算符的运算规则如下算术运算符的运算规则如下::(1)参与算术运算的运算量可以是整型或实型常量、变量及表达式。
(2)除法(/)运算的除数不能为0,否则将出现被0除的错误。
(3)求余运算符(%)两边的运算量必须为整型,且%后面的运算量不能为0。
例如:7 % 4值为3 4 % 7 值为4 10 % 5 值为0(4)当算术运算符的两个运算量的类型相同时,则运算结果的类型与运算量相同。
例如:12.3 + 2.7值为浮点型15.013 / 5 值为整型2,舍弃小数部分 -13 / 5 值为整型-2,采取“向零取整”(5)当算术运算符的两个运算量中有一个为实型时,则运算结果的类型为double 型。
例如:12.3 + 3 值为double 型15.32. 算术表达式算术表达式是由算术运算符、括号和运算量所组成的符合C 语言语法规则的式子。
参与运算的运算量可以是常量、变量和带返回值的函数等。
例如:'a' –32 + 4a * x * x +b * sin(x) +c (a + b) / (c –d)注意分子、分母加括号与不加括号的区别都是合法的算术表达式。
a * x * x + b * sin(x) + c 对应的数学式子为ax 2 + bsin(x) + c ;(a + b) / (c –d)对应的数学式为dc ba −+ 。
一个算术表达式中,整型、float 型、double 型及字符型(char 型)数据之间可以进行混合运算(因为字符型数据在计算机内部是用一个字节的整型数表示的)。
当进行算术运算时,如果一个运算符两侧的数据类型不相同,则先自动进行类型转换,使两者具有同一种类型,然后再进行运算。
如表达式:'n' –32 + 128.56 / 'a' * 2是合法的。
由于128.56是实型,而所有的实型都按double 型进行运算。
所以在运算时,整型、字符型都要转换成double 型,即自动进行类型转换后,再进行运算。
在对算术表达式进行运算时,要按运算符的优先级进行。
如: 运算顺序应为:① → ④2.3.2 自增与自减运算C 语言的自增、自减运算符分别为:++、--。
它们是单目运算符,即运算符只有一个操作数。
自增、自减运算符的作用是使变量的值增1或减1。
如:执行语句n ++; 其作用是将变量n 的值加1后,再将结果值放入变量n 中保存。
即相当于执行语句n = n + 1; 1. 自增、自减运算符的使用形式若运算符在变量之前称为前置运算若运算符在变量之前称为前置运算,,如 ++i ,--i ; 若运算符在变量之后称为后置运算若运算符在变量之后称为后置运算,,如 i++,i ----。
前置运算的作用前置运算的作用是是,在使用变量的值之前在使用变量的值之前,,使变量的值加1或减1。
后置运算的作用是后置运算的作用是,,在使用变量的值之后在使用变量的值之后,,再使变量的值加1或减1。
【例2.2】前置运算与后置运算的区别。
/* 源程序名:CH0202.C */ /*01*/ #include<stdio.h> /*02*/ void main( ) /*03*/ {/*04*/ int i=2 , j=2 , m , n ;/*05*/ m = ++i ; /* 前置运算,等价于i=i+1; m=i;两条语句 */ /*06*/ n = j++; /* 后置运算,等价于n=j; j=j+1;两条语句 */ /*07*/ printf("m = %d i = %d\n", m , i) ;/*08*/printf("n = %d j = %d\n", n , j) ;/*09*/}程序运行结果为:m = 3 i = 3n = 2 j = 3自增、自减运算符只能作用于变量,而不能作用于常量和表达式。