1、,第3章 数 据 运 算,3.1 算术运算 3.2 自增(减)运算 3.3 关系运算 3.4 逻辑运算 3.5 赋值运算 3.6 逗号运算 3.7 条件运算 3.8 位运算 3.9 测试数据长度运算 习题3,本章学习要求: 1. 掌握C语言各种运算符的使用与优先级。 2. 掌握表达式的概念、运算符的优先级与结合性。 3. 不同运算符(算术、自增和自减运算符、关系、逻辑运算符等)的使用特点,清楚每种运算符的优先级与结合性。,4. 了解测试数据长度运算sizeof()。 运算符是告诉编译程序执行特定算术或逻辑等操作的符号。 C语言提供了很丰富的运算符,主要有以下几类: (1) 算术运算符。 (2)。
2、 自增(减)运算符。 (3) 关系运算符。 (4) 逻辑运算符。 (5) 赋值运算符。 (6) 逗号运算符。 (7) 条件运算符。,(8) 位运算符。 (9) 测试数据长度运算符sizeof。 另外,C语言还提供了一些用于完成特殊操作的运算符。 由运算符和操作数所组成的式子,称为表达式。只需一个操作数的运算符称为单目运算符,需要两个操作数的运算符称为双目运算符。操作数可以是常量、变量、函数和子表达式,每个表达式都有唯一确切的值,求解表达式时要注意运算符的优先级及结合性。在下面各节内容中,将详细讲解各运算符及其运算表达式。,算术运算是两个运算对象(也称操作数)之间的运算。表3.列出了C语言允许的。
3、算术运算符。 在C语言中,运算符+、-、* 和 / 的用法与大多数计算机语言是相同的。它们几乎用于C语言中所有的数据类型。,3.1 算 术 运 算,表3.1 算 术 运 算 符,说明: (1) 当“/”被用于整型或字符型数据时,结果取整。例如:在整数除法中,10/3 = 3。 (2) 因为取余运算是取整数除法的余数,所以%不能用于除整型之外的其他类型的数据,要求%两侧均为整型数据,如7%3 = 1。 (3) 用算术运算符和括号将运算对象连接起来。符合C语法规则的式子,称为C算术表达式。运算对象包括常量、变量、函数等。例如a + b/c * d,就是一个合法的C算术表达式。,(4) C语言规定了。
4、运算符的优先级和结合性。在表达式求值时,先按照运算符的优先级别高低次序执行,例如先乘除后加减;如果一个运算对象两侧的运算符的优先级别相同,例如b/c * d,则按规定的结合方向处理。C语言规定,算术运算符的结合方向为 “自左至右”,即“左结合性”。,自增(减)运算是对一个运算对象施行的一种特殊的算术运算,即对一个运算对象进行算术运算之后,运算结果仍赋予该运算对象。因此,参加自增(减)运算的运算对象必须是变量。表3.2列出了C语言的自增(减)运算符。,3.2 自增(减)运算,表3.2 自增(减)运算符,说明: (1) 参加自增(减)运算的运算对象必须是整型变量。2+或(a+3)-都是不合法的。 。
5、(2) 自增和自减运算符可用在运算对象之前(称为前置运算),也可放在其后(称为后置运算)。例如: a = a + 1;可以写成a+;或+a; a = a 1;可以写成a;或a;,(3) 当自增或自减运算符与运算对象变量组成的运算表达式单独组成一条语句时,无论是前置运算,还是后置运算,其结果是一样的,即都是使该变量的值增加1或减少1。例如: int a=1; a+; 即执行后变量a的值为2。 如果写成: int a=1; +a; 则执行后变量a的值仍为2。,(4) 当自增或自减运算符与其他运算符混合使用时,前置和后置用法是有区别的。 前置运算:自增或自减运算符在变量之前,C语言先执行对该变量的加。
6、1或减1操作,然后引用变量的数值作为整个自增或自减表达式的值。后置运算:自增或自减运算符在变量之后,C语言先引用变量的数值作为整个自增或自减表达式的值,然后执行对该变量的加1或减1操作。例如:,int a=1; printf(“%d”, a+); 即执行后变量a的值为2,输出为1。 如果写成: int a=1; printf(“%d”,+a); 则执行后变量a的值仍为2,输出为2。 可以看出,无论是前置运算还是后置运算,对自增或自减运算的对象变量而言,都要执行一次自增或自减运算,效果是一致的。所不同的是,自增或自减运算表达式的取值是变量自增(减)之前的值,还是变量自增(减)之后的值。,(5) 。
7、+和的结合方向是“自右至左”。 在大多数C编译程序中,为自增和自减运算符生成的程序代码比为等价的赋值语句生成的代码运算速度要快得多,因此尽可能采用+或运算符是一种比较好的程序设计做法。,关系运算是对两个运算对象进行大小关系的比较。表3.3列出了C语言提供的关系运算符。,3.3 关 系 运 算,表3.3 关 系 运 算 符,说明: (1) 前四种关系运算符(,=,”与“c等价于a=(bc)。 (2) 关系运算符的优先级低于算术运算符。例如:ab+c等价于a(b+c)。,(3) 关系运算符及相应操作数组成的式子称为关系表达式,其中操作数可以是常量、变量及子表达式(可以是算术表达式或关系表达式、逻辑。
8、表达式、赋值表达式等)。 例如,以下都是合法的关系表达式: ab,a+c-d,(a=1)2,a=b,(ab)c,(4) 关系表达式的值是一个逻辑值,即true(真)或false(假)。在C语言中,关系表达式的值在取得true时为1,在取得false时为0。 例如:当a=1,b=2时,表达式ab的值为0;表达式ac时,按照优先级高低,先计算bc,得到结果为1,再计算a=1,得到最终结果为0。,(5) 在等优先级的情况下,关系运算的结合性是“自左至右”。 例如,表达式abc的求值应自左至右进行,即等价于(ab)c。当a=3,b=2,c=1时,表达式的最终计算结果为0。,用逻辑运算符将关系表达式或逻。
9、辑量连接起来就是逻辑表达式。表3.4列出了C语言的逻辑运算符。表3.5为逻辑运算的“真值表”,表示当a和b的值为不同组合时,各种逻辑运算的结果。,3.4 逻 辑 运 算,表3.4 逻 辑 运 算 符,表3.5 逻辑运算真值表,说明: (1) 三个逻辑运算符中,“!”的优先级高于算术运算符,而“&”和“|”的优先级低于关系运算符。例如: (ab) &(cb&cb) 等价于 !a | ab (2) C语言编译系统在给出逻辑运算结果时,用1代表“真”,用0代表“假”。但在判断运算对象是“真”是“假”时,用非0代表“真”,用0代表“假”。,例如,若a=2,b=1,c=0,则: !a的值为0。 因为a的。
10、值为非0值, 被认为是“真”,进行“非”运算后,得到“假”,而运算结果“假”用0表示。 a&b的值为1。因为a和b均为非0值,都被认为是“真”,因此a&b的值也为“真”,用1表示。, a|c的值为1。因为a为非0值,被认为是“真”,c为0值,被认为是“假”,因此a|c的值为“真”,用1表示。 再如:2&!4|f的值为1。参加逻辑运算的运算对象不仅可以是0和1,或者是0和非0的数值,也可以是任何类型的数据,如字符型、实型或指针型等。这里,字符f的ASCII码不为0,被认为是“真”。,(3) 在逻辑表达式的求解中,并非所有的逻辑运算符都能被执行到。 a&b&c :只有a为真(非0)时,才需要判别b。
11、的值;只有a和b都为真时,才需要判别c的值。如果a为假,则不判别b和c的值,整个表达式的值为假;如果a为真,b为假,则不判别c,见图3.1。 a|b|c:只要a为真(非0)时,就不必判别b和c的值,整个表达式的值为真;只有a为假时,才需要判别b的值;只有a和b都为假时,才需要判别c的值,见图3.2。,图3.1 a&b&c,图3.2 a|b|c, 例如下面程序: main() int a=1, b=0, c=0; if(!(-a 输出结果如下: 0, 0, 0,C语言中,除了有最基本的赋值运算符“=”外,还有复合赋值运算符。 1. 赋值运算符 C语言使用单个的“=”符号作为赋值运算符。 赋值运算。
12、的一般形式为 变量 = 表达式,3.5 赋 值 运 算,它的作用是将赋值运算符“=”右边的表达式的值赋给赋值运算符“=”左边的变量。其中,表达式可以是简单的一个常量或变量,也可以是复杂的常量、变量及运算符的组合。 说明: (1) 当赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换,主要有以下几种情况: 将实型数据(单、双精度) 赋给整型变量时,舍弃实数的小数部分。如a为整型变量,执行“a=2.5”的结果是使a的值为2。, 将整型数据赋给实型变量(单、双精度) 时,数值不变,但以浮点数形式存储到变量中。如将3赋给float变量f,即执行“f=3”,则先将3转换为3.00。
13、000,再存储在f中。如将3赋给double变量d,即执行“d=3”,则先将3补足有效位数字为3.00000000000000, 然后以双精度类型存储到d中。 (2) 赋值运算符的优先级比关系运算符和逻辑运算符的优先级别低,见图3.3。,2. 复合赋值运算符 在赋值运算符“=”之前加上其他运算符,就构成了复合赋值运算符。一般的二元(二目)运算符,都可以与赋值运算符一起组合成复合赋值运算符。C语言规定,可以使用10种复合赋值运算符,即+=,-=,*=,/=,%=,=,&=,=,|=。前5种是算术运算符和赋值运算符结合形成的算术赋值运算符,后5种是有关位操作的,将在3.8节介绍。 算术赋值运算符如。
14、表3.6所示。,表3.6 算术赋值运算符,说明: (1) 参加算术赋值运算的两个运算对象,先进行算术运算,然后将运算结果赋给第一个运算对象。因此,这组运算符要求第一个运算对象必须是变量。 (2) 由于复合赋值运算符是赋值运算符中的一类,因此其优先级别比其他运算符低。 例如: a+=b-1 等价于 a=a+(b-1),3. 赋值表达式 由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式。 (1) 对赋值表达式求解的过程是:将赋值运算符右边的表达式的值赋给赋值运算符左边的变量。赋值表达式的值就是被赋值的变量的值。 例如,赋值表达式 “a = 1”的值为1,变量a的值也为1。 又如,复合。
15、赋值表达式a + =3的值为变量a在原值上加3以后的值。,再如,if(c=getchar() ) = ) m=1;其中c=getchar()是一个赋值表达式,表达式的值是被赋值的变量c的值,即从键盘读入的一个字符。整条语句的作用是:如果从键盘读到空格,则将变量m赋值为1。,(2) 赋值运算符是右结合性,即在C语言的一个表达式中,当出现多个连续的赋值运算符时,运算顺序是从右向左。例如:a=b=c=0 等价于a=(b=(c=0) ),变量a、b、c的值均为0,表达式的值为0。 下面是赋值表达式的例子: a = 1 - (b = 0) 表达式的值为1,a值为1,b值为0。 a = (b = 1) + (c = 2) 表达式的值为3,a值为3,b值为1,c值为2。 (3) 赋值表达式也可以是复合赋值运算。例如: a+=a-=a*a,如果a的初值为2,此表达式的求解自右向左进行,等价于a+=(a=(a*a) )。求解步骤如下: 执行赋值运算(aa*a),即a=22*2,使变量a 的值为2,表达式(a=a*a)的值即为被赋值的变量a的值,也为2; 再执行a+=2,即计算a=a+(2),相当于a=(2)+(2)=4。因此整个表达式a+=a=a*a的值为4,变量a的值也为4。,C语言中,逗号(,)作为一个运算符,可以把几个独立的运算表达式结合成一个运算表达式。这样的表达。
《C语言程序设计 教学课件 ppt 作者 田祥宏 全书 第3章》由会员E****分享,可在线阅读,更多相关《C语言程序设计 教学课件 ppt 作者 田祥宏 全书 第3章》请在金锄头文库上搜索。