一、强制类型转换运算符
有两种类型转换:
(1)系统自动进行的类型转换
整型、实型、字符型数据间可以进行混合运算。在运算时,不同类型的数据会自动转换成同一类型,然后再进行运算,这种转换称为隐式转换,由系统自动进行。
(2)强制类型转换
强制类型转换运算符的一般形式为:
(类型名)(表达式)
如:
(double)a (将a转换成double类型)
(float)(5%3) (将5%3的值转换成float型)
习题:分析下面程序的运行结果。
#include<stdio.h>
void main()
{int i,j; float k;
i=10; j=3;
k=(float)i/j;
printf ("k=%.2f\n",k);
return;
}
程序的运行结果:

结果分析:语句k=(float)i/j中,首先将i转换为浮点型数据,然后再除以3,得到浮点型数据3.33333,printf中将该数按小数点后2位的格式输出,因此得到结果3.33。
思考:
将上题程序中“k=(float)i/j”这条语句改为“k=(float)(i/j)”,程序的运行结果是多少?
二、关系运算符和关系表达式
1.关系运算符
用来对两个数值进行比较的运算符
C语言提供6种关系运算符:
①< (小于) ② <= (小于或等于) ③> (大于) ④ >= (大于或等于)
⑤== (等于) ⑥!= (不等于)
其中①~④优先级相同,⑤、⑥优先级相同,且①~④优先级高于⑤、⑥优先级。
关系、算术、赋值运算符的优先级如下所示:

(2)关系表达式
用关系运算符将两个数值或数值表达式连接起来的式子。关系表达式的值是一个逻辑值,即“真”或“假”。如:
“5==3”的值为“假”
“5>3” 的值为“真”
注意:在C语言中,以“1”代表“真”,以“0”代表“假”。
三、逻辑运算符和逻辑表达式
1. 逻辑运算符
3种逻辑运算符:
&&(逻辑与) ||(逻辑或) !(逻辑非)
其中:&&和||是双目(元)运算符,!是一目(元)运算符。
逻辑运算符的优先次序:
! → && → || (!为三者中最高)
与其他运算符的优先次序如下图所示:

2.逻辑运算的真值表

3.逻辑表达式
用逻辑运算符将关系表达式或其他逻辑量连接起来的式子,逻辑表达式的值应该是逻辑量“真”或“假”,编译系统在表示逻辑运算结果时,以数值1代表“真”,以0代表“假”,但在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”。
习题:写出以下各题的逻辑表达式。
(1)判断年龄(age)在13至17岁之内?
age>=13 && age<=17
(2)判断年龄 (age) 小于12或大于65?
age<12 || age>65
(3)判别某一年是否闰年。闰年的条件是符合下面二者之一:
①能被4整除,但不能被100整除,如2008
②能被400整除,如2000
(year % 4 == 0 && year %100 !=0) || year % 400 == 0
四、逗号运算符和逗号表达式
逗号表达式的一般形式为:
表达式1,表达式2,……,表达式n
逗号表达式的求解过程是:先求解表达式1,再求解表达式2,……,最后求解表达n的值。整个逗号表达式的值是表达式n的值。
有表达式x=(a=3,6*3),计算表达式中x的值。
计算结果分析:表达式1中先执行括号里面的表达式(a=3,6*3),括号内的表达式是一个逗号表达式,按逗号表达式的求解过程,先求解a=3,再求解6*3,并将6*3的结果18作为整个逗号表达式的值,最后将逗号表达式的值(18)赋给x,因此x的值为18。
思考:表达式:x=a=3,6*a,计算表达式中x的值。

