您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > C语言程序设计第5章 循环结构程序设计
返回本章首页1目录5.1循环结构程序设计的概述5.2用while语句实现循环结构程序设计5.3用do-while语句实现循环结构程序设计5.4用for语句实现循环结构程序设计5.5循环的嵌套5.6几种循环语句的比较5.7用break和continue语句提前结束循环5.8循环结构程序设计举例返回本章首页25.1循环结构程序设计概述1.实现循环的三种语句C语言提供了多种循环语句,可以组成各种不同形式的循环结构。1)用for语句:属于先判断后执行的当型循环结构;2)用while语句:属于先判断后执行的当型循环结构;可以解决任何循环结构的问题,但代码比用for语句多;3)用do-while语句:先执行后判断的当型结构,循环体至少被执行一次,比使用while语句先判断后执行结构少判断一次,执行效率提高。返回本章首页35.1循环结构程序设计概述2.循环结构程序的四个组成部分1)循环初始化部分:为循环做准备;2)循环控制部分:控制循环是否进行;3)循环体部分:重复循环的主体;4)循环修改部分:为下次循环做准备。返回本章首页45.2用while语句实现循环结构程序设计1.While语句的格式while(表达式)语句;或写成:while(表达式)语句;其中表达式是循环条件,语句为循环体。2.while语句的功能计算表达式的值,当值为真(非0)时,则重复执行循环体语句,直到表达式值为假时结束循环。当第一次判断表达式的值就为假时,则循环体语句一次也不被执行。返回本章首页55.2用while语句实现循环结构程序设计2.While语句的功能返回本章首页65.2用while语句实现循环结构程序设计【例5_1】用while语句求p=n!返回本章首页75.2用while语句实现循环结构程序设计【例5_1】用while语句求p=n!#includestdio.hintmain(){inti=1,p=1;//循环初始化部分while(i=5)//循环控制部分{p=p*i;//循环体语句i++;//循环修改部分}printf(5!=%d\n,p);return0;}返回本章首页85.2用while语句实现循环结构程序设计【例5_2】用while语句求返回本章首页95.2用while语句实现循环结构程序设计【例5_2】用while语句求#includestdio.hintmain(){inti=1,sum=0;//循环初始化部分while(i=100)//循环控制部分{sum=sum+i;//循环体语句i++;//循环修改部分}printf(%d\n,sum);return0;}返回本章首页105.2用while语句实现循环结构程序设计【例5_3】给一个正整数n(n≥2),用while循环结构判断它是否素数。分析:循环进行的条件是:i≤k和flag=0。因为在ik时,显然不必再去检查n是否能被整除,此外如果flag=1,就表示n已被某一个数整除过,肯定是非素数无疑,也不必再检查了。只有i≤k和flag=0两者同时满足才需要继续检查。循环体只有一个判断操作:判断n能否被i整除,如不能,则执行i=i+1,即i的值加1,以便为下一次判断作准备。如果在本次循环中n能被i整除,则令flag=1,表示n已被确定为非素数了,这样就不再进行下一次的循环了。如果n不能被任何一个i整除,则flag始终保持为0。因此,在结束循环后根据flag的值为0或1,分别输出n是素数或非素数的信息。返回本章首页115.2用while语句实现循环结构程序设计#includemath.h#includestdio.hvoidmain(){intn,k,i,flag;printf(请输入n:);scanf(“%d”,&n);k=sqrt(n);i=2;flag=0;while(i=k&&!flag)if(n%i==0)flag=1;elsei=i+1;if(!flag)printf(%disaprimenumber.\n,n);elseprintf(%disnotaprimenumber.\n,n);}返回本章首页125.2用while语句实现循环结构程序设计3.使用while语句注意事项1)while语句中的表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,甚至也可以是一个变量或是一个常量,只要表达式的值为真,即可继续循环。【例5_4】while语句中的表达式是算术表达式的情况。#includestdio.hvoidmain(){inta=0,n;printf(\ninputn:);scanf(%d,&n);while(n--)printf(%d,a++*2);}返回本章首页135.2用while语句实现循环结构程序设计2)循环体如包括有一个以上的语句,则必须用{}括起来,组成复合语句。【例5_7】给出两个正整数,求它们的最大公约数。求最大公约数可以用辗转相除法,也称欧几里德法。分析:以大数a作被除数,小的数b作为除数,相除后余数为r。如果r≠0,则将b=a,r=b,再进行一次相除,得到新的r。如果r仍不等于0,则重复上面过程,直到r=0为止。此时的b就是最大公约数。返回本章首页145.2用while语句实现循环结构程序设计#includestdio.hvoidmain(){inta,b,t,r;printf(请输入a:);scanf(%d,&a);printf(请输入b:);scanf(%d,&b);if(ab){t=a;a=b;b=t;}//保证a大于br=a%b;while(r){a=b;b=r;r=a%b;}printf(h.c.f.=%d\n,b);}返回本章首页155.3用do-while语句实现循环结构程序设计do-while语句可以实现循环体至少被执行一次的循环。1.do-while语句格式do语句;while(表达式);或写成:do语句;while(表达式);2.do-while语句功能先执行循环体语句,然后再判断表达式是否为真,如果为真,则继续循环;如果为假,则终止循环。因此,do-while循环至少要执行一次循环语句。返回本章首页165.3用do-while语句实现循环结构程序设计2.do-while语句功能返回本章首页175.3用do-while语句实现循环结构程序设计【例5_6】求,直到前后两项之差小于10-3为止(后一项不累加)。分析:n是某一项的分母,例如第3项的n是3。term在开始时是多项式第1项的值,先把它加到s中。然后n的值加1,term的值变成1/2,此时它代表第二项。如果此两项之差大于或等于10-3,则再执行循环体,把term值赋给term1.然后再累加到s中去。可以看出:程序中term1代表当前要累加的项,term代表下一项,如果这两项之差未超过10-3,就将下一项加到s中。返回本章首页185.3用do-while语句实现循环结构程序设计#includestdio.hvoidmain(){floats=0,term,term1;intn=1;term=1/n;do{term1=term;s=s+term1;n=n+1;term=1/n;}while(term1-term=10^-3);printf(“%f”,s);}返回本章首页195.3用do-while语句实现循环结构程序设计3.while和do-while循环比较while和do-while结构都为当型循环结构,都是当条件成立时执行循环体;不同的是,前者为先判断,循环体执行次数大于或等于0;后者为后判断,循环体执行次数大于或等于1。【例5_7】while和do-while循环比较。1)while循环#includestdio.hvoidmain(){intsum=0,i;printf(输入i:);scanf(%d,&i);while(i=10){sum=sum+i;i++;}printf(sum=%d\n,sum);}返回本章首页205.3用do-while语句实现循环结构程序设计2)do-while循环#includestdio.hvoidmain(){intsum=0,i;printf(输入i:);scanf(%d,&i);do{sum=sum+i;i++;}while(i=10);printf(sum=%d\n,sum);}返回本章首页215.4用for语句实现循环结构程序设计1.for语句格式for(表达式1;表达式2;表达式3)语句;或写成:for(表达式1;表达式2;表达式3)语句;2.for语句功能它的执行过程如下:1)先求解表达式1。2)求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面第3步;若其值为假(0),则结束循环,转到第5步。3)求解表达式3。4)转回上面第2步继续执行。5)循环结束,执行for语句下面的一个语句。返回本章首页225.4用for语句实现循环结构程序设计3.for语句应用形式for语句最简单的应用形式也是最容易理解的形式如下:for(循环变量赋初值;循环控制条件;循环变量增量)语句;循环变量赋初值总是一个赋值语句,它用来给循环控制变量赋初值;循环控制条件是一个关系表达式,它决定什么时候退出循环;循环变量增量,定义循环控制变量每循环一次后按什么方式变化。这三个部分之间用分号隔开。例如:for(i=a;i=b;i=i+c)循环语句;先给i赋初值a,然后判断i是否小于等于终值b,若是,则执行循环体语句,之后i值增加c。再重新判断条件,直到条件为假,即ib时,结束循环。返回本章首页235.4用for语句实现循环结构程序设计4.for语句转换为while语句在C语言中,for语句使用最为灵活,它完全可以取代while语句。对于for循环中语句的一般形式,可以用如下的while循环形式替代:表达式1;while(表达式2){语句;表达式3;}返回本章首页245.4用for语句实现循环结构程序设计5.for语句使用注意事项1)for循环中的表达式1(循环变量赋初值)、表达式2(循环条件)和表达式3(循环变量增量)都是可选项,即可以缺省,但分号不能缺省。2)表达式1可以是设置循环变量初值的赋值表达式,也可以是其他表达式。3)表达式1和表达式3可以是简单表达式也可以是逗号表达式。4)表达式2一般是关系表达式或逻辑表达式,但也可是数值表达式或常量、变量,只要其值非零,就执行循环体。返回本章首页255.4用for语句实现循环结构程序设计6.for语句使用举例【例5_8】用for语句求s=1+2+3+……+100#includestdio.hvoidmain(){ints=0,i;for(i=1;i=100;i++)s=s+i;printf(“%d\n”,s);}返回本章首页265.4用for语句实现循环结构程序设计【例5_9】用for语句求n的阶乘。#includestdio.hvoidmain(){inti,n,p=1;printf(“输入n:”);scanf(“%d”,&n);for(i=1;i=n;i++)p=p*i;printf(“%d的阶乘=%d\n”,n,p);}返回本章首页275.4用for语句实现循环结构程序设计【例5_10】猴子吃桃问题。这也是一个有趣的数学问题。小猴子第一天摘下若干个桃子,当即吃掉一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上猴子想再吃时,见到只剩下一个桃子了。问第一天猴子共摘了多少个桃子。这是一个递推问题,先从最后一天的桃子推出倒数第二天的桃子,再从倒数第二天的桃子推出倒数第三天的桃子……,但它属于倒推,即从最后的结果倒推出原始的状况。设第n天桃子数为xn,已知它是前一天的桃子数xn-1的1/2再减去1。即xn=xn-1/2-1或xn-1=(xn+1)×2利用此公式可以从第n天的桃子数推出前一天的桃子数。递推的初始条件为:x10=1返回
本文标题:C语言程序设计第5章 循环结构程序设计
链接地址:https://www.777doc.com/doc-3375552 .html