C语言循环语句ppt课件.ppt
经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用第第6章章 循环结构程序设计循环结构程序设计郭郭瑞瑞经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用主要内容主要内容6.1循环语句概述循环语句概述6.2while语句语句6.3直到型循环直到型循环do-while语句语句6.4for语句语句6.5break语句与语句与continue语句语句6.6应用举例应用举例经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用6.1循环语句概述循环语句概述求1100的累计和。根据已有的知识,可以用“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的累计和。根据已有的知识,单独实现每一步都不难。但是,由于需要经常使用这种重复计算结构(称为循环结构),C语言提供了3条循环语句来实现,以简化、并规范循环结构程序设计。在语言中,可用以下语句实现循环:(1)用for语句。(2)用do-while语句。(3)用while语句。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用(4)用goto语句和if语句构成循环。使用goto语句实现求解1100累计和的程序可以如下:main()intn=1,sum=0;loop:sum+=n;n+;if(n=100)gotoloop;printf(“sum=%dn”,sum);其中“loop:”为语句标号(格式:标号:语句行),其命名遵循标识符命名规则。goto语句格式:goto标号,功能为:使系统转向标号所在的语句行执行。注意注意:结构化程序设计方法,主张限制使用goto语句。因为滥用goto语句,将会导致程序结构无规律、可读性差。另外,从功能上说,for语句可完全代替当型循环语句while,所以该语句也不是必需的。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用6.2while语句语句while语句是支持语句是支持“当型当型”循环控循环控制结构的语句制结构的语句:一般格式为:一般格式为:while(表达式表达式)语句语句注意:语句部分可以是一个语句,注意:语句部分可以是一个语句,也可以是多个语句。若有多个语句,也可以是多个语句。若有多个语句,则要用大括号则要用大括号“”将多个语句括将多个语句括起来构成复合语句。起来构成复合语句。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用执行过程:1)求解表达式。如果其值为非0,转2);否则转3)。2)执行循环体语句组,然后转1)。3)执行while语句的下一条。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用案例案例用while语句求1100的累计和。main()inti=1,sum=0;/*初始化循环控制变量i和累计器sum*/while(i=100)sum+=i;/*实现累加*/i+;/*循环控制变量i增1*/printf(“sum=%dn”,sum);程序运行情况如下:sum=5050经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用while语句的特点是先判断表达式的值,然后才决定是语句的特点是先判断表达式的值,然后才决定是否执行循环体。如果一开始表达式的值就是否执行循环体。如果一开始表达式的值就是0,那么循,那么循环体一次也不执行。例如程序段环体一次也不执行。例如程序段i=10;while(i3)printf(“i=%dn”,i);在这个在这个while语句中循环体一次也不执行。语句中循环体一次也不执行。注意:当表达式的值恒为非注意:当表达式的值恒为非“0”时,则表示循环条件时,则表示循环条件永远成立,循环就会无休止地执行下去,称这种情况永远成立,循环就会无休止地执行下去,称这种情况称为称为“死循环死循环”,在程序设计中必须设法排除。,在程序设计中必须设法排除。例如例如:while(10)经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用6.3直到型循环直到型循环do-while语句语句Dowhile结构:结构:Do语句语句While(表达式)表达式)先执行语句先执行语句;计算表达式的值计算表达式的值.根据其值判断根据其值判断,为真为真(非非0)时时,返回返回重新执行重新执行;根据表达式判断根据表达式判断,其值为假其值为假(即即0)时时,结束结束do-while语句语句,执行其后继语句执行其后继语句do-while语句和语句和while语句基本相似语句基本相似,执行执行do-while语句时语句时,它的循环体语句最少执行它的循环体语句最少执行一次一次,而而while语句的循环体语句可能一次语句的循环体语句可能一次也不被执行。当也不被执行。当while后面的表达式的值后面的表达式的值第一次为第一次为“真真”时时,两种循环结构得到的两种循环结构得到的结果相同。否则结果相同。否则,二者结果不同。二者结果不同。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用案例案例用do-while语句求解1100的累计和。main()inti=1,sum=0;/*定义并初始化循环控制变量,以及累计器*/dosum+=i;/*累加*/i+;while(i=100);/*循环继续条件:i=100*/printf(“sum=%dn”,sum);do-while语句比较适用于处理:不论条件是否成立,先执行1次循环体语句组的情况。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用6.4for语句语句foror语句的一般形式:语句的一般形式:for(for(表达式表达式1 1;表达式表达式2 2;表达式表达式3 3;);)语句组语句组 其中:其中:表达式表达式1 1循环初始化表达式,主要作用是对循环变量循环初始化表达式,主要作用是对循环变量置初值。置初值。表达式表达式2 2控制是否继续循环的条件表达式,为真则继控制是否继续循环的条件表达式,为真则继续循环,否则跳出循环。续循环,否则跳出循环。表达式表达式3 3对循环控制变量增量或减量的表达式。对循环控制变量增量或减量的表达式。语句语句循环体,循环过程中将被重复执行。循环体,循环过程中将被重复执行。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用在3条循环语句中,for语句最为灵活,不仅可用于循环次数已经确定的情况,也可用于循环次数虽不确定、但给出了循环继续条件的情况。案例案例求1100的累计和。main()inti,sum=0;/*将累加器sum初始化为0*/for(i=1;i=100;i+)sum+=i;/*实现累加*/printf(sum=%dn,sum);程序运行情况如下:sum=5050经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用几点说明几点说明:1.for语句语句for(i=0,j=1;jn∈i+,j+)中的表达式可中的表达式可以是任意表达式,如逗号表达式,可同时对多个变量以是任意表达式,如逗号表达式,可同时对多个变量赋初值及修改值。赋初值及修改值。例如例如:for(i=0,j=1;jn∈i+,j+);for(i=0,j=100;i+,i=j;j-)k=i+j;2.for语句中的三个表达式可以省略,但分号不能省。省语句中的三个表达式可以省略,但分号不能省。省略表达式略表达式1,例如例如:i=1;for(;i4;i+)printf(“%dn”,i);与与for(i=1;i4)break;5.若三个表达式全省略。若三个表达式全省略。例如例如:for(;)语句语句等价于等价于while(1)语句语句注意:注意:for(;);是一个死循环语句。是一个死循环语句。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用6.对对for语句的功能完全可以用语句的功能完全可以用while语句来实现。语句来实现。例如:例如:for(表达式表达式1;表达式表达式2;表达式表达式3)语句语句等价于等价于:表达式表达式1;while(表达式表达式2)语句语句表达式表达式3;7.表达式表达式部分是一个逻辑量,除一般的关系(或逻辑)表达式外,也允许是数值(或字符)表达式。例:for(i=0;(c=getchar()!=n;i+=c)经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用案例案例求n的阶乘n!(n!=1*2*n)。main()inti,n;longfact=1;/*将累乘器fact初始化为1*/printf(“Inputn:”);scanf(“%d”,&n);for(i=1;i=3),即从第3个数开始,每个数等于前2个数之和.main()longintf1=1,f2=1;/*定义并初始化数列的头2个数*/inti=1;/*定义并初始化循环控制变量i*/for(;i=20;i+)/*1组2个,20组40个数*/printf(“%15ld%15ld”,f1,f2);/*输出当前的2个数*/if(i%2=0)printf(“n”);/*输出2次(4个数),换行*/f1+=f2;f2+=f1;/*计算下2个数*/经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用例例输出10100之间的全部素数。所谓素数n是指,除1和n之外,不能被2(n-1)之间的任何整数整除。算法设计要点:算法设计要点:(1)显然,只要设计出判断某数n是否是素数的算法,外面再套一个for循环即可。(2)判断某数n是否是素数的算法:根据素数的定义,用2(n-1)之间的每一个数去整除n,如果都不能被整除,则表示该数是一个素数。判断一个数是否能被另一个数整除,可通过判断它们整除的余数是否为0来实现。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用参考源程序如下:#includestdio.hvoidmain()inti=11,j,counter=0;for(;i=100;i+=2)/*外循环:为内循环提供一个整数i*/for(j=2;j=i-1;j+)/*内循环:判断整数i是否是素数*/if(i%j=0)/*i不是素数*/break;/*强行结束内循环,执行下面的if语句*/if(counter%10=0)/*每输出10个数换一行*/printf(n);if(j=i)/*整数i是素数:输出,计数器加1*/printf(%6d,i);counter+;printf(n);经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用例:输入任意两个整数,求其最大公约数。分析:假设输入两个整数分别是和,最大公约数肯定位于之间(包含和)。所以用和依次除以8,7,6,5,4,3,2,1,最先能够整除的数,则为最大公约数。显然当除到时,后边的3,2,1就无需再除,循环中止,最大公约数为4。main()inta,b,min,i;printf(请输入整数请输入整数a,b:);scanf(%d,%d,&a,&b);min=(a=1;i-)if(a%i=0&b%i=0)break;printf(%d和和%d的最大公的最大公约数为约数为%d,a,b,i);经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用例例:求整数:求整数a和和b的最小公倍数的最小公倍数i。如果如果i为为a和和b的最小公倍数,则必能被的最小公倍数,则必能被a和和b整除,同时必须是自然数,所以整除,同时必须是自然数,所以其取值范围为其取值范围为1-。方法一方法一i从从1开始,依次增加开始,依次增加1,直到第一个能被,直到第一个能被a和和b整除为止,整除为止,这个这个i就是就是a和和b的最小公倍数。于是可编制程序如下:的最小公倍数。于是可编制程序如下:main()inta,b,i;printf(请输入两个整数:请输入两个整数:a,b);scanf(%d,%d,&a,&b);i=0;while(1)i+;if(i%a=0)if(i%b=0)printf(最小公倍数为:最小公倍数为:%dn,i);break;经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用方法二方法二令令i从从a开始,而不是从开始,而不是从1开始,使开始,使i每每次增加次增加a而不是增加而不是增加1,这就保证了,这就保证了i总是总是a的倍数。因此,每次只要判断的倍数。因此,每次只要判断i能否被能否被b整整除就可以了。一旦判断成立,除就可以了。一旦判断成立,i就是就是a和和b的的最小公倍数。程序如下:最小公倍数。程序如下:main()inta,b,i;printf(请输入两个整数:请输入两个整数:a,b);scanf(%d,%d,&a,&b);i=0;while(1)i+=a;if(i%b=0)printf(最小公倍数为:最小公倍数为:%dn,i);break;经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用作业:1.用/41-1/3+1/5-1/7+公式求的近似值,直到某一项的绝对值小于106为止.2.输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。3.猴子吃桃子问题,猴子第一天摘下若干个桃子,当即吃掉一半,又多吃一个;以后每天早上都吃了前一天省下的一半零一个,到第10天早上再想吃时,就只省一个桃子了。求第一天共摘了多少个桃子。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用4.用牛顿迭代法求迭代公式为:n+1=(n+/n)要求迭代的精度满足|n+1n|0.00001。如果第20次迭代之后仍未达到精度要求,也停止计算。