第5章C语言循环结构程序设计_第1页
第5章C语言循环结构程序设计_第2页
第5章C语言循环结构程序设计_第3页
第5章C语言循环结构程序设计_第4页
第5章C语言循环结构程序设计_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、第第5 5章章 C C语言循环结构程序设计语言循环结构程序设计下一页下一页返返 回回本章要点本章要点 while语句、语句、do-while语句、语句、for语句语句 continue语句、语句、break语句语句 循环的嵌套循循环的嵌套循 循环结构程序设计循环结构程序设计学习方法建议学习方法建议 学习本章内容时,应重点掌握三种循环语句的语法格学习本章内容时,应重点掌握三种循环语句的语法格式及执行过程,并在此基础上理解循环嵌套的应用,要多式及执行过程,并在此基础上理解循环嵌套的应用,要多读程序,理解编程思想,并多上机练习。读程序,理解编程思想,并多上机练习。目目 录录5.1 while5.1

2、while语句语句 5.25.2 do-whiledo-while语句语句5.35.3 forfor语句语句 5.45.4 循环的嵌套循环的嵌套 返返 回回上一页上一页5.55.5 breakbreak语句和语句和continuecontinue语句语句 5.65.6 循环结构应用举例循环结构应用举例 5.75.7 本章小结本章小结 5.1 while语句语句while语句用来实现语句用来实现“当型当型”循环结构。其一般形式如下:循环结构。其一般形式如下:while(表达式)(表达式) 语句语句while语句的执行过程是:语句的执行过程是:下一页下一页返返 回回 首先计算表达式的值,若结果是首

3、先计算表达式的值,若结果是“真真”(非(非0)值时,执行)值时,执行while语句中的内嵌语句,语句中的内嵌语句,即循环体;然后再计算表达式的值,重复上即循环体;然后再计算表达式的值,重复上述过程,直到表达式的值为述过程,直到表达式的值为“假假”(0)时)时结束,流程控制转到结束,流程控制转到while语句的下一个语语句的下一个语句继续执行句继续执行 。 while语句中的语句中的“表达式表达式”就是循环的就是循环的条件,其执行流程见图条件,其执行流程见图5.1,其特点是:先,其特点是:先判断表达式,后执行语句。判断表达式,后执行语句。 表达式表达式语句语句0非非0图图5.1 while语句执

4、行过程语句执行过程 例例5.1】 求求 。 上一页上一页下一页下一页返返 回回1001nn【编程思路】【编程思路】(1)定义变量)定义变量i、sum,并分别赋初值为,并分别赋初值为1和和0,用,用i表表示累加数,示累加数,sum表示累加和。表示累加和。(2)在)在while语句中,使语句中,使sum在原有值的基础上加上在原有值的基础上加上i的值,加完后再使的值,加完后再使i值自动增值自动增1。(3)用)用i=100作为循环的条件,若作为循环的条件,若i的值超过的值超过100就就停止循环。停止循环。(4)最后输出累加和)最后输出累加和sum。 【程序代码】【程序代码】#include stdio

5、.hmain( ) int i=1,sum=0;while(i=100)sum=sum+i; i+; printf(“sum=%dn,sum); 运行结果如下:运行结果如下:上一页上一页下一页下一页返返 回回【例【例5.2】求】求n!,n由键盘输入。由键盘输入。【编程思路】【编程思路】求阶乘就是求累乘,即求求阶乘就是求累乘,即求1*2*3*n。这里除用于存放累乘积的变量的应置。这里除用于存放累乘积的变量的应置为为1外,其执行过程与累加相同。外,其执行过程与累加相同。【程序代码】【程序代码】#include stdio.hmain( )int i=1,n,s=1;printf(Input n:)

6、;scanf(%d,&n);while(i=n) s*=i; i+;printf(%d!=%dn,n,s);运行结果如下:运行结果如下:do-while语句的特点是先执行循环体,然后判断循环条件是否成立。其一般形式语句的特点是先执行循环体,然后判断循环条件是否成立。其一般形式为为do语句语句while(表达式);(表达式);上一页上一页下一页下一页返返 回回5.2 do-while语句语句do-while语句的执行过程是:语句的执行过程是: 先执行一次循环体语句,然后判断表先执行一次循环体语句,然后判断表达式,当表达式的值为非达式,当表达式的值为非0时,返回重新时,返回重新执行循环体语

