C语言循环结构_第1页
C语言循环结构_第2页
C语言循环结构_第3页
C语言循环结构_第4页
C语言循环结构_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、新编c语言程序设计教程 清华大学出版社周二强 软件学院 计算机科学与工程系配套视频:配套视频: 博客:博客: 5章章 循环结构循环结构5.1 while5.1 while循环结构循环结构5.1.1 while循环结构分析 5.1.2 while循环结构用法5.2 for5.2 for循环结构循环结构5.2.1 for循环结构分析5.2.2 for5.2.2 for循环结构用法循环结构用法5.3 break5.3 break语句和语句和continuecontinue语句语句5.4 5.4 循环的嵌套循环的嵌套5.5 do-while5.5 do-while循环结构循环结构5.6 5.6 典型例

2、题典型例题新编c语言程序设计教程5.1.1 while5.1.1 while循环结构分析循环结构分析whilewhile循环结构的一般形式如下:循环结构的一般形式如下:whilewhile(表达式)(表达式) 语句语句其中表达式的值为逻辑值,或为真(非其中表达式的值为逻辑值,或为真(非0 0),或为假),或为假(0 0),表达式又被称为循环控制表达式。语句可以是单),表达式又被称为循环控制表达式。语句可以是单条语句或复合语句,又被称为循环体。条语句或复合语句,又被称为循环体。新编c语言程序设计教程while循环结构执行流程whilewhile循环结构的执行流程如下:循环结构的执行流程如下:第一

3、步:求出表达式的值,如果值为假,执行第三步;第一步:求出表达式的值,如果值为假,执行第三步;如果为真,执行第二步;如果为真,执行第二步;第二步:先执行循环体,再转到第一步;第二步:先执行循环体,再转到第一步;第三步:退出第三步:退出whilewhile循环结构,循环结构,whilewhile循环结构执行完毕;循环结构执行完毕;新编c语言程序设计教程循环体重复执行多少次呢?以下面的以下面的whilewhile循环结构为例。循环结构为例。while(iwhile(i 0) 0) printfprintf(* *););循环控制表达式中的变量被称为循环变量。循环体的执循环控制表达式中的变量被称为循环

4、变量。循环体的执行次数显然和循环变量的值密切相关。行次数显然和循环变量的值密切相关。想利用想利用whilewhile循环结构打印出循环结构打印出5 5个个“* *”号时需要控制循号时需要控制循环变量的值,环变量的值,包括循环体开始前循环变量的值(初值)和循环体中循包括循环体开始前循环变量的值(初值)和循环体中循环变量的值的变化。环变量的值的变化。 新编c语言程序设计教程例5-1分析下面while循环结构的执行情况新编c语言程序设计教程例5-1分析下面while循环结构的执行情况return新编c语言程序设计教程5.1.2 while5.1.2 while循环结构用法循环结构用法例例5-2 5-

5、2 计算计算1+2+3+1+2+3+100+100的和的和1+21+2+3+4+5+3+4+5= =3+33+3+4+5+4+5= =6+46+4+5+5= =10+510+5=15=15把和(把和(sumsum)的初值设为)的初值设为1 1时,上面的计算过程其实是重时,上面的计算过程其实是重复地把和与每一项(复地把和与每一项(i i)相加作为新的和,即)相加作为新的和,即sum=sum=sum+isum+i, ,其中项其中项i i从从2 2重复到重复到5 5,相应的,相应的whilewhile循环结构为:循环结构为:新编c语言程序设计教程例5-2 计算1+2+3+100的和新编c语言程序设计

6、教程分析:输入分析:输入23522352时,输出时,输出1212(2+5+3+22+5+3+2), ,本质上也是连加同例本质上也是连加同例5-25-2,不同之处在于重复加时需先求出,不同之处在于重复加时需先求出每一项。步骤如下:每一项。步骤如下:第一步:求出正整数第一步:求出正整数n n个位上的数字个位上的数字m m;第二步:和(第二步:和(sumsum)与)与m m相加作为新的和;相加作为新的和;第三步:第三步:n n缩小缩小1010倍;倍;第四步:重复第一步;第四步:重复第一步;什么条件下停止循环呢?什么条件下停止循环呢?n n变为变为0 0,因此循环重复执行的条,因此循环重复执行的条件为

