收藏 分享(赏)

C课件第05讲.ppt

上传人:dwy79026 文档编号:8543192 上传时间:2019-07-02 格式:PPT 页数:54 大小:609.50KB
下载 相关 举报
C课件第05讲.ppt_第1页
第1页 / 共54页
C课件第05讲.ppt_第2页
第2页 / 共54页
C课件第05讲.ppt_第3页
第3页 / 共54页
C课件第05讲.ppt_第4页
第4页 / 共54页
C课件第05讲.ppt_第5页
第5页 / 共54页
点击查看更多>>
资源描述

1、用while语句实现循环结构 用do-while语句实现循环结构 用for语句实现循环结构,第五讲,Begin:,第五章 循环结构程序设计,循环结构也称重复结构:程序中反复执行的一组指令或程序段。,循环体:被反复执行的程序段。,循环变量:用来控制循环是否继续进行的变量。循环结构有两种类型即当型循环和直到型循环。,5.1用while语句实现循环结构,方框图及执行过程 :,5.1用while语句实现循环结构,格式:while () 语句A;,流程图:,若表达式(条件)的值为真,则执行内嵌语句A,再判断表达式(条件),当表达式的值为假时,执行while后面的语句。,5.1用while语句实现循环结构

2、,while 语句,while语句的说明:,(1) while语句属当型循环,即先判断条件(表达式),再执行循环体。,(2) 表达式为一条件,用于控制循环是否可继续执行,故称控制表达式。,(3) 语句A为内嵌式语句,是循环结构的循环体。它可以是单语句也可以是复合语句,且该语句中必须包含有对循环条件进行修改的语句。,5.1用while语句实现循环结构,例 求 1 + 2 + + 100,分析:求和的过程为:,1) S=1 S1 = S0 + 12) S=1+2 S2 = S1 + 23) S=1+2+3 S3 = S2 + 3 100) S=1+2+ +100 S100 = S99+100,S0

3、 = 0,求和表达式:,S = S + i,初值:,S = 0,循环次数 i :,1100,5.1用while语句实现循环结构,流程图:,程序:,main ( ) int s, i;s = 0,i = 1;while ( i = 100 ) s+=i;i+;printf(“s=%ldn“, s); ,5.1用while语句实现循环结构,注意:,如果循环体中包含一个以上的语句,应该用花括弧括起来,以复合语句的形式出现。如果不加花括弧,则while语句的范围只到while后的第一个分号处。,在循环体中应该有使循环趋向结束的语句,否则会导致死循环。,如上例中的语句改写 成如下形式:i=1;while

4、 ( i = 100 )s+=i;i+;,则while语句的循环体语句为:s+=i; 循环变量i的值没有改变,循环不能终止,陷入死循环,5.1用while语句实现循环结构,do-while 语句,格式: do while ( );,流程图:,5.2用do-while语句实现循环结构,执行内嵌语句A,在判断表达式(条件)若为真,则继续执行内嵌语句A,再判断表达式(条件),直到表达式的值为假时,执行do-while后面的语句。,执行过程:,与while语句的不同:,do-while语句至少执行循环体一次,但while语句当条件为假时不执行循环体语句。,5.2用do-while语句实现循环结构,例:

5、while与do-while区别,include main( ) int i=65;doputchar(i); i+;while(iA); ,include main( ) int i=65;while(iA)putchar(i); i+; ,无输出,输出A,5.2用do-while语句实现循环结构,5.2用do-while语句实现循环结构,例 求 1 + 2 + + 100,程序:,#include “stdio.h” void main ( ) int s, i;s = 0;i = 1;do s+=i;i+;while( i = 100 )printf(“s=%ldn“, s); ,for

6、 语句,各部分的作用: 表达式1 :循环变量赋初值。 表达式2 :判断循环条件,若省略,则认为循环条件恒为“真”。 表达式3 :修改循环变量的值。 语 句 :循环体,格式: for ( 表达式 1 ;表达式2 ; 表达式3)语 句;,5.3用for语句实现循环结构,流程图:,5.3用for语句实现循环结构,说明:for语句的一般形式中的“表达式1”可以省略。此时应该在for语句之前给循环变量赋初值。如果表达式2省略,即不判断循环条件(认为表达式始终为真),循环会无终止的运行下去。表达式3省略时,应另外设置条件保证循环能正常结束。如在循环体内修改循环变量。表达式1和表达式3可以是简单的表达式,也

