《(精品)第三章C语言的基本控制结构.ppt》由会员分享,可在线阅读,更多相关《(精品)第三章C语言的基本控制结构.ppt(55页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 第三章第三章 C C语言的基本控制结构语言的基本控制结构Chapter3ControlFlow第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 问题问题#include#include void main(void)float a,b,c,x1,x2;scanf(“%f,%f,%f”,&a,&b,&c);x1=(-b+sqrt(b*b-4.*a*c)/(2.0*a);x2=(-b
2、-sqrt(b*b-4.*a*c)/(2.0*a);printf(“x1=%7.2fnx2=%7.2f”,x1,x2);b*b-4ac0?yes求实根求实根no求复根求复根问题:如何构造条件?问题:如何构造条件?如何根据条件实现不同算法?如何根据条件实现不同算法?第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 3.1程序的三种控制结构程序的三种控制结构 结构化程序设计结构化程序设计是软件设计的第三次革命。结构化程序设计的是软件设计的第三次革命。结构化程序设计的基础是采用三种程序的控制结构。基础是采用三种程序的
3、控制结构。1966年年BHM&Jacopini证明:证明:只要三种控制结构就能表达用只要三种控制结构就能表达用一个入口和一个出口框图所能表达的任何程序逻辑。一个入口和一个出口框图所能表达的任何程序逻辑。三种控制结构如下:三种控制结构如下:顺序结构顺序结构Sequence算法描述:算法描述:f;g;框图:框图:f;g;选择结构选择结构Selection(分支结构)分支结构)算法描述:算法描述:if(e)f;elseg;框图:框图:e?yesf;nog;第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 循环结构循环
4、结构Repetition当型循环当型循环whilecistruedofc?fYESNO直到循环直到循环dofuntilcisfalsefc?YESNO三种控制结构有如下共同的特点:三种控制结构有如下共同的特点:一个入口和一个出口;一个入口和一个出口;无死语句;无死语句;无死循环。无死循环。如何构如何构造条件造条件?第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 复合语句复合语句CompoundStatement概念:概念:C语言可以用语言可以用包括一系列的语句。一对包括一系列的语句。一对所包含的所包含的内容称
5、为一个复合语句。其中可以含有内容称为一个复合语句。其中可以含有0到多条到多条C语言语句。语言语句。#includevoidmain(void)inta,b;scanf(“%d,%d”,&a,&b);inttemp;temp=a;a=b;b=temp;printf(“%d,%d”,a,b);复复合合语语句句复复合合语语句句复合语句可以嵌套复合语句可以嵌套凡是可以出现单一语句的地方都可以使用复合语句。凡是可以出现单一语句的地方都可以使用复合语句。复合语句的作用:复合语句的作用:作为分支和循环的块。作为分支和循环的块。作为标识符的作用域。作为标识符的作用域。交换算法演示交换算法演示第三章 C语言的基
6、本控制结构Chapter 3 Control FlowHefei University of Technology 3.2关系运算和逻辑运算关系运算和逻辑运算关系运算关系运算(RelationalOperator)关系运算是比较两个表达式的数值相互关系的运算。关系运算是比较两个表达式的数值相互关系的运算。运算符运算符比较的关系比较的关系实例实例大于大于ab=大于等于大于等于a=b小于小于21=小于等于小于等于cb;d=a+22&a3|逻辑或逻辑或s6!逻辑非逻辑非!a其中,!运算是单目运算。其中,!运算是单目运算。逻辑运算演示逻辑运算演示第三章 C语言的基本控制结构Chapter 3 Cont
7、rol FlowHefei University of Technology 复杂逻辑关系的表示复杂逻辑关系的表示在实际应用中,经常会遇到描述复杂的关系。如:判断在实际应用中,经常会遇到描述复杂的关系。如:判断x是否是否大于等于大于等于5或小于或小于3。此类关系的描述在程序设计中会大量使用。此类关系的描述在程序设计中会大量使用。035x=50-23-2x3?x=4-2x&x=a&ch=A&chc+d&a=b*34注意:在无法确定优先级注意:在无法确定优先级时,加()区分。简化表时,加()区分。简化表达式。达式。c=b*=a+2c=(b*=(a+2)第三章 C语言的基本控制结构Chapter 3
8、 Control FlowHefei University of Technology 级别级别运算符运算符结合顺序结合顺序1()()-.从左向右从左向右2!-+-(type)sizeof*&从右向左从右向左3*/%从左向右从左向右4+-从左向右从左向右5(移位运算移位运算)从左向右从左向右6=从左向右从左向右7=!=从左向右从左向右8&(位与运算位与运算)从左向右从左向右9(位异或运算位异或运算)从左向右从左向右10|(位或运算位或运算)从左向右从左向右11&从左向右从左向右12|从左向右从左向右13?:从右向左从右向左14=op=从右向左从右向左15,从左向右从左向右优优先先级级总总表表第
9、三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 优先级特例优先级特例 自加、自减运算优先级遵循原则:自加、自减运算优先级遵循原则:前置:先运算后引用;前置:先运算后引用;后置:先引用后运算。后置:先引用后运算。#include void main(void)int a=3,b;b=a+a+;printf(“b=%d”,b);b=+a+(+a);printf(“b=%d”,b);CHAP3EX0在逻辑运算中,如果逻辑值能够确定,则不再进行运算。在逻辑运算中,如果逻辑值能够确定,则不再进行运算。inta=0,b=0
10、+a|+b;printf(“a=%dnb=%d”,a,b);a=0;a&+b;/*b的值?的值?*/+CHAP3EX1第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 3.3分支结构(选择结构分支结构(选择结构Selection)if及及if-else的三种结构。的三种结构。由标准的分支结构可以演化成单分支、多分支结构。由标准的分支结构可以演化成单分支、多分支结构。C语言的分语言的分支语句有支语句有if、ifelse、switch三种。三种。if语句语句格式:格式:if(expression)statement
11、;语句语句表达式,非表达式,非0为为yes,0为为no。语句,可以是复合语句。语句,可以是复合语句。流程图:流程图:e?statement;yesno举例:举例:#includevoidmain(void)charch;ch=getchar();if(ch=a&ch=z)ch-=32;putchar(ch);CHAP3EX2第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology ifelse结构结构格式:格式:if(expression)stat1;elsestat2;语句或复合语句。语句或复合语句。流程图:流程图:
12、e?falsestat2;stat1;true入口入口出口出口举例:输出举例:输出|x|。#includevoidmain(void)intx;scanf(“%d”,&x);if(x=0)printf(“%d”,x);elseprintf(“%d”,-x);第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology ifelseif结构结构(Muliline)格式:格式:if(e1)stat1;elseif(e2)stat2;elseif(e3)stat3;elseif(en-1)statn-1;elsestatn;框图
13、:框图:e1?tstat1;fe2?tstat2;出口出口fen-1?tstatn-1;fstatn;n-1个条件,满足某个条件,执行对应的语句,然后到出口。个条件,满足某个条件,执行对应的语句,然后到出口。第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology ifelseif结构举例结构举例:征税问题:征税问题:1000以下税率为以下税率为3%10002000税率为税率为4%20003000税率为税率为5%3000以上税率以上税率6%输入收入,求应缴税款。输入收入,求应缴税款。#includevoidmain(v
14、oid)floatx,rate;scanf(“%f”,&x);if(x1000)rate=.03;elseif(x2000)rate=.04;elseif(x3000)rate=.05;elserate=.06;printf(“%f”,x*rate);3/100?第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology if语句的嵌套语句的嵌套对于如下的结构:对于如下的结构:if(e1)stat1;elsestat2;在在stat1或或stat2中又含有中又含有if结构:结构:if(e2)stat3;elsestat4
15、;称为称为if结构的嵌套。各种结构的嵌套。各种if结构都结构都可以嵌套。可以嵌套。如求符号函数:如求符号函数:-1(x0)#includevoidmain(void)intx,y;scanf(“%d”,&x);if(x0)y=1;elsey=0;x=0结结果?果?第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 举例:求一元二次方程举例:求一元二次方程ax2+bx+c=0的根。的根。#include#includevoidmain(void)floata,b,c,d,x1,x2;scanf(“%f,%f,%f”
16、,&a,&b,&c);d=b*b-4.0*a*c;if(fabs(d)0)printf(“nx1=%f”,(-b+(float)sqrt(d)/(2.0*a);printf(“nx2=%f”,(-b-(float)sqrt(d)/(2.0*a);elseprintf(“nx1=%f+i%f”,-b/(2.0*a),(float)sqrt(-d)/(2.0*a);printf(“nx2=%f-i%f”,-b/(2.0*a),(float)sqrt(-d)/(2.0*a);外层内 层求相等实根。求相等实根。求不等实根。求不等实根。求共扼复根。求共扼复根。CHAP3EX4 判断实型量相判断实型量相等
17、或不等用误差的等或不等用误差的方法。方法。flaota=1.0/*a=1.000001或或0.999999*/a=1.0?第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology switch语句(多分支结构)语句(多分支结构)格式:格式:switch(expression)case常量表达式常量表达式1:statement1;case常量表达式常量表达式2:statement2;case常量表达式常量表达式n-1:statementn-1;default:statementn;只能是整型或字符型表达式。只能是整型或字
18、符型表达式。整型字符型整型字符型常量常量表达式。表达式。表达式的值要互不能相等!表达式的值要互不能相等!流程:流程:先求先求expression的值。的值。依次比较依次比较expression和各常量表达式的值。和各常量表达式的值。如果与第如果与第i个常量表达式相等,则执行个常量表达式相等,则执行第第i条以后条以后的语句。的语句。如果都不相等,则执行如果都不相等,则执行default以后的语句。以后的语句。第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 语句标号的概念语句标号的概念:#includevoidm
19、ain(void)chargrade;grade=getchar();switch(grade)caseA:printf(“90100n”);caseB:printf(“8089n);caseC:printf(“7079n”);caseD:printf(“6069n”);caseE:printf(“60n”);default:printf(“errorn”);CHAP3EX5语句标号。语句标号。break语句:语句:格式:格式:break;作用:中断作用:中断switch流程。流程。break;break;break;break;break;CHAP3EX6第三章 C语言的基本控制结构Chap
20、ter 3 Control FlowHefei University of Technology 例:输出五分制对应的百分制范围。例:输出五分制对应的百分制范围。#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
21、(“60n”);break;default:printf(“DataError!n”);多个标号可以共用相同的语句。多个标号可以共用相同的语句。default语句可以省略。语句可以省略。第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 3.4循环结构循环结构(Repetition)程序经常会重复执行某些相同的操作,如:程序经常会重复执行某些相同的操作,如:求:求:s=1+2+3+4+100算法描述:算法描述:s=0;i=1;s+=i;i+;判断判断i是否小于等于是否小于等于100 如果如果i小于等于小于等于10
22、0,重复,重复;否则,结束。否则,结束。此类根据此类根据“条件条件”重复执行相同算法的结构,称为循环。重复执行相同算法的结构,称为循环。初始化部分。初始化部分。循环体。含有使条件趋假的语句。循环体。含有使条件趋假的语句。循环的条件。循环的条件。注意:循环应在有注意:循环应在有限次完成。限次完成。C语言提供了三类实现循环的语句语言提供了三类实现循环的语句:while,dowhile,for第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology while循环(当型循环)循环(当型循环)格式:格式:while(expre
23、ssion)statement;表达式:值非表达式:值非0,表,表示满足条件;值为示满足条件;值为0代表不满足条件。代表不满足条件。语句(复合语句),重复语句(复合语句),重复执行部分(循环体)。执行部分(循环体)。流程:流程:e?truestatement;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);初始化部分初始化部分循环体循环体条件测试条件测试使条件趋假语句使条件趋假语句CHA
24、P3EX7第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology dowhile循环(直到型循环)循环(直到型循环)格式:格式:dostatement;while(expression);流程:流程:statement;e?truefalse含有使条件趋假的语句。含有使条件趋假的语句。while循环与循环与do-while循环的区别:循环的区别:vwhile循环先判条件,后执行循环体;循环先判条件,后执行循环体;vdowhile循环先执行循环体,后判条件。循环先执行循环体,后判条件。举例:举例:求:求:30!#inc
25、ludevoidmain(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!。!。第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology for循环循环格式:格式:for(e1;e2;e3)statement;流程:流程:e1e2?truestatement
26、;e3false举例:举例:求:求:s=1+2+3+100#includevoidmain(void)ints=0,i;for(i=1;i=100;i+)s=s+i;printf(“s=%d”,s);使使e2趋假。趋假。在在for循环中,循环中,e1、e2、e3都可以省略!都可以省略!e1省略省略i=1;e3省略省略i+;初值表达式。初值表达式。测试表达式。测试表达式。增值表达式。增值表达式。第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology forfor循环实例循环实例求求100以内的偶数和。以内的偶数和。in
27、ts=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;第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 循环应用的几个问题循环应用的几个问题循环的嵌套循环的嵌套 概念:在一个循环的循环体内又包含一个完整的循环称为循环概念:在一个循环的循环体内又包含一个
28、完整的循环称为循环的嵌套。的嵌套。i 1 2 3 4 5 6 7 8 9 1 11 12 19 j 2 21 22 29 9 91 92 99 如打印一如打印一9 9的乘法表:的乘法表:i=1时,时,j从从1变化到变化到9,完,完i*j。第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 多重循环多重循环打印打印9 9乘法表。乘法表。#includevoidmain(void)inti,j;for(i=1;i=9;i+)printf(“n“);外外层层循循环环内内层层循循环环说明:说明:内外层循环采用缩进形式。内
29、外层循环采用缩进形式。while和和do-while和和for可以可以相互嵌套。相互嵌套。执行次数为内层循环次数和执行次数为内层循环次数和 外层循环次数的乘积。外层循环次数的乘积。CHAP3EX9如何打印如何打印乘法表的乘法表的一半?一半?for(j=1;j=9;j+)printf(“%4d“,i*j);第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 循环的中断循环的中断(break)和继续和继续(continue)循环的中断:循环的中断:break语句语句概念:循环体中可以加分支,判断是否继续执行循环,概念
30、:循环体中可以加分支,判断是否继续执行循环,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)
31、continue;s+=n;满足条件,跳过本满足条件,跳过本次循环体剩余内容,继次循环体剩余内容,继续下次循环。续下次循环。ints=0,i;for(i=2;i100;i=i+2)s+=i;第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 无限循环和空循环无限循环和空循环条件为恒真的循环条件为恒真的循环无限循环无限循环while(1)dowhile(1);for(;)通过通过条件控制的条件控制的break语句退出循环。语句退出循环。例:程序等待直到输入字母例:程序等待直到输入字母A。for(;)ch=getch
32、ar();if(ch=A)break;循环体为空语句的循环循环体为空语句的循环空循环空循环for(i=1;i=MAX;i+);作用:程序延时。作用:程序延时。空语句空语句;第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology goto语句语句格式:格式:gotoLabel/*Label:同一函数内语句前的标号。同一函数内语句前的标号。*/作用:转移到标号对应的语句上继续执行。作用:转移到标号对应的语句上继续执行。loop:if(i=100)sum=sum+i;i+;gotoloop;第三章 C语言的基本控制结构Ch
33、apter 3 Control FlowHefei University of Technology 循环和分支相互嵌套循环和分支相互嵌套输入输入10个自然数统计其中偶数的个数及偶数值和。个自然数统计其中偶数的个数及偶数值和。算法框图:算法框图:start定义变量定义变量初始化初始化循环?循环?true输入输入偶数?偶数?true统计累加统计累加falsefalse输出结果输出结果end#includevoidmain(void)inti,ix,iCount=0,iSum=0;for(i=1;i=10;i+)scanf(“%dn”,&ix);if(ix%2=0)iSum+=ix;iCount+
34、;printf(“Num=%dnSum=%d”,iCount,iSum);循循环环结结构构分分支支结结构构输入负数?输入负数?doif(ix=0)printf(“dateerror”);while(ix=0);算法的健壮性算法的健壮性注意:结构应完整的包含和被包含。注意:结构应完整的包含和被包含。第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 程序设计的基本方法程序设计的基本方法 根据计算机的特点,结合循环与分支结构在程序设计时常使两根据计算机的特点,结合循环与分支结构在程序设计时常使两种常用的基本方法。种常
35、用的基本方法。枚举法(穷举法)枚举法(穷举法)迭代法迭代法 本专题将结合分支和循环介绍两种方法的基本思想和本专题将结合分支和循环介绍两种方法的基本思想和具体实现!具体实现!第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 枚举法枚举法Enumerationv存在有限状态;其中某存在有限状态;其中某些状态满足特定条件。些状态满足特定条件。v通过循环产生所有状态通过循环产生所有状态(枚举)。(枚举)。v对每一状态,按条件进对每一状态,按条件进行状态测试,满足条件行状态测试,满足条件的状态,为所求的解。的状态,为所求
36、的解。v求求100到到200内的所有素内的所有素数。数。v通过循环使通过循环使i从从101变化变化到到199(枚举所有状态)(枚举所有状态)v对每次循环的对每次循环的i进行是否进行是否是素数的测试,如果是是素数的测试,如果是素数,输出素数,输出i。第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 枚举法举例:枚举法举例:求求100到到200之间的所有素数(只能被之间的所有素数(只能被1和自身整除的数)。和自身整除的数)。对于自然数对于自然数n,判断其是否为素数有以下三种方法:判断其是否为素数有以下三种方法:判断
37、判断n是否能被从是否能被从2到到n-1范围内的数整除;范围内的数整除;判断判断n是否能被从是否能被从2到到(int)(n/2)范围的数整除;范围的数整除;判断判断n是否能被从是否能被从2到到(int)sqrt(n)范围的数整除;范围的数整除;第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 程序如下:程序如下:#include#includevoidmain(void)intn,j,s;for(n=101;n200;n+=2)s=(int)sqrt(double)n);for(j=2;js)printf(“n%
38、d”,n);枚枚举举所所有有数数构构造造,测测试试条条件件如果如果n能被能被2到到s的任意数整除,退出的任意数整除,退出循环。循环。如果如果n是素数,输出是素数,输出n。CHAP3EXA第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 求水仙花数(条件:三位数的个、十、百位的方和等于该求水仙花数(条件:三位数的个、十、百位的方和等于该数。数。153=13+53+33)。)。n为枚举变量,枚举初值为枚举变量,枚举初值100,枚举终值,枚举终值999。构造条件:取出构造条件:取出n的个、十、百位数。的个、十、百位数
39、。测试是否满足条件,满足条件输出测试是否满足条件,满足条件输出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第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 爱因斯坦阶梯问题(不定范围的枚举)。爱因斯坦
40、阶梯问题(不定范围的枚举)。设有一阶梯,每步跨设有一阶梯,每步跨2阶,最后剩阶,最后剩1阶;每步跨阶;每步跨3阶,最后剩阶,最后剩2阶;每步跨阶;每步跨5阶,最后剩阶,最后剩4阶;每步跨阶;每步跨6阶,最后剩阶,最后剩5阶;每步跨阶;每步跨7阶,正好到阶梯顶。问共有多少阶梯。阶,正好到阶梯顶。问共有多少阶梯。根据条件可以得出:台阶数一定是奇数且为根据条件可以得出:台阶数一定是奇数且为7的倍数。的倍数。枚举初值:枚举初值:k=7;枚举公式:枚举公式:k=k+14结束条件:满足结束条件:满足(k%3=2)&(k%5=4)&(k%6=5)结束。结束。#includevoidmain(void)int
41、k=7;while(!(k%3=2)&(k%5=4)&(k%6=5)k+=14;printf(“nl=%d”,k);CHAP3EXC第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 思考题:思考题:36人一次搬人一次搬36块砖,男搬块砖,男搬4,女搬,女搬2,两个小孩抬一块。要一,两个小孩抬一块。要一次搬完。问:男、女、小孩要多少?次搬完。问:男、女、小孩要多少?找出找出1000以内的完数,所谓完数是指该数的各因子之和等于以内的完数,所谓完数是指该数的各因子之和等于该数,如该数,如6=1+2+3。证明证明6到到
42、200以内的数,符合哥德巴赫猜想(一个大于以内的数,符合哥德巴赫猜想(一个大于6的偶的偶数,可以分解成两个质数之和)。数,可以分解成两个质数之和)。奇妙的算式:用字母代替十进制数字写出如下算式:奇妙的算式:用字母代替十进制数字写出如下算式:EGAL LLGAE请找出这些字母代表的数字。请找出这些字母代表的数字。第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 迭代法迭代法 Iterationv迭代是通过循环不断由迭代是通过循环不断由旧值推导新值,并最后旧值推导新值,并最后求解的过程。求解的过程。v迭代法有三个要
43、点:迭代法有三个要点:v如人口每年按如人口每年按2%增长,增长,现在人口有现在人口有12亿,亿,10年年后人口有多少?后人口有多少?迭代公式。迭代公式。m=m*(1+2%)迭代初值(边界条件)。迭代初值(边界条件)。m=12迭代次数(或条件)。迭代次数(或条件)。n=10第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 迭代法举例迭代法举例求求ex=1+x+x2/2!+xn/n!前前n+1项之和。项之和。迭代次数迭代次数i012n迭代公式迭代公式t=t*x/i迭代初值迭代初值exp=1,t=1,(i=1n)#i
44、ncludevoidmain(void)floatexp,x,t;inti,n;scanf(“%f,%d”,&x,&n);t=1.0;exp=1.0;for(i=1;i=n;i+)t*=x/i;exp+=t;printf(“e%d=%15.6f”,(int)x,exp);迭代初值。迭代初值。迭代公式。迭代公式。迭迭代代过过程程附加条件:附加条件:当当|t|10-5,结束运算。结束运算。if(fabs(t)1e-5)break;CHAP3EXD第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 用梯形法求定积分用梯
45、形法求定积分(0,0)yxf(x)ab面积面积hx将将a,b分为分为n等份,等份,h=(b-a)/n;求求n个梯形面积之和,第个梯形面积之和,第i小面积小面积x=x+hf1=f(x)下底下底s=s+(f0+f1)*h/2f0=f1迭代迭代x初值为初值为as初值为初值为0f0初值为初值为f(a)次数为次数为n迭代求积分的方法迭代求积分的方法第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 程序如下:程序如下:#includevoidmain(void)floata,b,f0,f1,h,x,s=0.0;intn,i
46、;scanf(“%f,%f,%d”,&a,&b,&n);h=(b-a)/n;x=a;f0=x*x+12.0*x+4.0;for(i=0;in;i+)x=x+h;f1=x*x+12.0*x+4.0;s=s+(f0+f1)*h/2.0;f0=f1;printf(“S=%f”,s);CHAP3EXE迭代初值。迭代循环第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 求求s=a+aa+aaa+aaaa。0a10共共n项,最后一项有项,最后一项有n个个a。如求如求s=2+22+222+2222+222222n、a从键盘输
47、入。从键盘输入。迭代次数:迭代次数:i=1n迭代初值:迭代初值:s=0.0,t=a迭代公式:迭代公式:t=t*10+a第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 程序如下:程序如下:#includevoidmain(void)floats,t;inti,a,n;doscanf(“%d,%d”,&a,&n);if(a9)printf(“nDataInputError!nInputagain:”);while(a9);s=0.0;t=a;for(i=1;i=n;i+)s+=t;t=t*10+a;printf(
48、“ns=%f”,s);第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology xyf(x)x1f1=f(x1)x2f2=f(x2)算法分析:算法分析:输入输入x1、x2,并求出并求出f1、f2。迭代:将区间二分迭代:将区间二分x=(x1+x2)/2计算出计算出f=f(x)xf判断判断f与与f1是否同号是否同号如果同号:如果同号:x1=x,f1=f否否则:则:x2=x,f2=fx1f1f1f2判断判断fabs(x1-x2)是否小于某个规定的精度是否小于某个规定的精度(如如10-6):如果小于精度:求出根,退出到如果小于
49、精度:求出根,退出到。否否则:继续则:继续。输出根,根的值是输出根,根的值是(x1+x2)/2。二分法求方程二分法求方程f(x)=x3-6x-1=0,在,在0,5区间的根。区间的根。第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 二分法求方程根程序二分法求方程根程序#include#includevoidmain(void)floatx1,x2,x,f1,f2,f;scanf(“%f,%f”,&x1,&x2);f1=x1*x1*x1-6.0*x1-1;f2=x2*x2*x2-6.0*x2-1;dox=(x1+
50、x2)/2;f=x*x*x-6.0*x-1;if(f*f1=0)f1=f;x1=x;elsef2=f;x2=x;while(fabs(x1-x2)=1e-6);printf(“Rootis:%f”,(x1+x2)/2);CHAP3EXF迭代初值。二分迭代循环迭代条件。第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 通过如下公式求通过如下公式求(精度为精度为10-6)从程序的运行看精度和时间的关系!从程序的运行看精度和时间的关系!迭代初值迭代初值:fPi=0;fItem=1;iSign=1;迭代公式迭代公式:f