7、件为n 0n 0例5-3 输入一个正整数,输出各位上的数字和(与例3-11比较)新编c语言程序设计教程例5-3 输入一个正整数,输出各位上的数字和。新编c语言程序设计教程例5-4 一百个僧人分一百个馍,大僧每人分三个,小僧三人分一个,正好分完。问大小僧各有几人?分析:用穷举法,即依次列举大僧人数所有可能的取值,分析:用穷举法,即依次列举大僧人数所有可能的取值,并判定值是否为问题的解。并判定值是否为问题的解。大僧人数大僧人数i i可能的取值为从可能的取值为从1 1到到3333,可以用循环一一检验,可以用循环一一检验并最终找出解。并最终找出解。i i为解时,为解时,i i * * 3 + (100

8、 - i) / 3 3 + (100 - i) / 3的值应为的值应为100100,反之,反之如果此条件成立,则如果此条件成立,则i i为解。为解。return新编c语言程序设计教程5.2.1 for5.2.1 for循环结构分析循环结构分析通过通过whilewhile循环结构的学习可知,典型的循环结构有循环结构的学习可知,典型的循环结构有3 3个个特点:特点:设置循环变量的初值、检测循环条件和修正循环变量。设置循环变量的初值、检测循环条件和修正循环变量。循环变量的初值通常在循环结构的前面设置,且仅设置循环变量的初值通常在循环结构的前面设置,且仅设置一次。执行循环结构时会检测循环条件,而循环变

9、量一般一次。执行循环结构时会检测循环条件,而循环变量一般在循环体中修正。只要循环条件为真执行了循环体,循环在循环体中修正。只要循环条件为真执行了循环体,循环变量就会被修正。变量就会被修正。为了使循环结构更紧凑,更优雅,为了使循环结构更紧凑,更优雅,c c语言提供了语言提供了forfor循环循环结构。结构。新编c语言程序设计教程for循环结构的一般形式for(for(表达式表达式1 1;表达式;表达式2 2;表达式;表达式3)3) 语句;语句;新编c语言程序设计教程for循环结构的一般形式for(for(表达式表达式1 1;表达式;表达式2 2;表达式;表达式3)3) 语句;语句;其中,表达式其

10、中,表达式1 1的作用通常是设置循环变量的初值,仅的作用通常是设置循环变量的初值,仅执行一次。执行一次。表达式表达式2 2就是循环控制表达式,为真时执行循环体,为就是循环控制表达式,为真时执行循环体,为假时退出假时退出forfor循环。循环。表达式表达式3 3用于修正循环变量的值,执行完循环体,再次用于修正循环变量的值,执行完循环体,再次检测循环控制表达式的值之前执行。检测循环控制表达式的值之前执行。新编c语言程序设计教程例5-5用for循环结构实现例5-4。新编c语言程序设计教程注意:注意:forfor循环结构中的表达式循环结构中的表达式1 1和表达式和表达式3 3可以分别或一起省可以分别或

11、一起省略,但是相应的略,但是相应的; ;号不能省略。省略的表达式默认为空语号不能省略。省略的表达式默认为空语句。因此句。因此forfor( ; ;表达式表达式2 2; )与)与whilewhile(表达式(表达式2 2)等价。)等价。表达式表达式2 2也可以省略,不过省略后的表达式默认为真,也可以省略,不过省略后的表达式默认为真,即此时的即此时的forfor循环结构为循环结构为“死循环死循环”。forfor( ; ; ; ; )与)与whilewhile(1 1)等价。)等价。表达式表达式1 1和表达式和表达式3 3可为逗号表达式。如例可为逗号表达式。如例5-25-2可用如下可用如下forfo

12、r循环结构实现。循环结构实现。for(ifor(i=2, sum=1; i=100; +i)=2, sum=1; i=100; +i) sum sum += i;+= i;。return新编c语言程序设计教程5.2.2 for循环结构用法例例5-6 5-6 输出输出100100以内奇数之和与偶数之和。以内奇数之和与偶数之和。新编c语言程序设计教程例5-7 输入两个正整数m和n ,求它们的最小公倍数。分析:用穷举法。循环变量分析:用穷举法。循环变量i i的可能取值为:的可能取值为:m, 2m, 2* *m, m, 3 3* *m, ., nm, ., n* *m m。新编c语言程序设计教程例5-

13、8 斐波那契数列的一般项 fn定义如下:输出它的前输出它的前3030项,每行输出项,每行输出5 5项;项;分析:数列的项依次分析:数列的项依次1 1,1 1,2 2,3 3,5 5,8 8,从第,从第3 3项开始计算过程如下表。项开始计算过程如下表。新编c语言程序设计教程例5-8 斐波那契数列return新编c语言程序设计教程5.3 break5.3 break语句和语句和continuecontinue语句语句程序程序5-75-7出现逻辑错误的原因在于找到最小公倍数后没出现逻辑错误的原因在于找到最小公倍数后没有及时终止循环。循环执行期间当满足了某种条件需要立有及时终止循环。循环执行期间当满足