7、可以是一个逗号表达式;它可以与循环变量有关,也可以与循环变量无关。,5.3用for语句实现循环结构,如:for (i=1; ;i+) sum=sum+i;,它相当于:i=1;while (1) sum=sum+i;i+;,该循环是死循环,如:for (i=1; i100; ) sum=sum+i; i+;,在循环体内修改循环变量,循环可以正常终止,相当于: while (i100) sum=sum+i;i+;,如:for ( ; i100; ) sum=sum+i; i+;,(1)在循环语句前给循环变量赋初值 (2)循环体内修改循环变量,5.3用for语句实现循环结构,例:for( y=20,

8、x=1 ;x-y ;x+=x )printf(“%d,%dn“,x,y);,该语句输出如下:,1, 19 2, 18 4, 17 8, 16,5.3用for语句实现循环结构,例:求 n!,分析:求阶乘的过程为:,1) S=1 S1 = S0 12) S=12 S2 = S1 23) S=123 S3 = S2 3 n) S=12 n Sn = Sn-1100,S0 = 1,求阶乘表达式:,S = S i,初值:,S = 1,循环次数 i :,1n,5.3用for语句实现循环结构,流程图:,程序:,#define N 10 main ( ) int , i;long int s=1;for (

9、i=1; i=N; i+ )s *= i;printf(“s=%ldn“, s); ,1. 三种循环可以互相代替。 2. for、while属当型循环,dowhile循环属直到型循环。 3. 在for循环的循环体中无须对循环变量进行修改,其它两种循环则必须在循环体中对循环变量进行修改 。 4. for循环的初始条件可在表达式1中进行设置,其它两种循环则必须在进入循环之前进行设置。 5. 循环变量的值在循环体中可以被使用,但决不允许被修改。例如 while ( i=100 ) s+=i; i+; 合法的while ( i=100 ) i+=s; i+; 不合法的,三种循环几点说明:,三种循环结构

10、实例,例:求 水仙花数,即这个数等于它的百位、十位和个位数的立方和。 如153是一个水仙花数,因为153,分别用三种循环语句编写该程序。,三种循环结构实例,#include void main( ) int n=100,i,j,k; /*i、j、k用来放这个数的百位、十位和个位*/printf(“水仙花数是:”);while (n1000)i=n/100;j=(n/10)%10;k=n%10;if (n=i*i*i+j*j*j+k*k*k)printf(“%6d“,n);n=n+1; ,三种循环结构实例,#include void main( ) int n=100,i,j,k; printf

11、(“水仙花数是:”);do i=n/100;j=(n/10)%10;k=n%10;if (n=i*i*i+j*j*j+k*k*k)printf(“%6d“,n);n=n+1;while (n1000);,三种循环结构实例,#include void main( ) int n=100,i,j,k;printf(“水仙花数是:”);for(n=100;n1000;n+)i=n/100;j=(n/10)%10;k=n%10;if (n=i*i*i+j*j*j+k*k*k)printf(“%6d“,n); ,三种循环结构实例,例 编程 :求 。直到最后一项的绝对值小于10-7,分析:,三种循环结构实

12、例,求和:,停止求和:,三种循环结构实例,#include main() double n=0; double s=0;do n+=1;s+=pow(-1,n+1)/(2*n-1);while ( 1./(2*n-1) = 1e-7 );printf(“PI = %.6fn“, 4 * s );,程序:,三种循环结构实例,第五章 循环结构程序设计,continue 语句和 break 语句 循环的嵌套 goto语句,1、continue语句,格式:continue ;,功能:结束本次循环,使程序回行到循环条件,判断是否提前进入下一次循环。,continue语句只用于循环结构的内部,常与if语句

