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