《数据类型运算符表达式(第二章2少课时).ppt》由会员分享,可在线阅读,更多相关《数据类型运算符表达式(第二章2少课时).ppt(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Dos第二章第二章 数据类型、运算符数据类型、运算符与表达式与表达式12/27/2022Dos五、算术运算符和算术表达式五、算术运算符和算术表达式.运算符简介:运算符简介:1)功能上分类()功能上分类(13大类)大类)()()算术运算符:算术运算符:、(求余)、(求余)、自增自增、自减自减()()条件运算符:(三目运算符)条件运算符:(三目运算符)?:?:()()关系运算符:关系运算符:、=、(由(由 和和 组成箭头,应录成组成箭头,应录成)()()下标运算符:下标运算符:(中括号)(中括号)()()其它运算符:如函数调用运算符其它运算符:如函数调用运算符()()(圆括号)(圆括号)12/27
2、/2022Dos2)目数分类:)目数分类:单目、双目、三目单目、双目、三目 和和 多目;多目;3 3)(从)结合性(上):(可分)大类)(从)结合性(上):(可分)大类()右结合()右结合()左结合()左结合单目运算符;单目运算符;三目运算符;即条件运算符三目运算符;即条件运算符赋值运算符;赋值运算符;(除了以上说明的之外)(除了以上说明的之外)12/27/2022Dos4)运算符)运算符优先级:共优先级:共 15 级,大致可归纳为:级,大致可归纳为:初等运算符初等运算符 ()、单目运算符单目运算符算术运算符算术运算符 (先乘除,后加减先乘除,后加减 )关系运算符关系运算符逻辑运算符逻辑运算符
3、 (不包括不包括 !)条件运算符条件运算符赋值运算符赋值运算符逗号运算符逗号运算符12/27/2022Dos.基本的算术运算符及其表达式基本的算术运算符及其表达式:)运算符:)运算符:、(求余)、(求余)表达式:)表达式:如同数学上的规定;(目数、优先级、结合性(律)如同数学上的规定;(目数、优先级、结合性(律)注意:注意:53 1、5 3 2、-5 3 -1、-5 3 -2 、12 0、1.2 0.5 5.3.1.66666612/27/2022Dos.基本的算术运算符及其表达式基本的算术运算符及其表达式:相同:相同:对整型的是取整不舍入对整型的是取整不舍入 !%必须是整型必须是整型 不同:
4、不同:强制类型转换强制类型转换:自动类型转换:自动类型转换:混合类型混合类型)运算符两侧数据类型:)运算符两侧数据类型:12/27/2022Dos.强制类型转换强制类型转换(例)(例)(double)a 将将 a 的值转换为的值转换为 double 以便后继运算,以便后继运算,但但 a 本身值不变。本身值不变。将自动类型转换将自动类型转换无法自动转换成整型无法自动转换成整型x%3 错误,应改写成错误,应改写成(int )x%3 必须强制转换必须强制转换将输出语句改为将输出语句改为:printf (%f,%d,%f,x,(int)x%3,x);注意:类型标识符的注意:类型标识符的圆括号不能省略圆
5、括号不能省略(例)(例)(int)()(xy)(float)()(5%3 )2.0(原为原为 2 变成实型)变成实型)(例)(例)main()float x;x=5;printf (“%dn”,x%3 )12/27/2022Dos.自动类型转换:(当数值型混合运算时)自动类型转换:(当数值型混合运算时)(2)转换成同一类型或更高类型后才进行运算。转换成同一类型或更高类型后才进行运算。(3)转换方向:转换方向:(4)例:例:int i;float f;double d;long e;表达式表达式:10+a+i*f-d/e 竖向是升级,不同类型时转换竖向是升级,不同类型时转换(1)数值型:整型、实
6、型、字符型(等同单字节整型)数值型:整型、实型、字符型(等同单字节整型)横向是必定的,同类型时也要转换横向是必定的,同类型时也要转换double float 横向横向 long 竖向竖向 unsigned int char,short12/27/2022Dos.自增、自减运算符:和自增、自减运算符:和()形式及作用:()形式及作用:+i、i (先使先使 i 的值增(减),后用的值增(减),后用 i 的值的值)i+、i (先用先用 i 的原值,后才使的原值,后才使 i 的值增(减)的值增(减)()例试比较两个程序:()例试比较两个程序:main()int i,j;i =4;j =+i;print
7、f(“%d,%d”,i,j);main()int i,j;i =4;j =i+;printf(“%d,%d”,i,j);显示结果分别为显示结果分别为:,12/27/2022Dos()()注意点:注意点:自增、自减(及负号)都是单目运算,右结合(从右到左)自增、自减(及负号)都是单目运算,右结合(从右到左)自增、自减只能用于变量,不能用于表达式(或常量)自增、自减只能用于变量,不能用于表达式(或常量)i 等价于等价于 (i)即先取即先取 i 的值,再进行的值,再进行 i=i +1 操作(运算),但(操作(运算),但(i)是非法的!是非法的!小心使用,尽量单独使用,一般用于循环控制或指针变量,小心
8、使用,尽量单独使用,一般用于循环控制或指针变量,随心所欲则可能得出意想不到或者非你所需的结果:(随心所欲则可能得出意想不到或者非你所需的结果:(i=3)例例.k =(i+)+(i+)+(i+)(k=9 i=6)又如又如 k =(+i)+(+i )+(+i )(k=18 i=6)12/27/2022Dos(4)求值步骤:)求值步骤:在整个表达式求值时:例在整个表达式求值时:例 i =3;j =4;k=(+i)+(j+)先对所有先增先对所有先增/减减 者进行计算者进行计算 (+i)i=4 然后才对表达式本身求值然后才对表达式本身求值 k=i+j 4+4 k=8 最后才对后增最后才对后增/减减 者进
9、行增者进行增/减减 (j+)j=5 尽可能多地从左到右将若干个字符组成一个运算符尽可能多地从左到右将若干个字符组成一个运算符,先多后少。先多后少。例如:例如:k =i+j 等价于等价于 k =(i+)+j(5)运算符的组合原则:)运算符的组合原则:12/27/2022Dosi=3;printf (“%d,%d”,i,i+);显示结果是:显示结果是:,!i=3;printf (“%d,%d”,i,i+=1 );显示结果还是:显示结果还是:,?函数调用中:实参表一般是从右到左函数调用中:实参表一般是从右到左正确答案正确答案4 ,4 (6)函数实参表的求值顺序:)函数实参表的求值顺序:12/27/2
10、022Dos六、赋值运算符和赋值表达式六、赋值运算符和赋值表达式赋值号赋值号 当成是一个双目运算符,是动态的,当成是一个双目运算符,是动态的,与其它高级语言绝然不同。与其它高级语言绝然不同。.简单赋值运算符:简单赋值运算符:()赋值式:()赋值式:v=e通常:左边通常:左边 v 是一个变量、右边是一个变量、右边 e 是一个表达式。是一个表达式。如:如:a=b=c=5等价于等价于a=(b=(c=5)又如:又如:a=5+(c=6)c 赋、赋、a 赋赋11()作用:将右边()作用:将右边 e 表达式的值求出,然后赋给(放入)左边变量表达式的值求出,然后赋给(放入)左边变量 所指的存放单元(容器)中。
11、所指的存放单元(容器)中。六、六、赋赋值值运运算算符符和和赋赋值值表表达达式式12/27/2022Dos.赋值原则:赋值原则:()()v 与与 e 值值的类型相同时,或类型所占字节数相等时:原样赋值;的类型相同时,或类型所占字节数相等时:原样赋值;()()v 与与 e 值值的类型不相同时,需将的类型不相同时,需将 e 值的类型转成与值的类型转成与 v 相同才赋值相同才赋值实实 整:舍弃小数(整:舍弃小数(不四舍五入不四舍五入););8 位位16 或或 32 位位整整 实:值不变(实:值不变(小数尾部补足小数尾部补足););char int、short long (即字节少的变字节多的即字节少的
12、变字节多的 ):):无符号:整数前面补足无符号:整数前面补足 0;(;(0 扩展扩展)有符号:有符号:整数前面补足符号位;(符号扩展)整数前面补足符号位;(符号扩展)补码:补码:如如(-2)10 =(11111110)2 =(111110)212/27/2022Dos.赋值原则:赋值原则:long int、short char字节多变换成字节少字节多变换成字节少 :只取尾部。只取尾部。即:即:long(32bit)short(16bit)只取尾只取尾部部 16 bit short(16bit)char(8bit):只取尾只取尾部部 8 bit 12/27/2022Dos.复合的赋值运算符:复合
13、的赋值运算符:共有十种共有十种:&算术运算符与赋值号构成算术运算符与赋值号构成位运算符与赋值号构成位运算符与赋值号构成()形式:()形式:v=e (双目双目)算术运算符或()算术运算符或(双目双目)位运算符)位运算符()作用:等价于()作用:等价于v =v (e )()()例如:例如:a +=3等价于等价于 a =a +3 x%=y +3等价于等价于 x =x%(y+3)小心小心不能写成不能写成 x=x%y+312/27/2022Dos.复合的赋值运算符:复合的赋值运算符:()注意:注意:如此写法,一如此写法,一 是为了简化程序,使程序精练;是为了简化程序,使程序精练;二是提高编程效率但无实质
14、性的不同。二是提高编程效率但无实质性的不同。所构成的仍然是表达式,称之为赋值表达式。所构成的仍然是表达式,称之为赋值表达式。简单赋值及复合赋值运算符都是右结合!简单赋值及复合赋值运算符都是右结合!12/27/2022Dos七、逗号运算符和逗号表达式:七、逗号运算符和逗号表达式:.逗号表达式的一般形式为:逗号表达式的一般形式为:e1,e2 (e1,e2 分别为分别为 表达式表达式1,表达式,表达式2)e1,e2,e3,ene1,e2,en是是任意表达式任意表达式.注意:()逗号是一个多目运算符,并且优先级最低注意:()逗号是一个多目运算符,并且优先级最低(15 级级),而且是左结合;又称之为顺序
15、求值运算符,先求而且是左结合;又称之为顺序求值运算符,先求 ei 再求再求 ei+1 第第 1 个求个求 e1,最后一个求最后一个求 en。()()整个表达式的值为整个表达式的值为 en 的值。的值。()与函数中参数分隔加以区别:()与函数中参数分隔加以区别:七、七、逗逗号号运运算算符符和和逗逗号号表表达达式式12/27/2022Dos七、逗号运算符和逗号表达式:七、逗号运算符和逗号表达式:例如例如 printf (%d,%d,%d,a,b,c );printf (%d,(a,b,c);三个参数三个参数三个值从右到左运算三个值从右到左运算逗号表达式逗号表达式仅一个值,从左到右,最后是仅一个值,
16、从左到右,最后是 c 的值的值七、七、逗逗号号运运算算符符和和逗逗号号表表达达式式12/27/2022Dos例例1:a=3*5,a*4先求解先求解a=3*5,得,得a的值为的值为15,然后求解,然后求解a*4得得60,整个逗,整个逗号表达式的值为号表达式的值为60.例例2:(a=3*5,a*4),a+5先使先使a的值等于的值等于15,再进行,再进行a*4(但(但a值未变),再进行值未变),再进行a+5得得20,即整个表达式的值为,即整个表达式的值为20。例例3:(1)x=(a=3,6*3)(x=18)(2)x=a=3,6*a (x=3)12/27/2022Dos八八.条件运算符及其表达式条件运
17、算符及其表达式:(e1)?e2:e3 ()条件运算符:条件运算符:是由两个符号?和:组成的三目运算符,是由两个符号?和:组成的三目运算符,右结合,优先级高于赋值运算符和逗号(按序求值)运算符。右结合,优先级高于赋值运算符和逗号(按序求值)运算符。()表达式形式:()表达式形式:(e1)?e2:e3,e1 条件或称逻辑表达式条件或称逻辑表达式 必须用圆括号括起!整个表达式的值或是必须用圆括号括起!整个表达式的值或是e2或或是是e3的的值,两个值,两个 类型将会转换成同类型作为整个式子的类型!类型将会转换成同类型作为整个式子的类型!(3 )作用作用:当当e1为真取为真取e2的值的值,否则取否则取e
18、3的值作为表达式的值。的值作为表达式的值。12/27/2022Dos八八.条件运算符及其表达式条件运算符及其表达式:(e1)?e2:e3 ()例:()例:(键入)两个数(键入)两个数a,b将将大者放于大者放于 max中:中:用条件运算式可写成:用条件运算式可写成:max=a;if(ab)max=a;elsemax=b;max=(ab)?a:b;用用if语句:语句:12/27/2022Dos 九、关系运算符和关系表达式:九、关系运算符和关系表达式:.关系运算符:关系运算符:()形式:()形式:、=、=、!=()优先次序(级):单目()优先次序(级):单目 算术算术 关系关系 逻辑逻辑 赋值赋值(
19、)结合性:左结合(双目运算符)()结合性:左结合(双目运算符)优优先先级级第第 6 级级:、=第第 7 级级:=、!=12/27/2022Dos.关系式:关系式:()形式()形式:e1 e2:关系关系运算符、运算符、e1、e2表达表达式、常量、变量。式、常量、变量。()作用:()作用:类似于数学上的不等式,但它不一定是正确的,是让你判断是类似于数学上的不等式,但它不一定是正确的,是让你判断是否正确。在计算机中,让计算机去判断我们所写的不等式是否成立,并根据否正确。在计算机中,让计算机去判断我们所写的不等式是否成立,并根据当时的真当时的真True、假、假False值决定做(执行)不同的语句!值决
20、定做(执行)不同的语句!()注意:()注意:在语言中真在语言中真True用用 1、假、假False用用 0 表示;表示;而判断时:非而判断时:非 0 为真为真True、0 为为 假假False。12/27/2022Dos.关系式:关系式:如:如:a=3;b=2;c=1;d=a b;f=a b c;执行执行结果结果 d=1,f=0;因因 abc 等等价于价于(ab)c 所以:若要判断所以:若要判断a,b,c是是否是从大到小,则不能简单地用否是从大到小,则不能简单地用abc,那么,如何表示这个问题(或这个条件)呢?这就要借助逻辑式了!那么,如何表示这个问题(或这个条件)呢?这就要借助逻辑式了!平时
21、口头上我们常这样描述:若平时口头上我们常这样描述:若 a 大大于于 b,并且并且 b 大大于于 c,则则 a、b、c 就就是从大到小排列的,是从大到小排列的,写成逻辑式则为:写成逻辑式则为:a b&b cab即即32 为真为真1ab为为1,c为为1,则则11为假为假12/27/2022Dos十、十、逻辑运算符和逻辑式逻辑运算符和逻辑式.逻辑运算符及优先级:逻辑运算符及优先级:!非非、&与与、|或或(左结合)(左结合)优先次序(级):单目优先次序(级):单目 算术算术 关系关系 逻辑逻辑 赋值赋值 .逻辑式逻辑式e:ee1 e2(其中(其中代表逻辑运算符)代表逻辑运算符)e1、e2表达表达式:值
22、为式:值为 0假假,或,或为为非非 0真真逻辑式逻辑式e的值:为的值:为 0假假,或,或为为 1真真12/27/2022Dos十、十、逻辑运算符和逻辑式逻辑运算符和逻辑式.真值表:用来说明逻辑运算符作用或取值情况表真值表:用来说明逻辑运算符作用或取值情况表 A B !A A&B A|BT、1 T、1 F、0 T、1 T、1 F、0 F、0 T、1 F、0 T、1 T、1 F、0 T、1 F、0 F、0 F、0 12/27/2022Dos.注意注意 在逻辑表达式的求解中,并不是所有的逻辑在逻辑表达式的求解中,并不是所有的逻辑运算符都要判断的。只是在必须执行下一个逻辑运算符都要判断的。只是在必须执行下一个逻辑运算符才能求出表达式的整个值时才执行判断!运算符才能求出表达式的整个值时才执行判断!如:如:a=x&e&其中:其中:x数值数值 0,e表达式,表达式,此时不用计算此时不用计算e就可以知道就可以知道a=0。因此:因此:逻逻辑表达式中各项的书写次序有时是起很大辑表达式中各项的书写次序有时是起很大作用的!作用的!12/27/2022