




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章程序控制结构,Chapter3ControlFlow,程序的三种控制结构,结构化程序设计是软件设计的第三次革命。结构化程序设计的基础是采用三种程序的控制结构。,1966年BHMg;,框图:,f;,g;,选择结构Selection(分支结构),算法描述:if(e)f;elseg;,框图:,e?,yes,f;,no,g;,循环结构Repetition,当型循环,whilecistruedof,c?,f,YES,NO,直到循环,dofuntilcisfalse,f,c?,YES,NO,三种控制结构有如下共同的特点:,一个入口和一个出口;无死语句;无死循环。,如何构造条件?,复合语句,概念:C语言可以用包括一系列的语句。一对所包含的内容称为一个复合语句。其中可以含有0到多条C语言语句。,#includevoidmain(void)inta,b;scanf(“%d,%d”,复合语句,复合语句,复合语句可以嵌套,凡是可以出现单一语句的地方都可以使用复合语句。,复合语句的作用:,作为分支和循环的块。,作为标识符的作用域。,交换算法演示,3.1顺序结构程序设计,顺序结构的程序是指程序的语句中不含任何转移语句,程序的执行流程完全按照语句在程序中的顺序执行。如:求sin30o+sin60o+cos30o+cos60o,#include#includevoidmain(void)floats,a,b;a=30*3.14159/180;a=60*3.14159/180;s=sin(a)+sin(b)+cos(a)+cos(b);printf(“s=%fn”,s);,问题,#include#includevoidmain(void)floata,b,c,x1,x2;scanf(“%f,%f,%f”,b*b-4ac0?,yes,求实根,no,求复根,问题:如何构造条件?如何根据条件实现不同算法?,3.2关系运算和逻辑运算,关系运算(RelationalOperator),关系运算是比较两个表达式的数值相互关系的运算。,关系运算规则:参加运算的表达式的从左到右按关系运算符提供的关系进行比较,满足关系得到整型值1,不满足关系得到整型值0。,inta=1,b=3,c,d;c=ab;d=a+2=b+3;,逻辑运算(LogicalOperator),逻辑运算运算时判断对象真、假的运算。C语言没有提供逻辑类型。任何类型的值都可以表示逻辑状态,如下表:,运算对象非0代表逻辑真,是0代表逻辑假。也就是说任何类型的量都有逻辑值。,逻辑运算的结果用整型值表示。运算结果为真时,得到整型值1;运算结果为假时,得到整型值0。,inta=2,b=0;aba+b,C语言的逻辑运算,其中,!运算是单目运算。,逻辑运算演示,复杂逻辑关系的表示,在实际应用中,经常会遇到描述复杂的关系。如:判断x是否大于等于5或小于3。此类关系的描述在程序设计中会大量使用。,0,3,5,x=5,0,-2,3,-2x3?x=4,-2=a,#includevoidmain(void)inta,b;a=10;b=50;if(a0)y=1;elsey=0;,x=0结果?,求一元二次方程ax2+bx+c=0的根。,#include#includevoidmain(void)floata,b,c,d,e,x1,x2;scanf(“%f,%f,%f”,外层,内层,求相等实根。,求不等实根。,求共扼复根。,判断实型量相等或不等用误差的方法。,flaota=1.0/*a=1.000001或0.999999*/a=1.0?,switch语句(多分支结构),格式:switch(expression)case常量表达式1:statement1;case常量表达式2:statement2;case常量表达式n-1:statementn-1;default:statementn;,只能是整型或字符型表达式。,整型字符型常量表达式。表达式的值要互不能相等!,流程:,先求expression的值。,依次比较expression和各常量表达式的值。,如果和第i个常量表达式相等,则执行第i条以后的语句。,如果不相等,则执行default以后的语句。,语句标号的概念:,#includevoidmain(void)chargrade;grade=getchar();switch(grade)caseA:printf(“90100n”);caseB:printf(“8089n);caseC:printf(“7079n”);caseD:printf(“6069n”);caseE:printf(“60n”);default:printf(“errorn”);,语句标号。,break语句:,格式:break;,作用:中断switch流程。,break;break;break;break;break;,例:输出五分制对应的百分制范围。,#includevoidmain(void)charchGrad;chGrad=getchar();switch(chGrad)casea:caseA:printf(“90100n”);break;caseb:caseB:printf(“8089n”);break;casec:caseC:printf(“7079n”);break;cased:caseD:printf(“6069n”);break;casee:caseE:printf(“60n”);break;default:printf(“DataError!n”);,多个标号可以共用相同的语句。,default语句可以省略。,3.4循环结构(Repetition),程序经常会重复执行某些相同的操作,如:求:s=1+2+3+4+100,算法描述:s=0;i=1;s+=i;i+;判断i是否小于等于100如果i小于等于100,重复;否则,结束。,此类根据“条件”重复执行相同算法的结构,称为循环。,初始化部分。,循环体。含有使条件趋假的语句。,循环的条件。注意:循环应在有限次完成。,C语言提供了三类实现循环的语句:while,dowhile,for,while语句(当型循环),格式:while(expression)statement;,表达式:值非0,表示满足条件;值为0代表不满足条件。,语句(复合语句),重复执行部分(循环体)。,流程:,e?,true,statement;,false,含有使条件趋假的语句。,举例:,求s=1+2+3+4+100,#includevoidmain(void)ints=0,i=1;while(i=100)s=s+i;/*s+=i;*/i+;printf(“s=%dn”,s);,初始化部分,循环体,条件测试,使条件趋假语句,CHAP3EX7,dowhile语句(直到型循环),格式:dostatement;while(expression);,流程:,statement;,e?,true,false,含有使条件趋假的语句。,while循环与do-while循环的区别:while循环先判条件,后执行循环体;dowhile循环先执行循环体,后判条件。,举例:,求:30!,#includevoidmain(void)floats=1.0;inti=1;dos*=i;i+;while(i=30);printf(“30!=%f”,s);,初始化。,循环体。,测试条件。,使条件趋假。,CHAP3EX8,思考题:用do-while实现s=1+2+100。用while实现30!。,for语句,格式:for(e1;e2;e3)statement;,流程:,e1,e2?,true,statement;,e3,false,举例:,求:s=1+2+3+100,#includevoidmain(void)ints,i;for(s=0,i=1;i=100;i+)s=s+i;printf(“s=%d”,s);,使e2趋假。,在for循环中,e1、e2、e3都可以省略!,e1省略,s=0,i=1;,e3省略,i+;,初值表达式。,测试表达式。,增值表达式。,for循环实例,求100以内的偶数和。,ints=0,i;for(i=2;i100;i+=2)s+=i;,求500以内最大的5个能被50整除数的和。,inti,j,s=0;for(j=500,i=0;i=0;i-=5)printf(“%dn”,i);,inti,j,s=0;for(i=0,j=0;i+j100;i+,+j)s+=i+j;,转移语句,循环的中断:break语句,概念:循环体中可以加分支,判断是否继续执行循环,break语句可以提前结束循环。,举例:求:r=110的圆的面积,如圆面积大于100则中断。,for(r=1;r100)break;printf(“n%f“,area);,满足条件,则退出循环。,继续循环:continue语句,continue语句的作用是跳过本次循环剩余的循环体内容,执行下次循环。,举例:求1100内的偶数和。,s=0;for(n=1;n=100;n+)if(n%2!=0)continue;s+=n;,满足条件,跳过循环体,继续循环。,ints=0,i;for(i=2;i100;i=i+2)s+=i;,goto语句,格式:gotoLabel/*Label:同一函数内语句前的标号。*/,作用:转移到标号对应的语句上继续执行。,loop:if(i=100)sum=sum+i;i+;gotoloop;,循环的嵌套,概念:在一个循环的循环体内又包含一个完整的循环称为循环的嵌套。,i1234567891111219j22122299919299,如打印一99的乘法表:,i=1时,i从1变化到9,完i*j。,多重循环,打印99乘法表。,#includevoidmain(void)inti,j;for(i=1;i=9;i+)printf(“n“);,外层循环,内层循环,说明:,内外层循环采用缩进形式。,while和do-while和for可以相互嵌套。,执行次数为内层循环次数和外层循环次数的乘积。,CHAP3EX9,如何打印乘法表的一半?,for(j=1;j=9;j+)printf(“%4d“,i*j);,循环和分支相互嵌套,例:输入10个自然数统计其中偶数的个数及偶数值和。,算法框图:,start,定义变量,初始化,循环?,true,输入,偶数?,true,统计累加,false,false,输出结果,end,#includevoidmain(void)inti,ix,iCount=0,iSum=0;for(i=1;i=10;i+)scanf(“%dn”,循环结构,分支结构,输入负数?,doif(ix=0)printf(“dateerror”);while(ix=0);,算法的健壮性,注意:结构应完整的包含和被包含。,程序设计的基本方法,根据计算机的特点,结合循环与分支结构在程序设计时常使两种常用的基本方法。,枚举法(穷举法)迭代法,本专题将结合分支和循环介绍两种方法的基本思想和具体实现!,枚举法Enumeration,存在有限状态;其中某些状态满足特定条件。通过循环产生所有状态(枚举)。对每一状态,按条件进行状态测试,满足条件的状态,为所求的解。,求3到100内的所有素数。通过循环使i从3变化到99(枚举所有状态)对每次循环的i进行是否是素数的测试,如果是素数,输出i。,枚举法举例:,求3到200之间的所有素数(只能被1和自身整除的数)。,对于自然数n,判断其是否为素数有以下三种方法:,判断n是否能被从2到n-1范围内的数整除;,判断n是否能被从2到(int)(n/2)范围的数整除;,判断n是否能被从2到(int)sqrt(n)范围的数整除;,程序如下:,#include#includevoidmain(void)intn,j,s;for(n=3;ns)printf(“n%d”,n);,枚举所有数,构造,测试条件,如果n能被2到s的任意数整除,退出循环。,如果n是素数,输出n。,CHAP3EXA,求水仙花数(条件:三位数的个、十、百位的方和等于该数。153=13+53+33)。,n为枚举变量,枚举初值100,枚举终值999。,构造条件:取出n的个、十、百位数。,测试是否满足条件,满足条件输出n。,#includevoidmain(void)intn,a,b,c;for(n=100;n=999;n+)a=n/100;b=n%100/10;c=n%10;if(a*a*a+b*b*b+c*c*c=n)printf(“n%d”,n);,枚举所有三位数,构造条件,测试条件,取n的百位a、十位b、个位c。,CHAP3EXB,迭代法Iteration,迭代是通过循环不断由旧值推导新值,并最后求解的过程。迭代法有三个要点:,如人
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版体育场馆灯光音响系统升级改造合同
- 2025定点洗车及车身漆面修复服务合同
- 2025年不良资产项目尽职调查与报告编制合同
- 2025年度土壤重金属污染修复项目合同
- 2025便利店店员聘用与顾客忠诚度培养合同范本
- 2025年上海市招投标与合同管理高级研修班合同
- 2025年度土石方运输车辆保险及理赔合同
- 2025版桥梁工程加固改造劳务分包合同范本
- 2025年度社区活动场地使用权出让合同范本
- 2025年度无人机测绘技术合作协议书范本
- T/CAPA 009-2023面部埋线提升技术操作规范
- 塑胶料品质协议书
- 2025届江苏省苏州市高三9月期初阳光调研-语文试卷(含答案)
- 旅行地接协议书
- DB3707T 120-2024无特定病原凡纳滨对虾种虾循环水养殖技术规范
- 2025光伏项目施工合同范本
- 安全课件小学
- 租房协议书合同txt
- 《脑机接口技术与应用》课程教学大纲
- 河南省安阳市文峰区2024-2025学年八年级上学期期末语文试题(原卷版+解析版)
- 2024-2025学年广东省河源市小升初分班考试数学试卷(附答案解析)
评论
0/150
提交评论