第三章 运算符和表达式 程序设计 算术运算符:(+-*/%++ 关系运算符:(=!=) 逻辑运算符:((!&&|) 位运算符:( &) 赋值运算符:(=及其扩展) C 条件运算符:(?:) 运逗号运算符:(,) 算指针运算符:(*&) 符求字节数:( sizeof) 强制类型转换:(类型) 算 分量运算符:(.->) 下标运算符:([]) 符和表达式 其它:(()-)
第三章 运算符和表达式 C 运 算 符 算术运算符:(+ - * / % ++ --) 关系运算符:( >= !=) 逻辑运算符:((! && ||) 位运算符 :(> ~ | ^ &) 赋值运算符:(= 及其扩展) 条件运算符:(?:) 逗号运算符:(,) 指针运算符:(* &) 求字节数 :(sizeof) 强制类型转换:(类型) 分量运算符:(. ->) 下标运算符:([]) 其它 :(( ) -) 语 言 程 序 设 计 第 三 章 运 算 符 和 表 达 式 C
程★学习运算符应注意: 设计 ◆运算符功能 今与运算量关系 ●要求运算量个数 要求运算量类型 今运算符优先级别 今结合方向 第 今结果的类型 算 付 和 表 式
学习运算符应注意: ❖运算符功能 ❖与运算量关系 ⚫要求运算量个数 ⚫要求运算量类型 ❖运算符优先级别 ❖结合方向 ❖结果的类型 语 言 程 序 设 计 第 三 章 运 算 符 和 表 达 式 C
3.1算术运算 3.2赋值运算 3.3自增、自减运算 3.4关系运算与逻辑运算 3.5条件运算 3.6逗号运算 3.7位运算 3.8类型转换
3.1 算术运算 3.2 赋值运算 3.3 自增、自减运算 3.4 关系运算与逻辑运算 3.5 条件运算 3.6 逗号运算 3.7 位运算 3.8 类型转换
3.1算术运算 程 3.1.1算术运算符 基本算术运算符:+-*/% 设 计 ●结合方向:从左向右 ●优先级 >*/% (2) (3) 说明: ●“-”可为单目运算符时,右结合性 ●两整数相除,结果为整数 ●%要求两侧均为整型数据 第三章运算符和表达式 例5%2=1 例5/2=2 5%2=-1 5/2.0=-2.5 1%10=1 5%1=0 5.5%2(×)
3.1 算术运算 3.1.1 算术运算符 ❖基本算术运算符: + - * / % ⚫结合方向:从左向右 ⚫优先级: - ---->* / % -----> + - (2) (3) (4) 说明: ⚫“-”可为单目运算符时,右结合性 ⚫两整数相除,结果为整数 ⚫%要求两侧均为整型数据 例 5/2 = -5/2.0 = 例 5%2 = -5%2 = 1%10 = 5%1 = 5.5%2 例 5/2 = 2 -5/2.0 = -2.5 例 5%2 = 1 -5%2 = -1 1%10 = 1 5%1 = 0 5.5%2 () 语 言 程 序 设 计 第 三 章 运 算 符 和 表 达 式 C
3.1.2算术表达式及其书写特点 程 ★算术表达式是用算术运算符、圆括号将运算对象连 接起来的符合C语言的语法规则的式子。其中,运算对 设 象可以是常量、变量、表达式、函数等等。 计 ★书写时注意以下几点: ①C表达式中的乘号不能省略。 例如:数学式b2-4ac相应的C表达式应写成:b*b4*a*c ②C表达式中只能使用系统允许的标识符。 例如:数学式πr2相应的C表达式应写成:3.14159**r ③C表达式中的内容必须书写在同一行,不允许有分子分母形 第三章运算符和表达式 式,必要时要利用圆括号保证运算的顺序。 例如:c+d相应的C表达式应写成:(a+b)(c+d) ④C表达式不允许使用方括号和花括号,只能使用圆括号来帮 助限定运算顺序。可以使用多层圆括号,但左右括号必须配对, 运算时从内层圆括号开始,由内向外依次计算表达式的值
3.1.2 算术表达式及其书写特点 算术表达式是用算术运算符、圆括号将运算对象连 接起来的符合C语言的语法规则的式子。其中,运算对 象可以是常量、变量、表达式、函数等等。 书写时注意以下几点: ① C表达式中的乘号不能省略。 例如:数学式b 2 -4ac 相应的C表达式应写成:b*b-4*a*c ② C表达式中只能使用系统允许的标识符。 例如:数学式πr2 相应的C表达式应写成:3.14159*r*r ③C表达式中的内容必须书写在同一行,不允许有分子分母形 式,必要时要利用圆括号保证运算的顺序。 例如:c+d相应的C表达式应写成:(a+b)/(c+d) ④ C表达式不允许使用方括号和花括号,只能使用圆括号来帮 助限定运算顺序。可以使用多层圆括号,但左右括号必须配对, 运算时从内层圆括号开始,由内向外依次计算表达式的值。 语 言 程 序 设 计 第 三 章 运 算 符 和 表 达 式 C
★3.2赋值运算 3.2.1--3.2.2赋值运算符、赋值表达式 程 ◆简单赋值运算符: 设 ◆赋值表达式 例a=3; 计 格式:变量标识符-表达式 d=func o ●作用:将赋值号右边的表达式 c=d+2; 给 左边的一个变量。 心复合赋值运算符 种类:+ 来=/=%=《=》=8 ●含义:expD1op=exp2分exp1=exp1 op exp2 第三章运算符和表达式 a+=3 a=a+3 x*=y+8 Xx*(y+8) x%0=3 X=x%3
3.2 赋值运算 3.2.1--3.2.2 赋值运算符、赋值表达式 ❖简单赋值运算符 : = ❖赋值表达式 ⚫格式: 变量标识符=表达式 ⚫作用:将赋值号右边的表达式计算出来,将其值赋给 左边的一个变量。 ❖复合赋值运算符 ⚫种类:+= -= *= /= %= 《= 》= &= ^= |= ⚫含义: exp1 op= exp2 exp1 = exp1 op exp2 a+=3 a=a+3 x*=y+8 x=x*(y+8) x%=3 x=x%3 例 a=3; d=func(); c=d+2; 语 言 程 序 设 计 第 三 章 运 算 符 和 表 达 式 C
3.2.3赋值运算符的优先级和结合性 今优先级:14 程 今结合方向:自右向左 左侧必须是变量,不能是常量或表达式 设 计 例3=x-2*y;达式值自动转换成其左边 a+b=3 每个表达式都例mnt 值都有所属的类型): ●i=2.56;M结果=2;等,且可嵌套 a=b=c=5 表达式值为5,a,b,c值为5 a=(b=5) b=5;a=5 第三章运算符和表达式 a=5+(c=6)//表达式值1 ,C=6,a=11 a=(b=4)+(c=6)//表达式值10,a=10,b=4,c=6 a=(b-10)/(c=2)/表达武值5,a=5,b10c=2 则f=10.0
3.2.3 赋值运算符的优先级和结合性 ❖优先级: 14 ❖结合方向:自右向左 ⚫ 左侧必须是变量,不能是常量或表达式 每个表达式都有一个值(当然每个值都有所属的类型): ⚫赋值表达式的值与变量值相等,且可嵌套 ⚫赋值转换规则:使赋值号右边表达式值自动转换成其左边 变量的类型 例 3=x-2*y; a+b=3; 例 float f; int i; i=10; f=i; 则 f=10.0 例 int i; i=2.56; //结果i=2; 例: a=b=c=5 a=(b=5) a=5+(c=6) a=(b=4)+(c=6) a=(b=10)/(c=2) //表达式值为5,a,b,c值为5 // b=5;a=5 //表达式值11,c=6,a=11 //表达式值10,a=10,b=4,c=6 //表达式值5,a=5,b=10,c=2 语 言 程 序 设 计 第 三 章 运 算 符 和 表 达 式 C
程 设 计 例:a=12; a+=a=a*a//a=-264等价于aa+(a=a-(a*a)) 三例:inta=2; a%=4-1 算 a=a*=a-a*-3;//a=0等价于aa+(a=a*(a=a-(a=a*3) 符 和表达式 <
例: a=12; a+=a-=a*a 例: int a=2; a%=4-1; a+=a*=a-=a*=3; //a=-264 等价于a=a+(a=a-(a*a)) //a=0 等价于a=a+(a=a*(a=a-(a=a*3))) 语 言 程 序 设 计 第 三 章 运 算 符 和 表 达 式 C
程不同类型数据间的转换 设★隐式转换 计 今什么情况下发生 运算转换 不同类型数据混合运算时 ●赋值转换 把一个值赋给与其类型不同的变量时 输出转换 输出时转换成指定的输出格式 ●函数调用转换 实参与形参类型不一致时转换 ◆运算转换规则:不同类型数据运算时先自动转换 成同一类型 第二章数据描述
不同类型数据间的转换 隐式转换 ❖什么情况下发生 ⚫运算转换------不同类型数据混合运算时 ⚫赋值转换------把一个值赋给与其类型不同的变量时 ⚫输出转换------输出时转换成指定的输出格式 ⚫函数调用转换------实参与形参类型不一致时转换 ❖运算转换规则:不同类型数据运算时先自动转换 成同一类型 语 言 程 序 设 计 第 二 章 数 据 描 述 C
double float 说明 必定的转换 long 运算对象类型不同时转换 unsigned 例in float f 低 char. sho ort double d long l ch/i+ fa 10+a+i*f d/ 例 h char c int 1 nt double double int double double float f double d double double int double double double double double double
double float long unsigned 低 int char,short 高 说明: 必定的转换 运算对象类型不同时转换 例 char ch; int i; float f; double d; ch/i + f*d - (f+i) int int double double double double double double int int double double double double double double 10+‘a’ +i*f - d/l 例 int i; float f; double d; long l;