do-while语句for语句循环结构的嵌套.ppt

do-while语句for语句循环结构的嵌套.ppt

ID:51966603

大小:467.05 KB

页数:37页

时间:2020-03-26

上传者:U-25935
do-while语句for语句循环结构的嵌套.ppt_第1页
do-while语句for语句循环结构的嵌套.ppt_第2页
do-while语句for语句循环结构的嵌套.ppt_第3页
do-while语句for语句循环结构的嵌套.ppt_第4页
do-while语句for语句循环结构的嵌套.ppt_第5页
资源描述:

《do-while语句for语句循环结构的嵌套.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

第十讲while语句、do-while语句、for语句循环结构的嵌套 5.1while循环语句由while语句构成的循环也称”当”循环。while循环的一般形式如下:while(表达式)循环体语句图5.1while循环流程图 while语句的执行过程是:先计算while表达式的值,当表达式的值为非零时,便执行循环体语句,之后再计算该表达式的值,由此构成循环,直到有一次求得表达式的值为零时才结束循环,并继续执行循环体语句之外的后续语句。图5.1while循环流程图 while(表达式)循环体语句例:k=0;while(k<10){printf(“*”);k++;}注意:1)表达式不可省;表达式的值为真的时候,作循环;2)循环体语句,要能改变表达式的值,使其从真变到假;(为什么啦?)如果循环语句是多条,构成复合语句;执行过程:P50P51(1)(2)(3) 说明:(1)while语句中的表达式可以是任意合法的C表达式。(2)如果循环体语句是复合语句,一定要用{}括起来。(3)在循环体语句中应该包含能够使循环趋于结束的操作,以避免出现死循环。 例5.1编程求1+2+3+…+100的值。这是一个求100个数的累加和问题。所加的加数从1变化到100,因此我们可以在循环体中设计一个整型变量i,使它的初值为1,每循环一次使i的值增1,一直循环到i的值超过100为止,用这个办法就解决所需的加数问题。要解决求累加和的问题,还要再设计一个变量sum用来存放这100个数的和值,先求0+1的和并将其放在sum中,然后把sum中的数加上2再存放在sum中,依次类推。在这里,sum累加的过程要放在循环体中,由计算机来判断所加的数是否已经超过100。 main(){inti,sum;i=1;sum=0;while(i<=100){sum=sum+i;i++;}printf("sum=%d ",sum);}程序运行后的输出结果:sum=5050例5.3程序,求1+2+3+…+100的值 思考:P51例5.1sum=sum+i*isum<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来表示相加的每一项,因此,每加一项之后,t的符号应当改变,这可用交替乘1和-1来实现。 3)从以上求π的公式来看,不能决定n的最终值应该是多少;但可以用最后一项t(1/n)的绝对值小于10-6来作为循环的结束条件。程序如下:#include"math.h"/*调用fabs函数时要求包含math.h文件*/main(){ints; floatn,t,pi;t=1.0;/*t中存放每项的值,初值为1*/pi=0;/*pi中存放所求的π的值,初值为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 ",pi);}程序执行后输出以下结果:pi=3.141397 小组讨论:1、程序5-3:求输入的某个数是否为素数。若是,输出YES,若不是,输出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"math.h"main(){inti,x,yes,a;printf("Enterintegernumber:");scanf("%d",&x); 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 ");elseprintf("NO ");} 当x=2时,因i的初值2大于a,while循环根本不执行,yes仍保持为1,输出的素数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数值)则再执行循环体语句,由此构成循环,直到表达式的值为“假”(数值0)时结束循环。如图所示。 试将P51例5。1改为do-while语句结构注意点:P54do-while语句和while语句的区别在于do-while是先执行循环体语句,后判断循环条件,因此do-while至少要执行一次循环体。 main(){inti,sum;i=1;sum=0;do{sum=sum+i;i++;}while(i<=100);printf("sum=%d ",sum);}用do-while语句改写例5.3的程序题目:求1+2+3+…+100的值注意:N_S流程图的直到型循环结构的循环条件的描述方法与C语言的do-while语句的循环条件的测试方法稍有不同。这里一定要有一个分号 P54例5。4该数列变化的规律:除第一、二项外,后面的各项值为前面两项之和;位置号:1234567数列:11235813f1+f2--->f3f1+f2--->f3f1+f2--->f3f1+f2--->f3图5-1for循环运算过程 5.4for语句和用for语句构成的循环for语句的一般形式为:for(表达式1;表达式2;表达式3)循环体语句for循环语句的执行过程是:(1)计算”表达式1”的值。(2)计算”表达式2”的值;若其值为非零,转至步骤(3);若其值为零,则转至步骤(5)。(3)执行一次循环体语句。(4)计算”表达式3”;然后转向步骤(2),构成循环。(5)结束循环,执行for循环之后的语句。 for语句的常规使用方法:“表达式1”用来给循环变量赋初值或做一些初始工作;“表达式2”用来作为判断循环是否结束的条件;“表达式3”用来修改循环变量的值,使得循环能够趋于结束。例如:for(k=0;k<10;k++)printf("*");以上for循环在一行上输出10个“*”号。 for语句的常规使用方法例P56例5.5main()/*程序1*/{inti,sum;for(i=1,sum=0;i<=100;i++)sum=sum+i;printf("sum=%d ",sum);}“表达式1”是逗号表达式给循环变量赋初值做一些初始工作,准备累加!判断循环是否结束!使得循环能够趋于结束。 从语法上来讲,三个表达式都可以是任意合法的C表达式,各表达式之间用”;”隔开,并且这三个表达式都是任选项。例如:我们可以用for循环语句将例5.3的程序改写为如下几种形式,它们都能正确地求出1+2+3+…+100的值。for语句的非常规使用方法main()/*程序2*/{inti=1,sum=0;for(;i<=100;i++)sum=sum+i;printf(“sum=%d ”,sum);}表达式1省略了!main()/*程序3*/{inti=1,sum=0;for(;i<=100;){sum=sum+i;i++;}printf(“sum=%d ”,sum);}循环体语句是复合语句,花括号不能省!表达式1和表达式3都省掉了! for语句的非常规使用方法2main()/*程序4*/{inti=1,sum=0;for(;;){sum=sum+i++;ifi>100gotopend;}pend:printf(“sum=%d ”,sum);}三个表达式都被省掉了!分隔符“;”不能省。由于没有了表达式2,用goto语句结束循环。main()/*程序5*/{inti,sum=0;for(i=1;i<=100;sum=sum+i++);printf(“sum=%d ”,sum);}循环体语句是一个空语句! 注意在循环体语句之前不能有分号main(){inti,sum=0;for(i=1;i<=100;i++);sum=sum+i;printf("sum=%d ",sum);}main(){inti,sum=0;for(i=1;i<=100;i++);sum=sum+i;printf("sum=%d ",sum);}/*前面两个程序的执行过程,结果=101*/main(){inti,sum=0;for(i=1;i<=100;i++);sum=sum+i;printf("sum=%d ",sum);}即:循环体语句是一个空语句! 例5.4编程计算多个圆的面积本例要求计算5个不同半径的圆面积,且半径值的变化是有规律的,从0.5mm开始按增mm的规律递增,可直接用半径r作为for语句的循环控制变量,每循环一次使r的值增0.5,直到r大于2.5为止。main(){floatr,s,pi=3.1416;for(r=0.5;r<=2.5;r+=0.5){s=pi*r*r;printf("r=%3.1fs=%f ",r,s);}}试改为:非常规for结构变量r具有双重功能,它既是循环控制变量,又是圆的半径值,它的值由0.5变化到2.5,循环体共执行5次,当r增到3.0时,条件表达式r<=2.5的值为0,从而退出循环。 5.5循环结构的嵌套在一个循环语句的循环体内又完整地包含了另一个循环语句,称为循环嵌套。循环嵌套的书写采用缩进形式. 在编写程序时,循环嵌套的书写要采用缩进形式,如在例5.5的程序中,内循环中的语句应该比外循环中的语句有规律地向右缩进2~4列。例5.5循环嵌套的应用--输出九九乘法表。main(){inti,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++)printf("%1d*%1d=%2d",i,j,i*j);printf(" ");}} 程序的运行结果为:1*1=12*1=22*2=43*1=33*2=63*3=94*1=44*2=84*3=124*4=165*1=55*2=105*3=155*4=205*5=256*1=66*2=126*3=186*4=246*5=306*6=367*1=77*2=147*3=217*4=287*5=357*6=427*7=498*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=649*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81例5.5程序输出的九九乘法表 程序5-7:求n!,即计算1×2×3×…×n的值。程序代码如下:main(){inti,s,n;/*变量s放置连乘的积*/s=1;/*注意:s的初值为1*/printf("Entern:");scanf("%d",&n);/*给n读入值,n表示最后一个因子的值*/for(i=1;i<=n;i++)/*用n作为循环的终值*/s=s*i;printf("s=%d ",s);} 以上程序执行时,若给n输入5,变量i和s中值的变化如表5-1所示。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