7、句,如此反复,直到表达式执行循环体语句,如此反复,直到表达式值等于值等于0为止,此时循环结束。可以用图为止,此时循环结束。可以用图5.2表示其流程。表示其流程。语句语句0(假假)表达式表达式图图5.2 do-while语句执行过程语句执行过程 【例【例5.3】 用do-while语句改写例5.1的程序。上一页上一页下一页下一页返返 回回【程序代码】【程序代码】#include stdio.h“main( )int i=1,sum=0;do sum=sum+i; i+; while(i=100);printf(“sum=%dn,sum); 运行结果如下:运行结果如下: for语句的一般形式为:语

8、句的一般形式为: for(表达式表达式1;表达式;表达式2;表达式;表达式3) 语句语句For语句的执行过程是:语句的执行过程是:(1)求解表达式)求解表达式1;(2)求解表达式)求解表达式2,若其值为真(值为非,若其值为真(值为非0),),则执行则执行for语句中指定的内嵌语句,然后执行语句中指定的内嵌语句,然后执行下面第(下面第(3)步。若为假(值为步。若为假(值为0),则结束循环,转到第),则结束循环,转到第(5)步;)步; (3)求解表达式)求解表达式3。(4)转回上面第()转回上面第(2)步骤继续执行。)步骤继续执行。(5)循环结束,执行)循环结束,执行for语句下面的一条语语句下面

9、的一条语句。句。 可以用图可以用图5.3来表示来表示for语句的执行过程。语句的执行过程。上一页上一页下一页下一页返返 回回5.3 for语句语句非非0求解表达式求解表达式1表达式表达式2语句语句求解表达式求解表达式30图图5.3 for语句执行过程语句执行过程 for语句最简单的应用形式也就是最易理解的如下形式:语句最简单的应用形式也就是最易理解的如下形式: for(循环变量赋初值;循环条件;循环变量增值循环变量赋初值;循环条件;循环变量增值) 语句语句【例【例5.4】 用用for语句改写例语句改写例5.1的程序的程序【程序代码】【程序代码】#include stdio.hmain( ) i

10、nt i,sum=0; for(i=1;i=100;i+) sum+=i; printf(sum=%dn,sum);运行结果如下:运行结果如下: 上一页上一页下一页下一页返返 回回说明:说明: 有时根据需要可以将有时根据需要可以将for语句中的部分或所有表达式省略,省略语句中的部分或所有表达式省略,省略“表达式表达式1”时,应在时,应在for语句之前给循环变量赋初值。省略语句之前给循环变量赋初值。省略“表达式表达式2”时,在循环体时,在循环体中通常要有能使循环结束的语句,否则就成了无限循环了。省略中通常要有能使循环结束的语句,否则就成了无限循环了。省略“表达式表达式3”时,通常在循环体中要有使

11、循环变量增值的语句。不管省略几个表达式,分时,通常在循环体中要有使循环变量增值的语句。不管省略几个表达式,分隔符分号隔符分号“;”是不能省的。是不能省的。 如例如例5.4中的代码可以改写成:中的代码可以改写成: int i=1,sum=0; for( ;i=100;i+) sum+=i;上一页上一页下一页下一页返返 回回 一个循环的循环体内又包含另一个完整的循环结构,称为循环的嵌套。一个循环的循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多重循环。各种语言中关于循环的内嵌的循环中还可以嵌套循环,这就是多重循环。各种语言中关于循环的嵌套的概念都是一样的。嵌

