第五讲循环结构介绍优秀PPT.ppt
《第五讲循环结构介绍优秀PPT.ppt》由会员分享,可在线阅读,更多相关《第五讲循环结构介绍优秀PPT.ppt(47页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第三章循环结构第一节 for语句其次节 while语句第三节 do-while语句第四节 循环嵌套for语句for(表达式1、表达式2、表达式3)语句或语句组 for(i=0、i10、i+)cout“welcome”endl;求解表达式1表达式2语句求解表达式3For语句的下一语句假真第一节for语句一、语句格式一、语句格式格式格式1 1说明:语句说明:语句1 1是是forfor循环语句的循环体,它将在满足条件的状况下被重复执行。循环语句的循环体,它将在满足条件的状况下被重复执行。格式格式2 2说明:循环体部分由多个语句构成,应由一对花括号括起来,构成一个语句块的说明:循环体部分由多个语句构成
2、,应由一对花括号括起来,构成一个语句块的形式程序风格提示:写形式程序风格提示:写for循环语句时,循环体的语句相对于循环语句时,循环体的语句相对于for缩进两格。缩进两格。第一节for语句二、语句执行过程for语句的执行过程可由以下4步来描述。(1)执行“限制变量初始化语句”,使限制变量获得一个初值。(2)推断限制变量是否满足“条件表达式”,若满足条件则执行一遍循环体,否则结束整个for语句,接着执行for循环下面的句子。(3)依据增量表达式,计算出限制变量所得到的新值(4)自动转到第(2)步。第一节for语句三、语句格式举例三、语句格式举例 (1)(1)将限制变量从将限制变量从1 1变到变到
3、100100,增量为,增量为1 1 for(i=1;i=100;+i)for(i=1;i=1;-i)for(i=100;i=1;-i)(3)(3)限制变量从限制变量从7 7变到变到7777,增量为,增量为7 7 for(i=7;i=77;i+=7)for(i=7;i=2 for(int i=20;i=2;i-=2)i-=2)(5)(5)按所示数列变更限制变量值:按所示数列变更限制变量值:9999、8888、7777、6666、5555、4444、3333、2222、1111、0 0,增量为,增量为-11-11 for(int j=99;j=0;j-=11)for(int j=99;j=0;j-
4、=11)(6)(6)限制变量限制变量i i和和j j共同进行循环限制,共同进行循环限制,i i从从1 1变到变到9999,j j从从2 2变到变到100100,增量均为,增量均为2 2。for for(int i=1,j=2;i=99&j=100int i=1,j=2;i=99&j=100;i+=2,j+=2i+=2,j+=2)须要说明的是:可以在须要说明的是:可以在forfor循环循环“限制变量初始化语句限制变量初始化语句”中声明变量(如上面最终中声明变量(如上面最终3 3个例子)个例子),这些变量只在,这些变量只在forfor循环结构中有效,离开了该循环结构中有效,离开了该forfor结构
5、,变量就无效了。结构,变量就无效了。第一节for语句例例4.1 4.1 输出输出11001100之间全部偶数。之间全部偶数。#include#include using namespace std;using namespace std;int main()int main()for(int i=2;i=100;i+=2)for(int i=2;i=100;i+=2)cout i ;cout i ;return 0;return 0;例例4.2 4.2 利用利用forfor循环循环,计算输出计算输出1+2+1001+2+100的和的和#include using namespace std;#
6、include using namespace std;int main()int main()int sum=0;int sum=0;for(int i=1;i=100;+i)for(int i=1;i=100;+i)sum+=i;sum+=i;cout sum;cout sum;return 0;return 0;循环语句循环限制语句包括:循环语句:for当型循环语句:while直到型循环语句:do-while循环语句for循环语句for(另一种当型循环)for(初始条件表达式;循环限制表达式;循环操作表达式)语句/语句组一次for循环执行过程首先执行初始条件表达式(第一次):可以为空循环
7、限制表达式:确定是一个数值表达式,也可以为空假如表达式值为真,条件成立,执行循环体一次假如表达式值为假,条件不成立,退出循环假如省略,默认值为真,直到遇到break,return语句退出循环循环操作表达式:也可为空初始条件初始条件表达式表达式语句语语句语句组句组循环操作循环操作表达式表达式循环控循环控制表达制表达式式循环语句for循环语句for例,计算从0到100的整数中有多少个数是偶数(包括),奇数中有多少数是的倍数#include using namespace std;int main()int i,n2=0,n3=0;for(i=0;i=100;i+)if(i%2=0)n2+;else
8、 if(i%3=0)n3+;coutn2“”n3endl;return 0;第一节for语句例例4.3 4.3 利用利用forfor循环计算循环计算n n!的值。!的值。分析:分析:n n!1*2*3*n1*2*3*n#include#include using namespace std;using namespace std;int main()int main()long long s;/Noip2010 long long s;/Noip2010起先起先C+C+语言中语言中long longlong long类型允许运用类型允许运用 int n;/n int n;/n不能定义为不能定义
9、为long longlong long,否则,否则forfor语句死循环语句死循环 s=1;s=1;cinn;cinn;for(int i=1;i=n;+i)/for(int i=1;i=n;+i)/若若s s定义为定义为intint,当,当n=13n=13时时s s的值就溢出了的值就溢出了 s*=i;s*=i;couts;return 0;cout=13n=13时,时,s s值超过了值超过了intint类型的表示范围。还有一种比类型的表示范围。还有一种比intint更大的类型,称为更大的类型,称为long longlong long,它的表示范围是,它的表示范围是-263-263263-12
10、63-1,比,比-1019-101910191019略窄,而我们始终运用的略窄,而我们始终运用的intint范围是范围是-231-231231-1,231-1,只比只比-2*109-2*1092*1092*109略宽。略宽。输入输出输入输出long longlong long也可以借助于也可以借助于printfprintf和和scanfscanf语句,但对应的占位符却是和平台与编译器相关的:语句,但对应的占位符却是和平台与编译器相关的:在在linuxlinux中,中,gccgcc很统一的用很统一的用%lld%lld;在;在windowswindows中,中,MinGWMinGW的的gccgcc
11、和和VC6VC6都须要用都须要用%I64d%I64d;但;但VS2008VS2008却是用却是用%lld%lld。第一节for语句例例4.44.4 利用利用forfor循环循环,分别计算分别计算1 1100100中奇数的和、偶数的和。中奇数的和、偶数的和。#include#include using namespace std;using namespace std;int main()int main()int jssum=0;int jssum=0;int ossum=0;int ossum=0;for(int js=1,os=2;js=99&os=100;js+=2,os+=2)for(
12、int js=1,os=2;js=99&os=100;js+=2,os+=2)jssum+=js;jssum+=js;ossum+=os;ossum+=os;cout the sum of odd numbers 1 to 100 is:jssumendl;cout the sum of odd numbers 1 to 100 is:jssumendl;cout the sum of even numbers 1 to 100 is:ossumendl;cout the sum of even numbers 1 to 100 is:ossumendl;return 0;return 0;说
13、明:说明:我们也可以在我们也可以在forfor循环初始化或增值表达式部分中放一条以上的语句,中间用逗号隔开。循环初始化或增值表达式部分中放一条以上的语句,中间用逗号隔开。【上机练习4.1】1、求12+22+32+10022、求s=1+1/2+1/3+1/1003、计算100之内全部的奇数之和。4、求10个数中的最大值和最小值。5、按字母表的依次,从字母A到Z依次打印输出。6、求菲波拉契数列a0,a1,a2,a20。a0=0,a1=1,a2=a1+a0,a3=a2+a1,an=an-1+an-2;如0,1,1,2,3,5,8,13,21,其次节while语句一、语句格式一、语句格式格式格式1 1
14、 说明:循环体部分由多个语句构成,应由一对花括号括起来,构成一个语句块的形式。说明:循环体部分由多个语句构成,应由一对花括号括起来,构成一个语句块的形式。程序风格提示:写程序风格提示:写whilewhile循环语句时,循环体的语句相对于循环语句时,循环体的语句相对于whilewhile缩进两格。缩进两格。说明:语句说明:语句1是是while循环语句的循环体,它将在满足条件的状况下被重复执行。循环语句的循环体,它将在满足条件的状况下被重复执行。格式格式2循环语句while循环语句while(当型循环)while(表达式)语句/语句组表达式必需是数值表达式一次循环计算表达式的值假如表达式值为真,执
15、行循环体,为假退出循环表达式表达式语句语句/语语句组句组其次节while语句二、语句执行过程二、语句执行过程(1)(1)计算作为循环限制条件表达式的值,得到逻辑真或假,假定用计算作为循环限制条件表达式的值,得到逻辑真或假,假定用M M表示。表示。(2)(2)若若M M为真,则执行了一遍循环体,否则离开循环,结束整个为真,则执行了一遍循环体,否则离开循环,结束整个whilewhile语句的执行。语句的执行。(3)(3)循环体的全部语句执行结束后,自动转向第循环体的全部语句执行结束后,自动转向第(1)(1)步执行。步执行。三、格式举例三、格式举例(1)i=0;(1)i=0;while(i10)wh
16、ile(ix;(2)cinx;while while(x0 xx;cinx;功能:当输入的数据小于功能:当输入的数据小于0 0时,重复读数据。时,重复读数据。循环语句while计算从1到100的全部整数的平方和#includeusingnamespacestd;intmain()inti=100;intsum=0;while(i0)sum=sum+i*i;i-;printf(“sum=%dn”,sum);return0;循环语句while其次节while语句例例4.5 4.5 求求s=1+2+3s=1+2+3+n+n,当加到第几项时,当加到第几项时,s s的值会超过的值会超过10001000?
17、程序如下:程序如下:#include#include using namespace std;using namespace std;int main()int main()int n=0,s=0;int n=0,s=0;while(s=1000)while(s=1000)+n;+n;s+=n;s+=n;coutn;coutn;return 0;return 0;其次节while语句例例4.6 4.6 求两个正整数,的最大公约数。求两个正整数,的最大公约数。分析:求两个整数的最大公约数可以接受辗转相除法。以下是辗转相除法的算法:分别用分析:求两个整数的最大公约数可以接受辗转相除法。以下是辗转相
18、除法的算法:分别用m m,n n,r r表示被除数、除数、余数;表示被除数、除数、余数;1)1)求求m m除以除以n n的余数的余数r r;2)2)当当r!=0,r!=0,执行第执行第3)3)步;若步;若r=0r=0,则,则n n为最大公约数为最大公约数,算法结束。算法结束。3)3)将将n n的值赋给的值赋给m m,将,将r r的值赋给的值赋给n n;再求;再求m m除以除以n n的余数的余数r r。4)4)转到第转到第2)2)步步#include#include using namespace std;using namespace std;int main()int main()int m
19、,n,r;int m,n,r;cinmn;cinmn;r=m%n;r=m%n;while(r!=0)/while(r!=0)/也可以运用也可以运用 while(r),c+while(r),c+中中 非非0 0即真即真 m=n;m=n;n=r;n=r;r=m%n;r=m%n;cout cout最大公约数最大公约数=nendl;=n=51+1/2+1/3+1/n=5的最小的最小n n值。值。分析:此题不等式的左边是一个求和的算式,该和式中的数据项个数是未知的,也正是要分析:此题不等式的左边是一个求和的算式,该和式中的数据项个数是未知的,也正是要求出的。对于和式中的每个数据项,对应的通式为求出的。对
20、于和式中的每个数据项,对应的通式为1/i1/i,i=1i=1,2 2,nn。所以可接受循环累加的方法来计算出它的值。设循环变量为所以可接受循环累加的方法来计算出它的值。设循环变量为i i,它应从,它应从1 1起先取值,每次增起先取值,每次增加加1 1,直到和式的值不小于,直到和式的值不小于5 5为止,此时的为止,此时的i i值就是所求的值就是所求的n n。设累加变量为。设累加变量为s s,在循环体内把,在循环体内把1/i1/i的值累加到的值累加到s s上。上。依据以上分析,接受依据以上分析,接受whilewhile循环编写出程序如下:循环编写出程序如下:#include#include usi
21、ng namespace std;using namespace std;int main()int main()int i=0;int i=0;float s=0;float s=0;while(s5)/while(s5)/当当s s的值还未超过的值还未超过5 5时时 +i;+i;s+=1.0/i;s+=1.0/i;couti;couti;return 0;return 0;若接受若接受forfor循环来写,则如下所示:循环来写,则如下所示:#include#include using namespace std;using namespace std;int main()int main(
22、)int i;int i;float s=0;float s=0;for(i=1;s5;+i)for(i=1;s5;+i)s+=1.0/i;s+=1.0/i;couti-1;couti-1;return 0;return 0;其次节while语句例例4.84.8 数据统计数据统计 输入一些整数,求出它们的最小值、最大值和平均值(保留输入一些整数,求出它们的最小值、最大值和平均值(保留3 3位小数)。输入保证这些位小数)。输入保证这些数都是不超过数都是不超过10001000的整数。的整数。样例输入:样例输入:2 8 3 5 1 7 3 62 8 3 5 1 7 3 6 样例输出:样例输出:1 8
23、 4.3751 8 4.375【参考程序】【参考程序】#include#includeint main()int main()int x,n=0,min,max,s=0;int x,n=0,min,max,s=0;while(scanf(“%d”,&x)=1)while(scanf(“%d”,&x)=1)/当有输入的时候,表达式为真,即当有输入的时候,表达式为真,即=1=1,执行循环,执行循环 s+=x;s+=x;if(xmin)min=x;if(xmax)max=x;if(xmax)max=x;+n;+n;printf(%d%d%.3lfn,min,max,(double)s/n);prin
24、tf(%d%d%.3lfn,min,max,(double)s/n);return 0;return 0;其次节while语句 最终,我们来更细致地探讨一下输最终,我们来更细致地探讨一下输入输出。探讨对象就是经典的入输出。探讨对象就是经典的“A+B”“A+B”问问题:输入若干对整数,输出每对之和。假题:输入若干对整数,输出每对之和。假设每个整数不超过设每个整数不超过109109,一共不超过,一共不超过106106个个数对。数对。第第1 1种方法是:种方法是:#include#include int main()int main()int a,b;int a,b;while(scanf(%d%d
25、,&a,&b)=2)while(scanf(%d%d,&a,&b)=2)printf(%dn,a+b);printf(%dn,a+b);return 0;return 0;第第2 2种方法或许更加常用(你再也不种方法或许更加常用(你再也不用记住用记住%d%d、%lf%lf等恼人的占位符了):等恼人的占位符了):#include#include using namespace std;using namespace std;int main()int main()int a,b;int a,b;while(cin a b)while(cin a b)cout a+b endl;cout a+b
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第五 循环 结构 介绍 优秀 PPT
限制150内