14、了某种条件需要立即终止循环的执行时可以采用多种方法,其中使用即终止循环的执行时可以采用多种方法,其中使用breakbreak语句最方便。语句最方便。breakbreak语句在前面用来终止语句在前面用来终止switchswitch结构的执结构的执行,当循环执行到行,当循环执行到breakbreak语句时循环结构也将立即退出执语句时循环结构也将立即退出执行。行。在程序在程序5-75-7的循环结构中加一条的循环结构中加一条breakbreak语句就可以排除逻语句就可以排除逻辑错误。辑错误。新编c语言程序设计教程例5-9 判断正整数n是否为质数。分析:质数只有分析:质数只有1 1和它本身两个约数,和它

15、本身两个约数,1 1不是质数。判断不是质数。判断n n是否为质数可分两步。是否为质数可分两步。第一步:依次用取值从第一步:依次用取值从2 2到到n-1n-1的循环变量的循环变量i i整除整除n n,若,若i i能整除能整除n n,则可以确定,则可以确定n n不是质数,此时无需再测试可用不是质数,此时无需再测试可用breakbreak语句直接退出循环。语句直接退出循环。第二步:判断循环执行完毕后循环变量第二步:判断循环执行完毕后循环变量i i的值。如的值。如i i的值的值为为n,n,则表明循环是正常退出,也意味着则表明循环是正常退出,也意味着2 2至至n-1n-1都不能整除都不能整除n n,显然

16、,显然n n为质数。如果为质数。如果i i的值不为的值不为n,n,则循环是因则循环是因i i能整除能整除n n从而导致从而导致breakbreak语句的执行而退出循环的,此时语句的执行而退出循环的,此时n n不是质数。不是质数。新编c语言程序设计教程例5-9 判断正整数n是否为质数 新编c语言程序设计教程continuecontinue语句语句continuecontinue语句的作用是跳过循环体中语句的作用是跳过循环体中continuecontinue语句后面的语语句后面的语句,立即结束循环体的本次执行。句,立即结束循环体的本次执行。continuecontinue语句仅仅终止循语句仅仅终止

17、循环体的本次执行而循环结构会继续执行,但是环体的本次执行而循环结构会继续执行,但是breakbreak语句却直语句却直接终止循环结构,两者有明显的区别。接终止循环结构,两者有明显的区别。例例5-10 5-10 找规律,输出所有小于找规律,输出所有小于100100的项,的项,1010个一行。个一行。 1 1、2 2、4 4、7 7、8 8、1111、1313、1414、1616、1717、1919、2222、2323分析:规律为从分析:规律为从1 1到到100100的序列中不出现的序列中不出现3 3或或5 5的倍数。可以用的倍数。可以用循环输出该序列。循环输出该序列。循环变量循环变量i i从从1

18、 1至至100100,符合条件时输出,不符合条件时忽略。,符合条件时输出,不符合条件时忽略。新编c语言程序设计教程1、2、4、7、8、11、13、14、16、17、19、22、23return新编c语言程序设计教程例5-11用循环输出如下图形* * * * * * * * * * * * * * * * * * * * * * * * * *分析:图形共分析:图形共5 5行,循环变量行,循环变量i i从从1 1到到5 5,每次输出一行。,每次输出一行。 对于第对于第i i行,需输出行,需输出i i个个 * *,可用循环变量,可用循环变量j j 从从1 1到到i i每次输出一个每次输出一个 *

19、*。新编c语言程序设计教程5.4 循环的嵌套一个循环体中又包一个循环体中又包含了另一个循环结构,含了另一个循环结构,称为循环的嵌套。内称为循环的嵌套。内嵌的循环中还可以嵌嵌的循环中还可以嵌套循环,此时称为多套循环,此时称为多层循环。层循环。新编c语言程序设计教程例5-12用循环输出如下图形分析:图形共分析:图形共5 5行,循环变量行,循环变量i i从从1 1到到5 5,每次输出一行。,每次输出一行。对于第对于第i i行,需先输出行,需先输出5-i5-i个空格,再输出个空格,再输出2 2* *i-1i-1个个* *。新编c语言程序设计教程例5-12 用循环输出如下图形新编c语言程序设计教程例5-

20、13 输出100以内的质数。分析:循环变量分析:循环变量i i从从2 2到到100100,每次判断,每次判断i i是否为质数,如是否为质数,如果是,则输出果是,则输出i i。判断。判断i i是否是质数的算法见例是否是质数的算法见例5-95-9。return新编c语言程序设计教程5.5 do-while循环结构do-whiledo-while循环结构是循环结构是c c语言提供的三种循环结构之一,语言提供的三种循环结构之一,一般形式如下:一般形式如下: dodo 语句语句 while(while(表达式表达式) );do-whiledo-while循环结构的执行流程如图所示。循环结构的执行流程如图

