《C语言的基本控制结构.ppt》由会员分享,可在线阅读,更多相关《C语言的基本控制结构.ppt(53页珍藏版)》请在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+(float)sqrt(b*b-4.f*a*c)/(2.0f*
2、a);x2=(-b-(float)sqrt(b*b-4.f*a*c)/(2.0f*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 o
4、f Technology 循环结构循环结构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);复复合合语语句句复复合合语语句句复合语句可以嵌套复合语句可以嵌套凡是可以出现单一语句的地方都可以使用复合语句。凡是可以出现单一语句的地方都可以使用复合语句。复合语句的作用:复合语句的作用:作为分支和循环的块。作为分支和循环的块。作为标识符的作用域。作为标识符的作用域。交换
6、算法演示交换算法演示第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 3.2关系运算和逻辑运算关系运算和逻辑运算关系运算关系运算(RelationalOperator)关系运算是比较两个表达式的数值相互关系的运算。关系运算是比较两个表达式的数值相互关系的运算。关系运算规则:关系运算规则:参加运算的表达式的从左到右按关系运算符提参加运算的表达式的从左到右按关系运算符提供的关系进行比较,供的关系进行比较,满足关系得到整型值满足关系得到整型值1,不满足关系得到整型不满足关系得到整型值值0。inta=1,b=3,c,d
7、;c=ab;d=a+2=b+3;第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 逻辑运算逻辑运算(LogicalOperator)逻辑运算运算时判断对象逻辑运算运算时判断对象真、假真、假的运算。的运算。C语言没有提供逻辑语言没有提供逻辑类型。任何类型的值都可以表示逻辑状态,如下表:类型。任何类型的值都可以表示逻辑状态,如下表:运算对象非运算对象非0代表逻辑真,代表逻辑真,是是0代表逻辑假代表逻辑假。也就是说任何类型也就是说任何类型的量都有逻辑值的量都有逻辑值。逻辑运算的结果用整型值表示。逻辑运算的结果用整型值
8、表示。v运算结果为真时,得到整型值运算结果为真时,得到整型值1;v运算结果为假时,得到整型值运算结果为假时,得到整型值0。inta=2,b=0;aba+b第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology C C语言的逻辑运算语言的逻辑运算其中,!运算是单目运算。其中,!运算是单目运算。逻辑运算演示逻辑运算演示第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 复杂逻辑关系的表示复杂逻辑关系的表示在实际应用中,经常会遇到描述复杂的关
9、系。如:判断在实际应用中,经常会遇到描述复杂的关系。如:判断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 Control FlowHefei University of Technology 优优先先级级总总表表第三章 C语言的基本控制结构Chapter
10、 3 Control FlowHefei University of Technology 优先级特例优先级特例 自加、自减运算优先级遵循原则:自加、自减运算优先级遵循原则:前置:先运算后引用;前置:先运算后引用;后置:先引用后运算。后置:先引用后运算。#include void main(void)int a=3,b;b=a+a+;printf(“b=%dn”,b);b=+a+(+a);printf(“b=%d”,b);CHAP3EX0在逻辑运算中,如果逻辑值能够确定,则不再进行运算。在逻辑运算中,如果逻辑值能够确定,则不再进行运算。inta=0,b=0+a|+b;printf(“a=%dn
11、b=%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;语句语句表达式,非表达式,非0为为y
12、es,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;语句或复合语句。语句或复合语句。流程图:流程图:e?falsestat2;stat1;
13、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结构(结构(Multi-line)格式:格式:if(e1)stat1;elseif(e2)stat2;elseif(e3)stat3;elseif(en-1)statn-1;elsestatn;框图:框图:e1?tstat1;fe
14、2?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(void)floatx,rate
15、;scanf(“%f”,&x);if(x1000)rate=.03f;elseif(x2000)rate=.04f;elseif(x3000)rate=.05f;elserate=.06f;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;称为称为if结构的嵌
16、套。各种结构的嵌套。各种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”,&a,&b,&c);
17、d=b*b-4.0f*a*c;if(fabs(d)0)printf(“nx1=%f”,(-b+(float)sqrt(d)/(2.0f*a);printf(“nx2=%f”,(-b-(float)sqrt(d)/(2.0f*a);elseprintf(“nx1=%f+i%f”,-b/(2.0f*a),(float)sqrt(-d)/(2.0f*a);printf(“nx2=%f-i%f”,-b/(2.0f*a),(float)sqrt(-d)/(2.0f*a);外层内 层求相等实根。求相等实根。求不等实根。求不等实根。求共扼复根。求共扼复根。CHAP3EX4 判断实型量相判断实型量相等或不等用
18、误差的等或不等用误差的方法。方法。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;只能是整型或字符型表达式。只能是整型或字符型表达
19、式。整型字符型整型字符型常量常量表达式。表达式。表达式的值要互不能相等!表达式的值要互不能相等!流程:流程:先求先求expression的值。的值。依次比较依次比较expression和各常量表达式的值。和各常量表达式的值。如果与第如果与第i个常量表达式相等,则执行个常量表达式相等,则执行第第i条以后条以后的语句。的语句。如果都不相等,则执行如果都不相等,则执行default以后的语句。以后的语句。第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 语句标号的概念语句标号的概念:#includevoidmain(
20、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语言的基本控制结构Chapter
21、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(“60
22、n”);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小于等于小于等于100,重复
23、,重复;否则,结束。否则,结束。此类根据此类根据“条件条件”重复执行相同算法的结构,称为循环。重复执行相同算法的结构,称为循环。初始化部分。初始化部分。循环体。含有使条件趋假的语句。循环体。含有使条件趋假的语句。循环的条件。循环的条件。注意:循环应在有注意:循环应在有限次完成。限次完成。C语言提供了三类实现循环的语句语言提供了三类实现循环的语句:while,dowhile,for第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology while循环(当型循环)循环(当型循环)格式:格式:while(expressio
24、n)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);初始化部分初始化部分循环体循环体条件测试条件测试使条件趋假语句使条件趋假语句CHAP3EX
25、7第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology dowhile循环(直到型循环)循环(直到型循环)格式:格式:dostatement;while(expression);流程:流程:statement;e?truefalse含有使条件趋假的语句。含有使条件趋假的语句。while循环与循环与do-while循环的区别:循环的区别:vwhile循环先判条件,后执行循环体;循环先判条件,后执行循环体;vdowhile循环先执行循环体,后判条件。循环先执行循环体,后判条件。举例:举例:求:求:30!#include
26、voidmain(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;e3f
27、alse举例:举例:求:求: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以内的偶数和。以内的偶数和。ints=0
28、,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 循环应用的几个问题循环应用的几个问题循环的嵌套循环的嵌套 概念:在一个循环的循环体内又包含一个完整的循环称为循环概念:在一个循环的循环体内又包含一个完整的循
29、环称为循环的嵌套。的嵌套。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“);外外层层循循环环内内层层循循环环说明:说明:内外层循环采用缩进形式。内外层循环
30、采用缩进形式。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语句语句概念:循环体中可以加分支,判断是否继续执行循环,概念:循环体
31、中可以加分支,判断是否继续执行循环,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)cont
32、inue;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=getchar()
33、;if(ch=A)break;循环体为空语句的循环循环体为空语句的循环空循环空循环for(i=1;i=MAX;i+);作用:程序延时。作用:程序延时。空语句空语句;第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 程序设计的基本方法程序设计的基本方法 根据计算机的特点,结合循环与分支结构在程序设计时常使两根据计算机的特点,结合循环与分支结构在程序设计时常使两种常用的基本方法。种常用的基本方法。枚举法(穷举法)枚举法(穷举法)迭代法迭代法 本专题将结合分支和循环介绍两种方法的基本思想和本专题将结合分支和循环介绍两
34、种方法的基本思想和具体实现!具体实现!第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 枚举法枚举法Enumerationv存在有限状态;其中某存在有限状态;其中某些状态满足特定条件。些状态满足特定条件。v通过循环产生所有状态通过循环产生所有状态(枚举)。(枚举)。v对每一状态,按条件进对每一状态,按条件进行状态测试,满足条件行状态测试,满足条件的状态,为所求的解。的状态,为所求的解。v求求100到到200内的所有素内的所有素数。数。v通过循环使通过循环使i从从101变化变化到到199(枚举所有状态)(枚举所有
35、状态)v对每次循环的对每次循环的i进行是否进行是否是素数的测试,如果是是素数的测试,如果是素数,输出素数,输出i。第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 枚举法举例:枚举法举例:求求100到到200之间的所有素数(只能被之间的所有素数(只能被1和自身整除的数)。和自身整除的数)。对于自然数对于自然数n,判断其是否为素数有以下三种方法:,判断其是否为素数有以下三种方法:判断判断n是否能被从是否能被从2到到n-1范围内的数整除;范围内的数整除;判断判断n是否能被从是否能被从2到到(int)(n/2)范围的
36、数整除;范围的数整除;判断判断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%d”,n);枚枚举举所所有有数数构构造造,测测试试条条件件如果如果n能被能被2到到s的任意数整除,退出的任意数整除,退出循环。循环。
37、如果如果n是素数,输出是素数,输出n。CHAP3EXA第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 求水仙花数(条件:三位数的个、十、百位的方和等于该求水仙花数(条件:三位数的个、十、百位的方和等于该数。数。153=13+53+33)。)。n为枚举变量,枚举初值为枚举变量,枚举初值100,枚举终值,枚举终值999。构造条件:取出构造条件:取出n的个、十、百位数。的个、十、百位数。测试是否满足条件,满足条件输出测试是否满足条件,满足条件输出n。#includevoidmain(void)intn,a,b,c;
38、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 爱因斯坦阶梯问题(不定范围的枚举)。爱因斯坦阶梯问题(不定范围的枚举)。设有一阶梯,每步跨设有一阶梯,每步跨2阶,最后剩阶,最后剩1阶;每步跨阶;每步跨3阶,最后剩阶,最后
39、剩2阶;每步跨阶;每步跨5阶,最后剩阶,最后剩4阶;每步跨阶;每步跨6阶,最后剩阶,最后剩5阶;每步跨阶;每步跨7阶,正好到阶梯顶。问共有多少阶梯。阶,正好到阶梯顶。问共有多少阶梯。根据条件可以得出:台阶数一定是奇数且为根据条件可以得出:台阶数一定是奇数且为7的倍数。的倍数。枚举初值:枚举初值:k=7;枚举公式:枚举公式:k=k+14结束条件:满足结束条件:满足(k%3=2)&(k%5=4)&(k%6=5)结束。结束。#includevoidmain(void)intk=7;while(!(k%3=2)&(k%5=4)&(k%6=5)k+=14;printf(“nl=%d”,k);CHAP3E
40、XC第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 思考题:思考题:36人一次搬人一次搬36块砖,男搬块砖,男搬4,女搬,女搬2,两个小孩抬一块。要一,两个小孩抬一块。要一次搬完。问:男、女、小孩要多少?次搬完。问:男、女、小孩要多少?找出找出1000以内的完数,所谓完数是指该数的各因子之和等于以内的完数,所谓完数是指该数的各因子之和等于该数,如该数,如6=1+2+3。证明证明6到到200以内的数,符合哥德巴赫猜想(一个大于以内的数,符合哥德巴赫猜想(一个大于6的偶的偶数,可以分解成两个质数之和)。数,可以分
41、解成两个质数之和)。奇妙的算式:用字母代替十进制数字写出如下算式:奇妙的算式:用字母代替十进制数字写出如下算式:EAGL LLGAE请找出这些字母代表的数字。请找出这些字母代表的数字。第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 迭代法迭代法 Iterationv迭代是通过循环不断由迭代是通过循环不断由旧值推导新值,并最后旧值推导新值,并最后求解的过程。求解的过程。v迭代法有三个要点:迭代法有三个要点:v公司产值按每年按公司产值按每年按2%增增长,现在产值是长,现在产值是12亿,亿,10年后产值是多少?年后
42、产值是多少?迭代公式。迭代公式。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)#includevoidmain(void)floatexp,x,t;inti,n;scanf(“%f,%d”,&x,&n)
43、;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 用梯形法求定积分用梯形法求定积分(0,0)yxf(x)ab面积面积hx将将a,b分为分为n等份,等份,h=(b-a)/n;求求n个梯形面积之
44、和,第个梯形面积之和,第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.0f;intn,i;scanf(“%f,%f,%d”,&a,&b,&n);h=(b-a)/n;x=a;f0=x*x+12.0f*x+4.
45、0f;for(i=0;in;i+)x=x+h;f1=x*x+12.0f*x+4.0f;s=s+(f0+f1)*h/2.0f;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从键盘输入。从键盘输入。迭代次数:迭代次数:i=1n迭代初值:迭代初值:s=0.0,t=a迭代公式:迭代公式:t=
46、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.0f;t=a;for(i=1;i=n;i+)s+=t;t=t*10+a;printf(“ns=%f”,s);第三章 C语言的基本控制结构Chapter 3 Control FlowHefei
47、 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):如果小于精度:求出根,退出到如果小于精度:求出根,退出到。否否则:继续则:继续。输出根,根的值是输出根,根的值是(x1+x2)/2。二分法
48、求方程二分法求方程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.0f*x1-1;f2=x2*x2*x2-6.0f*x2-1;dox=(x1+x2)/2;f=x*x*x-6.0f*x-1;if(f*f1=0)f1=f;x1=x;elsef2
49、=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;迭代公式迭代公式:fPi+=(1./fItem)*iSign;fItem+=2.;iSign*=-1;迭代条件迭代条
50、件:fabs(1./fItem)(1e-6)/4程程序序第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 求自然数求自然数m和和n的最大公约数(用的最大公约数(用while循环实现)。循环实现)。提示:提示:比较比较m和和n的大小,如的大小,如nm,两者交换;,两者交换;求求m被被n除的余数除的余数k;如果如果k为为0,除数,除数n为最大公约数;为最大公约数;如果如果k不为不为0,原除数作为新的被除数,原除数作为新的被除数m,余数作为新除数,余数作为新除数,继续继续。用迭代法求用迭代法求cosX。求求Fibon