C语言第3章(数据类型和表达式)3.ppt
不同类型的数据不同类型的数据(int;float;char)可以进行混合运算可以进行混合运算如如:10+a+1.5-8765.1234*b (1)混合运算的规则混合运算的规则 不同类型数据混合运算,先转化为同一类型。不同类型数据混合运算,先转化为同一类型。转化规则转化规则(运算符运算符“”除外除外)将将“较低类型较低类型”转换为转换为“较高类型较高类型”(数值不变)(数值不变)后,再进行运算。后,再进行运算。运算结果是运算结果是“较高类型较高类型”的数据。的数据。例:例:3.0+4/2 表达式的表达式的值值?5.05.03.0+23.0+2.0形式:形式:(数据类型数据类型)表达式表达式 当当需需要要做做一一些些特特殊殊的的运运算算,必必须须使使用用强强制制类类型型转转换换运算。运算。例例1:int k=3;float x;执行执行:x=1/k;问问x的值?的值?如何让如何让x得到得到0.3333333的值?的值?例例2:int a=3,b=4;float x=10.4,y=3.5;表达式:表达式:(float)(a+b)/2+(int)x%(int)y的结果的结果?注意注意(1)转换是暂时的,定义是永久的;转换是暂时的,定义是永久的;(2)它是一个它是一个运算符运算符,单目运算单目运算,优先级为优先级为2;(2)强制类型转换运算强制类型转换运算:关系运算实际上是两个量的关系运算实际上是两个量的比较比较,比较的结,比较的结果只有果只有两种可能两种可能:真、假真、假 例如 a 3?当a=5时,比较的结果为真,当a=1时,结果为假。有六种关系运算符有六种关系运算符 u,=u=,!=关于优先次序关于优先次序u,=为同一级别;为同一级别;=和和!=为同一级别。为同一级别。u结合规则:结合规则:从左到右从左到右。算术运算符算术运算符关系运算符关系运算符赋值运算符赋值运算符高高低低 关系表达式关系表达式用用关系运算符关系运算符将两个将两个表达式表达式连接连接起来起来,叫关系表达式,叫关系表达式 合法的关系表达式:合法的关系表达式:ab;a+bb+c;(a=3)(b=5);(a=3)(b=5);ab)(b=0的值为的值为1;例例1:设:设:a=3,b=2,c=1,则:ab的值为1;(ab)=c的值为1;b+cb中d的值为ab的值,为。f=abc中的值为c的值,为。例例2:int x=5,y=z=4;执执行行:x=(y=z);后后,表达式的值是多少?表达式的值是多少?x的值是多少?的值是多少?例例3:int x=5,y=z=4;执行:执行:x=y=z;后,后,表达式的值是多少?表达式的值是多少?x的值是多少的值是多少?v(1)应避免对实数作相等或不等的判断应避免对实数作相等或不等的判断int a=0,b=1;if(a=b)/*应该为应该为a=b*/printf(“a等于等于b”);else printf(“a不等于不等于b”);0.1*10.0=1.0 结果为?结果为?可改写为:可改写为:fabs(0.1*10.0-1.0)b&xy 相当于:(ab)&(xy)a=b|x=y 相当于:(a=b)|(x=y)!a|ab 相当于:(!a)|(ab)在在C语言中,当判断一个量的真假时,语言中,当判断一个量的真假时,一切一切非非零的数据零的数据均可以当成均可以当成真真来处理。来处理。当:当:x=6,表达式:表达式:3x5 的值如何?的值如何?3x3&x=0&c=A&c=a&c=z 为真为真3)float x,y;或 double x,y;判断判断 x=y:fabs(x-y)1e-6 为真为真;&和和|的的短路规则短路规则 在在含含有有逻逻辑辑运运算算符符&或或|的的表表达达式式中中,并并不不是是所所有有逻逻辑辑运运算算符符都都有有机机会会被被执执行行。只只有有在在必必须须执执行行下下一一个个运运算算符符才才能能求求出出表表达达式式值值时时,才才执执行行该该运运算算符符。所所以以,不是所有的子表达式都有机会被执行。不是所有的子表达式都有机会被执行。目的目的:提高运算速度。提高运算速度。执行顺序执行顺序:从左向右从左向右 设设e1,e2,e3均为逻辑表达式:均为逻辑表达式:e1&e2&e3;e1|e2|e3;e1|e2&e3;相当于:相当于:e1|(e2&e3)e1&e2|e3;相当于:相当于:(e1&e2)|e3 例例1:53&2|83)&2|(84-!0)1&2|(84-!0)1|(8b?a+2:b+5例例2:已知已知 a=2,b=4;求:求:ab?a+:b+;问:问:a=?;b=?优先级偏低优先级偏低,仅高于仅高于“=”运算运算例:例:int a=2,b=3;char ch;表达式表达式:ch=a=b?Y:N 的值的值?;ch的值的值?结合规则:结合规则:从右向左从右向左;二二.条件运算符的优先级和结合规则条件运算符的优先级和结合规则 int a=1,b=2,c;c=a0?a/b:ab?a+b:a-b?c=a0?a/b:ab?a+b:a-b;c=ab?a:(cd?c:d)3c=3ab?a:cd?c:d例1:x%2=1?1:0例2:若ch中是小写字母小写字母,则转换成大写字母大写字母。ch=ch=a&chb?a:b例4:设a,b,c已赋值,将a,b,c中最大值存入m中。m=(m=ab?a:b)c?m:c 形式:形式:表达式表达式1,表达式表达式2,表达式表达式n优先级优先级:15(最低最低);结合规则;结合规则:从左向右从左向右求求值值过程过程:从左向右,依次对各表达式求值。从左向右,依次对各表达式求值。逗号表达式逗号表达式的值等于的值等于表达式表达式n的值。的值。例例3:#include void main()int x=4,y=7;float z;z=(y=y+6,y/x);printf(x=%d,y=%d,z=%f,x,y,z);例例1:int a=15;表达式表达式a=3*5,a*4的值的值?例例2:int a=1,b=2,c=3;d=(a,b,c);x=4,y=13,z=3.000000本本章章习习题题一一.填空题:填空题:可以不做的是:可以不做的是:1,6,14,17,19,26,30;二二.选择题选择题1,2,4,5,6,12,15,16,17,19,21,26,27,29,30;三三.简答题简答题:4,6;