您好,欢迎访问三七文档
C语言程序设计(TheCProgrammingLanguage)耿小庆第四章流程控制TheCProgrammingLanguage:Chapter4§4-1结构化程序设计§4-2C语句概述§4-3选择语句§4-4循环语句§4-5辅助控制语句§4-6习题第四章流程控制TheCProgrammingLanguage:Chapter4结构化程序设计思想算法传统流程图表示的三种结构N/S方框图表示的三种结构小结§4-1结构化程序设计TheCProgrammingLanguage:Chapter44.1.1结构化程序设计思想任何程序都可以用三种基本结构表示,即用顺序(Composition)、选择(Alternation)和循环(Iteration)结构来表示。这三种结构反复组合、嵌套构成的程序称为结构化程序。顺序结构的程序流程是按照语句的顺序依次执行;选择结构是根据给定的条件进行判断,由判断结构决定执行两支或多支程序段中的一支;循环结构是在给定条件成立的情况下,反复执行某个程序段。优点结构化程序层次分明、结构清晰、有效地改善了程序的可靠性,从而大大地提高了程序设计的质量和效率。§4-1概述TheCProgrammingLanguage:Chapter4员工工资管理系统…………税率计算员工福利员工出勤记录保险费退休金§4-1结构化程序设计自顶向下,逐步求精TheCProgrammingLanguage:Chapter44.1.2算法“算法”是为解决一个具体问题而采取的确定的有限的操作步骤。(数据结构)+(算法)=程序N·Wirth算法的表示方法:传统的流程图N/S方框图自然语言伪码问题求解图(PAD)明确问题利用某种语言描述算法设计算法§4-1结构化程序设计TheCProgrammingLanguage:Chapter44.1.3传统流程图表示的三种结构开始/结束框一般处理框判断框输入/输出框流程线连接符§4-1结构化程序设计TheCProgrammingLanguage:Chapter44.1.3传统流程图表示的三种结构顺序结构(Composition)AB§4-1结构化程序设计TheCProgrammingLanguage:Chapter44.1.3传统流程图表示的三种结构选择结构(Alternation)AB条件P成立不成立§4-1结构化程序设计TheCProgrammingLanguage:Chapter44.1.3传统流程图表示的三种结构循环结构(Iteration)不成立条件PA成立成立A条件P不成立(1)当型(2)直到型§4-1结构化程序设计TheCProgrammingLanguage:Chapter4实例1:计算1+2+3+……+100的值i=i+1s=s+i开始NY循环变量i置1累加器s置0i=100?结束输出s§4-1结构化程序设计TheCProgrammingLanguage:Chapter4这是一款意大利生产的多功能厨具|……请猜价格!600答案是:720低了!800750700高了!高了!正确!这是一款瑞士生产的多功能刀具|……请猜价格!600高了!500高了!时间到!1个商标720低了!答案是:428§4-1结构化程序设计实例2:幸运52TheCProgrammingLanguage:Chapter4“幸运52”的传统流程图否是是是否否否是时间到?输出产品特点新产品?开始计时商标数清0猜对了?猜高了?输入猜想价格输出“高了!”输出“正确!”输出“低了!”累计商标数结束输出商标数输出“时间到!”TheCProgrammingLanguage:Chapter4传统流程图的优缺点优点:形象直观,各种操作一目了然,不会产生“歧义性”,便于理解,算法出错时容易发现,并可直接转化为程序。缺点:所占篇幅较大,由于使用流程线,过于灵活,不受约束,使用者可使流程线任意转移,从而造成程序阅读和修改的困难,不利于结构化程序的设计。§4-1结构化程序设计TheCProgrammingLanguage:Chapter44.1.4N/S方框图N/S方框图是由美国学者I·Nassi和B·Schneiderman于1973年提出的。N/S方框图的重要特点就是完全取消了流程线,这样,算法被迫只能顺序执行,从而避免了流程的任意转向,保证了程序的质量。尤其适合结构化程序的设计。N/S方框图的另一个优点是既形象直观,又节省篇幅。§4-1结构化程序设计TheCProgrammingLanguage:Chapter4§4-1结构化程序设计4.1.4N/S方框图顺序结构(Composition)ABTheCProgrammingLanguage:Chapter4§4-1结构化程序设计4.1.4N/S方框图选择结构(Alternation)AB条件P成立不成立TheCProgrammingLanguage:Chapter4§4-1结构化程序设计4.1.4N/S方框图循环结构(Iteration)A当P成立A直到P成立(1)当型(2)直到型TheCProgrammingLanguage:Chapter4实例1的N/S方框图累加器s置0循环变量i置1i=i+1s=s+ii=100?输出s§4-1结构化程序设计TheCProgrammingLanguage:Chapter4表达式语句表达式;赋值语句i=10;函数调用语句printf(Hello!\n);流程控制语句选择if~else,else~if,switch~case循环for,while,do~while辅助控制break,continue,goto,return空语句;什么也不干for(i=1;i5000;i++);延时for(i=0;i100;a[i++]=0);语法要求复合语句{多个简单句}语法上等同于一个简单语句可以嵌套使用分程序,数据说明一定要在所有执行语句之前。§4-2C语句概述TheCProgrammingLanguage:Chapter4§4-3选择语句输入三个数,按从小到大输出main(){floata,b,c,t;scanf(%f%f%f,&a,&b,&c);if(ab){t=a;a=b;b=t;}if(ac){t=a;a=c;c=t;}if(bc){t=b;b=c;c=t;}printf(%5.2f=%5.2f=%5.2f\n,a,b,c);}4.3.1if语句格式:if(表达式)语句;说明:一般语言,if后是关系或逻辑表达式,而C无要求if只是测试表达式的值,当表达式的值为非0时,执行语句if(表达式)if(表达式!=0)if(!表达式)if(表达式==0)“语句”为一条语句或复合语句TheCProgrammingLanguage:Chapter4§4-3选择语句4.3.2if~else语句格式:if(表达式)语句1;else语句2;说明:表达式仍为一般表达式,当表达式非0时,执行语句1,否则,执行语句2“语句1”、“语句2”均为一条语句或复合语句TheCProgrammingLanguage:Chapter4§4-3选择语句根据需要交换两个变量的值#includestdio.hmain(){inta,b,x,ch;printf(Entertwointegers:);scanf(%d%d,&a,&b);printf(Swap?(y/n):);ch=getchar();if(ch=='y'||ch=='Y'){x=a;a=b;b=x;printf(a=%d,b=%d,a,b);}elseprintf(Noswap!\n);}加上{}就行了!if(n0){if(ab)z=a;}elsez=b;§4-3选择语句要想在n=0时执行z=b;怎么办呢?给你出个难题?现有程序段if(n0)if(ab)z=a;elsez=b;什么时候执行z=b;?太简单了!else总是与其上最近的且未与其他else配对的if配对,因此n0并且a=b时执行z=b;4.3.3分支嵌套else总与其上最近的且未与其他else配对的if配对要想与其他if匹配加{}书写形式不能代替逻辑关系TheCProgrammingLanguage:Chapter4§4-3选择语句4.3.4else-if语句格式:if(表达式1)语句1;elseif(表达式2)语句2;.....elseif(表达式n)语句n;else语句n+1;功能:逐个判断表达式的值,对首次为真者执行其后的语句,然后继续执行n+1条语句后的语句,全不为真时执行else后的语句。TheCProgrammingLanguage:Chapter4main(){intmagic=200,guess;printf(“Pleaseguessamagicnumber:”);scanf(%d,&guess);if(guess==magic)printf(“Right!\n”);else{printf(“Wrong!”);if(guessmagic)printf(“Toohigh!\n”);elseprintf(Toolow!\n”);}}§4-3选择语句main(){intmagic=200,guess;printf(“Pleaseguessamagicnumber:”);scanf(%d,&guess);if(guess==magic)printf(“Right!\n”);elseif(guessmagic)printf(“Wrong!Toobig!\n”);elseprintf(Wrong!Toosmall!\n”);}猜数数游戏:由计算机“想”一个数请人猜,若猜对了则给出提示“Right”,否则提示“Wrong”,并告诉人是大还是小了?TheCProgrammingLanguage:Chapter4§4-3选择语句输入学号及成绩,并根据成绩定等级main(){intscore,snum;chargrade;scanf(%d%d,&snum,&score);if(snum0&&snum35&&score=0&&score=100){if(score=90)grade='A';elseif(score=80)grade='B';elseif(score=70)grade='C';elseif(score=60)grade='D';elsegrade='E';printf(number:%disgrade%c\n,snum,grade);}elseprintf(TheNo.isinvalid!\n);}TheCProgrammingLanguage:Chapter4§4-3选择语句4.3.5开关分支switch~case格式:switch(表达式){case值1:语句组1;[break;]case值2:语句组2;[break;]......case值n:语句组n;[break;][default:语句组n+1;[break;]]}功能:根据表达式的值与各个case判断值的比较情况决定执行哪个语句组。TheCProgrammingLanguage:Chapter4§4-3选择语句4.3.5开关分支switch~case注意:表达式的值可为任意类型,但一般为整型或字符型数据,判断值的类型与其要一致case判断值必须为常量或常量表达式,且判断值必须互不相同default缺省时,当所有case判断不符时,则直接自动退出switch当break语句不缺省时,case和default的顺序可以任意break语句缺省时,系统将继续执行下一条case语句组,可以使用case重叠共用一个语句组TheCProgrammingLanguage:Chapter4§4-3选择语句运输公司计算运费的原则是距离越远,每公里收费越低s250无折扣;250=s5002%折扣;500
本文标题:第4章流程控制
链接地址:https://www.777doc.com/doc-654943 .html