《循环结构程序设计(精品).ppt》由会员分享,可在线阅读,更多相关《循环结构程序设计(精品).ppt(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C语言程序设计教程29-Jan-231第五章第五章 循环结构程序设计循环结构程序设计 5.1 循环语句概述循环语句概述 5.2 while语句语句 5.3 do-while语句语句 5.4 for 语句语句 5.5 break、continue和和goto语句语句 5.6 循环的嵌套循环的嵌套 5.7 复合结构程序举例复合结构程序举例1 1C语言程序设计教程29-Jan-232 C语言有语言有while、do-while、和、和for语句三种循环结构语句。语句三种循环结构语句。前两个称为条件循环,即根据条件前两个称为条件循环,即根据条件来决定是否继续循环;来决定是否继续循环;forfor语句最
2、为灵活,不仅可用于循环语句最为灵活,不仅可用于循环次数已经确定的情况,也可用于循环次次数已经确定的情况,也可用于循环次数虽不确定、但给出了循环继续条件的数虽不确定、但给出了循环继续条件的情况。情况。5.1 循环语句概述循环语句概述2 2C语言程序设计教程29-Jan-2335.2 5.2 whilewhile语句语句 while 语句是通过判断循环控制条件是否满足来决定是否继续循环的语句。一、一、while语句的一般形式语句的一般形式while (表达式)循环体语句组 表达式为循环控制条件,当表达式的值为非零(满足循环条件),就执行循环体语句,当表达式的值为零,就退出循环。3 3C语言程序设计
3、教程29-Jan-234二、二、while语句的执行过程语句的执行过程表达式循环体语句组真假 注意:如果表达式的值一开始就为0,则语句一次也会被不执行。1、求解表达式。如果其值为真(非0),转第2步;否则转第3步。2、执行循环体语句组,然后转1。3、执行while语句的下一条。4 4C语言程序设计教程29-Jan-235mainmain()()int int n,i,u1,u2,un;n,i,u1,u2,un;printf printf(“(“nplease nplease input a data to input a data to n(n3):”);n(n3):”);scanf scan
4、f(“%d”,&(“%d”,&n);u1=u2=1;un=u1+u2;i=3;n);u1=u2=1;un=u1+u2;i=3;while while (in(i3):”);n(n3):”);scanf scanf(“%d”,&(“%d”,&n);un=u2=1;i=3;n);un=u2=1;i=3;do do u1=u2;u2=un;un=u1+u2;u1=u2;u2=un;un=u1+u2;i+;i+;while(i=n);while(i=n);printf(“No.%d is%dn”,n,un);printf(“No.%d is%dn”,n,un);例例5.25.2:求菲波那奇数列:数列:
5、求菲波那奇数列:数列1 1、1 1、2 2、3 3、5 5,是著名,是著名的菲波那奇数列,其递推通项公式为:的菲波那奇数列,其递推通项公式为:U U1 1 U U2 2 1 1(n n1,21,2)U Un n=U=Un-1n-1+U+Un-2n-2(n3)(n3)为求出第为求出第N N项的值,请编写程序。项的值,请编写程序。8 8C语言程序设计教程29-Jan-239注意:注意:循环控制循环控制变量变量值值在循环体内在循环体内 必须有所改变。必须有所改变。例如例如:i=1;while(i=100)putchar(*);i+;这个循环永远不会结束,因为循环控制变量i没有在循环体内被改变,i+;
6、不属于循环语句。i+i+应该在循环体内改变应该在循环体内改变:i=1;i=1;while(i=100)while(i=100)putchar(*);putchar(*);i+;i+;9 9C语言程序设计教程29-Jan-2310 5.4 for语句 for(表达式1;表达式2;表达式3)循环体语句组 这是这是C语言最有特点的循环语句。使用语言最有特点的循环语句。使用最为灵活方便。最为灵活方便。一、一般形式:一、一般形式:1010C语言程序设计教程29-Jan-2311 1、求解表达式1。2、求解表达式2。如果其值为真 (非0),执行第3步;否则,转 至第4步。3、执行循环体语句组,并求解表 达
7、式3,然后转向2。4 4、执行、执行forfor语句的下一条语句。语句的下一条语句。二、执行流程二、执行流程1111C语言程序设计教程29-Jan-2312例例5.3:求求n!main()long sum=1;int n;int i=1;printf(please input n:);scanf(%d,&n);for(i=1;i=n;i+)sum*=i;printf(n%d!=%ldn,n,sum);i=1,sum=1i=nsum=sum*ii+1212C语言程序设计教程29-Jan-2313三、关于三、关于for语句的说明语句的说明 1、for语句中的表达式1和表达式3可以是逗号表达式,特别
8、是有两个循环变量参与对循环的控制时。表达式1和表达式3为逗号表达式,将使程序显得非常清晰。问题问题:求求 1/100+2/99+50/51 float s=0.0;for(i=1,j=100;i=j;i+,j-)s=s+i/j;2、for语句中的表达式2可以是逻辑表达式1313C语言程序设计教程29-Jan-23145.5 break、continue、goto语句语句 这这一一类类语语句句的的功功能能是是改改变变程程序序的的结结构构,使使程序从其所在的位置转向另一处。程序从其所在的位置转向另一处。1414C语言程序设计教程29-Jan-2315 它的作用是把流程转向所在结构之后。它的作用是把
9、流程转向所在结构之后。在在switch分支结构中,使用分支结构中,使用break语句可以使流程跳出语句可以使流程跳出switch分支结构。分支结构。同样的同样的,在循环结构中,使用在循环结构中,使用break语句使流程跳出当前的循环层语句使流程跳出当前的循环层,转向执行该转向执行该循环结构后面的语句。循环结构后面的语句。一、一、break语句与语句与Continue语句语句 为了使循环控制更加灵活,语言提供了break语句和continue语句。1一般格式:break;continue;2功能(1)break:强行结束其所在的那一层循环。(2)continue:强行结束本次循环。对于for循环
10、,跳过循环体其余语句,转向循环变量增量表达式的计算;对于while和do-while循环,跳过循环体其余语句,但转向循环继续条件的判定。3break和continue语句对循环控制的影响如下所示。1515C语言程序设计教程29-Jan-2316 1616C语言程序设计教程29-Jan-2317例例5.4:显示输入的字符显示输入的字符,如果按的如果按的是是Esc键键,则退出循环;则退出循环;如如果按的是果按的是Enter键键,则不做任何处理,继续输入下一个字符。则不做任何处理,继续输入下一个字符。#include“conio.h”main()char ch;for(;)ch=getch();/*
11、字符输入函数字符输入函数*/if (ch=27)/*Esc键的键的ACSII码为码为27*/break;/*退出循环退出循环*/if(ch=13)continue;/*按的是按的是Enter:键,跳过字符输出语句键,跳过字符输出语句*/putch(ch);/*显示输入的字符显示输入的字符*/1717C语言程序设计教程29-Jan-2318二、二、goto语句语句goto被称为无条件转移语句被称为无条件转移语句。由两部分组成由两部分组成goto 标号标号;和和 标号标号:语句语句 它最大的好处就是可以一下子跳出多重循环,而break却不能做到这点,break只能退出它所在的那一层循环。4说明 (
12、1)break能用于循环语句和switch语句中,continue只能用于循环语句中。(2 2)循环嵌套时,)循环嵌套时,breakbreak和和continuecontinue只影响包含它们的最只影响包含它们的最内层循环,与外层循环无关。内层循环,与外层循环无关。1818C语言程序设计教程29-Jan-2319 循环语句的循环体内,又包含另一个完整的循环结构,称为循环的嵌套。嵌套在循环体内的循环称语句称为内循环,外面的循环语句称为外循环。如果内循环体中又有嵌套的循环语句,称为多层循环。While、do-while、for三种循环都可以互相嵌套 5.6 循环的嵌套1919C语言程序设计教程29
13、-Jan-2320main()int i,j,k;for(i=1;i4)break;for(j=1;j3)goto end;for(k=1;k2)break;end:printf(ni=%d,j=%d,k=%d,i,j,k);i=1,j=4,k=3输出结果是:main()int i,j,k;for(i=0;i2;i+)for(j=0;j2;j+)printf(%d%dn,i,j);例例5.5:分析以下程序的执行结果:分析以下程序的执行结果:输出结果是:00000101101011112020C语言程序设计教程29-Jan-2321 C语言允许循环语句与分支结构语句联用,即循环体内可包含一个完整
14、的分支结构,也可以在分支结构下包含一个完整的循环体。这样的程序结构被称为复合程序结构,复合程序结构同样必须做到嵌套层次清楚。(即搞清楚分支结构的范围以及循环体的范围)5.7 复合结构程序举例复合结构程序举例2121C语言程序设计教程29-Jan-2322例5.6:输出10100之间的全部素数。所谓素数n是指除1和n之外,不能被2(n-1)之间的任何整数整除。算法设计要点:算法设计要点:(1)显然,只要设计出判断某数n是否是素数的算法,外面再套一个for循环即可。(2)判断某数n是否是素数的算法:根据素数的定义,用2sqrt(n)之间的每一个数去整除n,如果都不能被整除,则表示该数是一个素数。判
15、断一个数是否能被另一个数整除,可通过判断它们整除的余数是否为0来实现。2222C语言程序设计教程29-Jan-2323参考源程序如下:main()main()int i=11,j,counter=0;int i=11,j,counter=0;for(;i=100;i+=2)for(;i=100;i+=2)for(j=2;j=sqrt(i);j+)for(j=2;j if(j sqrtsqrt(i)(i)printf(%6d,i);printf(%6d,i);counter+;counter+;2323C语言程序设计教程29-Jan-2324例5.7:猜数游戏。由计算机“想”一个100以内的数请
16、你猜,如果你猜对了,则结束游戏,否则计算机给出提示,告诉你所猜的数是太大还是太小,直到你猜中为止。计算机记录你猜的次数,以此可以反映出你猜的水平。#include#include main()int magic;int guess;int counter=0;randomize();magic=random(100);2424C语言程序设计教程29-Jan-2325do printf(nguess the magic number:);scanf(%d,&guess);counter+;if(guessmagic)printf(*Wrong*too bign);else if(guessmagic)printf(*Wrong*too smalln);while(guess!=magic);printf(*Right*n);printf(guess counter is%dn,counter);getch();2525