资源描述
,*,BISU,BISU,*,BISU,*,BISU,*,BISU,*,BISU,*,BISU,*,BISU,*,第五章,循环结构程序设计,BISU,*,BISU,*,BISU,*,BISU,*,BISU,*,1,第五章,循环结构程序设计,一,2,思考,求,1,100,的累加和。,分析,换一种思路:,sum=1+2+100;,首先设置一个累计器sum,其初值为0,利用sum+=n来计算n依次取1、2、100,只要解决以下3个问题即可:1将n的初值置为1;2每执行1次“sum+=n;后,n增1;3当n增到101时,停止计算。此时,sum的值就是1100的累计和。,sum=sum+n;,3,一、goto语句,二、while语句,三、do-while语句,四、for语句,五、break、continue语句,六、几种循环的比较,主要内容,4,格式,goto,语句标号,说明,(1)与if 语句一起构成循环结构。,(2)不符合结构化程序设计原那么,一般不用。,P106,#include ,void main(),int n=1,sum=0;,loop:sum+=n;n+;,if(n=100)goto loop;,printf(“sum=%dn,sum);,举例,使用,goto,语句与分语句配合构成循环结构,实现求,1,100,的累加和。,作用:使系统转向标号所在的语句行执行。,标号的定名规那么与变量名相同。,一、,goto,语句,5,格式,while (,表达式,),循环体语句,P107,说明,1、循环体如果包含一个以上的语句,必须使用复合语句形式。,2、在循环体中,必须有使循环条件趋向于不满足假的语句。,3、先判断表达式,后执行语句。,?,含义,当表达式为真非0值时,执行while语句中的内嵌语句。,执行过程,表达式,循环体语句,假,真,循环体语句,当表达式值为真,N-S,图表示,二、,while,语句,6,sum=55,举例,求,110,的累加和。,i,=1,sum=0,当,i,=10,sum,=,sum+i,i+,输出,sum,include ,void main(),int i,sum;,i=1;sum=0;,while (i=10),sum=sum+i;,i+;,printf(“sum=%5dn,sum);,思考,1、如果去掉循环体中的大括号,执行过程将会怎样变化?,2、在循环体中,使循环条件趋向于不满足假的语句是哪条?,?,1,求,15,的累加和,.,2,求,110,的奇数和,.,3,求,110,的偶数和,.,二、,while,语句,7,格式,do,循环体语句,while (,表达式,),;,P108,说明,1、循环体如果包含一个以上的语句,必须使用复合语句形式。,2、在循环体中,必须有使循环条件趋向于不满足假的语句。,3、先执行循环体语句,后判断表达式的值。,?,含义,执行do-while语句中的内嵌语句,直到表达式为假0才跳出循环。,执行过程,表达式,循环体语句,假,真,循环体语句,当表达式值为真,N-S,图表示,至少执行一次,三、,do-while,语句,8,sum=55,举例,求,110,的累加和。,include ,void main(),int i,sum;,i=1;sum=0;,do,sum=sum+i;,i+;,while (i=10);,printf(“sum=%5dn,sum);,i,=1,sum=0,当,i10),输出,sum,sum,=,sum+i,i+,思考,1、如果去掉循环体中的大括号,执行过程将会怎样变化?,2、在循环体中,使循环条件趋向于不满足假的语句是哪条?,三、,do-while,语句,9,举例,while和do-while循环的比较。,include ,void main(),int i,sum;,scanf(“%d,while(i=10),sum=sum+i;,i+;,printf(“sum=%dn,sum);,include ,void main(),int i,sum;,scanf(“%d,do,sum=sum+i;,i+;,while(i=10),printf(“sum=%dn,sum);,输入:,1,输入:,11,sum=55,输出:,sum=55,sum=0,输出:,sum=11,此程序的功能?,什么情况下两者结果相同?,P109,三、,do-while,语句,10,格式,for (,表达式,1,;表达式,2,;表达式,3),语句,P110,for (,循环变量赋初值;循环条件;循环变量增值,),语句,执行过程,1先求解表达式1;,2求解表达式2,假设其值为真,那么 执行循环体语句,然后执行第3步;假设为假,那么结束循环,转到第5步;,3求解表达式3;,4转向步骤2;,5循环结束,执行for语句下面的一个语句。,表达式,2,循环体语句,假,真,求解表达式,1,求解表达式,3,四、,for,语句,11,sum=55,举例,求,110,的累加和。,sum=0,for i=1 to10,sum,=,sum+i,输出,sum,include ,void main(),int i,sum;,sum=0;,for(i=1;i=10;i+),sum=sum+i;,printf(“sum=%5dn,sum);,?,1,求,15,的累加和,.,2,求,110,的奇数和,.,3,求,110,的偶数和,.,四、,for,语句,12,for (,表达式,1,;表达式,2,;表达式,3),语句,说明,三个表达式都可以省略。,表达式,2,循环体语句,假,真,求解表达式,3,表达式,1,省略,循环体语句,求解表达式,1,求解表达式,3,表达式,2,省略,表达式,2,循环体语句,假,真,求解表达式,1,表达式,3,省略,四、,for,语句,13,说明,1,i=1;,for(,;,i=10,;,i+),sum=sum+i;,2,for (i=1,;,;,i+),sum=sum+i;,?,3,for (i=1,;,i=10,;,),sum=sum+i;,i+,;,for(i=1;i=10;i+),sum=sum+i;,表达式,1,可以省略,但其后的分号不可以省略。,没有循环结束条件,构成了死循环,for(i=1;i=10;i+),sum=sum+i;,四、,for,语句,14,说明,4,5,for(;),sum=sum+i;,6,表达式,1,和表达式,3,可以是与循环变量无关的表达式。,for(;i=10;),sum=sum+i;,i+;,7,表达式,2,一般是关系表达式,也可以是数值或字符表达式。,while(i=10),sum=sum+i;,i+;,while(1),sum=sum+i;,表达式,1,和表达式,3,可以同时省略,此时等同于,while,语句。,for(sum=0,i=1;i=100,i+),sum=sum+i;,例,建议:,for,语句中只放与,循环控制有关的语句。,四、,for,语句,15,格式,while(,表达式,1),if(,表达式,2),break,;,举例,.,sum=0;,for(i=1;i5)break;,sum=sum+i;,printf(“sum=%5dn,sum);,.,while(,表达式,1),if(,表达式,2),conitue,;,结束整个循环,结束本次循环,.,sum=0;,for(i=1;i=10;i+),if(i=5)continue;,sum=sum+i;,printf(“sum=%5dn,sum);,.,五、,breakcontinue,语句,16,说明,1,、三种循环语句在处理循环问题时,一般可以相互替代。,2、对于循环次数固定的问题,用for语句实现比较简单。,3,、对于循环次数不确定的问题,可用,while,语句或,do-while,语句实现。,4,、,while,语句,:,先判断,后执行。,do-while,语句:先执行,后判断。,六、几种循环语句的比较,17,作业,P120:6.1,6.2,其中,6.1,6.2,是实验,18,循环结构程序设计,二,19,一、循环嵌套,二、循环结构程序设计举例,主要内容,20,概念,一个循环体内又包含另一个完整的循环结构,称为循环嵌套。,1 2 3 4,2 4 6 8,3 6 9 12,4 8 12 16,举例,打印乘法口诀表。,#include ,void main(),int i,j;,for(i=1;i=4;i+),for(j=1;j=4;j+),printf(“%4d,i*j);,printf(“n);,i=1,j=1 1*1,j=2 1*2,j=3 1*3,j=4 1*4,i=2,j=1 2*1,j=2,i=3,i=4,for i=1 to 4,输出,i*j,for j=1 to 4,换行,一、循环嵌套,21,1,2 4,3 6 9,4 8 12 16,#include ,void main(),int i,j;,for(i=1;i=4;i+),for(j=1;j=i;j+),printf(“%4d,i*j);,printf(“n);,一、循环嵌套,思考,1,22,#include ,void main(),int i,j;,for(i=1;i=4;i+),for(j=1;j=5-i;j+),printf(“%4d,i*j);,printf(“n);,一、循环嵌套,思考,2,1 2 3 4,2 4 6,3 6,4,23,#include ,void main(),int i,j;,for(i=1;i=4;i+),for(j=1;j=4-i;j+)printf(“%4c,);,for(j=5-i;j=4;j+),printf(“%4d,i*j);,printf(“n);,一、循环嵌套,思考,3,4,6 8,6 9 12,4 8 12 16,24,#include ,void main(),int i,j;,for(i=1;i=4;i+),for(j=1;j=i-1;j+)printf(“%4c,);,for(j=i;j1e-6),pi=pi+t;,n=n+2;,s=-s;,t=s/n;,pi=pi*4;,printf(pi=%10.6fn,pi);,思考:使用那一种循环控制语句?,二、,程序举例,pi=1-1/3+,输出,4*,pi,s=1(-1),n=1,3,5,7,t=s/n,26,例,2,求,Fibonacci,数列的前40个数。,#include,void main(),long int f1,f2;,int i;,f1=1;f2=1;,for(i=1;i=3),P116,1 1 2 3,5 8 13 21,34 55 89 144,二、,程序举例,27,例,3,判断,m,是否为素,数。,素数质数:只能被1和它本身整除的数。,判别方法:,57:假设256之间的每一个数都除不开56,那么56为素数,否那么56不是素数。,m,k=m-1,i=2k:,假设每一个 i 的值都除不开m,那么m为素数,否那么m不是素数。,flag=1;,k=m-1;,for(i=2;i=k;i+),if (m%i=0)flag=0;,if(flag=1)printf(“yes!);,else printf(“no!);,k=m-1;,for(i=2;i=k+1)printf(“yes!);,else printf(“no!);,k=m-1;,k=m/2;(m+1)/2;,k=sqrt(m);sqrt(m+1),二、,程序举例,28,例,3,输出,1,01200,之间的全部素数。,for m=101 to 200,判断,m,是否为素数,若,m,是素数,则输出并统计个数,n.,每输出,10,个,素数,换行,#include,#include,void main(),int m,k,i,n=0;,for(m=101;m=200;m=m+2),k=sqrt(m);,for(i=2;i=k+1),printf(%d
展开阅读全文