12、套的概念都是一样的。 三种循环(三种循环(while循环,循环,do-while循环和循环和for循环)即可以自身嵌套,循环)即可以自身嵌套,也可以互相嵌套。也可以互相嵌套。 【例【例5.5】 用一元纸币换一分、两分及五分的硬币,要求换到的硬币总数为用一元纸币换一分、两分及五分的硬币,要求换到的硬币总数为50枚,问有多少种换法?每种换法中各种硬币分别是多少?枚,问有多少种换法?每种换法中各种硬币分别是多少?【编程思路】【编程思路】设设x,y,z分别代表五分、二分、及一分的硬币数目。三变量只有两个是独立分别代表五分、二分、及一分的硬币数目。三变量只有两个是独立的,第三个必须满足的,第三个必须满足

13、z=1005*x2*y 及及 x+y+z = = 50的条件。因此可用双的条件。因此可用双重循环解此问题。其中重循环解此问题。其中x可由可由1到到20,y可由可由0到到50。上一页上一页下一页下一页返返 回回5.4 循环的嵌套循环的嵌套【程序代码】【程序代码】#include stdio.hmain( )int x,y,z;printf(FIVEtTWOtONEn);for(x=0;x=20;x+) for(y=0;y=50;y+) z=100-5*x-2*y; if(x+y+z=50) printf(%3dt%3dt%3dn,x,y,z); 运行结果如下:运行结果如下:上一页上一页下一页下一

14、页返返 回回 【例【例5.6】编写程序,输出下列图形】编写程序,输出下列图形上一页上一页下一页下一页返返 回回【编程思路】【编程思路】(1)图形共有)图形共有5行,定义行,定义i表示行数,即外循环的循环控制变量,其值从表示行数,即外循环的循环控制变量,其值从1到到5递增。递增。(2)每行前空格的数量分别为)每行前空格的数量分别为5、4、3、2、1,如果用,如果用i表示行数,则每行表示行数,则每行前的空格数据与行号前的空格数据与行号i的关系为的关系为6-i;(3)每一行)每一行“*”的数量分别为的数量分别为1、3、5、7、9,与行号的关系为,与行号的关系为2*i-1。(4)定义变量)定义变量j、

15、k表示空格数和表示空格数和“*”数,它们作为内循环的循环控制变量。数,它们作为内循环的循环控制变量。【程序代码】【程序代码】#include stdio.hmain( )int i,j,k; for(i=1;i=5;i+) for(j=1;j=6-i;j+) printf( ); for(k=1;k=2*i-1;k+) printf(*); printf(n);说明:说明: 本程序用双重循环实现,外循环控制行数,内循环控制每行的内容,本程序用双重循环实现,外循环控制行数,内循环控制每行的内容,每行内容均包括三部分,行前空格、一行每行内容均包括三部分,行前空格、一行*、换行。行前空格和每行的、换

16、行。行前空格和每行的*的的输出均用内嵌的循环实现。输出均用内嵌的循环实现。上一页上一页下一页下一页返返 回回 break语句的一般形式为:语句的一般形式为: break;该语句的功能有两个:该语句的功能有两个:(1)在)在switch语句的程序段中,遇到语句的程序段中,遇到break语句,则退出语句,则退出switch语句,执行后语句,执行后继语句。继语句。(2)在循环体中,遇到)在循环体中,遇到break语句,则退出包含语句,则退出包含break语句的那层循环语句的那层循环,一般和一般和if语句连用。语句连用。 【例【例5.7】判断正整数】判断正整数m是否素数,是否素数,m由键盘输入。由键盘

17、输入。 【编程思路】【编程思路】判断判断m是否是素数,可以有三种方法:是否是素数,可以有三种方法:(1)用)用m依次除以依次除以2m-1之间的所有数,若都不能除尽,则之间的所有数,若都不能除尽,则m是素数,否则就是素数,否则就不是素数。不是素数。(2)用)用m依次除以依次除以2 之间的所有数,若都不能除尽,则之间的所有数,若都不能除尽,则m是素数,否则就是素数,否则就不是素数。不是素数。上一页上一页下一页下一页返返 回回5.5 break语句和语句和 continue语句语句5.5.1 break语句语句m (3)用)用m依次除以依次除以m/2之间的所有数,若都不能除尽,则之间的所有数,若都不

