C程序设计语言——控制流

上传人:无*** 文档编号:244449345 上传时间:2024-10-04 格式:PPT 页数:25 大小:296.50KB
返回 下载 相关 举报
C程序设计语言——控制流_第1页
第1页 / 共25页
C程序设计语言——控制流_第2页
第2页 / 共25页
C程序设计语言——控制流_第3页
第3页 / 共25页
点击查看更多>>
资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,*,C,程序设计语言,第,3,章 控制流,三种基本结构,顺序结构、选择结构、循环结构,已经证明,任何程序均可只用这三种结构实现,Bhm,Corrado,and,Jacopini,Guiseppe,.Flow diagrams,Turing machines and languages with only two formation rules.,Communication of ACM,9(5):366-371,May 1966.,只用这三种结构的程序,叫结构化程序,程序“必须”符合结构化规则,流程图,顺序结构,选择结构,true,false,true,false,循环结构,语句块(,Block,),括住的若干条语句构成一个语句块,语句块内可以定义变量,变量必须在语句块的开头定义,变量仅在定义它的语句块内(包括下层语句块)有效,(,scope.c,),同一个语句块内的变量不可同名,不同语句块可以同名,(,homonym.c,),各司其职、下层优先,尽量不要在下层语句块内定义变量,也尽量不要定义同名变量,语句块可以用在任何可以使用语句的地方,但没有道理要乱加语句块,if,-,else,选择结构的一种最常用形式,if,(,表达式,),语句块,1;,else,语句块,2;,语句块,3,表达式,值,非,0,时,执行,语句块,1,,然后,语句块,3,;,表达式,值为,0,时,执行,语句块,2,,然后,语句块,3,else,部分可以没有。当,表达式,值为,0,时,直接执行,语句,3,if-else,嵌套使用时,注意,else,和谁配套的问题,if.c,表达式,!=0?,Y,N,语句块,1,语句块,2,语句块,3,else,-,if,if,的一种扩展,if,(,表达式,1),语句块,1;,else if,(,表达式,2),语句块,2;,else if,(,表达式,3),语句块,3;,else,语句块,4;,语句块,5;,else,部分可以没有,表达式,1!=0?,Y,N,语句块,1,语句块,2,语句块,5,表达式,2!=0?,表达式,3!=0?,语句块,3,N,语句块,4,N,Y,Y,switch,多路选择,switch,(,表达式,),case,整型常数,1:,语句,1;,case,整型常数,2:,语句,2;,default,:,语句,3;,default,可以没有,现场编程完成计算器,不要忘记,break,switch,和,else,-,if,的比较,else,-,if,比,switch,的条件控制更强大一些,else,-,if,可以依照各种逻辑运算的结果进行流程控制,switch,只能进行,=,判断,并且只能是整数判断,switch,比,else,-,if,更清晰,两者都要尽量避免用得过多、过长,尤其不要嵌套得太多,它们大大增加程序的分支,使逻辑关系显得混乱,不易维护,易出错,循环,while,,,for,while,(,表达式,),语句块,;,for,(,表达式,1;,表达式,2;,表达式,3),语句块,;,while,while,(,表达式,),语句块,1;,语句块,2;,只要,表达式,的值为,非,0,,就重复执行,语句块,1,,直到,表达式,值为,0,时止,开始执行,语句块,2,表达式,!=0?,Y,N,语句块,1,语句块,2,for,for,(,表达式,1;,表达式,2;,表达式,3),语句块,;,首先执行,表达式,1,。如果,表达式,2,的值为,非,0,,就重复执行,语句块,和,表达式,3,,直到,表达式,2,的值为,0,时止,相当于:,表达式,1;,while,(,表达式,2),语句块,;,表达式,3;,for,的所有表达式均可省略,表达式,2!=0?,Y,N,语句块,表达式,3,表达式,1,注意,在,for,和,while,语句之后一般没有分号,有分号表示循环体就是分号之前的内容,即循环体不存在,while,(i 100),;,i+;,for,(i=0;i 100;i+),;,printf(%d,i);,for,通常有一个循环变量控制循环的次数,不要在循环体内改变这个变量,循环,do,-,while,do,语句块,1;,while,(,表达式,);,语句块,2;,首先执行,语句,,然后判断,表达式,的值。如果表达式为,0,,继续向下执行,否则,再次执行,语句,,再次判断,表达式,的值,语句块,1,会被执行至少一次,表达式,!=0?,Y,N,语句块,1,语句块,2,选择三种循环的一般思路,如果循环次数已知,用,for,如果循环次数未知,用,while,如果循环体至少要执行一次,用,do,-,while,只是思路,不是定律,死循环,永远不会退出的循环为死循环,for,(;),while,(1),do,while,(1),除非确实需要死循环,否则不要使用这样的形式。它们使循环的中止条件变得不明朗,一般情况下,要极力避免死循环,绝大多数程序不需要死循环。如果出现,往往都是,bug,时间过长的循环会造成“假死”现象,也要考虑解决,break,和,continue,对,for,、,while,、,do,-,while,循环进行内部手术,break,,退出循环,continue,,中断此次循环的执行,开始下一次,break,和,continue,少用为妙,它们增加了循环执行的分支,,break,更增加了循环的出口,它们可以用来处理程序异常,而尽量不要用来处理正常流程,标号举例,Error:,同变量、函数的命名规则一样,后面加上一个冒号,一般顶格书写,goto,举例,goto,Error;,goto,与标号(,label,),Dijkstra,与,goto,Edsger,W.,Dijkstra,,生于,1930,年,卒于,2002,年,8,月,6,日,软件体系结构,最短路径算法,,PV,原语,结构化程序设计,向量,堆栈,大师赐予我们许多深邃的简单,Dijkstra,与,goto,Edsger,W.,Dijkstra,.Letters to the editor:Go to statement considered harmful.,Communication of ACM,11(3):147148,March 1968,“,Goto,considered harmful”,,,Dijkstra,在,1968,年就告诉了我们,“I became convinced that the go to statement should be abolished from all higher level programming languages.”,“The go to statement is too much an invitation to make a mess of ones program.”,现代观点认为,混乱根源不在,goto,,而在标号,任何程序都可以不用,goto,就实现其功能,但在某些情况下,使用,goto,可以让程序更清晰,糟糕的,goto,START_LOOP:,i,f,(,fStatusOk,),if,(,fDataAvaiable,),i=10;,goto,MID_LOOP;,else,goto,END_LOOP;,else,for,(,i,=0;,i,100;,i,+),MID_LOOP:,/lots of code here,goto,START_LOOP;,END_LOOP:,糟糕的,goto,START_LOOP,:,i,f,(,fStatusOk,),if,(,fDataAvaiable,),i=10;,goto,MID_LOOP;,else,goto,END_LOOP;,else,for,(,i,=0;,i,100;,i,+),MID_LOOP:,/lots of code here,goto,START_LOOP;,END_LOOP:,这个代码怎么样?,HRESULT Init(),pszMyName,=(CHAR*)malloc(256);,if,(,pszMyName,=NULL),return,hr;,pszHerName,=(CHAR*)malloc(256);,if,(,pszHerName,=NULL),free(pszMyName,);,return,hr;,pszHisName,=(CHAR*)malloc(256);,if,(,pszHisName,=NULL),free(pszMyName,);,free(pszHerName,);,return,hr;,free(pszMyName,);,free(pszHerName,);,free(pszHisName,);,return,hr;,用,goto,修改之后,HRESULT Init(),pszMyName,=(CHAR*),malloc,();,if,(,pszMyName,=NULL),goto,Exit;,pszHeName,=(CHAR*),malloc,();,if,(,pszHeName,=NULL),goto,Exit;,pszHiName,=(CHAR*),malloc,();,if,(,pszHiName,=NULL),goto,Exit;,Exit:,if,(,pszMyName,),free(pszMyName,);,if,(,pszHeName,),free(pszHeName,);,if,(,pszHiName,),free(pszHiName,);,return,hr;,使用,goto,的原则,使用之后,程序仍然是单入口,单出口,不要使用一个以上的标号,不要用,goto,往回走,要向下走,不要让,goto,制造出永远不会被执行的代码,Dijkstra,说过的话,编程的艺术就是处理复杂性的艺术,优秀的程序员很清楚自己的能力是有限的,所以他对待编程任务的态度是完全谦卑的,特别是,他们会象逃避瘟疫那样逃避“聪明的技巧”。,1972,年图灵奖演讲,简单是可靠的先决条件,我们所使用的工具深刻地影响我们的思考习惯,从而也影响了我们的思考能力,实际上如果一个程序员先学了,BASIC,,那就很难教会他好的编程技术了:作为一个可能的程序员,他们的神经已经错乱了,而且无法康复,就语言的使用问题:根本不可能用一把钝斧子削好铅笔,而换成十把钝斧子会使事情变成大灾难,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!