C语言第4章数据运算.ppt_第1页
C语言第4章数据运算.ppt_第2页
C语言第4章数据运算.ppt_第3页
C语言第4章数据运算.ppt_第4页
C语言第4章数据运算.ppt_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

教学内容: 4.1 数据运算的基本概念 4.2 算术运算 4.3 赋值运算 4.4 关系运算 4.5 逻辑运算 4.6 自增自减运算 4.7 其它运算 教学要求: 1.掌握各种运算符的优先级、结合方向。 2.掌握各种数据运算的运算符的运算。 3.掌握混合运算时的类型转换规则。,第 4 章 数 据 运 算,4.1 数据运算的基本概念,1. 运算符 C语言具有丰富的运算符。 Turbo C 提供了44种数据操作运算符,其使用范围很宽。 运算符是一种向编译程序说明特定的运算或操作的符号。每一种运算符都具有特定的数据操作规则。 2. 运算符的分类 (1)按运算符要求运算对象的个数分类:单目运算符、双目运算符、三目运算符。 (2)按其数据操作功能分类:算术运算符、关系运算符、逻辑运算符、位运算符、C的特殊运算符 。,3.运算符的优先级 当一个表达式中出现多个运算符时,表达式的求值运算按运算符的优先级别从高到低的顺序执行。在C语言中,将44种运算符的优先级从高到低共分为15个等级。如表4.1所示。 4.运算符的结合性 (1)运算符的左结合性:当一个操作数两侧的运算符具有相同的优先级时,操作数先与左边的运算符结合,即自左至右的结合方向。 (2)运算符的右结合性: 即自右至左的结合方向。 除单目运算符、赋值运算符和三项条件运算符是右结合性外,其它运算符都是左结合性。,初等运算符 ( )、 、 单目运算符 !、+ +、 、+ 、 、(类型) 算术运算符 、/ 、% ,+、 关系运算符 、= ,= =、! = 逻辑运算符 &、 条件运算符 ? : 赋值运算符 =、+=、 =、=、/=、%= 逗号运算符 ,各类运算符的优先级(从高至低):,高,低,5.表达式 用运算符将运算对象(常量、变量和函数等)连接起来的、符合语言语法规则的式子,称为表达式。 (1)简单表达式:表达式中只有一个运算符的表达式,被称为普通表达式,或称为简单表达式。 (2)复合表达式:有多个运算符构成的表达式,被称为复合表达式。 (3)特殊表达式:在使用中,单个常量、变量和函数(返回值)都可以看作是一个表达式,称为特殊表达式。,6.表达式求值 每一个C的合法表达式 ,经过运算一定能得到一个确定的数值,这个数值被称为表达式的值。 复合表达式的求解过程如下: (1) 按运算符的优先级高低次序执行。例如,先乘除后加减。 (2) 如果在一个运算对象(或称操作数)两侧的运算符的优先级相同,则按语言规定的结合方向(结合性)进行。,4.2 算 术 运 算,1.五种基本算术运算符 + ( 加法 ) - ( 减法/取负 ) * ( 乘法 ) / ( 除法 ) % ( 求余数 ) 2. 运算符的优先级与结合性 (1)算术运算符的优先级 先取负、再乘、除、求余,最后加、减法 (2)运算符的结合性为:自左至右的结合方向。,3. 算术表达式 由算术运算符和括号将运算对象连接起来形成的运算式子,称为算术表达式 例如,3 + 6 * 9 、(x + y) / 2 1 4.算术表达式的值 除C语言的特定规则外,C语言中算术运算与数学中的算术运算规则相同,经过有限次加减除等运算,最后求得表达式的值。 例如,表达式 3 + 6 * 9 的值: 57,5. C语言算术运算的特定规则 (1)两个整数相除,其商为整数,小数部分被舍弃。 例如, 表达式:5/2 的值为 2 ,不是 2.5。而表达式:12.6/3的值为4.2 ,不是 4。 (2)关于求余数运算,要求求余运算符两侧的操作数均为整型数据,否则出错。 例如,表达式:5%3 的值为2。而5.32出错,不是合法表达式。 (3)C语言的整型、实型和字符型数据间可以混合运算。,例4.1 输出算术表达式的结果 #include main() int a,b,c1; float x,y,z; a=85; b=18; x=42.6; y=28.3; c1=a/b * 9 +a %b; z=x/y(x+y)/2 1; printf(“c1=%dn“,c1); printf(“z1=%fn“, z); 程序运行结果: c1=49 z1=39.172222,a/b的值是4, 4乘9得36, a%b的值13 36+13得49,混合运算中数据类型的转换:,6.数据类型转换,1)横向向左的箭头,表示必须的转换。char和short 型必须转换成 int 型,float型必须转换成double型。 2)纵向向上的箭头,表示不同类型的转换方向。,(1)整型、实型和字符型数据间可以混合运算(因为字符数据与整型数据可以通用)。 一个运算符两侧的操作数的数据类型不同,则按“先转换、后运算”的原则,首先将数据自动转换成同一类型,然后进行运算。 例如, int 型与 double 型数据进行混合运算,则先将 int 型数据转换成 double 型,然后在两个同类型的数据间进行运算,结果为double型。 注意箭头方向只表示数据类型由低向高转换.,例4.2整型、实型数据间混合运算 #include main() int a; float x; a=35; x=42.63; printf(“%fn“,a+x); printf(“%fn“,x/a); 程序运行结果: 77.630001 1.218000,自动将X的数据转换成 double 型,再将 int 型变量a数据转换成 double 型,进行加法运算,运算结果为double型,7.数据类型强制转换 数据类型允许强制转换,一般格式为: (数据类型)(表达式) 例如: (int)(x + y) /*将 x+y 的结果转换成 int 型*/ (1)当被转换的表达式是一个简单表达式时,外面的一对圆括号可以缺省。 例如: (double)a /*将变量a的值转换成double型*/,(float)5/2 (等价于(float)(5)/2) /*将5转换成实型再除以2(=2.5)*/ (float)(5/2) /*将5整除2的结果:2,转换成实型数:2.0*/ (2)强制转换类型得到的是一个所需类型的中间量,原表达式类型并不发生变化。 例如,(double)a 只是将变量a的值转换成一个double型的中间量,其数据类型并未转换成double型。,例4.3 数据类型强制转换 #include main() int a; float x,y; a=85; x=42.6; y=19.3; printf(“1-%ft“, (float)5/2 ); printf(“2-%fn“, (float)(5/2); printf(“3-%dt“, (int)(x + y) ); printf(“4-%fn“, (double)a ); 程序运行结果: 1-2.500000 2-2.000000 3-61 4-85.000000,4.3 赋 值 运 算,1.赋值运算 赋值运算符: “ = ” ,它的作用是将一个表达式的值赋给一个变量。 给变量赋值的一般形式为:变量 = 表达式 2赋值运算符的优先级 赋值运算符的优先级低于算术运算符,也低于关系运算符和逻辑运算符。 3赋值运算结合方向 赋值运算结合方向:自右向左结合。,4.赋值表达式 由赋值运算符或复合赋值运算符,将一个变量和一个表达式连接起来的表达式,称为赋值表达式。 (1)赋值表达式一般格式 变量 赋值运算符 表达式 例如, a = 5 、 b=x+3*y (2)赋值表达式的值 任何一个表达式都有一个值,赋值表达式也不例外。被赋值变量的值,就是赋值表达式的值。 例如,a = 5 赋值表达式,变量a的值是 赋值表达式的值是 。,例如,int x; float y; x = 5 y = (float)5 / 2 如果表达式值的类型,与被赋值变量的类型不一致,但都是数值型或字符型时,系统自动地将表达式的值转换成被赋值变量的数据类型,然后再赋值给变量。 表达式 x = 5 的值: 5 变量 x 的值: 5 表达式 y = (float)5 / 2 的值: 2 .5 变量 y 的值: 2 .5,(3)赋值运算结合方向:右左 例如: x = y = 65 等价于 x = ( y = 65 ) 操作数 y 是先与右边的运算符结合,即 先将 65 赋值给变量 y 变量 y 的值是 65 表达式 y = 65 的值是 65 再做左边赋值运算,即 将表达式 y = 65的值65, 赋值给变量 x 变量 x 的值是 65 表达式 x = y = 65 的值是 65,5.复合赋值运算 复合赋值运算符:是由赋值运算符之前再加一个双目运算符构成的。 (1)复合赋值运算的一般格式为: 变量 双 目 运 算 符 = 表达式 复合赋值运算符 它等价于: 变量 = 变量 双目运算符 (表达式) 例如: y *= x + 6 等价于 y=y * (x+6) 不是 y=y * x+6,当表达式为简单表达式时,表达式外的一对圆括号才可缺省,否则可能出错。 例如: x+=a 等价于 x=x + a x/=3 等价于 x=x/3 (2) 10种复合赋值运算符 C语言规定的10种复合赋值运算符如下: 复合算术运算符: += -= *= /= %= 复合位运算符: &= = |= =,例4.4 输出复合赋值运算结果。 main() int x, y, m; x=10; y=3; m= 24; m/= x 4 ; printf(“%dn” ,m); printf(“%fn”,(float)x/y); x=1; y*=x+2; printf(“%d-%dn”, x/y, x%y); 运行结果: 4 3.333333 0-1,m = m / (x 4) ;,4.4 关 系 运 算,1.关系运算符及其优先次序 (1) 关系运算符(6种关系运算符) (大于) = (大于或等于) = (等于) != (不等于) 注意:在语言中,“等于”关系运算符是双等号 “=”,而不是单等号“= ”(赋值运算符)。 例如: a=18 该表达式是赋值表达式 a=18 该表达式是关系表达式 (变量a是否等于18),(2)关系运算符优先级与结合方向 在关系运算符中: = 4个优先级相同; = != 2个也相同,且前4个高于后2个。 结合方向是“自左至右”。 (3) 关系运算符与其它运算符 关系运算符的优先级低于算术运算符; 关系运算符的优先级高于赋值运算符 。 3种运算符优先级从高到低为: 算术运算符 关系运算符 赋值运算符,2. 关系表达式 (1) 关系表达式 关系表达式是指,用关系运算符将两个表达式连接起来,进行关系运算的式子。 例如,下面的关系表达式都是合法的: ab, a+bc-d, (a=3)=b, (ab)=(bc) (2) 关系表达式的值 语言中没有逻辑型数据。在语言中: 当关系表达式表示的含意为“逻辑真” ,其值为 1; 当关系表达式表示的含意为“逻辑假” ,其值为。,例如,假设n1=3,n2=4,n3=5,则: n1n2 表达式的值:0。 (n1n2)!=n3 表达式的值:1。 n1n2n3 表达式的值:1。 思考:任意改变n1或n2的值,会影响整个表达式的值吗?为什么? 再次强调:C语言用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”。 (3) 关系表达式的值,还可以参与其它种类的运算,例如算术运算、逻辑运算等。 (n1n2)+n3 表达式的值:6 因为n1n2的值=1,1+5=6。,4.5 逻 辑 运 算,1、C语言提供三种逻辑运算符: 1)逻辑与 & 运算规则:当且仅当两个运算量的值都为“真”时,运算结果为“真”,否则为“假”。 (相当于“同时”) 2)逻辑或 运算规则: 当且仅当两个运算量的值都为“假”时,运算结果为“假”,否则为“真”。 (相当于“或者”) 3)逻辑非 ! 运算规则:当运算量的值为“真”时,运算结果为“假”;当运算量的值为“假”时,运算结果为“真”。 (相当于“否定”),2逻辑运算符的运算优先级 逻辑非的优先级最高,逻辑与次之,逻辑或最低: !(非) &(与) (或) 与其它种类运算符的优先关系 ! 算术运算 关系运算 & 赋值运算 3. 运算符结合方向 结合方向是“自左至右” 4逻辑表达式 逻辑表达式:用逻辑运算符将1个或多个表达式连接起来,进行逻辑运算的式子。 在C语言中,用逻辑表达式表示多个条件的组合。,5逻辑量的真假判定和非 语言中,在判断一个数据的“真”或“假”时,以和非为根据: 如果数据为,则判定为“逻辑假”; 如果数据为非,则判定为“逻辑真”。 例如,int n=12; int x=5; !n 表达式的值: 0 !(n = 10) 表达式的值: 1 n=1 n=0) & (x31 表达式的值: 1 (x5) 表达式的值: 0,判断一个年份是否是闰年的逻辑表达式: (year%4=0)&(year%100!=0) (year%400=0) 例如: 判断1900年是否是闰年: 先求表达式 year%4=0 的值得 1 再求表达式 year%100!=0 的值得 0 逻辑表达式 (year%4=0)&(year%100!=0) 的值得 0 还要求表达式 year%400=0 的值得 0 最后求值整个表达式的值得 0 1900年不是闰年,6说明 (1)逻辑运算符两侧的操作数,除可以是和非的整数外,也可以是其它任何类型的数据,如实型、字符型等。 例如: float a, b ; a=25.28; b=52.78; !a 表达式的值: 0 !(A) 表达式的值: 0 a11.564 & b31 表达式的值: 1 (b5) 表达式的值: 1,(2)在计算逻辑表达式时,只有在必须执行下一个表达式才能求解时,才求解该表达式,即并不是所有的表达式都被求解。 1)逻辑与(&)运算,如果第一个操作数被判定为“假”,系统不再判定或求解第二操作数。 2)逻辑或(|)运算,如果第一个操作数被判定为“真”,系统不再判定或求解第二操作数。 例如: 设 n1=6, n2=9, x=2, y=2 求解表达式 (x=n1n2)&(y=n2n1) 后, x 的值 为:, y 的值不变,仍等于2 求解表达式 (x=n1n2) (y=n2n1) 后, x 的值 为:, y 的值为: 1,例4.5 复杂表达式的计算顺序 #include main() int a=10, b=15, c=14, temp; temp= a+6b ,4.6 自 增 自 减 运 算,1. 自增(+)、自减(-)运算 自增运算使单个变量的值增, 自减运算使单个变量的值减。 2.用法与运算规则 (1)前置运算运算符放在变量之前:变量、变量,先使变量的值增(或减),然后再以变化后的值参与其它运算,即先增、减, 后运算。 (2)后置运算运算符放在变量之后:变量、变量,变量先参与其它运算,然后再使变量的值增(或减),即先运算,后增、减。 (3)结合方向:右左,3.自增、自减运算说明 (1)自增、自减运算符,不能用于常量和表达式。 例如,5+、-(a+b) 等都是非法的。 (2)自增、自减运算,常用于循环语句中,使循环控制变量加(或减),以及指针变量中,使指针指向下(或上)一个地址。 (3)在表达式中,连续使同一变量进行自增或自减运算时,很容易出错,所以最好避免这种用法。 例如:a+a+a+b,例4.6 求下列表达式的值 设 int a, b; a=3; b=4; (1) +a + b+ 变量a: 4 , 表达式值:8 , 变量b: 5 (2) a+a+a 等价于 (a+)+(a+)+a 表达式值: 9 , 变量a: 5 (3) a + (+a) + (+a) 变量a: 5 , 表达式值: 15,二级考题:a+=a-=a*a,例4.7 自增自减运算符的用法与运算规则示例 main() int x=6, y; printf(“x=%dn“,x); /*输出x的初值*/ y =+x; /*前置运算*/ printf(“y=+x: x=%d,y=%dn“,x,y); y = x + ; /*后置运算*/ printf(“y=x+: x=%d,y=%dn“,x,y); 程序运行结果: x=6 y=+x: x=7,y=7 y=x-: x=8, y=7,1. 条件运算符 : ? : 2条件表达式一般格式: 表达式1 ? 表达式2 : 表达式3 条件表达式中的“表达式1”、“表达式2”、“表达式3”的类型,可以各不相同。 int x, y,a,b; char c ; x=56; y=34; a=23; b=32; xy ? C=# : x=a+b,4.7 其 它 运 算,3条件运算规则 : 如果“表达式1”的值为非0值(即逻辑真),运算结果等于“表达式2”的值;否则,运算结果等于“表达式3”的值。 4条件运算符优先级与结合性 条件运算符的优先级,高于赋值运算符,但低于关系运算符和算术运算符。 其结合性为“从右到左”。 例如: xy ? x+y : ab ? a *b :a+b 等价于: xy ? x+y : (ab ? a -

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论