




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计,主讲:沈济南,TELE-mail:,2,第三讲,主讲内容: 第二章 数据类型、运算符及表达式 2.3运算符与表达式 2.4数据类型转换,3,2.3 运算符与表达式,运算符用于向编译程序说明对数据操作的性质,即操作码。,4,2.3.1 算术运算符与算术表达式,1. 算术运算符,5,2.3.1-1 算术运算符(2),说明: (1)所谓双目运算,是指运算符要求有两个操作数(即两个运算量)。 (2)运算符的优先级,决定了一个表达式中计算的先后顺序。和数学上一样,算术运算应遵循“先乘除,后加减”。所以,(*、/、%)的优先级高于(+、-)。 (3)C语言的运算符具有“结合性”的特点。所谓结合性,是指运算符在与运算量(运算对象)组合时的“结合方向”。如表达式x + y - z,由于(+、-)为同一优先级,且结合方向都是从左向右。所以,y先与 + 结合,执行x + y运算,然后执行减z的运算。 (4)当 + 、- 作为单目运算符使用时,则分别表示取正号和取负号。其结合方向是“自右向左”结合。+(取正号)、-(取负号)运算符的优先级高于算术运算符。,6,2.3.1-1 算术运算符(3),算术运算符的运算规则如下: (1)参与算术运算的运算量可以是整型或实型常量、变量及表达式。 (2)除法(/)运算的除数不能为0,否则将出现被0除的错误。 (3)求余运算符(%)两边的运算量必须为整型,且%后面的运算量不能为0。 例如:7 % 4 值为3 4 % 7 值为4 10 % 5 值为0,7,2.3.1-1 算术运算符(4),(4)当算术运算符的两个运算量的类型相同时,则运算结果的类型与运算量相同。 例如:12.3 + 2.7 值为浮点型15.0 13 / 5 值为整型2,舍弃小数部分 -13 / 5 值为整型-2,采取“向零取整” (5)当算术运算符的两个运算量中有一个为实型时,则运算结果的类型为double型。 例如:12.3 + 3 值为double型15.3,8,2.3.1 算术运算符与算术表达式,1. 算术运算符 2. 算术表达式 算术表达式是由算术运算符、括号和运算量所组成的符合C语言语法规则的式子。参与运算的运算量可以是常量、变量和带返回值的函数等。 例如: a 32 + 4 a * x * x + b * sin(x) + c (a + b) / (cd),9,2.3.2 自增与自减运算,C语言的自增、自减运算符分别为:+、-。它们是单目运算符,即运算符只有一个操作数。自增、自减运算符的作用是使变量的值增1或减1。 如:执行语句n +; 其作用是将变量n的值加1后,再将结果值放入变量n中保存。即相当于执行语句n = n + 1;,10,2.3.2 自增与自减运算(2),1. 自增、自减运算符的使用形式 若运算符在变量之前称为前置运算,如 +i,-i; 若运算符在变量之后称为后置运算,如 i+,i-。 前置运算的作用是,在使用变量的值之前,使变量的值加1或减1。 后置运算的作用是,在使用变量的值之后,再使变量的值加1或减1。,11,2.3.2 自增与自减运算(3),举例 /* 源程序名:CH0202.C */ /*01*/ #include /*02*/ void main( ) /*03*/ /*04*/ int i=2 , j=2 , m , n ; /*05*/ m = +i ; /*06*/ n = j+; /*07*/ printf(“m = %d i = %dn“, m , i) ; /*08*/ printf(“n = %d j = %dn“, n , j) ; /*09*/ ,运行结果: m = 3 i = 3 n = 2 j = 3,12,2.3.2 自增与自减运算(4),2. 自增、自减运算符的优先级和结合性 自增、自减运算符的优先级与取正值(+)、取负值(-)运算符处于同一级,但高于算术运算符。其结合方向为“自右向左”结合。运算符的优先级和结合方向请参阅附录3。 如下列程序段: i = 3 ; n = - i + ;编译时如何处理?,由于“-”和“+”是同一优先级,且结合方向都是从右向左结合,因此,表达式 - i + 相当于 - (i +)。,13,2.3.2 自增与自减运算(5),【思考】: 如下程序段执行后变量x和y的结果值: x = 3 ; y = - x +x ;,14,2.3.3 关系运算符与关系表达式,1. 关系运算符 C语言中的关系运算符有六种:、 !、。 关系运算符都是双目运算符。关系运算的结果是一个逻辑值。 关系运算规则: 当关系成立,关系运算的值为1(表示逻辑真); 当关系不成立,关系运算的值为0(表示逻辑假)。,15,2.3.3 关系运算符与关系表达式(2),1. 关系运算符 2. 关系表达式 关系表达式是用关系运算符将两个运算量连接起来的式子。被连接的运算量可以是常量、变量和表达式。 例如: x + y 100 z m % n 0,16,2.3.4 逻辑运算符与逻辑表达式,1. 逻辑运算符 C语言的逻辑运算符有三个:&(逻辑与)、| |(逻辑或)、!(逻辑非)。其中&、| |是双目运算符;!是单目运算符。,17,2.3.4 逻辑运算符与逻辑表达式(2),为了提高程序运行的速度,根据上述逻辑运算规则,在处理逻辑运算时规定:对于逻辑与运算,若 & 左边表达式值为0(逻辑假),则无需计算 & 右边表达式的值即可得出逻辑表达式的结果值为0。对于逻辑或运算,若 | 左边表达式值为1(逻辑真),则无需计算 | 右边表达式的值即可得出逻辑表达式的结果值为1。,18,2.3.4 逻辑运算符与逻辑表达式(3),1. 逻辑运算符 2. 逻辑表达式 逻辑表达式是用逻辑运算符与表达式按一定规则连接起来的式子。 例如: !(ab) & (b0) year % 4 = 0 & year % 100 != 0 | | year % 400 = 0,19,2.3.5 赋值运算符与赋值表达式,1. 基本赋值运算符与赋值表达式 基本赋值运算符“=”是一个双目运算符。由基本赋值运算符或复合赋值运算符将一个变量和一个表达式连接起来的具有合法语义的式子,则称为赋值表达式。 赋值表达式的一般形式为: 变量 赋值运算符 表达式 例如: a = 2 d = b * b - 4 * a * c,20,2.3.5 赋值运算符与赋值表达式(2),2. 复合赋值运算符 在赋值运算符“=”前面加上算术运算符或位运算符,便可构成复合赋值运算符。C语言中的复合赋值运算符有如下10种: 、*、/、%、&、|、 由复合赋值运算符构成的赋值表达式,其一般形式为: 变量 复合赋值运算符 表达式 aa * 10 等价于aaa * 10,21,= 和 =,int a; a = 0; a = 1;,int a; a = 0; a = 1;,一定要分清=和= 下面用法能起点小作用:,int a=0; if (0 = a) printf(“OK“);,int a=0; if (0 = a) printf(“OK“);,编译出错,22,2.3.6 条件运算符与求字节运算符,1. 条件运算符 C语言的条件运算符(? :)是个三目(元)运算符。由条件运算符与操作数构成的表达式称为条件表达式。其一般形式为: 表达式1 ? 表达式2 :表达式3 条件表达式的运算过程为:先计算表达式1的值,如果其值为真(值为非0),则求解表达式2的值,并将表达式2的值作为整个条件表达式的值。如果表达式1的值为假(值为0),则求解表达式3的值,并将表达式3的值作为整个条件表达式的值。 分析xy?x:y的功能?,23,2.3.6 条件运算符与求字节运算符(2),C语言的求字节运算符为:sizeof( ),它是一个单目运算符。其一般形式为: sizeof(变量名) sizeof(类型名) 求字节运算符的功能是,计算并返回括号中变量或类型说明符的字节数。 如:int , j ; j = sizeof(int);,24,2.3.7 逗号运算符与逗号表达式,C语言的逗号运算符(,)是个双目运算符。可以利用逗号运算符将几个表达式连接起来构成逗号表达式。其形式为: 表达式1 , 表达式2 , , 表达式n 逗号运算符的每个表达式的求值是分开进行的,对逗号运算符的表达式不进行类型转换。逗号表达式求解过程为:先计算表达式1的值,然后依次计算表达式2、表达式3等的值,最后计算表达式n的值。且表达式n的值就是整个逗号表达式的值,25,2.4 数据类型转换,不同类型的数据混合运算后,其结果的数据类型怎样确定呢? C语言规定,不同类型的数据在参加运算时,要先转换成相同的类型,然后再进行运算。运算结果的类型是转换后的类型。而类型转换的规则可归纳为3种转换方式:算术运算时的自动类型转换、赋值运算时的类型转换和强制类型转换。,26,Thinking,在进行赋值操作时,会发生类型转换 将取值范围小的类型转为取值范围大的类型是安全的 反之是不安全的 如果大类型的值在小类型能容纳的范围之内,则平安无事 但是,浮点数转为整数,会丢失小数部分(非四舍五入) 反之,转换后的结果必然是错误的,具体结果与机器和实现方式有关。避免如此使用,27,2.4.1 自动类型转换,自动类型转换的规则为:双目运算符的两个运算量中,值域较窄的类型向值域较宽的类型转换。,28,2.4.1 自动类型转换(2),例如: int i = 10 ; char ch = b ; float x = 9.87 ; double sum , y = 3.18E-5 ; sum = ch + x + i * y ;,29,2.4.2 赋值转换,C语言规定: 当赋值运算符右边表达式的类型与左边变量的类型不一致时,首先将右边表达式的类型转换为左边变量的类型,然后将转换后表达式的结果值赋给左边变量,整个赋值表达式的结果类型是左边变量的类型 。,30,2.4.2 赋值转换(2),赋值类型转换具体规则如下 : (1)将整型数据赋给单、双精度变量时,数值不变,但以单、双精度实型数形式存储到变量中。例如: float x ; x = 9 ; /* x的值为9.000000 */ (2)将单、双精度实型数据赋给整型变量时,舍去实数的小数部分。例如: int n ; n = 3.14159 ; /* n的值为3 */,31,2.4.2 赋值转换(2),赋值类型转换具体规则如下 : (3)字符型数据赋给整型变量时,由于字符型数据只占一个字节,而整型变量占2个字节。因此,将字符型数据存放到整型变量低8位中,而在高8位中补1或0(视具体机器系统处理有符号量或无符号量两种不同情况而定)。 (4)带符号整型数据(int)赋给long int型变量时,要进行符号扩展。 (5)unsigned int型数据赋给long int型变量时,只需在高位补0即可。,32,2.4.3 强制类型转换,在程序中可以使用强制类型转换操作符来实现数据类型的转换。强制类型转换也称为显示转换;而自动类型转换又称为隐式转换。 强制类型转换的一般形式为: (类型说明符) (表达式) 其功能是把表达式的运算结果强制转换成类型说明符所表示的数据类型 。,33,2.4.3 强制类型转
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 打造书香家庭课件结语
- 慢性肠炎的护理
- 慢性咳嗽知识课件
- 情系你我安全大家培训课件
- 陕建入职考试真题及答案
- 恶性心律失常护理查房
- 医院专业考试题目及答案
- 急救知识培训结构化课件
- 刑事诉法学考试题及答案
- 养老护理员考试题及答案
- 企业首席质量官职业技能竞赛竞赛题库(最后附答案)
- 人教版(2024新版)七年级上册英语全册教案
- 临床微生物学检验标本的采集和转运试卷
- 佳酿贺喜升学宴金榜题名踏新程热烈庆祝某同学金榜题名模板
- 医学美容技术专业《美容医学咨询与沟通》课程标准
- 营养指导员理论知识考试题库及答案
- 2024生产安全事故隐患排查治理规定(修订征求意见稿)
- JB-T 14509-2023 反渗透海水淡化设备技术规范
- 2024年儿童保健考试复习题库(含答案)
- 砖厂机械伤害安全培训课件
- 02J401 钢梯【含03年修改】图集
评论
0/150
提交评论