授课人:李艳阁时间:2019/3/123.1算术运算符和算术表达式3.2赋值运算符和赋值表达式3.3自增和自减运算符3.4关系运算符和逻辑运算符3.5条件运算符和逗号运算符3.6其他运算符3.7运算顺序第3章运算符和表达式第3章运算符和表达式C语言运算符分类1.算术运算符,用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)五种。2.关系运算符,用于比较运算。包括大于()、小于()、等于(==)、大于等于(=)、小于等于(=)和不等于(!=)六种。3.逻辑运算符,用于逻辑运算。包括与(&&)、或(||)、非(!)三种。4.位操作运算符,参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移()、右移()六种。5.赋值运算符,用于赋值运算,分为简单赋值(=)、复合算术赋值(+=、-=、*=、/=、%=)六种。6.条件运算符,这是一个三目运算符,用于条件求值(?:)。7.逗号运算符,用于把若干表达式组合成一个表达式(,)。8.位操作运算赋值(&=、|=、^=、=、=)五种。9.指针运算符,用于取内容(*)和取地址(&)二种运算。10.求字节数运算符,用于计算数据类型所占的字节数(sizeof)。11.特殊运算符,有:括号()、下标[]、成员(-、.)等几种。3.1算术运算符和算术表达式1.算术运算符五种基本算术运算符,假设A的值为10,B的值为20,则:运算符描述实例+把两个操作数相加A+B将得到30-从第一个操作数中减去第二个操作数A-B将得到-10*把两个操作数相乘A*B将得到200/分子除以分母B/A将得到2%取模运算符,整除后的余数B%A将得到0例3-1小写字母变成大写字母。#includestdio.hvoidmain(){charm,n;/*定义字符型变量*/m='c';/*给m赋小写字母'c'*/n=m+'A'-'a';/*将小写字母变成大写字母后赋给n*/printf(“m=%c,n=%c\n,m,n);}输出结果:m=c,n=C例3-2除法运算。#includestdio.hvoidmain(){printf(\n\n%d,%d\n,30/7,-30/7);printf(%f,%f\n,30.0/7,-30.0/7);}输出结果:4,-44.285714,-4.2857143.1算术运算符和算术表达式2.算术表达式表达式中的运算符都是算术运算符。例如a+b、(a*2)/c、(x+r)*8-(a+b)/7、sin(x)+sin(y)、(++i)-(j++)+(k--)等,都是算术表达式。说明:在表达式中,在双目运算符的左右两侧加一个空格,可增强程序的可读性。例如:请比较表达式“(x+y)/2-1”与“(x+y)/2-1”,你认为哪个的可读性更好一些?3.1算术运算符和算术表达式1.简单赋值运算符和表达式其一般形式为:【变量=表达式】例如:x=a+b、w=sin(a)+sin(b)、y=i+++--j2.复合赋值符及表达式一般形式为:【变量双目运算符=表达式】例如:a+=5等价于a=a+5、x*=y+7等价于x=x*(y+7)、r%=p等价于r=r%p。3.2赋值运算符和赋值表达式3.2赋值运算符和赋值表达式运算符描述实例=简单的赋值运算符,把右边操作数的值赋给左边操作数C=A+B将把A+B的值赋给C+=加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数C+=A相当于C=C+A-=减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数C-=A相当于C=C-A*=乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数C*=A相当于C=C*A/=除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数C/=A相当于C=C/A%=求模且赋值运算符,求两个操作数的模赋值给左边操作数C%=A相当于C=C%A=左移且赋值运算符C=2等同于C=C2=右移且赋值运算符C=2等同于C=C2&=按位与且赋值运算符C&=2等同于C=C&2^=按位异或且赋值运算符C^=2等同于C=C^2|=按位或且赋值运算符C|=2等同于C=C|2C语言中有两个特殊的算术运算符,即自加、自减运算符(++和--)。例3-4自加、自减运算符。#includestdio.hvoidmain(){inti=6,j=6,p,q;p=(i++)+(i++)+(i++);q=(++j)+(++j)+(++j);printf(%d,%d,%d,%d,p,q,i,j);}输出结果:18,25,9,93.3自增和自减运算符3.4.1关系运算符(假设A的值为10,B的值为20)3.4关系运算符和逻辑运算符运算符描述实例==检查两个操作数的值是否相等,如果相等则条件为真。(A==B)不为真。!=检查两个操作数的值是否相等,如果不相等则条件为真。(A!=B)为真。检查左操作数的值是否大于右操作数的值,如果是则条件为真。(AB)不为真。检查左操作数的值是否小于右操作数的值,如果是则条件为真。(AB)为真。=检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。(A=B)不为真。=检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。(A=B)为真。使用关系运算符和逻辑运算符表达式时,若表达式为真(即true)则返回1,否则,表达式为假(即false),则返回0。例如:10099返回110(2+10)返回0例如:ca+b//c(a+b)ab!=c//(ab)!=ca==bc//a==(bc)a=bc//a=(bc)应避免对实数作相等或不等的判断,如:1.0/3.0*3.0==1.0结果为0。可改写为:fabs(1.0/3.0*3.0-1.0)1e-6,fabs为取绝对值库函数。3.4关系运算符和逻辑运算符例3-5运算符综合应用。#includestdio.hvoidmain(){inta,b,c;a=b=c=5;a=b==c;printf(a=%d,b=%d,c=%d\n,a,b,c);printf(a==(…):%d\n,a==(b=c++*2));printf(a=%d,b=%d,c=%d\n,a,b,c);a=b++=++bc++;printf(a=%d,b=%d,c=%d\n,a,b,c);}输出结果:a=1,b=5,c=5a==(…):0a=1,b=10,c=6a=0,b=12,c=73.4关系运算符和逻辑运算符3.4.2逻辑运算符3.4关系运算符和逻辑运算符逻辑运算符(1)&&:当且仅当两个运算量的值都为“真”时,运算结果为“真”,否则为“假”。(2)||:当且仅当两个运算量的值都为“假”时,运算结果为“假”,否则为“真”。(3)!:当运算量的值为“真”时,运算结果为“假”;当运算量的值为“假”时,运算结果为“真”。说明:(1)逻辑运算符两侧的操作数,除了可以是0和非0的整数外,也可以是其它任何类型的数据,如实型、字符型等。(2)在计算逻辑表达式时,只有在必须执行下一个表达式才能求解时,才求解该表达式(即并不是所有的表达式都被求解)。3.4关系运算符和逻辑运算符逻辑运算符的优先级别是:!(非)→&&(与)→||(或)例3-6逻辑运算符。#includestdio.hvoidmain(){inti=10,m,n;m=!!i;n=(4i8);printf(i=%d,m=%d,n=%d\n,i,m,n);}3.4关系运算符和逻辑运算符输出结果:i=10,m=1,n=11.条件运算符条件表达式的一般形式为:表达式1?表达式2:表达式3条件表达式的运算规则为:先求解表达式1的值,若其值为真(非0),则求解表达式2的值,且整个条件表达式的值等于表达式2的值;若表达式1为假(0),则求解表达式3的值,且整个条件表达式的值等于表达式3的值。3.5条件运算符和逗号运算符例3-7运算符应用。#includestdio.hvoidmain(){inta,b,c;a=b=c=2;a+=b;b+=c;c+=a;printf((1)%d\n,a++b?a:b);printf((2)%d\n,ab?ca++:b--a?c++:c--);(a=b=c)?printf(GOOD\n):printf(FAIR\n);printf(a=%d,b=%d,c=%d\n,a,b,c);}3.5条件运算符和逗号运算符输出结果:(1)4(2)1FAIRa=6,b=4,c=62.逗号运算符其一般形式为:表达式1,表达式2,…表达式n例3-8逗号表达式应用。#includestdio.hvoidmain(){inta=2,b=4,c=6,x,y;y=((x=a+b),(b+c));printf(y=%d,x=%d,y,x);}3.5条件运算符和逗号运算符输出结果:y=10,x=61.sizeof运算符sizeof运算符是一个单目运算符,它返回变量或类型的字节长度。例3-9求int、shortint和longint类型的长度。#includestdio.hvoidmain(){printf(sizeof(int)=%d\n,sizeof(int));printf(sizeof(short)=%d\n,sizeof(short));printf(sizeof(long)=%d\n,sizeof(long));}3.6其它运算符输出结果:sizeof(int)=4sizeof(short)=2sizeof(long)=4C语言规定了运算符的优先级和结合性。(1)一般而言,单目运算符优先级较高,赋值运算符优先级低。算术运算符优先级较高,关系和逻辑运算符优先级较低。多数运算符具有左结合性,单目运算符、三目运算符、赋值运算符具有右结合性。(2)逻辑运算符的运算优先级①逻辑非的优先级最高,逻辑与次之,逻辑或最低,即:!(非)→&&(与)→||(或)②与其它种类运算符的优先关系!→算术运算→关系运算→&&→||→赋值运算C规定了运算符的优先次序即优先级。当一个表达式中有多个运算符参加运算时,将按下表所规定的优先级进行运算。优先级从上往下逐渐降低,同一行优先级相同。例如:表达式104&&!(10099)||3=5的值为1表达式104&&!(10099)&&3=5的值为03.7运算顺序