收藏 分享(赏)

第五章 循环结构.ppt

上传人:gnk289057 文档编号:8011274 上传时间:2019-06-04 格式:PPT 页数:46 大小:1.29MB
下载 相关 举报
第五章 循环结构.ppt_第1页
第1页 / 共46页
第五章 循环结构.ppt_第2页
第2页 / 共46页
第五章 循环结构.ppt_第3页
第3页 / 共46页
第五章 循环结构.ppt_第4页
第4页 / 共46页
第五章 循环结构.ppt_第5页
第5页 / 共46页
点击查看更多>>
资源描述

1、第4章内容回顾,多重if结构就是在主if块的else部分中还包含其他if块 嵌套if结构是在主if块中还包含另一个if 语句 C语言规定,嵌套if结构中每个else部分总是属于前面最近的那个缺少对应的else部分的if语句 switch结构也可以用于多分支选择。用于分支条件是整型表达式,而且判断该整型表达式的值是否等于某些值(可以罗列的),然后根据不同的情况,执行不同的操作 条件运算符是 ifelse 语句的另一种表现形式 (条件表达式?:注意是它是一个表达式,而不是语句),Page 1/43,第5章,循环结构,Page 2/43,预习检查,循环结构的重要性 while与do-while的区别

2、 for与while/do-while的区别,Page 3/43,本章目标,理解为什么使用循环结构 熟练掌握while循环的使用 熟练掌握do-while循环的使用 理解while 和 do-while 循环的区别 熟练使用for循环 理解 break 和 continue 语句的用法 熟练使用嵌套循环,Page 4/43,本章结构,循环的必要性,循环结构,跳转语句,嵌套循环,C语言的各种循环结构,do-while与while比较,For循环,嵌套循环,Page 5/43,5-1 循环的必要性,int result1,result2,result3; int result4,result5;

3、result1 = 1 * 10; printf(“1 10 %d n“,result1); result2 = 2 * 10; printf(“2 10 %d n“,result2); result3 = 3 * 10; printf(“3 10 %d n“,result3); result4 = 4 * 10; printf(“4 10 %d n“,result4); result5 = 5 * 10; printf(“5 10 %d n“,result5);,1 10 10 2 10 20 3 10 30 4 10 40 5 10 50,输出结果,重复语句,Page 6/43,5-1 循

4、环的必要性,1 10 = 10 2 10 = 20 3 10 = 30 4 10 = 40 5 10 = 50,0 + 1,1 + 1,2 + 1,上个数字 + 1,.,重复(上个数字 +1) 10,Page 7/43,5-2 C 语言中的各种循环,while,do- while,for,需要多次重复执行一个或多个任务的问题考虑使用 循环来解决,Page 8/43,5-3 while 循环,while (表达式) 语句; ,while 循环的一般语法:,while (index 100) . . . . .index+; ,计算表达式的值,当值为真(非0)时,执行循环体语句,一旦条件为假,就停

5、止执行循环体。如果条件在开始时就为假,那么不执行循环体语句直接退出循环。,工作原理,示例,Page 9/43,5-3 while 循环,规则1:,while(循环条件) ,循环条件中使用的变量需要经过初始化,Page 10/43,5-3 while 循环,规则2:,while (index 100) . . . . .index+; ,while 循环主体中的语句必须修改循环条件的值,否则会形成死循环,while (1),Page 11/43,5-3 while 循环示例,例:用while语句求1100所有整数的和。,#include int main() int i;int sum=0;i=

6、1;while(i=100)sum=sum+i;i+;printf(“%dn“,sum); ,Page 12/43,#include int main () int num=1,result;while (num=10)result=num*10;printf(“%d 10 %d n“,num,result);num+; ,5-3 while 循环示例,1,null,10,2,输出: 1 10 10,2 10 20 3 10 30 4 10 40 5 10 50 6 10 60 7 10 70 8 10 80 9 10 90 10 10 100,11,100,Page 13/43,5-4 do

