1、共 56 页 第 1 页,C语言使用的基本表达式有:,赋值表达式,如:a=3算数表达式,如:3+4*2关系表达式,如:32逻辑表达式,如:35&a=b 条件表达式,如:ab?a:b逗号表达式,如:a=3,b=4,c=5,共 56 页 第 2 页,2.3 运算符和表达式,2.3.1算术运算符和算术表达式 1.算术运算符 2.算术表达式:由算术运算符、常数、变量、函数和圆括号组成例如: a + b + a*b/c +2.8 3. 优先级: 高于 4. 结合性:“左结合性”或称为“自左至右的结合方向”即运算对象先与左边的运算符结合。例如:a - b + c 注意: / 是除法运算符。当两个整数相除时
2、为整除。9/2=4; -9/2=-4; %是取余数运算符,只能作用于两个整数。运算结果的符号 与被除数的符号一致。9%2=1 ; -9%2=-1 ; 9%-2=1;,共 56 页 第 3 页,基本算术运算符,共 56 页 第 4 页,运算符属性:,(1) 优先级当若干个运算符同时出现在表达式中时,优先级规定了运算的先后次序。优先级有15级。C语言把圆括号作为运算符,规定它的优先级最高,规定为15级,从而保证优先运算圆括号内的式子,逗号运算符的级别最低,规定为1级。 (2) 结合性当若干个具有相同优先级的运算符相邻出现在表达式中时,结合性规定了运算的先后次序。分为“从左到右”和“从右到左”两个结
3、合方向。大多数运算符的结合方向”从左到右”;单目运算符、赋值运算符和条件运算符的结合方向”从右到左”(单目运算符是指作用于一个操作对象的运算符)。,共 56 页 第 5 页,例: 将下列数学表达式:,写成符合C语言规则的表达式如下: (a+b+c)/(sqrt(a)+b*( sin(x)+sin(y)+sin(z),其中sqrt(a)和sin(x)、sin(y)、sin(z)都是数学函数的引用,表达式中用了三层括号,以保证表达式的运算顺序。,共 56 页 第 6 页,2.3.2 赋值运算符和赋值表达式1.一般赋值运算符:=赋值表达式:由赋值运算符将一个变量和一个表达式连接起来的式子。形式:变量
4、名=常量或表达式 作用:将右边常量或表达式的值赋给左边的变量。 例: a=3,共 56 页 第 7 页,2.3.2 赋值运算符和赋值表达式说明: (1) 赋值后,原来左边的值被右边表达式的值替换; (2) 如果右边表达式的值的类型与左边变量的类型不一 致,以左边变量的类型为准,将表达式值的类型转换为左边变 量的类型。 (3) 结合方向“从右向左”。例: x=y=a+b 等价 x=(y=a+b) (4) 左边变量的值作为整个赋值表达式的值.x=y=3+4 (值为7) (5)赋值表达式加上分号, 称为赋值语句. 如:x=a+5;,共 56 页 第 8 页,例: main() int a;doubl
5、e b=3.5;a=b+2.1;printf(“a=%d”,a);,共 56 页 第 9 页,2. 复合赋值运算符 复合赋值运算符:在赋值符“=”之前加上其它运算符。常见的有:+= ,=,复合赋值运算 的功能:与左边的变量进行复合运算后再赋给左边变量。,共 56 页 第 10 页,如: a+=3 等价于 a=a+3x*=y+8 等价于 x=x*(y+8)x%=3 等价于 x=x%3,共 56 页 第 11 页,2. 复合赋值运算符 例:int a=1, b=2, c=2; double x=1.5,y=2,z=2;c*=a-b; c的值? -2 int型z-=x+y; z的值?-1.5 dou
6、ble型,共 56 页 第 12 页,2.3.2 赋值运算符和赋值表达式例:已知: int a, b=5, c=4计算表达式 a-=a=b+c 的值。解: a-=a=b+c a-=(a=b+c),a=a-9,共 56 页 第 13 页,2.3.3 逗号运算符和逗号表达式,1.逗号运算符:即“,”优先级:为所有运算符中级别最低的(15)。 2.逗号表达式形式:表达式1,表达式2,表达式n求解过程:顺次求解表达式1,表达式2最后求解表达式n。逗号表达式的值为表达式n的值。结合性:左结合 例如:a=3*5,a*4a=3*5,a*4,a+5x=(a=4%3 , a+1, a*10),60,20,10,
7、共 56 页 第 14 页,2.4 、 各类数值型数据间的混合运算,一、运算过程:,先自动转换成同类数据,再进行运算。,二、转换规则:,低字节类型转换成高字节类型。,共 56 页 第 15 页,例:若有: int i ; float f ; double d ; long e ;试判断表达式 3 +b +i*f - d/e 的类型,int unsigned int long int unsigned long int doubleshort , char float,系统自动转换,3/4 ?,3.0/4 ?,1/2*15*20 ? 1.0/2*15*20 ?,共 56 页 第 16 页,强制类
8、型转换将指定表达式的值转换为指定类型.形式:(类型名)(表达式)例如:( double) (a+b),说明:() 表达式应用括号括起例如: (int)(x+y) ;(int)x+y; () 在强制类型转换时,得到一个所需类型的中间变量,原来变量类型未发生变化。例如:float x=8.6 ; int y; y=(int)x ;,共 56 页 第 17 页,运算符说明:+ + 自增, 变量值加 1 自减, 变量值减 1,2.5 自增、自减运算符,共 56 页 第 18 页,自增(或自减)运算符的第一种用法:单独作为一个表达式语句被使用,2.5 自增、自减运算符,i=i+1; i+ ; 或 +i
9、; i=i-1; i- - ; 或 -i ;,共 56 页 第 19 页,自增运算符的另一种用法:出现在其他表达式中,参与运算。+ + i、 i 先使i的值加(减)1, 再使用 i i + +、 i 在使用 i 之后, 使 i 的值加(减)1,2.11 自增、自减运算符,共 56 页 第 20 页,2.11 自增、自减运算符,举例:int j,i=3;j=+i; /* i, j 的值为4*/ j=i+; /*j的值为4,然后i的值变为5 */j=-(i+); /*j的值-5,然后i的值变为6 */i+; /* i=i+1; i为7*/j-; /* i=i-1; */,共 56 页 第 21 页
10、,2.5 自增、自减运算符 (、),共 56 页 第 22 页,2.5 自增、自减运算符 (、),例如:a=4;b=-a+ ; /* a的值为 5, b的值为 4 */,共 56 页 第 23 页,main() int x, y, z;x=2; y=5;z=x;x=y;y=z;printf(“x=%d, y=%dn“, x, y); ,共 56 页 第 24 页,#include “stdio.h“ main() int x=6,y=7,z;z=x;x=y;y=z;printf(“x=%d,y=%dn“,x,y);getchar(); ,共 56 页 第 25 页,#include “stdio.h“ main() int x,y,z;scanf(“%d%d“, ,库函数名写错, 连接时出错。,共 56 页 第 26 页,#include “stdio.h“ main() int x, y, z, a;x=2; y=5;z=x;x=y;y=z;printf(“x=%d, y=%dn“, x, y);system(“pause”); /*显示运行结果的窗口停住*/ ,共 56 页 第 27 页,共 56 页 第 28 页,第5周 上机题目: P34: 3-9、3-10 P46: 4-6P51 (第四章 编程题): 1 题、 2 题、 3 题,