C语言程序设计课件第3章091013

上传人:zw****58 文档编号:51718260 上传时间:2018-08-16 格式:PPT 页数:27 大小:762KB
返回 下载 相关 举报
C语言程序设计课件第3章091013_第1页
第1页 / 共27页
C语言程序设计课件第3章091013_第2页
第2页 / 共27页
C语言程序设计课件第3章091013_第3页
第3页 / 共27页
C语言程序设计课件第3章091013_第4页
第4页 / 共27页
C语言程序设计课件第3章091013_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《C语言程序设计课件第3章091013》由会员分享,可在线阅读,更多相关《C语言程序设计课件第3章091013(27页珍藏版)》请在金锄头文库上搜索。

1、C语言程序设计 *1*2第三章 表达式与运算符主讲: 计算机学院 朱立华内容提要n表达式体现对数据的处理,由运算符和运算对象组成 n掌握每种运算符的以下知识:对运算对象的要求运算符的结合性运算符的优先级运算结果的特性n有多种运算符的复杂表达式的计算顺序及计算结果n数据类型的自动转换规则及强制转换的方法DateDate3 3表达式的组成 n表达式实现对数据的处理,每个表达式都有唯一的值n表达式由运算对象和运算符组成n运算对象的种类:常量、变量、有返回值的函数调用 、其它表达式n例:2 a rand() (2+a)*rand( )n运算符:共34种,分为15个不同的优先级可以理解成是不带运算符的最

2、简单表达式常量表达式变量表达式函数表达式带运算符的表达式DateDate4 4左值与右值 n每个表达式都有唯一确定的值,表达式不是左值就是右 值 n右值:只能出现在赋值号(=)右边的表达式 n左值:不是右值的表达式就是左值n左值与右值的关系:右值只能出现在赋值号的右边; 而左值既可以出现在赋值号的左边,又可以出现在赋 值号的右边。左值可以取地址,右值不可以取地址.n例: 2 a rand() (2+a)*rand( ) a=b常量表达式只能作为右值 例:a=2;(右值)变量表达式为左值,既可在赋值号左边也可以 在右边,例:a=5;(左边) b=a;(右边)此函数表达式为右值 例:a=rand(

3、 )右值)此表达式只能作为右值 例:b=(2+a)*rand( ); (右值)赋值表达式只能作为右值 例:c=a=b;(右值) (a=b)=c;(出错)DateDate5 5算术运算符算术运算符主要完成数值计算问题,具体如下表所列运算符优先 级结合 方向对运算对象 的要求运算结果特性特殊说明- 取 负2从右 到左整、实型值运算对象的相 反数单目运算符+ 自增整,实,字符, 指针型变量结果与变量的 值可能一致单目,分为前+ 后 + - 自 减单目,分为前- - 后- -* 乘3从左 到右允许整型与 实型数混合只要有1个实 对象结果实型 ,否则整型结 果/ 除两个整数相除只能得 到整数商% 取 余

4、仅限整型数整除的余数正负号同第1数+ 加4从左 到右允许整型与 实型数混合只要有1个实 对象结果实型 ,否则整型结 果- 减例:int a=3,b,c; a+的表达式结果是3,变量a的值是4; +a的表达式结果是4,变量a的值是4; 因此,c=a+执行后, c的值是3,a的值是4 b=+a执行后,b的值是4,a的值也是4例:int a=3; -a结果为-3,但是变量a的值仍为3 -2.45是2.45的相反数例:int a=3,b,c; a-的表达式结果是3,变量a的值是2; -a的表达式结果是2,变量a的值是2; 因此,c=a-执行后, c的值是3,a的值是2 b= -a执行后,b的值是2,a

