《嵌入式C编程02流程控制参考PPT》由会员分享,可在线阅读,更多相关《嵌入式C编程02流程控制参考PPT(41页珍藏版)》请在金锄头文库上搜索。
1、流程控制,课程安排,什么是流程控制 顺序流程结构 分支流程结构 循环流程结构,回顾什么是程序? 程序员将解决某个工程问题的想法通过编程语言组织成程序 如果组织程序? 程序 = 数据(组合) + 语句(组合) 回顾有哪些基本数据类型?回顾什么是语句? 表达式加分号构成语句。 语句就是计算机的行为动作!,从回顾开始,想象一下自己参加这个培训班的日子将会怎样度过? 温习上次课程; 预习下次课程; 如果上课日子到来; 到学校上课; 如此循环,直到培训班课程结束! 这里存在几种动作过程(流程)?,生活中的动作过程(流程),顺序流程 分支流程 循环流程,流程分类,1966 年, Boehm 和 Jacop
2、ini 证明了程序设计语言仅仅使用顺序、选择和循环三种基本控制结构就足以表达出各种其他的形式结构。 所以,利用顺序结构、分支结构、循环结构或者这些结构的组合就可以让计算机处理任何工程问题了,程序语言基本控制结构,课程安排,什么是流程控制 顺序流程结构 分支流程结构 循环流程结构,顺序流程结构,从控制台输入一个字符,输出该字符的ASCII编码,实例,课程安排,什么是流程控制 顺序流程结构 分支流程结构 循环流程结构,分支流程结构,判断语句:有么为真,要么为假!没有第三种情况!,语法结构 if (比较/逻辑表达式) 语句一; 语句二; ,if语句,判断整数是否大于0、小于0、等于0、不等于0 判断
3、整数是否在某个范围之内 输入字符,判断如果是小写字母,则输出该字母 输入字符,判断如果是字母,则输出该字母,实例,语法结构 if (比较/逻辑表达式) 语句一; 语句二; else 语句三; 语句四; ,ifelse语句,输入字符,判断如果是字母,则输出该字母;否则提示输入非字母,实例,语法结构 if (比较/逻辑表达式) 语句一; 语句二; else if (比较/逻辑表达式) 语句三; 语句四; ,ifelse if语句,if (比较/逻辑表达式) 语句一; 语句二; else if (比较/逻辑表达式) 语句三; 语句四; else 语句五; 语句六; ,输入字符,判断如果是小写字母,显
4、示对应大写字母;如果是大写字母,显示对应小写字母 输入字符,判断如果是小写字母,显示对应大写字母;否则如果是大写字母,显示对应小写字母 输入字符,判断如果是小写字母,显示对应大写字母;否则如果是大写字母,显示对应小写字母;否则显示输入非字母 输入字符,判断如果是小写字母,显示对应大写字母;否则如果是大写字母,显示对应小写字母;否则如果是数字,显示该数字值;,实例,if 分支结构支持分支嵌套,嵌套使用时要注意ifelse 的配对,If使用注意!,例: if (a=b) if(b=c) printf(a=b=c); else printf(a!=b);,修改后:if (a=b) if(b=c) p
5、rintf(a=b=c); else printf(a!=b); ,加 配对,配对的if-else格式要一致,增强可读性,语法结构,switch语句,用于多分支选择 例如:根据控制台输入的字符17,显示星期 swich(ch) case 1: printf(“星期一n”); break; default: printf(“输入非法”); break;,switch应用实例,漏掉某个break会怎么样? case命中后会一直执行,直到遇到第一个break才结束switch,switch应用注意!,条件表达式,一般形式: expr1 ? expr2 : expr3 执行过程 功能:相当于条件语句,
6、但具有返回值 实例: int a = 20, b = 10; printf(“max is %dn”, a b ? a : b);,实验2-4:分支流程控制 1、将学生分数按标准分为优、良、中、差四个级别; 2、switch实现从控制台获得一个字符输入,如果输入 为m, 显示”good moning”; 如果输入为a, 显示”good afternoon”; 如果输入为n, 显示”good night”; 其他字符则显示“do nothing”; 3、实现猜拳游戏:模拟两个玩家出拳(石头、剪刀、 布),判断胜、平、负。,上机实验,课程安排,什么是流程控制 顺序流程结构 分支流程结构 循环流程结
7、构,循环流程结构,C语言可实现循环的语句: 1、while 语句 2、do while 语句 3、for 语句 4、用goto 和 if 构成循环(永远不要使用),循环语句种类,语法结构:,while(表达式) 循环体语句;,执行流程:,while语句,while实例,1、循环打印数值1100 2、计算1100的累加值:,语法结构:,do 循环体语句; while(表达式);,执行流程:,dowhile语句,特点:至少执行一次循环体,dowhile实例,1、循环打印数值1100 2、计算1100的累加值:,while循环使用注意,1、死循环 while(1) 语句; 2、while(0)与do
8、 while(0)在做什么? 3、break退出循环 while(1) if (表达式) break; 语句; ,do 语句; while(1); do if (表达式) break; 语句; while(1),语法结构:,for(expr1 ; expr2 ; expr3) 循环体语句;,执行流程:,for语句,特点:对于预先知道循环次数时通常用for,for实例,1、循环打印数值1100 2、计算1100的累加值:,for循环使用注意,1、死循环 for(;) 语句; 2、for变体 for(; i=100; i+) for(; i = 100;) 3、break退出循环 for(;) i
9、f (表达式) break; 语句; ,循环扩展话题,1、循环嵌套,(1) for() for() . ,(2) while() do while( ); . ,实例:如何打印4x4个星号(*)?,循环扩展话题,1、break与continue break:终止并跳出最近一层的结构 continue:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断,实例:从控制台输入整数,求前10个正整数的和,循环扩展话题,3、关于goto 如果要直接退出外层循环怎么办? goto + if 也能实现循环 goto的实际应用:统一出口!,goto 语句标号; . 标号:语句;,循环扩展
10、话题,4、关于循环效率 在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数,for (row=0; row100; row+) for (col=0; col5; col+ ) sum = sum + arowcol; ,for (col=0; col5; col+ ) for (row=0; row100; row+) sum = sum + arowcol; ,循环扩展话题,4、关于循环效率 提高代码执行效率往往是以减低可读性为代价的,/*代码A */ for (i=0; iN; i+) if (condition) DoSomething(); else DoOtherthing(); ,/* 代码 B */ if (condition) for (i=0; iN; i+) DoSomething(); else for (i=0; iN; i+) DoOtherthing(); ,实验2-5:循环流程控制 1、打印100200之间的所有素数。 2、在控制台上打印图形: 3、百钱买百鸡 :100钱买100鸡:公鸡1只5钱,母鸡1只 3钱,小鸡3只1钱。公鸡、母鸡、小鸡分别能买多少只?,上机实验,