




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、主讲:王立香E-mail:Tel:1396936927第第3章章 C 语言表达式与宏定义语言表达式与宏定义 掌握 常用运算符与表达式 掌握宏定义及带参宏定义的展开2目标要求3运算符和表达式C运算符算术运算符:(算术运算符:(+ - + - * * / % + - / % + -)关系运算符:(关系运算符:( = != = !=)逻辑运算符:(逻辑运算符:(! & |& |)位运算符位运算符 :(:( | & | &)赋值运算符:(赋值运算符:(= = 及其扩展及其扩展)条件运算符:(条件运算符:( ?: ?: )逗号运算符:(逗号运算符:( , ,)指针运算符:
2、(指针运算符:(* * & &)求字节数求字节数 :(:(sizeofsizeof)强制类型转换:强制类型转换:(类型)(类型)分量运算符:(分量运算符:(. -. -)下标运算符:(下标运算符:()其它其它 :(:(( ) -( ) -)4算术运算符和表达式例 5/2 = -5/2.0 =例 5%2 = -5%2 = 1%10 = 5%1 = 5.5%2例 5/2 = 2 -5/2.0 = -2.5例 5%2 = 1 -5%2 = -1 1%10 = 1 5%1 = 0 5.5%2 ()基本算术运算符: + - * / %结合方向:从左向右优先级: - - * / % - +
3、 - (2) (3) (4)说明:“-”可为单目运算符时,右结合性两整数相除,结果为整数%要求两侧均为整型数据5 自增、自减运算符自增、自减运算符+ -+ -作用:使变量值加作用:使变量值加1 1或减或减1 1种类: 前置前置 +i, -i +i, -i ( (先执行先执行i i+1+1或或i-1i-1,再使用再使用i i值)值) 后置后置 i+,i- i+,i- ( (先使用先使用i i值值, ,再执行再执行i i+1+1或或i-1i-1)例 j=3; k=+j; j=3; k=j+; j=3; printf(“%d”,+j); j=3; printf(“%d”,j+); a=3;b=5;c
4、=(+a)*b; a=3;b=5;c=(a+)*b; /k=4,j=4/k=3,j=4/4/3/c=20,a=4/c=15,a=4说明:说明: + - 不能用于常量和表达式,如5+5+,( (a+b)+a+b)+ + -结合方向: 自右向左 优先级:- + - -* / % -+ - (2) (3) (4)例 -i+ -(i+) i=3; printf(“%d”,-i+); /-3 例 j+k; (j+)+k;6赋值运算符和表达式 简单赋值运算符符号: =格式: 变量标识符=表达式作用:将一个数据(常量或表达式)赋给一个变量 复合赋值运算符种类:+= -= *= /= %= = = &
5、= = |=a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3例 a=3; d=func(); c=d+2;7 说明:结合方向:自右向左 优先级: 14左侧必须是变量,不能是常量或表达式左侧必须是变量,不能是常量或表达式 赋值表达式的值与变量值相等赋值表达式的值与变量值相等,且可嵌套且可嵌套赋值转换赋值转换规则规则: :使赋值号右边表达式值使赋值号右边表达式值自动自动转换成其左转换成其左边变量的类型边变量的类型例 3=x-2*y; a+b=3;例 float f; int i; i=10; f=i;则 f=10.0例 int i; i=2.56; /结果i=2;例: a=b=c
6、=5 a=(b=5) a=5+(c=6) a=(b=4)+(c=6) a=(b=10)/(c=2)/表达式值为5,a,b,c值为5/ b=5;a=5/表达式值11,c=6,a=11/表达式值10,a=10,b=4,c=6/表达式值5,a=5,b=10,c=2例: a=12; a+=a-=a*a/a=-264 等价于a=a+(a=a-(a*a)例: int a=2; a%=4-1; a+=a*=a-=a*=3; /a=0 等价于a=a+(a=a*(a=a-(a=a*3)8逗号运算符和表达式 形式:表达式1,表达式2,表达式n 结合性:从左向右 优先级: 15 逗号表达式的值:等于表达式n的值 用
7、途:常用于循环for语句中例 a=3*5,a*4 a=3*5,a*4,a+5例 x=(a=3,6*3) x=a=3,6*a例 a=1;b=2;c=3; printf(“%d,%d,%d”,a,b,c); printf(“%d,%d,%d”,(a,b,c),b,c); /a=15,表达式值60/a=15,表达式值20/赋值表达式,表达式值18,x=18/逗号表达式,表达式值18,x=3/1,2,3/3,2,39 关系运算符和表达式 关系运算符 种类: = != 结合方向:自左向右 优先级别:=!=优先级6(高)优先级7(低)例 ca+b /c(a+b) ab!=c /(ab)!=c a=bc /
8、a=(bc /a=(bc) 关系表达式的值:是逻辑值“真”或“假”,用1和0表示例 int a=3,b=2,c=1,d,f; ab (ab)=c b+cb f=abc/表达式值1/表达式值1/表达式值0/d=1/f=0 关系运算注意:10例 5278在C中是允许的, 值为0例 int i=1, j=7,a; a=i+(j%4!=0); 则a=2例 a0 结果为 A100 结果为1011 关系运算注意:例 注意区分“=”与“=” int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”);例 应避免对实
9、数作相等或不等的判断如 1.0/3.0*3.0=1.0 结果为可改写为:fabs(1.0/3.0*3.0-1.0)1e-6012清华附中有四位同学中的一位做了好事,不留清华附中有四位同学中的一位做了好事,不留名,表扬信来了之后,校长问这四位是谁做的名,表扬信来了之后,校长问这四位是谁做的好事。好事。A A说:不是我。说:不是我。B B说:是说:是C C。C C说:是说:是D D。D D说:他胡说说:他胡说。已知三个人说的是真话,一个人说的是假话。已知三个人说的是真话,一个人说的是假话。现在要根据这些信息,找出做了好事的人。现在要根据这些信息,找出做了好事的人。1314 逻辑运算符和表达式 逻辑
10、运算符 种类: ! & | 逻辑运算真值表ab!a!ba&ba|b真假真假假假真真C语言中,运算量: 0表示“假”, 非0表示“真”, 运算结果: 0表示“假”, 1表示“真”,真假假假假假真真假假真真真假真真15! (2)& (11)| (12)高低例 a=x & xb&xy a=b|x=y !a|abl优先级:l结合方向:! :从右向左& :从左向右| :从左向右/ (a=x) & (xb)&(xy)/(a=b)|(x=y)/(!a)|(ab)16! (2)& (11)| (12)高低l优先级:l结合方向:! :从右向
11、左& :从左向右| :从左向右例 a=4;b=5; !a a&b a|b !a|b 4&0|2 53&2|83)&2|(8(4-(!0) 值为117! (2)& (11)| (12)高低l优先级:l结合方向:! :从右向左& :从左向右| :从左向右 短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符例 a&b&c /只在a为真时,才判别b的值; 只在a、b都为真时,才判别 c的值例 a|b|c /只在a为假时,才判别b的值; 只在a、b都为假时,才
12、判别 c的值例 a=1;b=2;c=3;d=4;m=1;n=1; (m=ab)&(n=cd)/结果m=0,n=118某地刑侦大队对涉及六个嫌疑人的一桩疑案进行分析:某地刑侦大队对涉及六个嫌疑人的一桩疑案进行分析:A、B 至少有一人作案;至少有一人作案;A、E、F 三人中至少有两人参与作案;三人中至少有两人参与作案;A、D 不可能是同案犯;不可能是同案犯;B、C 或同时作案,或与本案无关;或同时作案,或与本案无关;C、D 中有且仅有一人作案;中有且仅有一人作案;如果如果 D 没有参与作案,则没有参与作案,则 E 也不可能参与作案。也不可能参与作案。试编一程序,将作案人找出来。试编一程序,
13、将作案人找出来。任务任务 4.219思路:思路:20CC1:A和和B至少有一人作案至少有一人作案令令 A 变量表示变量表示 A 作案,作案,B 变量表示变量表示 B 作案作案21CC2:A和和D不可能是同案犯不可能是同案犯可做如下可做如下分析:分析:如果如果A 和和D是同案犯,是同案犯,则应则应写成写成 A & D所以,对于所以,对于“A 和和 D 不是同案犯不是同案犯”,应应写成写成 !( A & D ) 因此有因此有 CC2 = !( A & D )22CC2 = !( A & D )23CC3:A、E、F 中至少有两人涉嫌作案中至少有两人涉嫌作案分析有三种
14、可能分析有三种可能第一种,第一种,A 和和 E 作案,(作案,(A & E)第二种,第二种,A 和和 F 作案,(作案,(A & F)第三种,第三种,E 和和 F 作案,(作案,(E & F)这三种可能性是这三种可能性是 或或 的关系,因此有的关系,因此有CC3 = (A & E)|(A & F)|(E & F)我们写出我们写出 CC3 的真值表。的真值表。2425CC4:B和和C或同时作案,或都与本案无关或同时作案,或都与本案无关第一种情况:同时作案(第一种情况:同时作案(B & C)第二种情况:都与本案无关(第二种情况:都与本案无关(
15、!B & !C)两者为两者为或或的关系,因此有的关系,因此有 CC4 = (B & C) | (!B & !C)26CC5:C、D中有且仅有一人作案中有且仅有一人作案CC5 = (C & !D) | (D & !C)27CC6:如果如果D没有参与作案,则没有参与作案,则E也不可能参与作案。也不可能参与作案。两种可能性两种可能性: (1)D作案;(作案;(2)D未作案未作案对于(对于(1)D作案:作案:E可能作案,也可能不作案。因此,可表示为可能作案,也可能不作案。因此,可表示为: D & ( E | (!E) ) 当然,依题意,此种情况下与当然,
16、依题意,此种情况下与E无关,故也可以将条件无关,故也可以将条件简化描述为简化描述为 D,而不必,而不必与与上上(E|!E)对于(对于(2)D未作案:未作案:依线索陈述,依线索陈述,E没有作案。因此,可表示:没有作案。因此,可表示: (!D) & (!E)综合起来,综合起来,CC6 = ( D & ( E | (!E) ) | ( (!D) & (!E) )28CC6 = (D & (E|(!E) | (!D) &(!E)我们注意到,我们注意到,E|(!E) E|(!E) 恒为真,即恒为真,即1 1。 所以,上式可以化简为:所以,上式可以化简为: CC6
17、= (D & 1) | (!D) & (!E) CC6 = (D & 1) | (!D) & (!E)因为因为 D & 1 D & 1 恒等于恒等于 DD,所以有:,所以有: CC6 CC6 D | (!D) & (!E)D | (!D) & (!E)上式求或时,上式求或时,“或或”右边隐含着右边隐含着!D!D的意思,所以右的意思,所以右半部分中的半部分中的 !D!D 可以去掉,即:可以去掉,即: CC6 CC6 D | (!E)D | (!E)29请注意代码编排风格请注意代码编排风格30五位跳水高手将参加十米高台跳水决赛,有好事
18、者五位跳水高手将参加十米高台跳水决赛,有好事者请这请这五五位选手位选手据实力预测比赛结果。据实力预测比赛结果。A选手说:选手说:B第二,我第三;第二,我第三;B选手说:我第二,选手说:我第二,E第四;第四;C选手说:我第一,选手说:我第一,D第二;第二;D选手说:选手说:C最后,我第三;最后,我第三;E选手说:我第四,选手说:我第四,A第一第一;决赛成绩公布之后,每位选手的预测都决赛成绩公布之后,每位选手的预测都,即一对一错,请编程解出比赛的实际名次。,即一对一错,请编程解出比赛的实际名次。 条件运算符与表达式 一般形式: expr1 ? expr2 : expr3 执行过程 功能:相当于条件
19、语句,但不能取代一般if语句31例 if (ab) printf(“%d”,a); else printf(“%d”,b);printf(“%d”,ab?a:b);例 求 a+|b| printf(“a+|b|=%dn”,b0?a+b:a-b);expr1取expr2值取expr3值非0=0例 (a=b)?Y:N (x%2=1)?1:0 (x=0)?x:-x (c=a & c0?1:(xb?a:cd?c:d ab?a:(cd?c:d) expr1、expr2、expr3类型可不同,表达式值取较高的类型例 x?a:b /x=0,表达式值为b; x0,表达式值为a xy?1:1.5 /xy
20、 ,值为1.0; xy ,值为1.5位运算位运算321: int a=15 求:a1 a1 b23: int c=10 求:c4: int a=3 b=9 求 a&b a|b ab5: int a ;将 a 的字节高四位置一 取 a的字节高四位位运算位运算333.7 宏定义宏定义 作用:对源程序编译之前做一些处理,生成扩展C源程序 种类 宏定义 #define 文件包含 #include 条件编译 #if-#else-#endif等 格式: “#”开头 占单独书写行 语句尾不加分号34编译预处理编译预处理宏定义 不带参数宏定义 一般形式: #define 宏名宏名 宏体宏体 功能:用指
21、定标识符(宏名)代替字符序列(宏体)35如 if(x=YES) printf(“correct!n”); else if (x=NO) printf(“error!n”);展开后: if(x=1) printf(“correct!n”); else if (x=0) printf(“error!n”); 宏展开:预编译时,用宏体替换宏名-不作语法检查如 #define YES 1 #define NO 0 #define PI 3.1415926 #define OUT printf(“Hello,World”);宏体可缺省,表示宏名定义过或取消宏体 定义位置:任意(一般在函数外面) 作用域:
22、从定义命令到文件结束 #undef可终止宏名作用域 格式: #undef 宏名例 #define YES 1 main() . #undef YES #define YES 0 max() . YES原作用域YES新作用域 宏定义可嵌套,不能递归例 #define MAX MAX+10 () 引号中的内容与宏名相同也不置换例 #define PI 3.14159 printf(“2*PI=%fn”,PI*2);宏展开:printf(“2*PI=%fn”,3.14159*2); 宏定义中使用必要的括号()例 #define WIDTH 80 #define LENGTH WIDTH+40 var=LENGTH*2;宏展开:var= 80+40 *2;( )( )例 #define WIDTH 80 #define L
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司组织业余活动方案
- 公司组合活动策划方案
- 公司活动宣传策划方案
- 2025年心理学研究生入学考试试卷及答案
- 2025年全球化与国际关系研究生入学考试题及答案
- 2025年科学传播专业研究生入学考试试题及答案
- 2025年矿业工程与安全管理考试题及答案
- 2025年翻译与口译专业资格考试试卷及答案
- 2024年度浙江省护师类之主管护师考前冲刺试卷B卷含答案
- 2024年度浙江省二级造价工程师之建设工程造价管理基础知识模拟预测参考题库及答案
- 有限空间监理实施细则
- 新产品制造可行性及风险分析报告
- 电磁兼容中抗扰度试验教学课件
- 采购预付款合同
- 2023年泸州市文化和旅游系统事业单位招聘笔试模拟试题及答案
- 医疗器械行业市场部人员岗位职责
- (中医内科)高级、副高级职称考试模拟试题及答案
- 跌倒坠床原因分析预防措施
- 弱电施工安全技术交底
- 安全生产知识应知应会
- 体育器材采购设备清单
评论
0/150
提交评论