资源预览内容
第1页 / 共36页
第2页 / 共36页
第3页 / 共36页
第4页 / 共36页
第5页 / 共36页
第6页 / 共36页
第7页 / 共36页
第8页 / 共36页
第9页 / 共36页
第10页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第3章 运算符和表达式,本章的学习重点 运算符与表达式的分类 算术运算符与算术表达式 逻辑运算符与逻辑表达式 关系运算符与关系表达式 位运算符 条件运算符 强制类型转换,3.1 运算符与表达式的分类,运算符的分类:可按照操作对象数目分类,例如一元运算符、二元运算符和三元运算符等,也可按照功能分类,例如算术运算符、逻辑运算符、关系运算符等。 表达式的分类:主要按照运算符的不同功能进行分类,例如算术表达式、逻辑表达式、关系表达式等。,3.1.1 运算符的分类,按照操作对象的多少,运算符主要可分为一元运算符、二元运算符和三元运算符。例如负号(-)为一元运算符,加号(+)为二元运算符等。除了这些基本运算符之外,C语言还支持复合运算符以及sizeof运算符等。 按照功能分类,运算符可分为:算术运算符、赋值运算符、逻辑运算符、关系运算符、条件运算符、位运算符、取字节数运算符等。,3.1.1 运算符的分类,表3-1 运算符分类,3.1.2 表达式的分类,表达式是一种有值的语法结构,它一般由运算符将变量、常量或函数返回值结合而成。 表达式按照运算符的不同进行分类,主要有:算术表达式、逻辑表达式和关系表达式等。 1算术表达式 一般由算术运算符和控制运算优先级的括号连接而成 ,例如:3.14159*r, (a+b)/c+d*m. 其中,符号*表示算术运算“乘”,/表示算术运算“除”。 2赋值表达式 一般由赋值运算符、算术运算符和操作对象组合而成。一般表达形式为:变量 = 表达式或数值 或者 变量1 = 变量2 = 变量3 = 表达式或数值。,3.1.2 表达式的分类,3逻辑表达式 一般由逻辑运算符和操作对象组合而成, 例如: a i = j = k = 10; 由于赋值运算符是右结合性,因此程序执行顺序为: k = 10 j = k i = j,3.3 赋值运算符与赋值表达式,3复合赋值表达式 复合赋值表达式由赋值运算符、算术运算符或逻辑运算符以及操作对象构成。例如,表达式a += 10,它等价于:a = a + 10。 范例3.3 (DAssignmentOperator.c) 使用复合赋值运算符进行算术和赋值操作。程序使用*=和+=分别对变量m和n作赋值运算,验证在同一表达式中两者之间的关系。 注意:在工程应用中,应尽量避免使用这些简化的复合赋值运算符,原因有两点:一是编码时容易出错,二是不便于其他程序员阅读。,3.4 算术运算符与算术表达式,C语言除了提供简单的加减乘除四则运算符外,还提供了模除(%)、自增(+)和自减(-)等几种特殊的算术运算符。 模除运算符(%)用于求两个整数相除的余数。 自增(+)自减(-)运算符是C语言所特有的运算符,在工程中应用非常频繁。 只能用于单个变量。,3.4.1 算术运算符与数据类型,C语言中,除运算符用/代替,乘运算符用*代替,并且*不能省略(如x*y不能省略为xy)。 范例3.4 (ComputeOperatorType.c) 程序使用输出函数printf验证两种不同数据类型进行算术除操作的结果,分析浮点型数据作算术运算的精度。 C语言中,两个整型量作算术运算,其结果仍为整型,例如,算式:1/2的值取商中的整数部分0。 注意:0不能作为除数,否则程序运行时将崩溃。,3.4.1 算术运算符与数据类型,实训3.1计算圆柱体体积 有一长为50cm,宽为30cm的长方形纸张,编写程序,计算将该纸张卷成圆筒时的体积,要求精确到小数点后6位,圆周率取3.141592。 纸张卷成圆筒的方法有两种,一种是以长50cm作高,宽30cm作底,另一种是以宽30cm作高,长50cm作底。这里使用第二种方案。 使用周长50cm计算半径r,实现语句:r = 50.0/(2*pi); 根据数学公式:V=S*H,计算体积V = pi*r*r*h,其中h=30。 采用数据类型double型以满足精度要求。,3.4.2 模除运算符,模除运算符(%):用于求两个整数相除的余数。模除运算只能用于整数间求余运算,不可用于浮点数。并且0不能作为除数。例如:7%3结果为1,而7.5%5将使程序编译出错。 C语言规定,%两边都为正整数,结果为正整数或零;%两边都是负整数,结果为负整数数或零。%左边的操作数是正整数,结果为正整数或零;%左边的操作数是负整数,结果为负整数或零,例如: 17%4 = 1 17%-4 = 1 -17%4 = -1 -17%-4 = -1,3.4.2 模除运算符,范例3.4 (Months2Year.c) 键盘输入总月数,使用%运算符和/运算符将输入的月数换算成年数和月数的形式,如25个月,表示2年零1个月。 模除运算,例如m%n,可以使用公式m (m / n) * n代替,例如算式中-17%4,可以使用算式:-17%4 = -17 (-17 / 4) * 4 = -1 注意:和的区别,,3.4.3 自增自减运算符,自增(+)自减(-)运算符: 只能用于变量,不能用于表达式或其他C语言对象。下面的操作均错误:(b+c)+;-(m-1); 范例3.5 SelfAddSelfReduce.c 程序定义4个变量a,b,c,d。对部分变量执行自增自减操作,验证左运算和右运算的区别,并进一步分析自增自减运算符与算术运算符的优先级。 范例3.5 SelfAddSelfReduce2.c 定义变量a,分别执行单次和多次自增运算,输出结果,分析同一表达式中两次和三次自增操作中左运算和右运算的差别。,3.5 关系运算符与关系表达式,关系表达式的值:真(1)和假(0)。 例如:表达式103的值为1,即为真,而表达式-10的值为0,即为假。 范例3.6 RelationOperater.c 程序分析关系运算符的优先级,验证在同一表达式中有算术运算符和关系运算符时程序执行顺序,分析关系运算符的结合性,分析关系表达式的真和假。 注意:判断两个对象是否相等,使用运算符=或!=,一定与赋值运算符=区分开来。,3.6 逻辑运算符与逻辑表达式,语言中提供了三种逻辑运算符: 逻辑与( b = sizeof(a); b用于存储变量a在内存中所占字节数,使用sizeof获取a的内存字节数。 范例3.11 SizeofUseful.c使用sizeof运算符分别获取char short int long float double等几种基本数据类型的内存字节数,获取实型常量1.0以及字符常量a的内存字节数,获取强制类型转换之后的字符常量a的内存字节数。,3.10 强制类型转换,功能: 将表达式的运算结果强制转换成类型说明符所表示的类型。其中,类型说明符必须使用括号括起来。例如:(int)m表示把m转换为整型,(double)(a*b+c)表示把表达式a*b+c的值转换为双精度浮点型。 注意: 第一,类型说明符必须加括号; 第二,表达式应该加括号,若表达式仅为单个变量可以不加; 第三,强制类型转换不改变被转换对象,仅仅为本次运算所需而进行的操作。,3.10 强制类型转换,范例3.11 CalcVandS.c计算半径r,高h 的圆柱形桶的体积V和表面积S, 取圆周率为3.14,要求计算结果为整型并输出,体积V四舍五入,表面积S仅取整数部分。,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号