版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章分支和循环的C程序设计,Chapter3ControlFlow,问题,#include#includevoidmain(void)floata,b,c,x1,x2;scanf(“%f,%f,%f”,b*b-4ac0?,一元二次方程根求解算法描述,b2-4ac=0?,yes,求等根,no,b2-4ac0?,yes,求实根,no,求复根,问题:如何构造条件?如何根据条件实现不同算法?,3.1程序的基本结构,结构化程序设计是软件设计的第三次革命。结构化程序设计的基础是采用三种程序的控制结构。,1966年BHMg;,框图:,f;,g;,选择结构Selection(分支结构),算法描述:if(e)
2、f;elseg;,框图:,e?,yes,f;,no,g;,循环结构Repetition,当型循环,whilecistruedof,c?,f,YES,NO,直到循环,dofuntilcisfalse,f,c?,YES,NO,三种控制结构有如下共同的特点:,一个入口和一个出口;无死语句;无死循环。,如何构造条件?,复合语句CompoundStatement,概念:C语言可以用包括一系列的语句。一对所包含的内容称为一个复合语句。其中可以含有0到多条C语言语句。,#includevoidmain(void)inta,b;scanf(“%d,%d”,复合语句,复合语句,复合语句可以嵌套,凡是可以出现单一
3、语句的地方都可以使用复合语句。,复合语句的作用:,作为分支和循环的块。,作为标识符的作用域。,交换算法演示,3.2选择结构Selection(分支结构),3.2.1if结构的三种形式,if及if-else的三种结构。,由标准的分支结构可以演化成单分支、多分支结构。C语言的分支语句有if、ifelse、switch三种。,if语句(单分支),格式:if(expression)statement;,语句,表达式,非0为yes,0为no。,语句,可以是复合语句。,流程图:,e?,statement;,yes,no,举例:,/*example3-1求y=|x|*/#includevoidmain(vo
4、id)floatx,y;printf(x=?);scanf(%f,单分支的功能:(1)首先计算表达式的值。(2)若为真(非0),则执行“语句”;否则不执行“语句”,即跳过“语句”。(3)继续执行if语句后面的语句。,【例3-1】已知x的值,求y=|x|。,/*example3-1求y=|x|*/#includevoidmain(void)floatx,y;/*定义实型数据*/printf(x=?);scanf(%f,/*输出*/,【例3-2】已知2个数,求2个数中的大数。,/*example3-2求2个数中的大数*/#includevoidmain(void)floatx,y,maxf;/*定
5、义实型数据*/printf(x,y=?);scanf(%f,%f,/*输出*/,ifelse结构(双分支),格式:if(expression)stat1;elsestat2;,语句或复合语句。,流程图:,e?,false,stat2;,stat1;,true,入口,出口,举例:输出|x|。,#includevoidmain(void)intx;scanf(“%d”,【例3-3】已知x的值,求y=|x|。,/*example3-3求y=|x|*/#includevoidmain(void)floatx,y;/*定义实型数据*/printf(x=?);scanf(%f,/*输出*/,【例3-4】已
6、知2个数,求2个数中的大数。,/*example3-4求2个数中的大数*/#includevoidmain(void)floatx,y,maxf;/*定义实型数据*/printf(x,y=?);scanf(%f,%f,/*输出*/,【例3-5】输入1个数,判断其是奇数还是偶数,/*example3-5判断数是奇数还是偶数*/#includevoidmain(void)intx;/*定义整型数据*/printf(x=?);scanf(%d,/*输出是奇数*/,ifelseif结构(多分支),格式:if(e1)stat1;elseif(e2)stat2;elseif(e3)stat3;elseif
7、(en-1)statn-1;elsestatn;,框图:,e1?,t,stat1;,f,e2?,t,stat2;,出口,f,en-1?,t,statn-1;,f,statn;,n-1个条件,满足某个条件,执行对应的语句,然后到出口。,ifelseif结构(多分支)的功能:(1)首先计算表达式1的值。(2)若表达式1的值为真(非0),则执行“语句1”;否则计算表达式2的值,若表达式2的值为真(非0),则执行“语句2”;,即依次判断各个表达式的值,当遇到第1个为真的表达式,则执行其对应的语句,如果所有的表达式都是假,则执行else后面的语句,即在n种路中选择其中的一种。(3)接着继续执行if结构后
8、面的语句。,ifelseif结构举例:,征税问题:1000以下税率为3%10002000税率为4%20003000税率为5%3000以上税率6%输入收入,求应缴税款。,#includevoidmain(void)floatx,rate;scanf(“%f”,3/100?,【例3-6】从键盘任意输入一个字符,判断其是数字、大写字母、小写字母或是其它字符。,/*example3-6判断是什么字符*/#includevoidmain(void)charc;printf(c=?);c=getchar();/*从键盘输入字符赋给c*/if(c=0/*其它*/,/*example3-7判断考试成绩*/#i
9、ncludevoidmain(void)floatscore;printf(score=?);scanf(%f,/*不及格*/,【例3-7】从键盘任意输入一个百分制考试成绩,判断其是优、良、中、及格、不及格,switch语句(多分支结构),格式:switch(expression)case常量表达式1:statement1;case常量表达式2:statement2;case常量表达式n-1:statementn-1;default:statementn;,只能是整型或字符型表达式。,整型字符型常量表达式。表达式的值要互不能相等!,流程:,先求expression的值。,依次比较express
10、ion和各常量表达式的值。,如果与第i个常量表达式相等,则执行第i条以后的语句。,如果都不相等,则执行default以后的语句。,3.2.1switch结构和break语句,语句标号的概念:,#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”);,语句标号。,bre
11、ak语句:,格式:break;,作用:中断switch流程。,break;break;break;break;break;,功能:(1)首先计算表达式的值。(2)然后将该值依次与每一个case中的常量值进行比较,如果相等,则执行该case常量值后面的语句组,如果不等,则继续与下一个case中的常量值进行比较,即将表达式的值依次与各个常量表达式的值进行相等的比较,当遇到相等的表达式,则执行其后的语句直到遇到break语句,如果所有的表达式都不等,则执行default后面的语句,即在n+1种路中选择其中的一种。(3)接着继续执行switch结构后面的语句,/*example3-8(a)判断考试成绩
12、*/#includevoidmain(void)charscore;printf(score=?);scanf(%c,/*不及格*/,【例3-8】以5分制的形式输入一门课程的考试成绩,打印其所在的百分制段落,如:输入B,输出8089,/*example3-8(b)判断考试成绩*/#includevoidmain(void)charscore;printf(score=?);scanf(%c,/*不及格*/,例3-8的改进1,/*example3-8(c)判断考试成绩*/#includevoidmain(void)charscore;printf(score=?);scanf(%c,/*提示出错
13、信息*/,例3-8的改进2,情况1:,if是A类?是A类elseif是B类?是B类elseif是C类?是C类elseif是D类?是D类else是其它类,3.2.1各种分支的嵌套,情况2:,if是A类?if是A1类?是A1类else是A2类elseif是B1类?是B1类else是B2类,情况3:,if是A类?if是A1类?是A1类else是A2类else是B类,/*example3-9(a)求分段函数*/#includevoidmain(void)intx,y;/*定义数据*/printf(x=?);scanf(%d,/*输出*/,【例3-9】求下列分段函数的值。,/*example3-9(b)
14、求分段函数*/#includevoidmain(void)intx,y;/*定义数据*/printf(x=?);scanf(%d,/*输出*/,解法二,/*example3-9(c)求分段函数*/#includevoidmain(void)intx,y;/*定义数据*/printf(x=?);scanf(%d,/*输出*/,解法三,例,对于如下的结构:if(e1)stat1;elsestat2;,在stat1或stat2中又含有if结构:if(e2)stat3;elsestat4;称为if结构的嵌套。各种if结构都可以嵌套。,如求符号函数:-1(x0),#includevoidmain(voi
15、d)intx,y;scanf(“%d”,外层,内层,在外层else语句中,含有一个if结构。,说明:,书写采取缩进形式,便于区分。,内层缩进。,else与最近的if相匹配,从内到外。,y=-1;if(x!=0)if(x0)y=1;elsey=0;,x=0结果?,举例:求一元二次方程ax2+bx+c=0的根。,#include#includevoidmain(void)floata,b,c,d,x1,x2;scanf(“%f,%f,%f”,外层,内层,求相等实根。,求不等实根。,求共扼复根。,判断实型量相等或不等用误差的方法。,flaota=1.0/*a=1.000001或0.999999*/a
16、=1.0?,例:输出五分制对应的百分制范围。,#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”);,多个标号可以共用相同的语句
17、。,default语句可以省略。,3.3循环结构(Repetition),程序经常会重复执行某些相同的操作,如:求:s=1+2+3+4+100,算法描述:s=0;i=1;s+=i;i+;判断i是否小于等于100如果i小于等于100,重复;否则,结束。,此类根据“条件”重复执行相同算法的结构,称为循环。,初始化部分。,循环体。含有使条件趋假的语句。,循环的条件。注意:循环应在有限次完成。,C语言提供了三类实现循环的语句:while,dowhile,for,格式:while(expression)statement;,表达式:值非0,表示满足条件;值为0代表不满足条件。,语句(复合语句),重复执行
18、部分(循环体)。,流程:,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,3.3.1while循环(当型循环),【例3-10】打印循环变量的值。,/*example3-10(a)打印循环变量的值*/#includevoidmain(void)inti;/*定义整型循环变量*/i=1;/*初始化循环变量*/w
19、hile(i=10)/*循环条件*/printf(i=%d,i);/*输出循环变量*/i+;/*修正循环变量*/,3-10(b),/*example3-10(b)打印循环变量的值*/#includevoidmain(void)inti;/*定义整型循环变量*/i=1;/*初始化循环变量*/while(i=10)/*循环条件*/printf(i=%d,i);/*输出循环变量*/i=i+2;/*修正循环变量*/,【例3-11】求的值(用while循环实现),/*example3-11求累加和*/#includevoidmain(void)inti;/*定义整型循环变量*/floatsum;/*定义
20、累加和*/i=1;/*初始化循环变量*/sum=0.0;/*初始化累加和*/while(i=100)/*循环条件*/sum=sum+i;/*不断累加*/i+;/*修正循环变量*/printf(i=%d,i);/*输出循环变量*/printf(sum=%fn,sum);/*输出累加和*/,格式:dostatement;while(expression);,流程:,statement;,e?,true,false,含有使条件趋假的语句。,while循环与do-while循环的区别:while循环先判条件,后执行循环体;dowhile循环先执行循环体,后判条件。,举例:,求:30!,#include
21、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!。,3.3.2dowhile循环(直到型循环),例3-12求1到100的累加和(用do-while循环实现)。,/*example3-12求累加和*/#includevoidmain(void)inti;/*定义整型循环变量*/floatsum;/*定义累加和*/i=1;/*初始化循环变量*/sum=0.0;/*初
22、始化累加和*/dosum=sum+i;/*不断累加*/i+;/*修正循环变量*/while(i=100);/*循环条件*/printf(i=%d,i);/*输出循环变量*/printf(sum=%fn,sum);/*输出累加和*/,格式:for(e1;e2;e3)statement;,流程:,e1,e2?,true,statement;,e3,false,举例:,求: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都可以省略!,e
23、1省略,i=1;,e3省略,i+;,初值表达式。,测试表达式。,增值表达式。,3.3.3for循环,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;i5;i+,j-=50)s+=j;,从大到小输出100以内能被5整除的数。,inti;for(i=100;i=0;i-=5)printf(“%dn”,i);,inti,j,s=0;for(i=0,j=0;i+j100;i+,+j)s+=i+j;,【例3-13】求1到100的累加和(用do-while
24、循环实现)。,/*example3-13求累加和*/#includevoidmain(void)inti;/*定义整型循环变量*/floatsum;/*定义累加和*/sum=0.0;/*初始化累加和*/for(i=1;i=100;i+)/*初值、循环条件、步长*/sum=sum+i;/*不断累加*/printf(i=%d,i);/*输出循环变量*/printf(sum=%fn,sum);/*输出累加和*/,【例3-14】几种常见的空循环举例,/*example3-14(a)空循环*/#includevoidmain(void)inti;for(i=1;i=100;i+);*循环体内空语句*/p
25、rintf(i=%dn,i);,/*example3-14(b)空循环*/*for语句后打了一个分号*/#includevoidmain(void)inti;for(i=1;i=100;i+);printf(i=%dn,i);,【例3-14】几种常见的死循环举例,/*example3-15(a)死循环*/*省略表达式3*/#includevoidmain(void)inti;for(i=1;i=100;);printf(i=%dn,i);,/*example3-15-(b)死循环*/*省略表达式2*/#includevoidmain(void)inti;for(i=1;i+);printf(i
26、=%dn,i);,3.3.4转移语句,任何循环都必须在有限的时间内能够结束,而循环的结束有2种方式:正常结束循环非正常结束循环,1break语句break语句又称中断语句,其一般形式为:break;,2continue语句continue语句的一般形式为:continue;,循环的中断(break)和继续(continue),循环的中断:break语句,概念:循环体中可以加分支,判断是否继续执行循环,break语句可以提前结束循环。,举例:求:r=110的圆的面积,如圆面积大于100则中断。,for(r=1;r100)break;printf(“n%f“,area);,满足条件,则退出循环。,
27、继续循环: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;,【例3-16】转移语句举例,/*example3-16(a)*/*break语句的使用*/#includevoidmain(void)inti;for(i=1;i=10;i+)if(i%4=0)break;printf(i=%dn,i);,/*examp
28、le3-16(b)*/*continue语句的使用*/#includevoidmain(void)inti;for(i=1;i=10;i+)if(i%4=0)continue;printf(i=%dn,i);,3goto语句,格式:gotoLabel/*Label:同一函数内语句前的标号。*/,作用:转移到标号对应的语句上继续执行。,loop:if(i=100)sum=sum+i;i+;gotoloop;,概念:在一个循环的循环体内又包含一个完整的循环称为循环的嵌套。,i1234567891111219j22122299919299,如打印一99的乘法表:,i=1时,j从1变化到9,完i*j。
29、,3.3.5各种循环的嵌套,/*example3-17嵌套循环*/#includevoidmain(void)inti,j;for(i=1;i=3;i+)/*外循环3次*/printf(外循环i=%d:,i);/*输出外循环变量*/for(j=1;j=5;j=j+2)/*内循环3次*/printf(内循环j=%d,j);/*输出内循环变量*/printf(n);/*换行*/,【例3-17】输出循环变量的值,分析循环的执行过程,#includevoidmain(void)inti,j;for(i=1;i=9;i+)printf(“n“);,外层循环,内层循环,说明:,内外层循环采用缩进形式。,w
30、hile和do-while和for可以相互嵌套。,执行次数为内层循环次数和外层循环次数的乘积。,CHAP3EX9,如何打印乘法表的一半?,for(j=1;j=9;j+)printf(“%4d“,i*j);,【例3-18】打印九九乘法表,无限循环和空循环,条件为恒真的循环无限循环,while(1)dowhile(1);for(;),通过条件控制的break语句退出循环。,例:程序等待直到输入字母A。for(;)ch=getchar();if(ch=A)break;,循环体为空语句的循环空循环,for(i=1;i=MAX;i+);,作用:程序延时。,空语句,;,3.4分支和循环的C程序设计,输入1
31、0个自然数统计其中偶数的个数及偶数值和。,算法框图:,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);,算法的健壮性,注意:结构应完整的包含和被包含。,3.4.1应用程序,程序分析:此题首先找出2个数中的大数maxf,再将2个数中的大数maxf与第3个数比较,
32、即可得出3个数中的大数,/*example3-19求3个数中的大数*/#includevoidmain(void)floatx,y,z,maxf;/*定义实型数据*/printf(x,y,z=?);scanf(%f,%f,%f,/*输出*/,【例3-19】由键盘任意输入3个数,找出其中的最大数,/*example3-20判断闰年*/#includevoidmain(void)intn;/*定义数据*/printf(n=?);scanf(%d,/*输出不是闰年*/,【例3-20】由键盘任意输入一个年号,如:2008,判断其是否是闰年,/*example3-21统计字符的个数*/#includev
33、oidmain(void)charc;intdigcou=0;/*定义整型变量并初始化为0*/intcapcou=0;intsmacou=0;intothercou=0;printf(c=?);while(c=getchar()!=n)/*循环输入字符赋给c*/if(c=0/*统计小写字母*/else,【例3-21】由键盘任意输入一串字符,分别统计其中大写字母、小写字母、数字、其他字符的个数,othercou+;/*统计其它字符*/printf(数字字符有%d个n,digcou);/*输出字符个数*/printf(大写字母有%d个n,capcou);printf(小写字母有%d个n,smaco
34、u);printf(其它字符有%d个n,othercou);,/*example3-22(a)求累乘积的和*/#includevoidmain(void)inti;/*定义整型循环变量*/floattemp=1.0;/*定义并初始化累乘积*/floatsum=0.0;/*定义并初始化累加和*/intn;printf(n=?);scanf(%d,/*输出累加和*/,【例3-22】求累乘积的和,/*example3-22(b)求累乘积的和*/#includevoidmain(void)inti,j;/*定义整型循环变量*/floattemp;/*定义累乘积*/floatsum=0.0;/*定义并初
35、始化累加和*/intn;printf(n=?);scanf(%d,/*输出累加和*/,【例3-22】(b),/*example3-23(a)求级数和*/#includevoidmain(void)inti;/*定义整型循环变量*/floatsum=0.0;/*定义并初始化累加和*/intn;printf(n=?);scanf(%d,/*输出累加和*/,【例3-23】求级数的和,(1)求级数的和:1+2+3+4+n。,/*example3-23(b)求级数和*/#includevoidmain(void)inti;/*定义整型循环变量*/floatsum=0.0;/*定义并初始化累加和*/int
36、n;printf(n=?);scanf(%d,/*输出累加和*/,(2)求级数的和:1+1/2+1/3+1/4+1/n,/*example3-23(c)求级数和*/#includevoidmain(void)inti;/*定义整型循环变量*/floatsum=0.0;/*定义并初始化累加和*/intn;printf(n=?);scanf(%d,/*输出累加和*/,(3)求级数的和:1+1/3+1/5+1/7+1/n,/*example3-23(d)求级数和*/#includevoidmain(void)inti;/*定义整型循环变量*/floatsum=0.0;/*定义并初始化累加和*/flo
37、attemp=-1;intn;printf(n=?);scanf(%d,/*输出pi*/,(4)求级数的和:/4=11/3+1/51/7+1/n,/*example3-23(e)求级数和*/#include#includevoidmain(void)inti;/*定义整型循环变量*/floatsum=0.0;/*定义并初始化累加和*/floattemp=-1;floateps;printf(eps=?);scanf(%f,/*example3-24(a)求素数*/#include#includevoidmain(void)intm,n,i,k=0;/*定义整型变量*/for(m=101;mn)
38、/*退出后满足此条件则是素数*/printf(%4d,m);/*输出素数*/k+;/*统计素数*/if(k%10=0)printf(n);/*控制换行*/printf(n素数有%d个n,k);/*输出素数个数*/,【例3-24】求100200之间的素数,/*example3-24(b)求素数*/#include#includevoidmain(void)intm,n,i,k=0;/*定义整型变量*/intfound;/*定义开关变量*/for(m=101;m=200;m=m+2)/*外循环依次遍历待检测的奇数*/n=sqrt(double)m);found=0;/*初始化开关变量*/i=2;w
39、hile(i=n,if(found=0)/*退出后满足此条件则是素数*/printf(%4d,m);/*输出素数*/k+;/*统计素数*/if(k%10=0)printf(n);/*控制换行*/printf(n素数有%d个n,k);/*输出素数个数*/,/*example3-25计算器程序*/#includevoidmain(void)floatx,y;/*定义实型数据*/charop;printf(pleaseenterexpression:);scanf(%f%c%f,【例3-25】设计一个简单的计算器程序,由用户从键盘输入一个表达式,如:11+22=?程序立即计算出答案,并将表达式和答案
40、输出在屏幕上,3.4.22种程序设计的基本方法,根据计算机的特点,结合循环与分支结构在程序设计时常使两种常用的基本方法。,枚举法(穷举法)迭代法,本专题将结合分支和循环介绍两种方法的基本思想和具体实现!,1枚举法Enumeration,存在有限状态;其中某些状态满足特定条件。通过循环产生所有状态(枚举)。对每一状态,按条件进行状态测试,满足条件的状态,为所求的解。,求100到200内的所有素数。通过循环使i从101变化到199(枚举所有状态)对每次循环的i进行是否是素数的测试,如果是素数,输出i。,枚举法举例:,求100到200之间的所有素数(只能被1和自身整除的数)。,对于自然数n,判断其是
41、否为素数有以下三种方法:,判断n是否能被从2到n-1范围内的数整除;,判断n是否能被从2到(int)(n/2)范围的数整除;,判断n是否能被从2到(int)sqrt(n)范围的数整除;,程序如下:,#include#includevoidmain(void)intn,j,s;for(n=101;ns)printf(“n%d”,n);,枚举所有数,构造,测试条件,如果n能被2到s的任意数整除,退出循环。,如果n是素数,输出n。,CHAP3EXA,求水仙花数(条件:三位数的个、十、百位的方和等于该数。153=13+53+33)。,n为枚举变量,枚举初值100,枚举终值999。,构造条件:取出n的个
42、、十、百位数。,测试是否满足条件,满足条件输出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,爱因斯坦阶梯问题(不定范围的枚举)。,设有一阶梯,每步跨2阶,最后剩1阶;每步跨3阶,最后剩2阶;每步跨5阶,最后剩4阶;每步跨6阶,最后剩5阶;每步跨7阶,正好到阶梯顶。问共有多少阶梯。,根据条件可以得出:台阶数一定是奇数且
43、为7的倍数。枚举初值:k=7;枚举公式:k=k+14结束条件:满足(k%3=2)while(!(k%3=2),CHAP3EXC,思考题:,36人一次搬36块砖,男搬4,女搬2,两个小孩抬一块。要一次搬完。问:男、女、小孩要多少?,找出1000以内的完数,所谓完数是指该数的各因子之和等于该数,如6=1+2+3。,证明6到200以内的数,符合哥德巴赫猜想(一个大于6的偶数,可以分解成两个质数之和)。,奇妙的算式:用字母代替十进制数字写出如下算式:EGALLLGAE请找出这些字母代表的数字。,2迭代法Iteration,迭代是通过循环不断由旧值推导新值,并最后求解的过程。迭代法有三个要点:,如人口每
44、年按2%增长,现在人口有12亿,10年后人口有多少?,迭代公式。,m=m*(1+2%),迭代初值(边界条件)。,m=12,迭代次数(或条件)。,n=10,迭代法举例,求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”,迭代初值。,迭代公式。,迭代过程,附加条件:当|t|10-5,结束运算。,if(fabs(t)1e-5)break;,CHAP3EXD,用梯形法求定积分,(0,0),y,x,f(x
45、),a,b,面积,h,x,将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,迭代求积分的方法,程序如下:,#includevoidmain(void)floata,b,f0,f1,h,x,s=0.0;intn,i;scanf(“%f,%f,%d”,CHAP3EXE,迭代初值。,迭代循环,求s=a+aa+aaa+aaaa。0a10共n项,最后一项有n个a。如求s=2+22+222+2222+222222n、a从键盘输入。,迭代次数:i=1n,迭代初值:s
46、=0.0,t=a,迭代公式:t=t*10+a,程序如下:,#includevoidmain(void)floats,t;inti,a,n;doscanf(“%d,%d”,x,y,f(x),x1,f1=f(x1),x2,f2=f(x2),算法分析:,输入x1、x2,并求出f1、f2。,迭代:将区间二分x=(x1+x2)/2计算出f=f(x),x,f,判断f与f1是否同号如果同号:x1=x,f1=f否则:x2=x,f2=f,x1,f1,f1,f2,判断fabs(x1-x2)是否小于某个规定的精度(如10-6):如果小于精度:求出根,退出到。否则:继续。,输出根,根的值是(x1+x2)/2。,二分法求方程f(x)=x3-6x-1=0,在0,5区间的根。,二分法求方程根程序,#include#includevoidmain(void)floatx1,x2,x,f1,f2,f;scanf(“%f,%f”,CHAP3EXF,迭代
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人教版七年级上册英语Unit6智慧听力Listening课件特洛伊战争完整版
- (新)医院医疗关键值总结
- 《人工智能技术与应用》 课件 第6章 AI创新项目
- 群体心理与团队建设
- 算流体力学中科院力学所第讲双曲型方程组
- 萝卜家园临川一小教师计算机培训第一期
- 湘教版高中生物选修一生物与科技单元测试卷及答案
- 外研版高中三年级生物上册第6章模拟试卷及答案
- 2026秋小学苏教版科学二年级上册第四单元学情测试练习卷含参考答案三套
- 营养与营养相关疾病
- 动量守恒定律四大核心类碰撞题型专项训练-2027届高考物理(解析版)
- (2026年秋)九年级数学上册知识点大全(2024修订版)
- 工程工期延误处置方案
- 人工智能:从基础到实践(微课视频版)课件 第3章 语音处理及其应用
- 教育心理学(第4版)课件 第四章 行为主义学习理论
- 住宅小区消防灭火器更换方案
- 2026年学校保安招聘考试题库及答案
- 郑州宇通客车股份公司供应商管理手册
- 沥青混合料施工方案试卷教案(2025-2026学年)
- 伤口护理中的疼痛管理策略与实践
- JJF2061-2023一级标准光伏组件校准规范
评论
0/150
提交评论