21、所示。与与whilewhile循环结构相比,循环结构相比,do-whiledo-while循环结构?循环结构?新编c语言程序设计教程例5-14 用do-while循环结构改写例4-20。新编c语言程序设计教程例5-14return新编c语言程序设计教程5.6 5.6 典型例题典型例题例例5-15 5-15 求求1! + 2! + 1! + 2! + + 10! + 10!分析分析1 1: 1010个数相加,循环变量个数相加,循环变量i i从从1 1到到1010,对于第,对于第i i项项需计算需计算i i的阶乘。的阶乘。i i的阶乘是从的阶乘是从1 1到到i i的连乘,可以用另一个的连乘,可以用

22、另一个循环计算。循环变量循环计算。循环变量j j从从1 1到到i i。新编c语言程序设计教程例5-15 求1!+2! + + 10!新编c语言程序设计教程例5-15 求1!+2! + + 10!分析分析2 2:1010个数相加,循环变量个数相加,循环变量i i从从1 1到到1010,对于第,对于第i i项项m mi i显然有显然有m mi i=m=mi-1i-1* *i i。新编c语言程序设计教程例5-16猴子吃桃。有若干桃子,一只猴子第一天吃了一半多一个,第二天吃了有若干桃子,一只猴子第一天吃了一半多一个,第二天吃了剩下的一半多一个,每天如此剩下的一半多一个,每天如此, ,第十天吃时只有一个

23、桃子了。第十天吃时只有一个桃子了。编程求一共有多少个桃子?编程求一共有多少个桃子?分析:设原有(即第一天有)桃子分析:设原有(即第一天有)桃子x x1 1个,第二天有个,第二天有x x2 2个个, ,,第十天有第十天有x x1010个。第二天的个。第二天的x x2 2个实际上为第一天剩下的,因此,个实际上为第一天剩下的,因此,根据题意有根据题意有 x x2 2= x= x1 1(x(x1 1/2+1),/2+1),同理可得同理可得x x3 3= = x x2 2(x(x2 2/2+1),/2+1),,x x1010= x= x9 9(x(x9 9/2+1),/2+1), 变形后得变形后得x x

24、1 1=2=2* *(x(x2 2+1), +1), x x2 2=2=2* *( (x x3 3+1+1),),,x x9 9=2=2* *(x(x1010+1)+1)。新编c语言程序设计教程例5-16猴子吃桃。分析:设原有(即第一天有)桃子分析:设原有(即第一天有)桃子x x1 1个,第二天有个,第二天有x x2 2个个, ,,第十天有第十天有x x1010个。第二天的个。第二天的x x2 2个实际上为第一天剩下的,因此,个实际上为第一天剩下的,因此,根据题意有根据题意有 x x2 2= x= x1 1(x(x1 1/2+1),/2+1),同理可得同理可得x x3 3= = x x2 2(

25、x(x2 2/2+1),/2+1),,x x1010= x= x9 9(x(x9 9/2+1),/2+1), 变形后得变形后得x x1 1=2=2* *(x(x2 2+1), +1), x x2 2=2=2* *( (x x3 3+1+1),),,x x9 9=2=2* *(x(x1010+1)+1)。第十天吃的时候只有一个桃子了,因此第十天吃的时候只有一个桃子了,因此x x1010的值为的值为1 1。由分析可知求由分析可知求x x1 1时只需依次求出时只需依次求出x x9 9x x2 2即可。设变量即可。设变量x x的初值的初值为为1,1,显然重复计算显然重复计算x=2x=2* *(x+1)

26、(x+1)九次就可求出九次就可求出x x1 1 。新编c语言程序设计教程例5-16猴子吃桃。新编c语言程序设计教程例5-17 回文数猜想例例5-175-17一个正整数,如果从左向右读(称之为正序数)一个正整数,如果从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数。回文数。“回文数猜想回文数猜想”是指任取一个正整数,如果不是是指任取一个正整数,如果不是回文数,则将该数与它的倒序数相加,若其和不是回文数,回文数,则将该数与它的倒序数相加,若其和不是回文数,则重复上述步骤,经过有限次后,都会得到一个回文数。则重复上述步骤,经过有限次后,都会得到一个回文数。如如6868: 第一步:第一步:68+86=15468+86=154 第二步:第二步:154+451=605154+451=605 第三步:第三步:605+506=1111605+506=1111 1111 1111为回文数为回文数请编程验证请编程验证“回文数猜想回文数猜想”并输出计算步骤。并输出计算步骤。新编c语言程序设计教程例5-17 回文数猜想分析:用无限循环,循环体分三部分分析:用无限

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论