C语言表达式和算术运算符
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
void main ( ) { short int i; long l = 6324232L; i = l; printf ( " i = %hd\n", i ); }
l=6324232 0 0 00 00 00 01 10 00 00 10 00 00 00 00 00 10 00 i = -32760 10 00 00 00 00 00 10 00
算术运算符和算术表达式 运算实例:
x,y为整型量:5/2结果为2,整型量 2/5结果为0,整型量 x,y其中一个为实型量 5.0/2或 5.0/2.0或 5.0/2.0结果为2.5,实型量
练习:
高 例 1/2 = 0 -5/2 = -2 -5/2.0 = -2.5 5%2 = -5%2 = 5%-2 = 1%10 = 5%1 = 5.5%2 = 1 -1 1 1 0 ( ) + - (正号, 负号) * / % + - (加, 减)
使用数学库函数
在使用数学库函数以前,需使用编译命令 #include “math.h” 例:计算x(2+xy)的值 #include “math.h” main() {double x,y; x=5.0;y=7.0; printf(“z=%f\n”,x*(2.0+pow(x,y))); }
算术表达式中数据类型的转换
赋值结果与类型转换
5)无符号整型与有符号整型 1 1 11 11 11 11 11 11 11 例: void main( ) { unsigned a; 11 11 11 11 11 11 11 11 int b = -1; a = b; printf ( "%d -> %u\n", b, a ); a = 65534u; b = a ; printf ( "%d -> %u\n", b, a ); 结果: } -1 -> 65535 -2 -> 65534 b a
算术运算符的优先级别: *、/、%优先于 + 、 − (*、/、
%不分) ,()级别最高,单目运算符优先双目运算符
如−2−4
算术运算符和算术表达式
2、算术表达式 (1)表达式 由常量、变量、函数和运算符组成的式子称为表达式 例:计算圆面积的语句 s=3.14159*r*r; 该语句中r,3.14159,3.14159*r,3.14159*r*r, s=3.14159*r*r都是表达式 *是运算符, 3.14159是常量,s是变量 (2)表达式的求值规则,按照运算符的优先级和结 合性的规定顺序进行。一个表达式有一个值及其类 型
算术运算符和算术表达式
(3)算术表达式 是由算数运算符和操作数组合成的式子,算术表 达式用于各类数值运算。除求余运算符%外,运算 对象可以是整型,也可以是实型。 如:(-b-sqrt(d))/(2.0*a)
运算对象包括常量、变量、函数等。 一个常量、变量都可作为一个表达式。 例: 以下是合法的算术表达式: a*b/c-1.5+ 'a' 3*x+1.0/y―10*sqrt(x) (x+y)%(x+b-c/d) 100 x
赋值运算符和赋值表达式
3、赋值类型转换 如果赋值号两边的类型不一致,则将赋值号右边 表达式的值的类型转换成赋值号左边变量的类型; 例:float f=1.0 int a=2,b=3; char c=„A‟; f=a+b+c; (f为实型量,结果为70.0)
赋值结果与类型转换
说明: 1)实型数据(包括单、双精度)赋给整型变量时,舍弃 实数的小数部分。 如:设 i 为整型变量,执行 i = 5.34, i 的值为 5 2)整型数据赋给实型变量时,数值不变,但以浮点数形 式存储到变量中。 如:对 float 型变量 f ,执行 f = 23 f 的值为 23.000000 3)double赋给float型变量时,截取其前面7位有效数字, 存储到float型变量的存储单元; float型变量赋给double 时,有效位扩展到16位,在内存中以8个字节存储
3、各类型数值数据的转换 当表达式中的各类数值型数据参与混合运算时, 要进行类型转换 下面表达式合法:1+3.14159+‟0‟+‟A‟ 转换方式 自动转换:数据类型自动由低级向高级转换。 强制转换:将表达式的运算结果强制转换成指定的 数据类型。
算术表达式中数据类型的转换
自动转换规则:
float
自动
练习:
1.若有定义:int a; 则语句a=(4 * 5)+ 4 % 5; 运行后,a的值为( ) 2 . 设 double 型 变 量 a,b,c,e 均 有 值 ; 对 代 数 式 (3ae)/(bc) ,不正确的 C 语言表达式是( )。
(A) a/b/c*e*3
(CHale Waihona Puke Baidu 3*a*e/b*c
(B) 3*a*e/b/c
标准库函数调用
对于某些数学运算,如求平方根,指数,对数运算,C 语言中有标准库函数对其进行计算。 调用格式:函数名(参数,参数,· · · · ) 其中函数名由系统提供,不同C编译系统,提供的函数 名不同,使用时需查阅相关手册。 调用函数时,参数的类型必须与系统规定一致 调用标准库函数之前,通常要用预编译命令 “#include math.h”将所需要的库函数信息包含到用 户源文件中
低
例
例: a*b/c-1.5+ 'a' (x+y)%(x+b-c/d)
例如 (-16/3*2+1)%6的值 _______. 计算方法:-16/3值为-5, 然后-5*2+l值为-9,最后- 9%6值为-3。
算术运算符和算术表达式 3)双目运算符两边的运算类型必须一致才能进行操 作,所得结果类型与运算类型一致; 如:1.0/2.0=0.5 1/2=0 4)如果类型不一致,系统将自动把两边转换成相同 类型后进行运算; 如:1.0/2=0.5 1/2.0=0.5 整型转实型 短整型转长整型 有符号转无符号 5)C语言中所有实数的运算均以双精度方式进行, 若是单精度数,则在尾数部分补0,使之转化为双 精度;
(D) a*e/c/b*3
3. P59
3.3
3.4
3.5.3赋值运算符和赋值表达式
1、赋值运算符和赋值表达式 赋值表达式的一般格式为:变量=表达式 说明: 1)赋值运算符左边必须是变量而不能是常量或 表达式,右边是合法的c语言表达式; 例:j+3=j a*b=c*4 5=x x+1=y*a+3 错误 2)赋值表达式的值是赋值号左边变量被赋值后 的值;正确的表示形式: x=10 x=y n=n+1 3)赋值语句可以连续进行 a=b=7+1 等价于a=(b=(c=0)
43
-2
赋值结果与类型转换
43号字符'+' '\53' 0 0 1 0 1 0 1 1
i
0 0 00 00 00
00
10
10
11
254号字符 '\376' 1 1
11
11
10
i
1 1 11 11
11
11 11 11 10
赋值结果与类型转换
② “长”数据赋给“短”变量
截断: 只将数据的低字节位 原封不动送到变量中
赋值结果与类型转换
例: void main ( ) { int i; float f; i = 5.34; f = 23; printf ("i=%d,f=%f\n", i, f ); }
结果: i=5,f=23.000000
赋值结果与类型转换
4)char、int、long等类型的转换 ①“短”数据赋给“长”变量
double
高
long
unsigned Char short
自动
低 int
算术表达式中数据类型的转换
例: int i; float f; double d; long e; 10+‘a’ +i*f int int double double double double d/e double double
赋值运算符和赋值表达式 注意: 1)复合运算符左边必须是变量 2)复合运算符右边的表达式计算完成后才参与复 合赋值运算 3)复合运算符的结合性和优先级等同于简单赋值 运算符”=” 4)复合运算符常用于某个变量自身的变化,尤其 是当左边的变量名很长时,使用复合运算符书写 更方便。书写时,两个运算符之间不能有空格。 5)C语言规定可以使用10种复合赋值运算符: +=,-=,*=,/=,%=,<<=,>>=,& =,∧=,|=
算术运算符和算术表达式
说明: 1)“%”是求余运算。a%b计算a除以b以后的余数,也是a模 b的值。它要求两个运算对象都是整型量,其结果也是整型 量。当运算量为负数时,所得结果的符号与被除数(a)相 同。 如:17%-3=2 -19%4=-3 -15%-7=-1 5%1.5是非法的算术表达式 2)除法运算符“/”进行求商运算。对于不同类型的运算对象, 除法表达式计算结果的类型也会不同。 例:计算x/y 如果x,y为整型,小数部分舍去,没有四舍五入 如果x,y中有一个为实型量,则x,y都被化为double类型进 行计算,结果为double
第3章 表达式和运算符(3)
3.5 运算符和表达式
3.5.1 运算符的种类、优先级和结合性
3.5.2 算术运算符和算术表达式
3.5.3 赋值运算符和赋值表达式 3.5.4 增量运算符和增量表达式 3.5.8 逗号运算符和逗号表达式
3.5运算符和表达式 算术运算符:+ - * / % 自增自减运算符:++ -关系运算符:< <= == > >= != 逻辑运算符:!(逻辑非), &&( 逻辑与), ||(逻辑或); 位运算符 :~ (按位取反), &(位与), |(位或), ^(异或), <<(左移), >>(右移); 赋值运算符:= 及其扩展赋值运算符 C 条件运算符:?: 运 算 逗号运算符:, 符 指针、地址运算符:* & 求字节数 :sizeof 强制类型转换:(类型) 成员运算符:. -> 下标运算符:[ ] 其它 :函数调用运算符( ) 等
赋值运算符和赋值表达式
2、复合的赋值表达式 算术运算符“+-*/%”和赋值运算符”=“结合 +=:a+=b+3,等价于a=a+(b+3) -=: a-=b+3,等价于a=a-(b+3) *=:a*=b+3,等价于a=a*(b+3) /=:a/=b+3,等价于a=a/(b+3) %=:a%=b+3,等价于a=a%(b+3) >>=,<<=,&=,^=,|=
算术运算符和算术表达式
例:将数学式改写成算术表达式
一般数学式
[a(b+c)+d]ac
算术表达式
(a*(b+c)+d)*a*c 3.14159*r*r/2.0 x/(x+y)+1.0/x*y
基本运算符实例 基本运算符实例: main() {int a,b,c1,c2; a=3,b=7; c1=b/a; c2=b%a; printf(“c1=%d\tc2=%d\n”,c1,c2); c1=a/b; c2=a%b; printf(“c1=%d\tc2=%d\n”,c1,c2); }
符号扩展:若最高位为 1(负数),则变量高字节位补 1;
反之,补 0。
void main ( ) { char c; short int i; c = 43; i = c; printf ( " i = %hd\n", i ); c = '\376'; i = c; c的值? printf ( " i = %hd\n", i ); }
3.5.2算术运算符和算术表达式
1、基本的算术运算符: + (加法运算符,或正值运算符。如:3+5、+3) - (减法运算符,或负值运算符。如:5-2、-3) * (乘法运算符。如:3*5)
/ (除法运算符。如:5/3)
% (模运算符,或称求余运算符,%两侧均应为整型数据, 如:7%4的值为3)。
运算符和表达式
优先级是指表达式中包含 多个运算符时,先进行优 先级高的运算符操作,然 后进行优先级低的运算符 操作; 当表达式中包含的几个运 算符的优先级全相同时, 由运算符的结合性来决定 他们的运算顺序。 结合性: 同一优先级,自 左向右,为左结合性,反 之为右结合性。 初等运算符( [ ]、( )、 . 、-> ) ↓ 单目运算符 ↓ 算术运算符 ↓ 关系运算符 ↓ 逻辑运算符(不包括逻辑非运算 符!) ↓ 赋值运算符 ↓ 逗号运算符