5、的值也是2例:int a=27,b=5,c; 表达式a/b结果是5,而不是5.4 表达式27.0/b结果是5.4 表达式27.0/5.0结果是5.4例:int a=27,b=5,c; 表达式a%b结果是2, 表达式-a%b结果是-2 表达式27.0%b是错误的例:表达式2+3结果是5 表达式2+3.0结果是5.0 表达式2.0+3.0结果是5.0例:表达式3-2结果是1 表达式3.0-2结果是1.0 表达式3.0-2.0结果是1.0DateDate6 6算术运算符n程序3.1 赋值表达式及算术运算符示例n#includen#include /包含随机函数rand的声明nint main( )n

6、 int a=5,b=6,c=7;nprintf(“%dn”,rand(); /显示随机数nprint(“%dn“,a*(b+c)/2-2); /显示算术表达式的值nprintf(“%dn“,a=b); /显示赋值表达式即a的值nb=rand()%10; /混合表达式赋0至9之间的1个随机数nprintf(“%dn”,c=a=b); /显示赋值表达式的值即c的值n return 0;n41 30 6 7动 态演示过 程DateDate7 7关系运算符关系运算符主要完成表达式间的比较,比较的结果非真即假,C语 言中无逻辑类型,故用1表示真,0表示假 任何类型的值,只要不等于0,在需要作出真假判断

7、的场合就代表 逻辑真。 运算符优先 级结 合方 向对运算对象的要求运算结果特性 大于6从左 到右允许不同类型的值混 合计算,运算对象非0 就表示真值,0表示假 ,当类型不一致时,会 自动进 行类型转换 为 同一种类型 关系表达式的最终结 果只有两个值:1或0 ,1表示真,0表示假 用括号可以提升优先 级,有时为 了更清晰= 大于等于b)!=c 可以写 成: ab!=c例:a=(b=(a+b) 用括号表达式的含 义清楚DateDate8 8关系运算符n程序3.2 关系运算示例n#includen#include /包含随机函数rand的声明nint main( )n n int a=rand()

8、%10; /产生3个09的随机数 n int b=rand()%10;n int c=rand()%10,d;n printf(“a=%d,b=%d,c=%dn”,a,b,c); /输出n printf(“%dn“,c=(a+b);n return 0;na=1,b=7,c=4 1 0rand( )函数产生一个非负随机整数, 产生一个a,b范围的非负随机整数的方 法是:a+rand( )%(b-a+1) 动 态演示过 程DateDate9 9逻辑运算符逻辑运算符主要完成更复杂的条件判断 逻辑表达式的最终结果只有两个:1表示真,0表示假。 任何类型的值,只要不等于0,在需要作出真假判断的场合就代

9、表 逻辑真,0代表逻辑假运算符优先 级结合 方向对运算对象的 要求运算结果特 性说明! 逻辑 非2从右 至左允许不同类型 的值混合计算 ,运算对象非 0就表示真值 ,0表示假一定是整型 ,并且只有 两个值1和0 ,分别表示真和假 单目运算符,置 反运算对象真假下表给出了 则执行语句 a+bn#include /包含随机函数rand的声明nint main( )n n int a=1+rand()%50, b=1+rand()%50;n int x=rand()/a, y=rand()/b;n printf(“%d,%d,%dn“,a,b,a 42,18,0 150,1472,1 0 0 1 r

10、and( )函数产生一个非负随机整数, 产生一个a,b范围的非负随机整数的方 法是:a+rand( )%(b-a+1) 动 态演示过 程DateDate1313自增自减运算符 n在算术运算符中已提到单目运算符自增(+)和自减(-)n自增自减运算符的几个特殊性: (1)这两种运算符专门用于改变一个变量自身的值(增或减1) ,因此实质上具有赋值功能,运算对象只能是一个变量。 (2)对变量变化的时机取决于运算符与运算对象的相对位置, 有前后之分,+a和a为前+(-),a+和a为后+(-) (3)前+或前是指先改变变量的值,再用变化后的值参加运 算;后+或后是指先用未变化过的变量的值参加表达式的 运算

11、,最后再改变变量的值。共同点就是变量值肯定改变 (4)需要区分表达式的值和变量的值,大部分情况下不是一回 事,但是如果仅仅改变变量而不用它运算,则前后无区别DateDate1414自增自减运算符表达式等价表示 表达式的值变量的值x=i+; x=i; i=i+1; 2i=3x=+j; j=j+1; x=j; 5j=5x=i-; x=i; i=i-1; 2i=1x=-j; j=j-1; x=j; 3j=3x=(i+)+(+j); j=j+1; x=i+j; i=i+1; 7i=3,j=5x=(i-)+(-j);j=j-1; x=i+j; i=i-1; 5i=1,j=3x=x+i+; x=x+i;

12、i=i+1; 10i=3x=x+i; i=i+1; x=x+ i;11i=3+(+i); i=i+1; i=i+1; 4i=4i+; 或 +i; i=i+1; 3i=3假设已有定义:int x=8,i=2,j=4; 下表列出了有自增自减运 算符的表达式的值及变量的值DateDate1515自增自减运算符n程序3.4 自增自减运算示例 n#includenint main( )n int i=5,j=6,k;n i+; +j; /相当于i=i+1;j=j+1;n printf(“i=%d,j=%dn“,i,j);n i-; -j; /相当于i=i-1;j=j-1;n printf(“i=%d,j

13、=%dn“,i,j);n k=(i+)+(+j); /相当于j=j+1;k=i+j; i=i+1;n printf(“i=%d,j=%d,k=%dn“,i,j,k);n k=(i-)+(-j); /相当于j=j-1;k=i+j; i=i-1;n printf(“i=%d,j=%d,k=%dn“,i,j,k); n return 0;ni=6,j=7 i=5,j=6 i=6,j=7,k=12 i=5,j=6,k=12 动 态演示过 程DateDate1616位运算符 n位运算是对字节或字内的二进制数位进行测试、抽取、设置或 移位等操作,是C语言可对硬件编程的体现。运算对象只能是int 类型(包括

14、char类型)nC中提供6种位运算符,其中的(按位取反为单目运算符),其 余5个为双目运算符,具体见下一页n多种运算符的优先级:n单目-算术乘除取余-算术加减-移位-关系-按位与-按位 异或-按位或-逻辑与-逻辑或DateDate1717运算符优先 级结合 方向运算基本方法特殊用途特殊说 明 按位取反2从右 至左对运算对象每1个二 进制位01取反按位取反运算经常被用于加密和解密 单目运 算符 右移位5第1操作数的每位按向 左依次平移第2操作数 指定的位数可快速地实现 整数 的除法运算 ,有利 于算法的硬件实现 相当于 除2的 几次方则条件运算表达式: ab?(x=6):(x=7)的值是?n对运

15、算对象的要求:可以是任何类型的表达式DateDate1919条件运算符n程序3.5 条件运算示例 n#includen#includenint main( )n n int a=rand()%10, b=rand()%10,c,d;n c=ab?a:b;n d=a a=1,b=7 c=7,d=1动 态演示过 程DateDate2020赋值与复合赋值运算符 n赋值运算符是C语言中使变量获得值的运算符,有两大类复合赋 值运算符 : (1)双目算术运算与赋值运算符一起,构成算术复合赋值运算符 (2)双目位运算与赋值运算符一起,构成位复合赋值运算符n运算对象:左边只能是变量,右边是一个表达式n计算方法及运算结果:表示给该变量空间赋值或修改该变量空 间中的值,此时变量也称为左值。赋值运算符右边是一个表达式 ,其类型最好是与左值类型一致, 不一致时自动类型转换.n优先级:14级,仅高于逗号的优先级n结合方向:从右至左,在连续赋值时,按从右至左的顺序依次 n例:设int a=1,b=2,c=5; 计算 a=b=c 和 (a=b)=c先计算b=c,b获得值5,该赋值表达式结果 为b;此结果作为赋值表达式a=b=c的右 值赋给a,因此a=5,最终a,b,c的值均为5 先计算a=b,a获得b的值2,该赋值表达式结果为 a;此结果作为赋值表达式(a=b)=c的左值获得c 的值,因此a=5,最终a,b,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 教育学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号