c-3(运算符、控制语句

上传人:tian****1990 文档编号:72763334 上传时间:2019-01-24 格式:PPT 页数:60 大小:488.50KB
返回 下载 相关 举报
c-3(运算符、控制语句_第1页
第1页 / 共60页
c-3(运算符、控制语句_第2页
第2页 / 共60页
c-3(运算符、控制语句_第3页
第3页 / 共60页
c-3(运算符、控制语句_第4页
第4页 / 共60页
c-3(运算符、控制语句_第5页
第5页 / 共60页
点击查看更多>>
资源描述

《c-3(运算符、控制语句》由会员分享,可在线阅读,更多相关《c-3(运算符、控制语句(60页珍藏版)》请在金锄头文库上搜索。

1、3G-嵌入式开发,C语言强化,蜚声腾茂教育科技,作业简析,第一讲 C语言基础回顾,C语言概述 C语言的关键字 C语言基本数据类型 C语言的运算符(% + - , ?:) C语言控制语句,学习目标: 熟练应用各种算术运算符的优先级和结合性 熟练应用各关系运算符的优先级和关系表达式值的判定 熟练应用各逻辑运算符的优先级和逻辑表达式值的判定 熟练应用赋值运算符的结合性和优先级 熟练应用自增/减运算符的作用、自增/减运算的前置方式和后置方式的区别 理解逗号表达式的作用及其值的计算 了解C语言的常用运算符的优先级,运算符的结合性和优先级,详见运算符.doc,逻辑运算符,| &是我们经常遇到的逻辑运算符,

2、简单容易犯错,int i=0; int j=0; if(+i0)|(+j0) printf(“%d,%d”,i,j);,结果?,说明 逻辑运算符|两边的条件只要有一个为真,其结果就为真;(对于我们这道题来说后面就不计算了) 同理对于&,我们也要特别注意,只要一个为假,其结果就为假;,位运算,例子 0x012+3; 0x012+30;或0x012-3;?,左移和右移的位数不能大于数据的长度,不能小于0。,位运算作用,按位与运算通常用来对某些位清0或保留某些位。 例如:把a的高8位清0,保留低8位,应该怎么做? 按位或运算常用来将源操作数某些位置1,其它位不变 按位异或可以使特定位的值取反 不引入

3、第三变量交换两个变量的值,考虑:负数的左右移动,-20左移2位,右移2位,结果?,模运算符%,/ 模运算符%是一个二元运算符。 优先级和结合方向同*和/ 。 %要求两侧的操作数均为整型数据,且n%m的结果为n/m的余数部分,即n被m除的余数。 余数的符号与被除数一致,如:7%3的结果为1,4%2的结果为0,2%3的结果为2,-2%3=? 2%-3=? -2%-3=?。 如果是 / 结果又如何?,+、-,算术运算符+和-使参加运算对象的值增1或减1,也是赋值运算。 单目运算符,运算对象可以是整型或实型变量,不能是常量或表达式,例如:+a,a+,a-,-a,+3,(i+j)- 它们在算术运算符中的

4、优先级和结合方向如下: + -(一元负)从右至左 * / % 从左至右 + -(二元减)从左至右 其构成形式有如下四种:前缀(+a,-a),后缀(a+、a-),运算后a的值相同,表达式的值不同。,运行结果:,void main() int a=1,b=1; printf(“+a=%d,b+=%dn”,+a,b+); printf(“a=%d,b=%dn”,a,b); printf(“a=%d,b-=%dn”,-a,b-); printf(“a=%d,b=%dn”,a,b); ,请写出下列代码的输出内容 include main() int a,b,c,d; a=10; b=a+; c=+a;

5、d=10*a+; printf(“b,c,d:%d,%d,%d”,b,c,d); return 0; ,答案:10,12,120,main( ) int m=5; if (m+5) printf(“m5”); else printf(“m=%d,”,m-); printf(“m=%d”,m-); ,运算结果: m=6,m=5,main( ) int m=5; if (+m5) printf(“m5”); else printf(“m=%d,”,m-); printf(“m=%d”,m-); ,运算结果: m5,练习,void main() int a=5,b=7,c; c=a+ +b; pri

6、ntf(“%d,%d,%dn”,a,b,c); ,运算结果: 6, 7, 12,说明C贪心法 C 语言有这样一个规则:每一个符号应该包含尽可能多的字符。也就是说,编译器将程序分解成符号的方法是,从左到右一个一个字符地读入,如果该字符可能组成一个符号,那么再读入下一个字符,判断已经读入的两个字符组成的字符串是否可能是一个符号的组成部分;如果可能,继续读入下一个字符,重复上述判断,直到读入的字符组成的字符串已不再可能组成一个有意义的符号。这个处理的策略被称为“贪心法”,void main() int i=3,c; c=(+i)+ (+i)+ (+i); printf(“%dn”,c); ,练习,1

7、6,练习,void main() int i=8; printf(“%d,%d,%d,%dn”,+i,-i,i+,i-); ,运算结果: 8, 7, 8, 8,逗号运算符和逗号表达式,逗号表达式的构成形式如下: 表达式1,表达式2,表达式n 逗号表达式的求解过程是:先求解表达式1,再求解表达式2,最后求解表达式n,且表达式n的值就是该逗号表达式的值。 逗号表达式的结合顺序:自左向右。 逗号运算符的优先级在所有运算符中是最低的。 例如: a=(3+5,3*5,5/3) a=3+5,3*5,5/3 (i=3,i+,+i,i+5),条件运算符,语法:?: 功能:如果表达式1的值是非0的,则其结果是表

8、达式2的值,否则为表达式3的值 例1:printf(“max is %dn”,(ab)?a:b); 常常用条件表达式构成一个赋值语句,例: ch=(ch=a,为什么说条件运算符的结合方向是自右向左的呢?运算的时候明明是自左向右啊,main() int k, num= 30; k =(num 5 ? (num =10 ? 100:200): 500); printf(“%d”, k); ,答案:200,main() int a=4,b=5,c=2, k; k =ab? b+a:bc?b:c; printf(“%d”, k); ,答案:9,结合方向是自右至左的,k =ab? b+a: (bc?b:

9、c);,C运算符优先级.doc 作业 重点提示: =和!=高于位操作 =和!=高于赋值符 算术运算符高于位移运算符 逗号运算符优先级最低,第一讲 C语言基础回顾,C语言概述 C语言的关键字 C语言基本数据类型 C语言的运算符(% + - , ?:) C语言控制语句(switch、break、contiue),学习目标: 了解程序设计的一般方法、结构化程序设计 熟悉顺序结构、简单程序流程图的画法 熟练应用if语句的使用规则以及相应的程序流程 熟练应用switch语句的使用规则及相应的程序流程,for( ) while( ) dowhile( ),9种控制语句,if语句(条件选择语句) if语句的

10、三种形式 形式一: 格式:if (expression) statement 执行过程:,形式二: 格式:if (expression) statement1 else statement2 执行过程:,形式三: 格式:,if ( expr1 ) statement1 else if (expr2 ) statement2 else if (expr3 ) statement3 . else statementn,执行过程:,if 语句是可以嵌套的,见我们资料的23页 if语句在我们以后的项目中是用的很多的控制结构,bool变量与“零值进行比较”,bool变量与“零值进行比较”的if语句怎么写

11、? boll bTestFlag=FALSE; if(bTestFlag=0); if(bTestFlag=1); if(bTestFlag=TRUE); if(bTestFlag=FALSE); if(bTestFlag); if(!bTestFlag); 分析:,float变量与“零值”进行比较,float变量与“零值”进行比较怎么写? float fTestVal = 0.0; A), if(fTestVal = 0.0); if(fTestVal != 0.0); B), if(fTestVal = -EPSINON) 分析:float和double类型的数据都是有精度限制的,直接和0

12、.0比,正确吗? EPSINON为定义好的精度,指针变量与“零值”比较,指针变量与“零值”进行比较的if语句怎么写? int *p=NULL; A), if(p = 0); if(p != 0); B), if(p); if(!p); C) , if(NULL = p); if(NULL != p); 哪一组或是那些组正确呢?,else到底与哪个if配对呢? if(0 = x) if(0 = y) error(); else /program code else始终与同一括号内最近的未匹配的if 语句结合,if语句后面的分号 关于if-else 语句还有一个容易出错的地方就是与空语句的连用;

13、if(NULL != p) ; fun(); 结果是不小心的一个分号导致结果与预想的相差很远,使用if语句的其他注意事项,规则1:先处理正常情况,再处理异常情况。非常重要的一点,把正常情况的处理放在if 后面,而不要放在else 后面。 规则2:确保if和else子句没有弄反。,switch语句(开关分支语句) 一般形式:,switch( 表达式) case E1: 语句组 1; break; case E2: 语句组 2; break; . case En: 语句组 n; break default: 语句组n+1 ; ,执行过程:,例 switch(score) case 5: print

14、f(“Very good!”); case 4: printf(“Good!”); case 3: printf(“Pass!”); case 2: printf(“Fail!”); default : printf(“data error!”); ,运行结果:score为5时,输出: Very good! Good! Pass! Fail! data error!,注意,Switch后面( )内的表达式可以为整型或字符型表达式 整型常量表达式之值必须互不相同 Case和default的出现顺序是任意的 在执行完某个case后面的语句后,将自动执行该语句后面的语句 多个case语句可以共用一组

15、执行语句。 例:switch(n) . case1: case2: x=10; break;,既然有了if else组合,为什么还需要switch、case组合呢? 重申: 每个case语句的结尾绝对不要忘了加break; 最后必须使用default分支,避免忘记进行default处理 case 后面只能是整型或字符型的常量或常量表达式(想想字符型数据在内存是怎么存的)。,case语句,排列 如果所有的case 语句没有明显的重要性差别,按字母或数字顺序排列各条case 语句; 把正常情况放在前面,而把异常情况放在后面; 按执行频率排列case 语句。,case语句,使用 简化每种情况对应的操作; 不要为了使用case 语句而刻意制造一个变量; 把default 子句只用于检查真正的默认情况。,while语句 一般形式:,while(表达式) 循环体语句;,执行流程:,循环,特点:先判断表达式,后执行循环体 说明: 循环体有可能一次也不执行 循环体可为任意类型语句 下列情况,退出while循环 条件表达式不成立(为零) 循环体内遇break,return,goto 无限循环: while(1) 循环体;,dowhile语句 一般形式:,do 循环体语句; while(表达式);,执行流程:,特点:先执行循环体,后 判断表达式 说明: 至少执行一次循环体 dowhile

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

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

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