7、-while 循环,do 语句; while (表达式);,while 循环的一般语法:,do . . . . . .scanf(“%c”,它先执行循环体中的语句,然后再判断条件是否为真,如果为真则继续循环;如果为假,则终止循环。,工作原理,示例,Page 14/43,5-4 do-while 循环示例,例:用do-while语句求1100所有整数的和。,#include int main() int i,sum=0;i=1;do sum+=i;i+;while(i=100);printf(“%dn“,sum); ,Page 15/43,5-5 嵌套 while 循环,嵌套 while 循环的

8、语法,while(i = 10) . . .while (i = j). . . . . . . ,外循环,内循环,只有在内循环完全结束后,外循环才会进行下一趟。,Page 16/43,问题描述: 用“*”打印一个直角三角形图案。 图案如下所示:* * * * * * * * * *,5-5 嵌套 while 循环示例,int main() int nstars=1,stars;while(nstars = 10)stars=1;while (stars = nstars)printf(“*“);stars+;printf(“n“);nstars+; ,内层循环控制每行打印*号的个数,外层循环

9、控制打印的行数,输出: * * * * * * * * * *,Page 17/43,5-5 嵌套 do-while 循环,嵌套 do-while 循环的语法,do . . .do. . .while( . . .) . . . while( . . . ),外循环,内循环,只有在内循环完全结束后,外循环才会进行下一趟。,Page 18/43,5-5 嵌套 do-while 循环示例,int x; char i, ans; ans=y; do x=0;printf(“n请输入字符序列:“);doi=getchar();x+;while( i !=n );printf(“n输入的字符数为:%d“

10、, -x);printf(“n是否需要输入更多序列 (Y/N) ? “);ans = getchar();getchar(); while(ans =Y | ans = y);,输出: 请输入字符序列:GOODMORNING 输入的字符数为: 11 是否需要输入更多序列 (Y/N)?N,内存中的变量x i ans 0 y,检查条件判断是否按下回车键。如果否, 循环继续执行后续语句;如果是,循环回到开始处。,如按下 Y/y, 则循环从开始处执行,否则循环停止,Page 19/43,5-6 比较 while 和 do-while循环,while(循环条件) 循环体; ,do 循环体;while(

11、循环条件);,do-while 循环是先执行后判断,所以,即使开始条件为假,循环体也至少会被执行一次。,while循环是先判断后执行,所以,如果条件为假,则循环体一次也不会被执行。,比较 while 和 do-while 循环的工作原理,Page 20/43,5-6 通过示例比较,int value, r_digit; value = 0; do printf(“n请输入一个数:“);scanf(“%d“, ,int value, r_digit; value = 0; while( value = 0 ) printf(“n请输入一个数:“);scanf(“%d“, ,该程序用 do- wh

12、ile 循环将数字左右反转,同样的程序用 while 循环将数字左右反转,Page 21/43,阶段总结1,循环结构的特点是,在给定条件成立时,重复执行某程序段,直到条件不成立为止 while 循环用于在给定条件为真的情况下重复执行一组操作,while循环先判断后执行 do-while循环先执行后判断,因此循环将至少执行一次 在循环中,需要修改循环变量的值以改变循环条件,否则有可能形成死循环,Page 22/43,for( 表达式1 ; 表达式2 ; 表达式3 ) 语句; ,for 循环的一般语法:,5-7 for 循环,counter = 0; inum = 1; cnt = 100;,co

13、unter = 10; inum 0,counter +; inum = inum + 1; cnt-,分号用于分隔 for 循环的 三个表达式,1、计算表达式1的值,通常为循环变量赋初值; 2、计算表达式2的值,即判断循环条件是否为真,若值为真则执行循环体一次, 否则跳出循环; 3、计算表达式3的值,这里通常写更新循环变量的赋值表达式,然后转回第2步重复执行;,工作原理,1,2,3,4,Page 23/43,5-7 for 循环示例1,#include int main() int number,count,factorial=1;printf(“n 请输入任意一个正整数:“);scanf(

14、“%d“, ,请输入任意一个正整数:5,5,1,1,2,120,6,循环执行五次,5的阶乘 = 120,Page 24/43,5-7 逗号运算符,for(i = 0 , j = max ; i =max ; i+, j-)printf(“n%d + %d = %d”,i, j, i + j);,for语句中的三个表达式都可以是逗号表达式 逗号表达式就是通过“,”运算符隔开的多个表达式组成的表达式,但是表达式2中,只有最后一个表达式起作用 逗号表达式从左往右计算。逗号运算符在 C 语言运算符中的优先级最低,Page 25/43,5-7 for 循环示例2,#include int main()

15、int i,j,max;printf(“请输入一个值 n“);printf(“根据这个值可以输出以下加法表:“);scanf(“%d“, ,循环执行max次,初始化语句只执行一次,请输入一个值 根据这个值可以输出以下加法表:5 0 + 5 = 5 1 + 4 = 5 2 + 3 = 5 3 + 2 = 5 4 + 1 = 5 5 + 0 = 5,Page 26/43,5-7 for 循环的表达式,for 循环中有三个表达式 for 语句中的各个表达式都可以省略 分号分隔符不能省略,for( ; ; ) ; ,可省略,不能省略,Page 27/43,5-7 省略表达式,int num=0; fo

16、r(;num = 10 ;num +) printf(“%dn“,num*2); ,for(num=1;num+) . ,for(i=1;i=100;) sum=sum+1; i+; ,for( ; ; ) printf(“这将一直进行下去“);i = getchar();if(i = X | i = x)break; ,Page 28/43,5-7 各种循环比较,1.一种循环可以解决的问题,使用另外两种同样可行,只是方便程度不同。 2.while循环一般用于循环次数不定的情况,for循环一般用于循环次数确定的情况(也可以用于循环次数不定的情况),do-while循环一般用于至少需要执行一次的

17、情况。 3.for循环和while循环是先判断条件是否为真,再执行循环体,因此,可出现循环一次也不执行的情况;do-while循环是先执行循环体,再判断条件是否为真,因此,循环体至少执行一次。,5-8 转移控制语句,break中断循环语句的执行 continue中断本次循环的执行,进行下一次循环,5-8 break 语句,break语句可以改变程序的控制流 break语句用于do-while、while、for循环中时,可使程序终止循环而执行循环后面的语句 break语句通常在循环中与条件语句一起使用。若条件值为真,将跳出循环,控制流转向循环后面的语句 如果已执行break语句,就不会执行循环

18、体中位于 break 语句后的语句 在多层循环中,一个break语句只向外跳一层,Page 31/43,5-8 break语句,break 语句的两个用途: 跳出switch语句 跳出本层循环,Page 32/43,问题描述: 统计从键盘输入的若干个字符中有效字符的个数,以换行符作为输入结束。有效字符是指第一个空格符前面的字符,若输入字符中没有空格符,则有效字符为除了换行符之外的所有字符。,#include int main() int count=0,ch;printf(“n 请输入一行字符:“);while(ch=getchar()!=n)if(ch= )break;count+;prin

19、tf(“n 共有 %d 个有效字符。n“,count); ,5-8 break 语句示例,H,0,_,请输入一行字符:Hello world,共有 5 个 有效字符,1,循环执行 5 次,5,Page 33/43,5-9 continue 语句,continue 语句只能用在循环里 continue 语句的作用是跳过循环体中剩余的语句而执行下一次循环 对于while和do-while循环,continue 语句执行之后的动作是条件判断;对于for循环,随后的动作是变量更新,Page 34/43,5-9 continue语句,continue语句的作用: 立即结束本次循环,Page 35/43,

20、5-9 continue 语句,while() continue; ,while() break; ,跳出整个循环,继续下一次循环,Page 36/43,问题描述: 求整数1100的累加值,但要求跳过所有个位为3的数。,#include int main() int i,sum = 0;for(i=1; i=100;i+)if( i % 10 = 3)continue;sum += i;printf(“sum = %d n“,sum); ,5-9 continue 语句示例,null,0,13,1,循环执行到 i = 13,78,输出: sum = 4570,1,循环执行到 i = 101,1

21、01,4570,Page 37/43,5-10 使用循环语句应注意的问题,在循环体内除了修改控制次数外,不要把循环变量修改成其它无关的值,防止循环失去控制。 在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU 跨切循环层的次数。,低效率:长循环在最外层 for (row=0; row100; row+) for ( col=0; col5; col+ )sum = sum + arowcol; ,高效率:长循环在最内层 for (col=0; col5; col+ ) for (row=0; row100; row+)sum = sum + arowcol

22、; ,Page 38/43,5-10 使用循环语句应注意的问题,如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面。示例a的程序比示例b多执行了N-1 次逻辑判断。(循环中不改变条件),效率低但程序简洁 for (i=0; iN; i+) if (condition)DoSomething();elseDoOtherthing(); ,效率高但程序不简洁 if (condition) for (i=0; iN; i+)DoSomething(); else for (i=0; iN; i+)DoOtherthing(); ,Page 39/43,5-10 使用循环语句应注

23、意的问题,建议for 语句的循环控制变量的取值采用“半开半闭区间”写法。,循环变量属于半开半闭区间 for ( x=0; xN; x+) . ,循环变量属于闭区间 for ( x=0; x=N-1; x+) . ,Page 40/43,5-11 循环嵌套,1. 一个循环体内包含着另一个完整的循环结构,就称为嵌套循环。 2. 内嵌的循环中又可以嵌套循环,从而构成多重循环。 3. 三种循环可以相互嵌套。下面几种都是合法的嵌套形式:,(6) do for(; ;) .while( );,(5) for( ; ;) while() . ,(4) while( ) do while( );.,(1) w

24、hile( ) while() .,(3) for( ) for(; ;) .,(2) do do while( );.while( );,问题描述: 用“*”输出一个菱形图案,图案如下: * * * * * * * * * * * * * * * * * * * * * * * * *,5-11 示例1,int main() int i,j,k; for(i=1;i=4;i+)for(j=1;j=4-i;j+)printf(“ “);for(k=1;k=2*i-1;k+) printf(“*“);printf(“n“);for(i=1;i=3;i+)for(j=1;j=i;j+)printf

25、(“ “);for(k=1;k=7-2*i;k+) printf(“*“);printf(“n“); ,输出: * * * * * * * * * * * * * * * *,* * * * * * * * *,控制打印的行数,控制每行打印的空格数,控制每行打印的*号数,控制打印的行数,控制每行打印的空格数,控制每行打印的*号数,Page 42/43,问题描述: 打印输出100至200之间的全部素数。 分析:素数是指只能被1和它本身整除的数。算法比较简单,先将这个数被2除,如果能整除,且该数又不等于2,则该数不是素数。如果该数不能被2整除,再看则是否能被3整除。如果被3整除,并且该数不等于3,

26、则该数不是素数,否则再判断是否被4整除,依此类推,该数只要是能被小于本身的某个数整除时,就不是素数。,5-11 嵌套循环示例2,int main() int i,j,n;n=0;for(i=100;i=200;i+)j=2;while(i%j!=0) j+;if(i=j)printf(“%4d“,i);n+;if(n%8=0)printf(“n“);printf(“n“); ,输出: 从100到200之间所有的素数为:101 103 107 109 113 127 131 137139 149 151 157 163 167 173 179181 191 193 197 199,控制每行输出8

27、个素数,如果第一个能被整除的数等于该数本身,则说明该数为素数,从2到i之间寻找第一个能被整除的数,Page 43/43,5-11 嵌套循环示例3,int main() int i,num;char answer;doprintf(“请输入一个数:“);scanf(“%d“, ,输出: 请输入一个数: 58 该数是 58您是否还要输入其他的数(y/n)? y 请输入一个数: 64 该数是 64您是否还要输入其他的数(y/n)? n Press any key to continue,Page 44/43,阶段总结 2,for 循环与 while 循环类似,属于先判断后执行 for 语句中有三个表达式:表达式1通常用来给循环变量赋初值;表达式2通常是循环条件;表达式3用来更新循环变量的值 for 语句中的各个表达式都可以省略,但要注意分号分隔符不能省略 如果省略表达式2和表达式3需要在循环体内设法结束循环,否则会导致死循环,Page 45/43,阶段总结 2,break 语句用在循环中时,可以直接终止循环,将控制转向循环后面的语句 continue 语句的作用是跳过循环体中剩余的语句而执行下一次循环 嵌套循环时,必须将被嵌套的循环语句完整地包含在外层循环的循环体内,Page 46/43,

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

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

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


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

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

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