18、能除尽,则m是素数,否则就不是素数,否则就不是素数。是素数。本题采用第(本题采用第(2)种方法,其算法是这样的:)种方法,其算法是这样的: 将将 的值赋给变量的值赋给变量k,让,让m被被2到到k除,如果除,如果m能被能被2k之中任何一个整数整除,之中任何一个整数整除,则提前结束循环,此时则提前结束循环,此时i必然小于或等于必然小于或等于k,如果,如果m不能被不能被2k之间的任一整数整之间的任一整数整除,则在完成最后一次循环后,除,则在完成最后一次循环后,i还要加还要加1,因此,因此i=k+1,然后才终止循环。在循环然后才终止循环。在循环之后判别之后判别i的值是否大于等于的值是否大于等于k+1,

19、若是,则表明未曾被,若是,则表明未曾被2k之间任一整数整除过,之间任一整数整除过,因此输出因此输出“是素数是素数”。 【程序代码】【程序代码】#include #includemain( )int m,i,k;scanf(%d,&m);k=sqrt(m);for(i=2;i=k+1)printf(%d is a prime numbern,m);elseprintf(%d is not a prime numbern,m);运行结果如下:运行结果如下:上一页上一页下一页下一页返返 回回5.5.2 continue语句语句continue语句的一般形式为:语句的一般形式为: contin

20、ue; 该语句只能用在循环体中,执行该语句则结束本次循环,再去判断该语句只能用在循环体中,执行该语句则结束本次循环,再去判断是否继续下次循环。该语句通常是用于循环体中是否继续下次循环。该语句通常是用于循环体中if语句内,即满足某种语句内,即满足某种条件才结束本次循环。条件才结束本次循环。 continue语句和语句和break语句的区别是:语句的区别是:continue语句只结束本次语句只结束本次循环,而不是终止整个循环的执行。而循环,而不是终止整个循环的执行。而break语句则是结束整个循环过语句则是结束整个循环过程,不再判断执行循环的条件是否成立。程,不再判断执行循环的条件是否成立。【例【

21、例5.8】把】把100200之间的不能被之间的不能被3整除的数输出,每行输出整除的数输出,每行输出10个数。个数。 【编程思路】【编程思路】(1)定义一个循环控制变量和统计输出数量的变量)定义一个循环控制变量和统计输出数量的变量 。(2)循环的初值和终值分别取)循环的初值和终值分别取100和和200。(3)用对)用对3取余的运算判断是否能被取余的运算判断是否能被3整除。整除。【程序代码】【程序代码】#include stdio.hmain( ) int n,s=0;for(n=100;n=200;n+) if(n%3=0)continue;printf( %d,n);s+;if(s%10=0)

22、 printf(n); printf(n);上一页上一页下一页下一页返返 回回说明:在说明:在while语句和语句和do-while语句中,语句中,continue语句使得流程直接跳到循语句使得流程直接跳到循环控制条件的测试部分,然后决定循环是否继续进行。在环控制条件的测试部分,然后决定循环是否继续进行。在for循环中,遇到循环中,遇到continue后,流程跳过循环体中余下的语句,而去对后,流程跳过循环体中余下的语句,而去对for语句中的语句中的“表达式表达式3”求值,然后进行求值,然后进行“表达式表达式2”的条件测试,最后根据的条件测试,最后根据“表达式表达式2”的值来决的值来决定定for

23、语句是否执行。语句是否执行。上一页上一页下一页下一页返返 回回运行结果如下:运行结果如下:5.6 循环结构应用举例循环结构应用举例【例【例5.9】输出九九表,格式如下:】输出九九表,格式如下:上一页上一页下一页下一页返返 回回【编程思路】【编程思路】(1)用双重循环实现,外循环控制行数,内循环控制列数。)用双重循环实现,外循环控制行数,内循环控制列数。(2)定义变量)定义变量i表示行数,作外循环的循环控制变量,使其从表示行数,作外循环的循环控制变量,使其从1到到9递增。递增。(3)定义)定义j表示列数,作内循环的循环控制变量,从表示列数,作内循环的循环控制变量,从1到到i递增。递增。【程序代码

