资源预览内容
第1页 / 共60页
第2页 / 共60页
第3页 / 共60页
第4页 / 共60页
第5页 / 共60页
第6页 / 共60页
第7页 / 共60页
第8页 / 共60页
第9页 / 共60页
第10页 / 共60页
亲,该文档总共60页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
2.2 运算符与表 达 式 教学目标:本章详细介绍了C语言提供的运算符和表达式的 使用方法,要求通过本章的学习了解运算符的优先级 和结合性,掌握的运算符和表达式类类型及求值规则值规则 ,掌握数据类型转换的方法。 教学重点: 重点掌握运算符:+,-,*,/,%,+,-, 则:ab 的值为1c=a 的值为0 2.2 运算符与表 达 式 【例题】计算表达式3=4+12!=5的值并给出求解过程3 = 4 + 1 2 != 5 51 0 1 注意 应避免对实数作相等或不等的判断 如 1.0/3.0*3.0=1.0 结果为0 可改写为:fabs(1.0/3.0*3.0-1.0)b)printf(“m=%d n=%dn“,m,n); 运行结结果:m=0 n=12.2 运算符与表 达 式 【例题2】写出表达式53a+=2 ; (2) float x=1.2, y=2.1; y*=x+3.4 ; (3) int a=1, b=2; b/=a+=1; 变量 OP= 表达式 等价于: 变量 = 变量 OP (表达式)/*等价于a=a+2 */*等价于y=y*(x+3.4)*/* 等价于b=b/(a=a+1) */2.2 运算符与表 达 式 【例题】已知int a=12;计算表达式a+=a-=a*a 的值a += a -= a * a 144 aa144即a-132a-132 即a=-264main() int a=12; printf(“%d %dn“, a ,a+=a-=a*a); 2.2 运算符与表 达 式 2.2.7 逗号表达式 逗号运算符: , 双目运算 左结合 逗号表达式一般形式如下:表达式1,表达式2,表达式3,表达式n 用途:用于将多个表达式连接成一个表达式。常用 于for循环语句中 运算过程:从左向右依次计算每个表达式的值,逗 号表达式的值就是最右边表达式的值,逗号表达式值 的类型就是最右边表达式的值的类型。 优先级:最低 结合:左结合(自左向右)。 如表达式x=a=3, 6*x, 6*a, a+x的值为_。62.2 运算符与表 达 式 【例题】main() int a,x;printf(“%d %d %dn”,a,x,(x=a=3,+a,a+=4,a5); printf(“%d %d %dn“,a,x,x=(a=3,+a,a+=4,a5); 运行结结果: 8 3 18 1 12.2 运算符与表 达 式 2.2.8条件运算符及条件表达式 条件表达式一般形式: 表达式 1? 表达式 2: 表达式 3 条件运算符 ? : 求解过程如右图。 表达式值的类型: 取表达式2和3中值的类型中 的精度较高者。其中,表达式1一般为关 系表达式或逻辑表达式,表达 式2和表达式3一般为同类型表 达式。 三目运算符表达 式 1条件表达 式取表达 式2的值条件表达 式取表达 式3的值非0 0图 条件表达式的求解过程注意:条表达式2和表达式3只有一个被 求解。 2.2 运算符与表 达 式 例如:32?1:1.5 的值为_,类型为_。 1.0双精度型 优先级:条件运算为倒数第 3 级, 高于赋值运算, 低于逻辑运算。 结合性:右结合 条件运算符可嵌套使用如 107 ? 2:3) /*表达式的值为3*/2.2 运算符与表 达 式 例1 编写程序计算两个整数a和b的最大值main() int a=3,b=4,max; max = ab?a:b;printf(“max(%d,%d)=%d”,a,b,max); 运行结结果: max(3,4)=42.2 运算符与表 达 式 例2用条件运算符求 a+|b| main() int a=3,b=-4; printf(“%d+|%d|=%dn”,a,b,b0?a+b:a-b); 运行结结果: 3+|-4|=72.2 运算符与表 达 式 【例3】读程序写结果main() int a=1,b=2,c=3,d=4,m,n,e;m=1; n=1;printf(“m=%d n=%d e=%dn“, m, n, (a+d=b+c)?(m=ab):(n=cd); m=1; n=1;printf(“m=%d n=%d e=%dn“, m, n, (a+d!=b+c)?(m=ab):(n=cd); 运行结结果: m=0 n=1 e=0m=1 n=0 e=02.2 运算符与表 达 式 2.2.9 其它运算 1. 取地址运算运算符: p= printf(”%d,%d,%d”, a,*p,* 则输出为:3. 求字节数运算运算符: sizeof 单目运算 右结合 优先级次高书写形式:sizeof(类型名或变量或表达式)操作数可以是类型名, 也可以是变量、表达式, 用以 求得相应类型或数据所占的字节数。 10,10,10 /* a、*p和* printf(“%dn“,sizeof(int);printf(“%dn“,sizeof(long);printf(“%dn“,sizeof(float); printf(“%dn“,sizeof(double); 2.2 运算符与表 达 式 4. 括号运算在其它语言中括号是某些语法成分的描述 方式, C语言将括号亦作为运算处理。 (1) 圆括号运算( ): 用于改变运算的优先级, 还用于将函数的 参数与函数名相分离。 (2) 中括号运算 : 又称下标运算, 用来得到数组的分量下标变 量。括号运算的优先级处于最高一级。 2.2 运算符与表 达 式 作业: P73 一、4,5,7,8,9,10,12,13 二、程序填空题 1 三、程序改错题 1 四、程序分析题 1实验2 写出测试程序的输出结果实验课前检查2.2 运算符与表 达 式 书后习题:P73 一、4,5,7,8,9,10,12,13 4.设m,n,a,b,c,d的值均为0,执行 (m=a=b)|(n=c=d)后,m,n的值是( ) 0,0 0,1 1,0 1,1 5.设有定义:int a=5,b; 执行下列语句后,b的值 不为2的是( ) b=a/2 b=6-(-a) b=a%2 b=a3?2:4 7.设有定义:int x,a,b;则执行完语句x=(a=3,b=a-);后,x,a,b的值依次是( ) 3,3,2 3,2,2 3,2,3 2,3,2 8.若有定义:char ch=A;则表达式 ch=(ch=A则下面表达式中 值为0的是( ) a-*c a-*b b-a *b-*a 10.若有定义:int a,b,c;下列表达式中,那一个是 合法的C语言赋值表达式( ) a=7+b=c=7 a=b+=c=7 a=(b=7,c=12) a=3,b=a+5,c=b-2 12.若有定义:float x=1,*y=则执行完语句 *y=x+3/2;后,x的值为( ) 1 2 2.0 2.5 13.设有定义:int a=3,b=4; 执行语句 printf(“%d,%d“,(a,b),(b,a);的输出是( ) 3,4 4,3 3,3 4,4 2.2 运算符与表 达 式 补充 1.下列变量定义合法的是( ) A. short _a = 1 - .1e-1 B. double b = 1+5e2.5 C. long do = 0xfdaL D. float 2_and = 1-e-3 2.若已经定义x和y为double类型,则表达式: x=1,y=x+3/2的值是( ) A.1 B.2 C. 2.0 D. 2.5 4.设int c=5;a=2+(c+=c+,c+8,+c),则 a=( )A.13 B. 14 C. 15 D.16 5.表达式 (int)5.7*2.0的值为( ) (A) 11.4 (B) 10 (C)10.0 (D) 11 2.2 运算符与表 达 式 二、程序填空题(在下列程序的 处填上 正确的内容,使程序完整) 1.下列程序的功能是把从键盘上输入的整数取绝 对值后输出。 main() int x;scanf(“%d“,if(x0);printf(“%dn“,x); 2.2 运算符与表 达 式 三、程序改错题(下列每小题有一个错误,找出并改 正) 1. main() int a,b;float x,y,z;scanf(“%f%f%f“,a=b=x+y+z;c=a+b;printf(“%d%d%d“,a,b,c); 2.2 运算符与表 达 式 四、程序分析题 1.下面程序的输出结果是 main() int x=3,y=3,z=1;printf(“%d %dn“,(+x,y+),z+2);
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号