第3章 运算符与表达式
关系表达式的值
假设num1=3,num2=4,num3=5,则: num1>num2的值=0。 (num1>num2)!=num3的值=1。 num1<num2<num3的值=1。 (num1<num2)+num3的值=6。
示例 3-4
判断两个数是否相等
判断两个整数是否相等,可以直接用关系 运算符==。 判定两个实数是否相等时,由于计算机存 储上出现的误差,会出现错误的结果, 1.0/3.0*3.0 == 1.0 为“假”,即0 fabs ( 1.0/3.0 *3.0 – 1.0) <1 e -5 fabs是求绝对值函数。只要1.0/3.0 *3.0与1.0 之间的差小于10-5(或一个其它的很小的 数),就认为1.0/3.0 *3.0与1.0相等。
显式类型转换(强制类型转换) 强制类型转换运算符的一般形式: (类型名)(表达式)
(double )a (int)(x+y) (float)(5%3) 将a转换成double类型 将x+y的值转换成整型 将5%3的值转换成float型
【注意】要转换的表达式应该用括号括起来,如 果写成 (int)x+y,则是将x装换成整型,然后与y相加。
【例3-6】逻辑运算符
int a=4, b=5 , x=2 , y=1; (a>b)&&(x>y) (a>b)||(x>y) !a
3.7.2 逻辑表达式 用逻辑运算符将表达式连接起来,构成的 表达式称为逻辑表达式 判断某一年份year是否闰年的逻辑表达式为: (year % 4==0) && (year % 100 != 0) || (year % 400 == 0)
3.2 算术运算符与表达式
3.2.1 算术运算符
3.2.2 算术表达式
用算术运算符和括号将运算对象(即操作 数)连接起来的、符合C语言语法规则的表 达式,称为算术表达式。 1. 整数算术运算 参加算术运算的两个操作数都是整数,那么 这个表达式就称为整数表达式,该操作称 为整数算术运算,其结果总是一个整数值。
【示例】假设变量a=14,b=4,则 a-b=10 a+b=18 a*b=56 a/b=3(小数部分被截除) a%b=2(余数)
对于取模运算,结果的符号总与第一个操 作数(被除数)的符号相同: -14%3=-2 -14%-3=-2 14%-3=2
2. 实数算术运算
参加算术运算的两个操作数都是实数,那 么这个表达式就称为实数表达式,该操作 称为实数算术运算,其结果总是一个实数 值。 6.0/7.0=0.857143 1.0/3.0=0.333333 【注意】 实数不能进行%(求余)运算
3.2.4 表达式中的类型转换 如果一个运算符两侧的数据类型不同 ,可 以进行
隐式类型转换(系统自动进行) 显式类型转换(强制类型转换)
隐式类型转换
int i , x ; float f; double d; long int l ; 进行x=l/i+i*f-d的运算
C规定了各种运算符的优先级和结合性,可 参见附录II。
3. 小括号的用途 C语言中小括号也作为一个特殊的运算符来 处理,并且它的优先级别是最高的,所以 在一些比较长或复杂的表达式中,可以恰 当的使用小括号规定运算的先后次序。 【示例】设a=8,b=2,c=16,d=8
(a+b)*(c-d)的值为80 a+b*c-d的值为32 a/(c/d)的值为4 a/c/d的值为0
总工资=基本工资+(数量×奖金)+(数 量×单价)×佣金率
【例3-9】读取一个三位数字的整数,显示这 3个数字之和。
【例3-10】销售人员的工资
某电器销售公司对其销售人员的薪资由基 本工资、奖金和提成三部分组成,并且制 定如下奖惩政策: 基本工资 1500.00 每售出一台空调的奖金 200.00 每月总销售的提成 月总销售额*2%
销售数量和销售单价需要从键盘输入
【例3-1】自增自减运算符示例
3.4 赋值运算符与表达式
3.4.1 赋值运算符与赋值表达式 1. 赋值运算符 符号“=”就是赋值运算符,它是将一个 数赋给一个变量 。 a=5 设a=3, b=a+2
2. 赋值表达式 由赋值运算符将一个变量和一个表达式连 接起来的式子就称为“赋值表达式”。其 一般形式如下: <变量>=<表达式> a=2 a=b=c=3
【例3-7】逻辑表达式运用:大写字母转换为小写字母
逻辑运算符两侧的操作数,除可以是0和非0的 整数外,也可以是其它任何类型的数据,如实型、 字符型等。 对于逻辑与运算,如果第一个操作数被判定为 “假”,系统不再判定或求解第二操作数。即: 0 && a = 0。 对于逻辑或运算,如果第一个操作数被判定为 “真”,系统不再判定或求解第二操作数。即: 1 || a = 1。 假设n1、n2、n3、n4、x、y的值分别为1、2、3、4、 1、1,则求解表达式“(x=n1>n2) && (y=n3>n4)” 后,x、y的值分别是多少?
3. 赋值运算时的类型转换 将实型数据赋给整型变量时,需要舍弃该 实数的小数部分。例如:int a = 1.23 ; 变量a 得到的值为1,小数部分被舍弃。 将整型数据赋给单、双精度变量时,数值 不变,但是将以浮点数的形式存储到变量 之中。例如:float b=10 ; 则需要将10转换为 10.00000,再存储到b中。 以上类型转换是由系统自动进行的。
逻辑表达式应用:判别x是否属于[a, b]
数学上判别x是否在区间 [a,b] 中时,习惯 上写成a≤x≤b C语言中为了判别x是否在[a,b] 范围内,应 写成: a<=x && x<=b
在ASCII码表中26个大写字母的取值为区间 [65, 90] ;26个小写字母的取值为区间 [97, 122] ; 练习:判别某个字符变量ch是否为大写字母 的C语言表达式 每个大写字母的ASCII码值加32就是其对应 小写字母的ASCII码值,这一点常常被利用 进行大小写字母之间的转换。
3.3 自增运算符与表达式
自增运算符:++ 自减运算符:-自增自减运算符都是单目运算符,需要使用变量 作为它们的操作数,其表达式格式为: ++变量名 --变量名 变量名++ 变量名- 其中,运算符在变量名前面,称为前缀;运算符 在变量名后面,称为后缀。 ++i与- -i是指在使用i之前,先把i的值加1或减1。 i++与i- -则是指在使用i之后,再把i的值加1或减1。
3.6 条件运算符与表达式
条件运算符是“ ? :”,它是一个三目运 算符,要求有三个操作数。 条件表达式形式:表达式1?表达式2:表达式3
【例3-5】条件运算符:计算a+|b|
3.7 逻辑运算符与表达式
3.7.1 逻辑运算符
&& 逻辑与 || 逻辑或 ! 逻辑非
值1代 表“真”,以数值0代表“假”;但在判断 一个量是否为“真”时,以0代表“假”, 非0代表“真”。故C语言逻辑运算的真值 表可改为表3.5所示。
第3章
运算符与表达式
3.1 C语言运算符概述
运算符是一种符号,它告诉计算机执行某 些数学或逻辑操作。
在程序中,运算符用于数据和变量的操作。
3.1 C语言运算符概述
C语言的运算符:
算术运算符、关系运算符、逻辑运算符、赋值运算符、条件运算 符、逗号运算符等
表达式就是操作数和运算符的组成系列, 最终推导出一个值。
【例3-2】赋值运算符示例
main() { int a=2; /*定义并初始化整型变量a*/ double e=5.123; /*定义并初始化双精度变量e*/ float f=4.2; /*定义并初始化单精度变量f*/ float c=e/a; /*定义并初始化单精度变量c*/ int b=(int)f%a; /*对f进行强制类型转换*/ printf("%d,%f\n",b,c); /*输出变量b和c的值*/ }
3.4.2 复合赋值运算符
3.5 关系运算符与表达式
3.5.1 关系运算符
3.5.2 关系表达式 用关系运算符连接起来的两个表达式称为 关系表达式。其中,关系运算符两侧的表 达式可以是算术表达式、逻辑表达式、赋 值表达式和字符表达式等。 a>b,a+b>c-d,(a=3)<=(b=5),'a'>='b', (a>b)= =(b>c) 关系表达式的值是一个逻辑值,即“真” 或“假”。在C语言中没有逻辑类型的数据, 所以用整数“1”表示逻辑“真”,用整 数“0”表示逻辑“假”。
【例3-8】写出描述点A(x,y)落在图3.11 中阴影部分(不压线)的C语言逻辑表达式。
3.8 逗号运算符与表达式
逗号运算符的作用是将两个表达式连接起 来。一般形式如下: 表达式1,表达式2 它的求解过程为:先求解表达式1,再求解 表达式2,整个表达式的值是表达式2的值。 a=3,b=4的值为4。