《C语言的基本控制结构》由会员分享,可在线阅读,更多相关《C语言的基本控制结构(53页珍藏版)》请在金锄头文库上搜索。
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
2、.0f*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 Uni
4、versity of 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)关系运算是比较两个表达式的数值相互关系的运算。关系运算是比较两个表达式的数值相互关系的运算。运算符运算符比较的关系比较的关系实例实例大于大于ab=大于等于大于等于a=b小于小于21=小于等于小于等于cb;d=a+22&a3|逻辑或逻辑或s6!逻辑非逻辑非!a其中,!运算是单目运算。其中,!运算是单目运算。逻辑运算演示逻辑运算演
7、示第三章 C语言的基本控制结构Chapter 3 Control 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*
8、=(a+2)第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 级别级别运算符运算符结合顺序结合顺序1()()-.从左向右从左向右2!- - +- - -(type)sizeof* * &从右向左从右向左3* */%从左向右从左向右4+- -从左向右从左向右5(移位运算移位运算)从左向右从左向右6=从左向右从左向右7=!=从左向右从左向右8&(位与运算位与运算)从左向右从左向右9(位异或运算位异或运算)从左向右从左向右10|(位或运算位或运算)从左向右从左向右11&从左向右从左向右12|从左向右从左向右13?:从
9、右向左从右向左14=op=从右向左从右向左15,从左向右从左向右优优先先级级总总表表第三章 C语言的基本控制结构Chapter 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在逻辑运算中,如果
10、逻辑值能够确定,则不再进行运算。在逻辑运算中,如果逻辑值能够确定,则不再进行运算。inta=0,b=0+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、ife
11、lse、switch三种。三种。if语句语句格式:格式:if(expression)statement;语句语句表达式,非表达式,非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结构结构格式:格式:i
12、f(expression)stat1;elsestat2;语句或复合语句。语句或复合语句。流程图:流程图: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结构(结构(Multi-line)格式:格式:if(e1)stat1;elseif(e
13、2)stat2;elseif(e3)stat3;elseif(en-1)statn-1;elsestatn;框图:框图: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税率为税
14、率为5%3000以上税率以上税率6%输入收入,求应缴税款。输入收入,求应缴税款。#includevoidmain(void)floatx,rate;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
15、;elsestat2;在在stat1或或stat2中又含有中又含有if结构:结构:if(e2)stat3;elsestat4;称为称为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的根。的根。#in
16、clude#includevoidmain(void)floata,b,c,d,x1,x2;scanf(“%f,%f,%f”,&a,&b,&c);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.
17、0f*a);外层内 层求相等实根。求相等实根。求不等实根。求不等实根。求共扼复根。求共扼复根。CHAP3EX4 判断实型量相判断实型量相等或不等用误差的等或不等用误差的方法。方法。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;c
18、ase常量表达式常量表达式n-1:statementn-1;default:statementn;只能是整型或字符型表达式。只能是整型或字符型表达式。整型字符型整型字符型常量常量表达式。表达式。表达式的值要互不能相等!表达式的值要互不能相等!流程:流程:先求先求expression的值。的值。依次比较依次比较expression和各常量表达式的值。和各常量表达式的值。如果与第如果与第i个常量表达式相等,则执行个常量表达式相等,则执行第第i条以后条以后的语句。的语句。如果都不相等,则执行如果都不相等,则执行default以后的语句。以后的语句。第三章 C语言的基本控制结构Chapter 3 Co
19、ntrol FlowHefei University of Technology 语句标号的概念语句标号的概念:#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”);CHAP3EX5语句标号。语句标号。break语句:语句:格式:格式:break;作用:中断作用:中
20、断switch流程。流程。break;break;break;break;break;CHAP3EX6第三章 C语言的基本控制结构Chapter 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:print
21、f(“7079n”);break;cased:caseD:printf(“6069n”);break;casee:caseE:printf(“60n”);break;default:printf(“DataError!n”);多个标号可以共用相同的语句。多个标号可以共用相同的语句。default语句可以省略。语句可以省略。第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 3.4循环结构循环结构(Repetition)程序经常会重复执行某些相同的操作,如:程序经常会重复执行某些相同的操作,如:求:求:s=1+2+
22、3+4+100算法描述:算法描述:s=0;i=1;s+=i;i+;判断判断i是否小于等于是否小于等于100 如果如果i小于等于小于等于100,重复,重复; 否则,结束。否则,结束。 此类根据此类根据“条件条件”重复执行相同算法的结构,称为循环。重复执行相同算法的结构,称为循环。初始化部分。初始化部分。循环体。含有使条件趋假的语句。循环体。含有使条件趋假的语句。 循环的条件。循环的条件。注意:循环应在有注意:循环应在有限次完成。限次完成。 C语言提供了三类实现循环的语句语言提供了三类实现循环的语句:while,dowhile,for第三章 C语言的基本控制结构Chapter 3 Control
23、FlowHefei University of Technology while循环(当型循环)循环(当型循环)格式:格式:while(expression)statement;表达式:值非表达式:值非0,表,表示满足条件;值为示满足条件;值为0代表不满足条件。代表不满足条件。语句(复合语句),重复语句(复合语句),重复执行部分(循环体)。执行部分(循环体)。流程:流程:e?truestatement;false含有使条件趋含有使条件趋假的语句。假的语句。举例:举例:求求s=1+2+3+4+100#includevoidmain(void)ints=0,i=1;while(i=100)s=s+
24、i;/*s+=i;*/i+;printf(“s=%dn”,s);初始化部分初始化部分循环体循环体条件测试条件测试使条件趋假语句使条件趋假语句CHAP3EX7第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology dowhile循环(直到型循环)循环(直到型循环)格式:格式:dostatement;while(expression);流程:流程:statement;e?truefalse含有使条件趋假的语句。含有使条件趋假的语句。while循环与循环与do-while循环的区别:循环的区别:vwhile循环先判条件,后
25、执行循环体;循环先判条件,后执行循环体;vdowhile循环先执行循环体,后判条件。循环先执行循环体,后判条件。举例:举例: 求:求: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!。!。第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University
26、of Technology for循环循环格式:格式:for(e1;e2;e3)statement;流程:流程:e1e2?truestatement;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 Cont
27、rol FlowHefei University of Technology forfor循环实例循环实例求求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;第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technolog
28、y 循环应用的几个问题循环应用的几个问题循环的嵌套循环的嵌套 概念:在一个循环的循环体内又包含一个完整的循环称为循环概念:在一个循环的循环体内又包含一个完整的循环称为循环的嵌套。的嵌套。 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乘法表。乘法表。#includevoidma
29、in(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);第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology
30、循环的中断循环的中断(break)和继续和继续(continue)循环的中断:循环的中断:break语句语句概念:循环体中可以加分支,判断是否继续执行循环,概念:循环体中可以加分支,判断是否继续执行循环,break语句可以提前结束循环。语句可以提前结束循环。举例:求:举例:求:r=110的圆的面积,如圆面积大于的圆的面积,如圆面积大于100则中断。则中断。for(r=1;r100)break;printf(“n%f“,area);满足条件,则退出循环。满足条件,则退出循环。继续循环:继续循环:continue语句语句continue语句的作用是跳过本次循环剩余的循环体内容,执行语句的作用是跳过
31、本次循环剩余的循环体内容,执行下次循环。下次循环。举例:求举例:求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;第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 无限循环和空循环无限循环和空循环条件为恒真的循环条件为恒真的循环无限循环无限循环while(1)dowhile(1)
32、;for(;)通过条件控制的通过条件控制的break语句退出循环。语句退出循环。例:程序等待直到输入字母例:程序等待直到输入字母A。for(;)ch=getchar();if(ch=A)break;循环体为空语句的循环循环体为空语句的循环空循环空循环for(i=1;i=MAX;i+);作用:程序延时。作用:程序延时。空语句空语句;第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 程序设计的基本方法程序设计的基本方法 根据计算机的特点,结合循环与分支结构在程序设计时常使两根据计算机的特点,结合循环与分支结构在程序
33、设计时常使两种常用的基本方法。种常用的基本方法。枚举法(穷举法)枚举法(穷举法)迭代法迭代法 本专题将结合分支和循环介绍两种方法的基本思想和本专题将结合分支和循环介绍两种方法的基本思想和具体实现!具体实现!第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 枚举法枚举法Enumerationv存在有限状态;其中某存在有限状态;其中某些状态满足特定条件。些状态满足特定条件。v通过循环产生所有状态通过循环产生所有状态(枚举)。(枚举)。v对每一状态,按条件进对每一状态,按条件进行状态测试,满足条件行状态测试,满足条件
34、的状态,为所求的解。的状态,为所求的解。v求求100到到200内的所有素内的所有素数。数。v通过循环使通过循环使i从从101变化变化到到199(枚举所有状态)(枚举所有状态)v对每次循环的对每次循环的i进行是否进行是否是素数的测试,如果是是素数的测试,如果是素数,输出素数,输出i。第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 枚举法举例:枚举法举例:求求100到到200之间的所有素数(只能被之间的所有素数(只能被1和自身整除的数)。和自身整除的数)。对于自然数对于自然数n,判断其是否为素数有以下三种方法:,
35、判断其是否为素数有以下三种方法:判断判断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
36、(j=2;js)printf(“n%d”,n);枚枚举举所所有有数数构构造造,测测试试条条件件如果如果n能被能被2到到s的任意数整除,退出的任意数整除,退出循环。循环。如果如果n是素数,输出是素数,输出n。CHAP3EXA第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 求水仙花数(条件:三位数的个、十、百位的方和等于该求水仙花数(条件:三位数的个、十、百位的方和等于该数。数。153=13+53+33)。)。n为枚举变量,枚举初值为枚举变量,枚举初值100,枚举终值,枚举终值999。构造条件:取出构造条件:取出
37、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第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 爱因
38、斯坦阶梯问题(不定范围的枚举)。爱因斯坦阶梯问题(不定范围的枚举)。设有一阶梯,每步跨设有一阶梯,每步跨2阶,最后剩阶,最后剩1阶;每步跨阶;每步跨3阶,最后剩阶,最后剩2阶;每步跨阶;每步跨5阶,最后剩阶,最后剩4阶;每步跨阶;每步跨6阶,最后剩阶,最后剩5阶;每步跨阶;每步跨7阶,正好到阶梯顶。问共有多少阶梯。阶,正好到阶梯顶。问共有多少阶梯。根据条件可以得出:台阶数一定是奇数且为根据条件可以得出:台阶数一定是奇数且为7的倍数。的倍数。枚举初值:枚举初值:k=7;枚举公式:枚举公式:k=k+14结束条件:满足结束条件:满足(k%3=2)&(k%5=4)&(k%6=5)结束。结束。#incl
39、udevoidmain(void)intk=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以内的完数,所谓完数是指该数的各因子之和等于以内的完数,所谓完数是指该数的各因子之和等于该数
40、,如该数,如6=1+2+3。 证明证明6到到200以内的数,符合哥德巴赫猜想(一个大于以内的数,符合哥德巴赫猜想(一个大于6的偶的偶数,可以分解成两个质数之和)。数,可以分解成两个质数之和)。奇妙的算式:用字母代替十进制数字写出如下算式:奇妙的算式:用字母代替十进制数字写出如下算式:EAGL LLGAE请找出这些字母代表的数字。请找出这些字母代表的数字。第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 迭代法迭代法 Iterationv迭代是通过循环不断由迭代是通过循环不断由旧值推导新值,并最后旧值推导新值,并
41、最后求解的过程。求解的过程。v迭代法有三个要点:迭代法有三个要点: 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/
42、i迭代初值迭代初值exp=1,t=1,(i=1n)#includevoidmain(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 Universi
43、ty of Technology 用梯形法求定积分用梯形法求定积分(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)floa
44、ta,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.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。
45、如求。如求s=2+22+222+2222+222222n、a从键盘输入。从键盘输入。迭代次数:迭代次数: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.0f;t=a;f
46、or(i=1;i=n;i+)s+=t;t=t*10+a;printf(“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)是否小于某个规定的精度是否
47、小于某个规定的精度(如如10-6):如果小于精度:求出根,退出到如果小于精度:求出根,退出到。否否则:继续则:继续。输出根,根的值是输出根,根的值是(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.
48、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=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)从程序的运行看精度和时间的关系!从程序的运行看精度和时间的关系!迭代
49、初值迭代初值:fPi=0;fItem=1;iSign=1;迭代公式迭代公式:fPi+=(1./fItem)*iSign;fItem+=2.;iSign*=-1;迭代条件迭代条件: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为最大公
50、约数;为最大公约数;如果如果k不为不为0,原除数作为新的被除数,原除数作为新的被除数m,余数作为新除数,余数作为新除数,继续继续。用迭代法求用迭代法求cosX。求求Fibonacci级数级数1,1,2,3,5,8,13,21,34.迭代法思考题迭代法思考题8.用牛顿迭代法求方程用牛顿迭代法求方程f(x)=0的根。(必做!)的根。(必做!)第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 第三章作业通过梯形法求通过梯形法求y=输出结果。输出结果。求求1000以内能被以内能被73或或127整除的自然数平方根之和。整
51、除的自然数平方根之和。求求100-200之间的所有能被之间的所有能被3以及以及7整除的自然数的平方根整除的自然数的平方根之和。之和。求级数求级数a=2/1+3/2+5/3+8/5+13/8+21/13的前的前30项之和。项之和。求数列求数列41+n(n1)最小非素数项的序号(最小非素数项的序号(n2)。)。求满足以下条件的数:求满足以下条件的数:该数大于该数大于100小于小于1000;其个位数与十位数的平方和等其百位数的立方。其个位数与十位数的平方和等其百位数的立方。求级数求级数e=1+1/1!+1/2!+1/3!+要求要求:求求n项项(n由键盘输入由键盘输入)或最后一项小于或最后一项小于10
52、-6结束。结束。第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 第三章作业输入三边输入三边a、b、c判断是否能构成三角形,如能构成三角形,判断是否能构成三角形,如能构成三角形,要求通过海伦公式计算其面积。要求通过海伦公式计算其面积。注:注:海伦公式海伦公式构成三角形的条件:任意两边只和大于第三边。构成三角形的条件:任意两边只和大于第三边。求求1500内的最大五个素数之和。内的最大五个素数之和。 一包海鲜单价为一包海鲜单价为46.5元,如果购买元,如果购买100包至包至300包则按包则按95%优优惠;若购买惠;
53、若购买301包至包至500包,则按包,则按85%优惠;如果购买优惠;如果购买501包至包至1000包,则按包,则按80%优惠;若购买优惠;若购买1000包以上,按包以上,按70%优惠。试编写一个优惠。试编写一个计算顾客购买计算顾客购买X包海鲜所需金额,且打印购买数量、单价和总金额包海鲜所需金额,且打印购买数量、单价和总金额的程序。的程序。 编程输出编程输出11000中所有个位数是中所有个位数是7的素数,统计其个数,并的素数,统计其个数,并求满足该条件数的和,输出结果。求满足该条件数的和,输出结果。第三章 C语言的基本控制结构Chapter 3 Control FlowHefei Univers
54、ity of Technology 第三章作业编写程序求:编写程序求:21.21.父亲今年父亲今年30岁,儿子今年岁,儿子今年6岁,问多少年后,父亲的年龄是岁,问多少年后,父亲的年龄是儿子的儿子的2倍?倍?22.22.将将1元人民币换成元人民币换成5分、分、2分、分、1分的硬币有多少种换法?分的硬币有多少种换法?23.23.一只猴子摘了一堆桃,每天吃一半再加一只猴子摘了一堆桃,每天吃一半再加1个,第个,第10天去吃时天去吃时只剩只剩1个桃,问第一天的一堆桃有多少?个桃,问第一天的一堆桃有多少?24.一个一个4位数,逆向排列后是原位数,逆向排列后是原4位数的倍数,求出符合条件的位数的倍数,求出符
55、合条件的4位数。位数。25.25.一个球从一个球从100米高度落下,每次反弹回原高度的一半,求第米高度落下,每次反弹回原高度的一半,求第10次落地时球的行程及下次反弹的高度。次落地时球的行程及下次反弹的高度。第三章 C语言的基本控制结构Chapter 3 Control FlowHefei University of Technology 第三章作业26.26.输出公元输出公元1000年至今所有闰年。年至今所有闰年。闰年的条件自查!闰年的条件自查!27.27.用三种不同的方法计算用三种不同的方法计算 。(方法自选)。(方法自选)28.28.用连分数求:用连分数求:第三章 C语言的基本控制结构C
56、hapter 3 Control FlowHefei University of Technology 第三章作业29.29.某地刑警大队对涉及某地刑警大队对涉及6个嫌疑人的一桩疑案进行分析:个嫌疑人的一桩疑案进行分析:A、B至少有至少有1人作案;人作案; A、E、F,3人中至少有人中至少有2人参与作案;人参与作案;A、D不可能是同案犯;不可能是同案犯;B、C或同时作案,或都与本案无关;或同时作案,或都与本案无关;C、D中有且仅有一人作案;中有且仅有一人作案; 如果如果D没有参与作案,则没有参与作案,则E也不可能参与作案。也不可能参与作案。编程找出作案人。编程找出作案人。30.30.阿米巴用简单分裂的方式繁殖,它每分裂一次要用阿米巴用简单分裂的方式繁殖,它每分裂一次要用3分分钟。将若干个阿米巴放在一个盛满营养参液的容器内,钟。将若干个阿米巴放在一个盛满营养参液的容器内,45分钟分钟后容器内充满了阿米巴。已知容器最多可以装阿米巴后容器内充满了阿米巴。已知容器最多可以装阿米巴220个。试个。试问,开始的时候往容器内放了多少个阿米巴?问,开始的时候往容器内放了多少个阿米巴?