24、】【程序代码】#include main( )int i,j;for(i=1;i10;i+) for(j=1;j=1e-6,其中,其中fabs是用来求绝对值的函数,但使是用来求绝对值的函数,但使用前在代码前要用用前在代码前要用#include 对对math.h头文件进行包含。头文件进行包含。上一页上一页下一页下一页返返 回回315171【程序代码】【程序代码】#include stdio.h#include math.hmain( ) int s; float n,t,pi; t=1;pi=0;n=1;s=1; while(fabs(t)=1e-6) pi=pi+t; n=n+2; s = -

25、s; t=s/n; pi=pi*4; printf(pi=%10.6fn,pi);运行结果如下:运行结果如下: 上一页上一页下一页下一页返返 回回【例【例5.11】求】求100200间的全部素数,每行输出间的全部素数,每行输出10个。个。【编程思路】【编程思路】(1)定义一个循环控制变量)定义一个循环控制变量m其取值从其取值从101到到200,循环增量为,循环增量为2,因为此,因为此范围内的素数一定为奇数,定义一个统计素数个数的变量范围内的素数一定为奇数,定义一个统计素数个数的变量n,初值为,初值为0,通,通过对过对10取余运算可控制每行输出取余运算可控制每行输出10个。个。(2)用每个循环变

26、量除以)用每个循环变量除以2到该变量的平方根之间的每一个数,若都除不到该变量的平方根之间的每一个数,若都除不尽,则该变量所存放的数为素数。尽,则该变量所存放的数为素数。(3)平方根的函数为)平方根的函数为sqrt(),其对应的头文件为,其对应的头文件为math.h“【程序代码】【程序代码】#include stdio.h#include math.hmain( ) int m,k,i,n=0; for(m=101;m=200;m=m+2)k=sqrt(m);上一页上一页下一页下一页返返 回回for(i=2;i=k+1) printf(%d ,m); n=n+1; if(n%10=0) prin

27、tf(n);printf(n);运行结果如下:运行结果如下:【例【例5.12】求】求Fibonacci数列前数列前20项,这个数列有如下的特点:第项,这个数列有如下的特点:第1,2两个两个数为数为1,1。从第。从第3个数开始,每一个数都是其前面两个数之和。即:个数开始,每一个数都是其前面两个数之和。即:F(1)=1 (n=1)F(2)=1 (n=2)F(n)=F(n-1)+F(n-2) (n3)上一页上一页下一页下一页返返 回回【编程思路】【编程思路】(1)本题属于递推问题。即不断地用旧值推算出新值,在程序中表现为不)本题属于递推问题。即不断地用旧值推算出新值,在程序中表现为不断地用新值取代旧

28、值的过程。断地用新值取代旧值的过程。(2)定义循环变量)定义循环变量n,用来表示数列的项,由于前两项已经给出,所以,用来表示数列的项,由于前两项已经给出,所以n从从3开始。开始。(3)定义变量)定义变量f1、f2、fn,每次计算完通项后,那么在计算下一项时,原,每次计算完通项后,那么在计算下一项时,原来的来的f2就成为新的就成为新的f1,刚计算出的,刚计算出的fn就成为新的就成为新的f2。(4)为了更清晰地输出数列,每行输出)为了更清晰地输出数列,每行输出4个数。个数。【程序代码】【程序代码】#include stdio.hmain( )int f1=1,f2=1,n,fn;printf(%12d%12d,f1,f2);for(n=3;n=20;n+) fn=f1+f2;f1=f2;f2=fn;printf(%12d,fn);if(n%5=0) printf(n); 运行结果如下:运行结果如下:上一页上一页下一页下一页返返 回回通过本章的学习,读者应掌握以下内容:通过本章的学习,读者应掌握以下内容:(1)循环结构。反复执行循环体中的各语句,设计循环结构的关键是给出正)循环结构。反复执行循环体中的各语句,设计循环结构的关键是给出正确的循环条件及循环体中各语句。确的循环条件及

温馨提示

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

评论

0/150

提交评论