13、联合起来使用,以便在满足条件时提前结束本次循环。,5.4 continue语句和break语句,例 对除5的倍数以外的1100的数求和。,main( ) int i,s;s=0;for(i=1;i=100;i+)if (! (i%5)continue;s+=i; printf(“%d,%dn”,i,s); ,如果if判断语句为真,则跳出本次循环,回到循环条件,判断是否进行下一次循环,此处,当i为5的倍数时,!(i%5)为真,跳出本次循环,不执行continue下面的语句,直接进入下一次循环,即执行for语句,运行序列如下:i if(!(i%5) si1 假 s=0+1=12 假 s=1+2=3

14、3 假 s=3+3=64 假 s=6+4=105 真 不执行6 假 s=10+6=16, ,5.4 continue语句和break语句,main() int n,s;for (n=1,s=0;n=20;n=n+1) if (n%3=0) continue;printf(“%dt“,n);s=s+1;printf(“ntotal:%dn“,s);,例 统计150之间不能被3整除的数的个数并输出这些数。,运行结果:2 4 5 7 8 10 11 13 14 16 17 19 20 total: 14,5.4 continue语句和break语句,格式: break; 功能:循环体中遇见break

15、语句,立即结束循环,跳到循环体外,执行循环结构后面的语句。,2、break语句,在循环体中break语句常与if语句搭配使用,并且break语句只能用在switch语句和循环语句中。,break只能跳出一层循环(或者一层switch语句结构),5.4 continue语句和break语句,例 统计输入的字符个数,并输出它们,以“!”终止。,main( ) char chr;int s;for( s=0; ; s+)chr=getchar( );if (chr=!) break;else printf(“%c”,chr);printf(“s=%dn”,s);,如果if判断语句为真,则结束循环,执

16、行循环结构后面的语句,此处,当输入字符为“!”时,chr=!为真,结束for循环,执行循环结构后面的语句,即执行printf (“s=%dn”,s)语句,运行序列如下:输入 if(chr=!) 输出a 假 a5 假 5$ 假 $B 假 B! 真 4,5.4 continue语句和break语句,例 计算半径r=1到r=10时圆的面积,直到面积area大于100为止。,#define pi 3.14159 main( ) int r;float area; for( r=1;r100) break;printf(“ %fn”,area); ,5.4 continue语句和break语句,一个循环

17、体内又包含另一个完整的循环结构,称为循环的嵌套,内嵌的循环中还可以嵌套循环即为多层循环。,说明: 嵌套的原则: 不允许交叉 循环与分支可以相互嵌套但不允许交叉。,5.5 循环的嵌套,* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *,输出图形:,for(i=1;i=4;i+) printf(“* * * * * * * *”);printf(“n”);,5.5 循环的嵌套,其中语句:printf(“* * * * * * * *”); 等价于,for(j=1;j=8;j+) printf(“*”);,于是构成了二重循环

18、语句:,for(i=1;i=4;i+)for(j=1;j=8;j+) printf(“*”);printf(“n”);,5.5 循环的嵌套,上面的例子中:外循环由外循环控制变量i控制,i由1递增到4。,for(i=1;i=4;i+)for(j=1;j=8;j+) printf(“*”);printf(“n”);,每1次的外循环中,都要执行由内循环控制变量j控制的8次内循环操作和1次换行操作。,由此:每次内循环输出一个星号,外循环输出一行(8个)星号,4次外循环,输出了4行8列星号。,5.5 循环的嵌套,n = 1 ; while ( n = 3 ) printf( “ 输出外循环n=%dn“,

19、 n );i = 1 ;while ( i = 2 ) printf( “ 1) 输出内循环 i = %dn“, i );i + ; j = 1 ; while ( j = 3 ) printf( “ 2) 输出内循环 j = %dn“, j );j + ; n + ; ,例 读程序,写出运行结果:,5.5 循环的嵌套,输出外循环n=1,1) 输出内循环 i =1,1) 输出内循环 i =2,2) 输出内循环 j =1,2) 输出内循环 j =2,2) 输出内循环 j =3,输出外循环n=2,输出结果:,输出外循环n=3,5.5 循环的嵌套,例 输出九九乘法表,1 * 1 = 1 1 * 2

20、= 2 2 * 2 = 4 1 * 3 = 3 2 * 3 = 6 3 * 3 = 9 1 * 9 = 9 2 * 9 =18 9 * 9 = 81,5.5 循环的嵌套,5.5 循环的嵌套,main( ) int i ,j ;for ( i = 1 ; i = 9 ; i + ) for ( j = 1 ; j = i ; j + )printf(“%d*%d=%2d “, i, j, i*j );printf ( “n“);,程序 :,5.5 循环的嵌套,例 输出3100中的所有素数。,分析: 1)对于某个数n,如果从2到n1都不能被n整除,则该数n为素数。,此处,除数2到n可以用一个for

21、语句来表示:for (i=2;i=n-1;i=i+1),2)对于3100之间的数,可以表示如下:,for (n=3;n=100;n=n+1),5.5 循环的嵌套,main( ) int n,i;for (n=3;n=n) printf(“%dt“,n);,程序 :,5.5 循环的嵌套,例 读程序段,写出输出结果:,for(i=1;i=2;i+)for(j=1;j=3;j+) for(k=1;k=4;k+) printf(“*”);printf(“n”); printf(“nn”);,5.5 循环的嵌套,输出如下图形:,i从1到2,k从1到4,j从1到3,5.5 循环的嵌套,例 输出如下图形:,

22、* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *,5.5 循环的嵌套,* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *,分析:,共有5行,外循环 i:15,第一行输出4个空格,1个星号,第三行输出2个空格,5个星号,第二行输出3个空格,3个星号,第五行输出0个空格,9个星号,空格用循环变量j控制,j=5-i,星号用循环变量k控制,k=2*i-1,5.5 循环的嵌套,程序 :,main( ) int i,j,k; fo

23、r(i=1;i=5;i+)for(j=1;j=5-i;j+) printf(“ ”); for(k=1;k=2*i-1;k+) printf(“*”);printf(“n”); ,5.5 循环的嵌套,练习 输入一个整数n,输出如下回文塔。,11 2 11 2 3 2 1,n3时,n5时,11 2 11 2 3 2 11 2 3 4 3 2 11 2 3 4 5 4 3 2 1,5.5 循环的嵌套,程序 :,main( ) int n,i; printf(“input a numbern”);scanf(“%d”, ,5.5 循环的嵌套,格式:goto 语句标号 ; 标号:语句 ;,作用: 1)与 if 语句构成循环结构。 2)从循环体中强制退出。,5.6 goto语句和语句标号的使用,说明: 1)goto语句为无条件转向语句。 goto语句可以从循环体内跳出循环,尤其在多层循环中,使用goto语句可以跳到任意一层循环体内。 2)标号的命名规则同变量名。 3)goto语句不符合结构化程序设计原则,一般不主张使用。,5.6 goto语句和语句标号的使用,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报