[计算机软件及应用]第10讲 do-while语句for语句循环结构的嵌套
![[计算机软件及应用]第10讲 do-while语句for语句循环结构的嵌套_第1页](https://file7.zhuangpeitu.com/fileroot7/2022-7/12/2699116b-f77b-488c-802f-3edfe8e1543e/2699116b-f77b-488c-802f-3edfe8e1543e1.gif)
![[计算机软件及应用]第10讲 do-while语句for语句循环结构的嵌套_第2页](/images/s.gif)
![[计算机软件及应用]第10讲 do-while语句for语句循环结构的嵌套_第3页](/images/s.gif)
《[计算机软件及应用]第10讲 do-while语句for语句循环结构的嵌套》由会员分享,可在线阅读,更多相关《[计算机软件及应用]第10讲 do-while语句for语句循环结构的嵌套(35页珍藏版)》请在装配图网上搜索。
1、单击此处编辑母版标题样式,,,第十讲,while语句、do-while语句、for 语句 循环结构的嵌套,,5.1 while循环语句,由while语句构成的循环也称〞当〞循环。,,while循环的一般形式如下:,,while(表达式),,循环体语句,图,5.1 while,循环流程图,while语句的执行过程是:,,先计算while表达式的值,当表达式的值为非零时,便执行循环体语句,之后再计算该表达式的值,由此构成循环,直到有一次求得表达式的值为零时才结束循环,并继续执行循环体语句之外的后续语句。,图,5.1 while,循环流程图,while(表达式),,循环体语句,,例:,,k=0;,
2、,while (k<10),,{printf(“*〞);k++;},,注意:1)表达式不可省;表达式的值为真的时候,作循环;,,2)循环体语句,要能改变表达式的值,使其从真变到假;(为什么啦?)如果循环语句是多条,构成复合语句;,,执行过程:P50,,P51(1)(2)(3),,,说明:(1)while语句中的表达式可以是任意合法的C表达式。,,(2)如果循环体语句是复合语句,一定要用{ }括起来。,,(3) 在循环体语句中应该包含能够使循环趋于结束的操作,以防止出现死循环。,例5.1 编程求1+2+3+…+100的值。,这是一个求100个数的累加和问题。所加的加数从1变化到100,因此我们
3、可以在循环体中设计一个整型变量i,使它的初值为1,每循环一次使i的值增1,一直循环到i的值超过100为止,用这个方法就解决所需的加数问题。,,要解决求累加和的问题,还要再设计一个变量sum用来存放这100个数的和值,先求0+1的和并将其放在sum中,然后把sum中的数加上2再存放在sum中,依次类推。,,在这里,sum累加的过程要放在循环体中,由计算机来判断所加的数是否已经超过100。,,main(),,{ int i, sum;,,i=1; sum=0;,,while(,i<=100,),,,{,sum= sum + i,;,,,i++,;,,},,printf("sum=%d\n",
4、sum);,,},,,程序运行后的输出结果:,,sum=5050,例程序,求1+2+3+…+100的值,思考:P51例,,sum=sum+i*i sum<1000,,自己试写出该程序,,程序5-2:用π/4=1-1/3+1/5-1/7+1/9 -…公式求π的近似值,直到最后一项的绝对值小于10-6为止。,,此题的根本算法也是求累加和,但比例5-1稍为复杂。与例5-1比较,不同的是:,,〔1〕用分母来控制循环次数,假设用n存放分母的值,那么每累加一次n应当增2,每次累加的数不是整数,而是一个实数,因此n应当定义成float类型。,,〔2〕可以看成隔一项的加数是负数,假设用t来表示相加的每一
5、项,因此,每加一项之后,t的符号应当改变,这可用交替乘1和-1来实现。,3〕从以上求π的公式来看,不能决定n的最终值应该是多少;但可以用最后一项t〔1/n〕的绝对值小于10-6来作为循环的结束条件。,,程序如下:,,#include "" /*调用fabs函数时要求包含 文件*/,,main( ),,{ int s;,float n, t, pi;,,t=1.0; /*t中存放每项的值,初值为1 */,,pi=0; /* pi中存放所求的π的值,
6、初值为0*/,,n=1.0; /*n中存放每项分母*/,,s=1.0; /*s中存放每项分子,其值按公式在1和-1之间变化*/,,while ( fabs(t)>=1e-6),,{ pi=pi+t;,,,n+=2.0;,,s= -s; /*改变符号*/,,,t=s/n;,,},,pi=pi*4;,,printf("pi=%f\n",pi);,,},,程序执行后输出以下结果:,,,,小组讨论:,,1、程序5-3:求输入的某个数是否为素数。假设是,输出Y
7、ES,假设不是,输出NO。,,素数是指那些大于1,且除了1和它本身以外不能被其他任何数整除的数。如2、3、5、7、11、……都是素数;4、6、8、9、……那么不是素数。,,为了判断某数x是否为素数,最简单的方法是用2、3、4、…x-1,这些数逐个去除x,看能否除尽,只要能被其中某一个数除尽,x就不是素数;否那么,假设不能被任何一个数除尽,x就是素数。,实际上只要试除到,就已经可以说明x是否为素数了。这是因为如果小于等于的数都不能除尽x,那么大于的数也不可能除尽x。试除到,可以减少循环次数,提高程序的运行效率。,,程序代码如下:,,#include "",,main( ),,{ int
8、 i, x, yes, a;,,printf("Enter integer number : ");,,scanf ("%d",,yes=1;,,i=2;,,a=(int)sqrt ( (double) x);,,while( yes && i<=a),,{ if(x%i== 0) yes=0;,,i++ ;,,},,printf("%d ",x);,,if ( yes ) printf("YES\n");,,else printf("NO\n");,,},当x=2时,因i的初值2大于a,while循环根本不执行,yes仍保持为1,输
9、出的素数2;当x>2时,进入循环,假设x为素数,yes的值不变,仍为1,假设x能被2~的某个数整除,那么x不是素数,使yes的值变为0,并且立即退出循环。退出循环后,if的语句判断yes的值为1时,输出YES,否那么输出NO。,小组讨论:,,2、P53,迭代法,,,,,,,,,,,,,,,,,,,,5.3 用do-while语句构成的循环,由do-while语句构成的循环称为〞直到型〞循环,do-while语句的一般形式为:,,do,,循环体语句,,while(表达式);,do-while语句的执行过程是:先执行循环体语句,再求表达式的值,假设表达式的值为“真〞(非0数值)那么再执行循环体语句
10、,由此构成循环,直到表达式的值为“假〞 (数值0)时结束循环。如下图。,试将P51例5。1改为do-while语句结构,,,,注意点:P54,,,do-while语句,和,while语句,的,区别,在于do-while是,先,执行循环体语句,,,后,判断循环条件,,因此do-while至少要执行一次循环体。,,main(),,{ int i, sum;,,i=1; sum=0;,,do,,{ sum= sum+i;,,i++;,,}while(,i<=100,),;,,printf("sum=%d\n", sum);,,},用do-while语句改写例的程序,题目:求1+2+3+…+100
11、的值,注意,:,N_S流程图,的,直到型循环结构,的,循环条件,的描述方法与,C语言,的,do-while语句,的,循环条件,的测试方法,稍有不同,。,这里,一定要,有一个,分号,P54例5。4,,该数列变化的规律:,,除第一、二项外,后面的各项值为前面两项之和;,,位置号:1 2 3 4 5 6 7,,数列: 1 1 2 3 5 8 13,,f1+f2--->f3,,f1+f2--->f3,,f1+f2--->f3,,f1+f2--->f3,,图5-1 for循环运算过程,,5.4 for语句和用for语句构成的循环,for语句,的,一般
12、形式,为:,,,for,,(,表达式1,;,表达式2,;,表达式3,),,,,循环体语句,for循环语句,的,执行过程,是:,,(1) 计算”,表达式1,”的值。,,(2) 计算”,表达式2,”的值;,,若其值为,非零,,转至,步骤(3),;,,若其值为,零,,则转至,步骤(5),。,,(3) 执行一次,循环体语句,。,,(4) 计算”,表达式3,”;然后转向,步骤(2),,,构成循环,。,,(5),结束循环,,执行for循环之后的语句。,for语句的常规使用方法:,,“表达式1〞用来给循环变量赋初值或做一些初始工作;,,“表达式2〞用来作为判断循环是否结束的条件;,,“表达式3〞用来修改循环
13、变量的值,使得循环能够趋于结束。,,例如:,,for(k=0; k<10; k++) printf("*");,,以上for循环在一行上输出10个“*〞号。,,for语句的,常规,使用方法例P 56例,main() /*,程序1,*/,,{ int i, sum;,,for (,i=1,sum=0,;,i<=100,;,,i++,),,,sum= sum + i ;,,,printf("sum=%d\n", sum);,,},“,表达式1,”是逗号表达式,给循环变量赋初值,做一些,初始工作,准备累加!,判断,循环是否结束!,使,得,循环,能够,趋于结束。,从语法上来讲,三个表达式都可以是
14、任意合法的C表达式,各表达式之间用〞;〞隔开,并且这三个表达式都是任选项。,,例如:我们可以用for循环语句将例的程序改写为如下几种形式,它们都能正确地求出1+2+3+…+100的值。,for语句的,非常规,使用方法,main() /*程序2 */,,{ int i=1, sum=0;,,for (,;,i<=100; i++),,sum= sum + i ;,,printf(“sum=%d\n”, sum);,,},表达式1省略了!,main() /*程序3 */,,{ int i=1, sum=0;,,for (,;,i<=100,;,),,{,sum= sum + i;,,i+
15、+ ;,,,},,printf(“sum=%d\n”, sum);,,},循环体语句是复合语句,花括号不能省,!,表达式1和,表达式3,都省掉了!,for语句的非常规使用方法2,main() /*程序4 */,,{ int i=1, sum=0;,,for (,; ;,),,,{,sum= sum + i++ ;,,if i>100,goto,,pend,;,,,},,,pend:,printf(“sum=%d\n”, sum);,,},三个表达式,都被省掉了,!,,分隔符“,;,”不能省。,,由于没有了,表达式2,,用,goto语句,结束,循环。,main() /*程序5 */,,
16、{ int i, sum=0;,,for (,i=1,;,i<=100,;,sum=sum+i++,),;,,printf(“sum=%d\n”, sum);,,},循环体语句是一个空语句!,注意在,循环体语句,之前,不能有,分号,main(),,{ int i, sum=0;,,for (,i=1,;,i<=100,;,,i++,),;,,,sum= sum + i ;,,,printf("sum=%d\n", sum);,,},main(),,{ int i, sum=0;,,for (,i=1,;,i<=100,;,,i++,),,,;,,sum= sum + i ;,,,prin
17、tf("sum=%d\n", sum);,,},/,*前面两个程序的执行过程,,结果=101,*/,,main(),,{ int i, sum=0;,,for (,i=1,;,i<=100,;,,i++,),;,,,,sum= sum + i ;,,printf("sum=%d\n", sum);,,},即:循环体语句是一个,空语句,!,例5.4 编程计算多个圆的面积,本例要求计算,5个不同半径的圆面积,,且半径,值的变化,是,有规律,的,从,mm,开始按增,,mm,的规律递增,可,直接,用,半径r,作为for语句的,循环控制变量,,每,循环一次,使r的值,增0.5,,直到r大于为止。,m
18、ain( ),,{float r, s ,pi=3.1416;,,for(,r,; ; ),,,{,s=pi*r*r ;,,printf("r=%3.1fs=%f\n", r, s);,,,},,},,试改为:非常规for 结构,,变量,r,具有,双重功能,,它既是,循环控制变量,,又是,圆的半径值,,它的值由变化到,循环体共执行,5次,,当r增到时,条件表达式的值为,0,,从而,退出循环,。,5.5 循环结构的嵌套,,在一个循环语句的循环体内又完整地包含了另一个循环语句,称为循环嵌套。循环嵌套的书写采用缩进形式.,在编写程序时,,循环嵌套的书写,要采用,缩进形式,,如在例的程序中,,
19、内循环,中的语句应该,比,外循环,中的语句有规律地,向右缩进2~4列,。,例5.5 循环嵌套的应用--输出九九乘法表。,main ( ),,{int i, j;,,for(i=1; i<=9; i++),,,{,for(j=1; j<= i; j++),,,printf("%1d*%1d =%2d ", i, j , i*j);,,printf("\n");,,,},,},程序的运行结果为:,,1*1= 1,,2*1= 2 2*2= 4,,3*1= 3 3*2= 6 3*3= 9,,4*1= 4 4*2= 8 4*3=12 4*4=16,,5*1= 5 5*2=10 5
20、*3=15 5*4=20 5*5=25,,6*1= 6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36,,7*1= 7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49,,8*1= 8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64,,9*1= 9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81,例程序输出的九九乘法表,程序5-7:求n!,即计算1×2×3×…× n的值。
21、,,程序代码如下:,,main(),,{ int i ,s ,n ; /*变量s放置连乘的积*/,,s=1; /*注意:s的初值为1*/,,printf("Enter n : ");,,scanf("%d", /*给n读入值,n表示最后一个因子的值*/,,for(i=1; i<=n; i++) /*用n作为循环的终值*/,,s=s*i;,,printf("s=%d\n",s);,,},,以上程序执行时,假设给n输入5,变量i和s中值的变化如表5-1所示。,
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。