C语言多重循环语句.ppt
学习内容:学习内容:3、while循环循环5、for循环循环6、循环的嵌套、循环的嵌套4、do-while循环循环7、几种循环结构的比较、几种循环结构的比较1、循环控制概述、循环控制概述2、goto语句和语句和goto循环循环重难点重难点:1、while语句、语句、do-while语句和语句和for语句及三种循环之间语句及三种循环之间嵌套和区别。嵌套和区别。学习目标:学习目标:1、熟练掌握、熟练掌握while、do-while和和for语句及三种循环之间语句及三种循环之间的嵌套和区别。的嵌套和区别。8、辅助控制语句、辅助控制语句9、循环结构程序设计举例、循环结构程序设计举例 引例:给出引例:给出N个儿童的体重,要求计算平均体重个儿童的体重,要求计算平均体重#define N 10#include “stdio.h”main()/*定义变量存放某儿童体重、总体重和定义变量存放某儿童体重、总体重和 平均体重平均体重*/float Weight,total=0,aver;*输入输入N个儿童的体重并计算总体重个儿童的体重并计算总体重*/scanf(“%f”,&Weight);/*第第1个儿童的体重个儿童的体重*/total=total+Weight;/*前前1个儿童的总体重个儿童的总体重*/scanf(“%f”,&Weight);/*第第2个儿童的体重个儿童的体重*/total=total+Weight;/*前前2个儿童的总体重个儿童的总体重*/scanf(“%f”,&Weight);/*第第3个儿童的体重个儿童的体重*/total=total+Weight;/*前前3个儿童的总体重个儿童的总体重*/scanf(“%f”,&Weight);/*第第4个儿童的体重个儿童的体重*/total=total+Weight;/*前前4个儿童的总体重个儿童的总体重*/scanf(“%f”,&Weight);/*第第5个儿童的体重个儿童的体重*/total=total+Weight;/*前前5个儿童的总体重个儿童的总体重*/scanf(“%f”,&Weight);/*第第6个儿童的体重个儿童的体重*/total=total+Weight;/*前前6个儿童的总体重个儿童的总体重*/scanf(“%f”,&Weight);/*第第7个儿童的体重个儿童的体重*/total=total+Weight;/*前前7个儿童的总体重个儿童的总体重*/scanf(“%f”,&Weight);/*第第8个儿童的体重个儿童的体重*/total=total+Weight;/*前前8个儿童的总体重个儿童的总体重*/scanf(“%f”,&Weight);/*第第9个儿童的体重个儿童的体重*/total=total+Weight;/*前前9个儿童的总体重个儿童的总体重*/scanf(“%f”,&Weight);/*第第10个儿童的体重个儿童的体重*/total=total+Weight;/*10个儿童的总体重个儿童的总体重*/aver=total/N;/*10个儿童的平均体重个儿童的平均体重*/printf(“%d个儿童的平均体重是个儿童的平均体重是:%.2n”,N,aver);#define N 10#include “stdio.h”main()/*定义变量存放某儿童体重、总体重和平均体重定义变量存放某儿童体重、总体重和平均体重*/int i;float Weight,total=0,aver;*输入输入N个儿童的体重并计算总体重个儿童的体重并计算总体重*/for(i=1;i=N;i+)scanf(“%f”,&Weight);/*第第i个儿童的体重个儿童的体重*/total=total+Weight;/*i个儿童的总体重个儿童的总体重*/aver=total/N;/*10个儿童的平均体重个儿童的平均体重*/printf(“%d个儿童的平均体重是个儿童的平均体重是:%.2n”,N,aver);循环结构是结构化程序设计的基本结构之一。循环结构是结构化程序设计的基本结构之一。C语言中的循环结构可以用以下语句实现语言中的循环结构可以用以下语句实现:1.while 循环循环 2.do-while 循环循环 3.for 循环循环一、一、while语句的语法格式语句的语法格式:while(表达式表达式)循环体循环体 while循环控制流程图循环控制流程图表达式表达式循环体循环体非非00二、执行过程二、执行过程:1.计算计算while后圆括号内表达式的值,为非后圆括号内表达式的值,为非0则执行第则执行第步,否则执行第步,否则执行第步;步;2.执行循环体,然后返回第执行循环体,然后返回第步;步;3.结束循环,执行结束循环,执行while语句的下一语句。语句的下一语句。例例6-2:从键盘输入正整数:从键盘输入正整数n,求求 1+2+3+.+n。#include#include void main()void main()int n,i,sum=0;int n,i,sum=0;scanf(“%u”,&n);scanf(“%u”,&n);i=1;i=1;while(i=n)while(i=n)sum+=i;sum+=i;i+;i+;printf(“1%u sum=%d,n,sum);printf(“1%u sum=%d,n,sum);#include main()unsigned n,i=1;long factorial=1;scanf(“%u”,&n);while(i=n)factorial=factorial*I;i+;printf(“%u!=%ld”,n,factorial);例:从键盘输入正整数例:从键盘输入正整数n,求求n!三、三、while语句的功能语句的功能:当表达式为非当表达式为非0时重复执行循环体。时重复执行循环体。四、注意事项四、注意事项:1.while 语句的特征是语句的特征是”先判断后执行先判断后执行”;允许;允许0次循环。次循环。2.如果循环体包含一个以上的语句,那么应该用复合语如果循环体包含一个以上的语句,那么应该用复合语句句“”的形式。的形式。例如,程序段例如,程序段1:sum=i=0;while(i10)+i;sum+=i;程序段程序段程序段程序段2:2:sum=i=0sum=i=0;while(i10)while(i10)+i;+i;sum+=i;sum+=i;想一想执行程序段想一想执行程序段想一想执行程序段想一想执行程序段11和程序段和程序段和程序段和程序段22后后后后ii、sumsum的值的值的值的值?3.在循环体中应有使循环趋于结束的语句。在循环体中应有使循环趋于结束的语句。考虑以下考虑以下考虑以下考虑以下whilewhile循环的执行情况循环的执行情况循环的执行情况循环的执行情况:i=1;i=1;sum=0;sum=0;while(i10)while(i10)sum+=i;sum+=i;i=1 i=1;sum=0;sum=0;while(i10)while(i10)sum+=i;sum+=i;+i;+i;一、一、do-while语句的语法格式语句的语法格式:do循环体循环体while(表达式表达式);循环体语句循环体语句表达式表达式真真假假do-while循环控制流程图循环控制流程图二、执行过程二、执行过程:1.执行循环体执行循环体;2.求解求解while后圆括号内的表达式后圆括号内的表达式,若为非若为非0则返回第则返回第1步步;否否则执行第则执行第3步步;3.结束循环结束循环,执行执行do-while语句的下一语句。语句的下一语句。例例6-4:从键盘输入正整数:从键盘输入正整数n,求求 1+2+3+.+n。#include#include void main()void main()int i=1;int i=1;unsigned n,sum=0;unsigned n,sum=0;scanf(“%u”,&n);scanf(“%u”,&n);do do sum+=i;sum+=i;i+;i+;while(i=n)while(i=n);printf(“1%dsum=%u,n,sum);printf(“1%dsum=%u,n,sum);4、do-while语句的功能语句的功能:执行循环体,直到表达式为执行循环体,直到表达式为0。#include main()unsigned n,i=1;long factorial=1;scanf(“%u”,&n);do factorial=factorial*i;i+;while(i=n);printf(“%u!=%ld”,n,factorial);例:从键盘输入正整数例:从键盘输入正整数n,求求n!注意事项注意事项:1.do-while 语句的特征是语句的特征是“先执行,后判断先执行,后判断”;循环体最;循环体最少执行一次。少执行一次。2.对于同一个问题对于同一个问题,既可以用既可以用 while语句语句,也可以用也可以用do-while语句处理。语句处理。3.特别要注意特别要注意while后后加分号加分号;4.while和和do-while循环的比较:循环的比较:unsigned n,i=1,sum=0;unsigned n,i=1,sum=0;scanf(“%u”,&n);scanf(“%u”,&n);while(i=n)while(i=n)sum+=i;sum+=i;i+;i+;unsigned n,i=1,sum=0;unsigned n,i=1,sum=0;scanf(“%u”,&n);scanf(“%u”,&n);dodo sum+=i;sum+=i;i+;i+;while(i=n)while(i=n);一、一、for语句的语法格式语句的语法格式:for(表达式表达式1;表达式表达式2;表达式表达式3)循环体循环体二、说明二、说明:2.循环体由语句构成循环体由语句构成,以实现某种功能。以实现某种功能。1.表达式表达式1和表达式和表达式3是算式表达式是算式表达式,表达式表达式2是条件;是条件;for(i=1,sum=0;i=100;i+)sum=sum+i;表达式表达式2循环体循环体表达式表达式1表达式表达式3非非00for循环控制流程图循环控制流程图三、执行过程三、执行过程:1.求解表达式求解表达式1;2.求解表达式求解表达式2,若为非若为非0则执行第则执行第3步步;否则执行第否则执行第5步步;3.执行循环体执行循环体;4.求解表达式求解表达式3,然后返回第然后返回第2步步;5.结束循环结束循环,执行执行for语句的下一语句。语句的下一语句。例:从键盘输入正整数例:从键盘输入正整数n,求求 1+2+3+.+n。#include#include void main()void main()int i;int i;unsigned n,sum=0;unsigned n,sum=0;scanf(“%u”,&n);scanf(“%u”,&n);for(i=1;i=n;i+)for(i=1;i=n;i+)sum+=i;sum+=i;printf(“1%u sum=%d,n,sum);printf(“1%u sum=%d,n,sum);#includemain()unsigned n,i;long factorial=1;scanf(“%u”,&n);for(i=1;i=n;+i)factorial=factorial*i;printf(“%u!=%ld”,n,factorial);例:从键盘输入正整数例:从键盘输入正整数n求求n!四、四、for语句的功能语句的功能:当表达式当表达式2为非为非0时重复执行循环体。时重复执行循环体。五、使用五、使用for语句的注意事项语句的注意事项:1.任意表达式都可省略任意表达式都可省略,但表达式后的分号必须保留:但表达式后的分号必须保留:例:求例:求1100之内偶数和。之内偶数和。main()int i,sum=0;for(i=1;i100;i+)if(i%2=0)sum+=i;printf(“1-100之内偶数之内偶数=%d”,sum);省略省略“表达式表达式1”时时,应在应在for语句之前给循环变量赋初值语句之前给循环变量赋初值;i=1;for(;i=100;i+)sum+=i;省略省略“表达式表达式2”时时,编译系统默认表达式编译系统默认表达式2为非为非0;省略省略“表达式表达式3”时时,应在循环体中修改循环控制变量应在循环体中修改循环控制变量,以以保证循环正常结束保证循环正常结束.for(i=1;i+)sum+=i;for(i=1;i=100;)sum+=i;i+;2.表达式表达式2可以是任何类型可以是任何类型,其值理解为逻辑量;其值理解为逻辑量;3.若表达式若表达式2从一开始就为从一开始就为0,那么循环体一次也不执行;那么循环体一次也不执行;4.表达式表达式1可以包含除给循环变量赋初值之外的其他操作;可以包含除给循环变量赋初值之外的其他操作;5.表达式表达式3可以做属于循环体的操作;可以做属于循环体的操作;6.逗号表达式的最主要的用处逗号表达式的最主要的用处:让程序员使用多个初始化表达式和多个值递增表达式让程序员使用多个初始化表达式和多个值递增表达式,这在这在for语句中表现为表达式语句中表现为表达式1和表达式和表达式3都是逗号表达式。都是逗号表达式。for(i=1,j=100,sum=0;ij;i+,j-)sum+=i+j;for(i=1,sum=0;i=n;sum+=i+)for(i=1,sum=0;i=n;sum+=i+);for(i=1,sum=0;i=n;i+)for(i=1,sum=0;i=n;i+)sum+=i;sum+=i;六、循环语句的使用要点六、循环语句的使用要点:1.循环体含一个以上语句时循环体含一个以上语句时,必须以复合语句的形式出现必须以复合语句的形式出现;当循环体为空时不要掉了分号当循环体为空时不要掉了分号(;)。2.注意循环控制变量的初值及其修改注意循环控制变量的初值及其修改,以保证循环正常以保证循环正常执行和正常结束。执行和正常结束。3.可以在循环体中安排使表达式变为可以在循环体中安排使表达式变为”0”的语句的语句,也可以也可以通过表达式本身实现这种控制功能。通过表达式本身实现这种控制功能。for(i=1;i=n;i+)if(!(i%2)sum=sum+i;for(i=1;i=n;)if(!(i%2)sum=sum+i;i+;4.应避免无限循环、永不执行的循环、执行次数不正确应避免无限循环、永不执行的循环、执行次数不正确的循环等情况的循环等情况.5.对于嵌套的循环语句,应写成缩进对齐格式,以增加对于嵌套的循环语句,应写成缩进对齐格式,以增加程序结构的清晰感和美感程序结构的清晰感和美感.当一个循环体内又包含另一个完整的循环结构时,就称当一个循环体内又包含另一个完整的循环结构时,就称为为循环的嵌套循环的嵌套while(条件条件1)while(条件条件2)do do while(条件条件2);while(条件条件1);for(表达式表达式1;表达式;表达式2;表达式;表达式3)for(表达式表达式1;表达式;表达式2;表达式;表达式3)while(条件条件1)do while(条件条件2);while(条件条件)for(表达式表达式1;表达式;表达式2;表达式;表达式3)do while(条件条件2)while(条件条件1);do for(表达式表达式1;表达式;表达式2;表达式;表达式3)while(条件条件);for(表达式表达式1;表达式;表达式2;表达式;表达式3)while(条件条件)for(表达式表达式1;表达式;表达式2;表达式;表达式3)do while(条件条件);(1).内层循环出现在外层循环的循环体中;并且每次从内层循环出现在外层循环的循环体中;并且每次从外层进入内层时,内层循环控制变量必须重新赋值。外层进入内层时,内层循环控制变量必须重新赋值。1.注意事项注意事项:例例6-11:编写程序显示编写程序显示“九九乘法表九九乘法表”。#includemain()int i,j;for(i=1;i=9;i+)for(j=1;j=i;j+)printf(“%d*%d=%-4d”,i,j,i*j);printf(“n”);(2).根据具体问题分析内外层循环控制变量的关系。根据具体问题分析内外层循环控制变量的关系。1.四种循环都可以处理同一问题,一般情况下可以互换,四种循环都可以处理同一问题,一般情况下可以互换,但是尽量不用但是尽量不用if-goto型循环。型循环。3.while 和和do-while 循环,在循环,在while后面只指定循环的条后面只指定循环的条件,而使循环趋于结束的语句包含在循环体中。而件,而使循环趋于结束的语句包含在循环体中。而for 循循环可以在环可以在“表达式表达式3”中包含使循环趋于结束的操作。中包含使循环趋于结束的操作。2.用用while 和和 do-while循环时,循环变量的赋值应在循环时,循环变量的赋值应在while 和和 do-while之前之前;而;而for 循环可以在循环可以在“表达式表达式1”中中实现。实现。4.while循环和循环和for循环:循环:先判断后执行先判断后执行;do-while循环:循环:先执行后判断先执行后判断。5.对对 while循环、循环、do-while循环、循环、for循环,用循环,用 break 语语句句跳出循环,跳出循环,可以用可以用 continue 语句语句结束结束本次循环。本次循环。例如:求例如:求 1+2+3+.+100?void main()void main()int i,sum=0;int i,sum=0;i=1;i=1;loop:loop:if(i=100)if(i=100)sum=sum+i;sum=sum+i;i+;i+;goto loop;goto loop;printf(%d,sum);printf(%d,sum);void main()void main()int i,sum=0;int i,sum=0;i=1;i=1;while(i=100)while(i=100)sum=sum+i;sum=sum+i;i+;i+;printf(%d,sum);printf(%d,sum);goto 语句语句构成的循环构成的循环while语句语句构成的循环构成的循环void main()void main()int i,sum=0;int i,sum=0;i=1;i=1;do do sum=sum+i;sum=sum+i;i+;i+;while(i=100);while(i=100);printf(%d,sum);printf(%d,sum);do-while语语句构成的循环句构成的循环void main()void main()int i,sum=0;int i,sum=0;for(i=1;i=100;for(i=1;i=100;i+i+)sum=sum+i;sum=sum+i;printf(%d,sum);printf(%d,sum);for语句构语句构成的循环成的循环一、一、C中控制转移语句的种类中控制转移语句的种类:1.break语句语句,continue语句语句,goto语句语句:用于改变控制结构用于改变控制结构预定的程序流程。预定的程序流程。2.return语句语句:用于从函数返回到函数的调用处。用于从函数返回到函数的调用处。二、二、break语句语句1.语法格式语法格式:break;2.作用作用:终止终止switch、for、while、do-while语句的执行语句的执行,而而转去执行相应的下一语句转去执行相应的下一语句.阅读以下程序,分析其功能:阅读以下程序,分析其功能:void main()int i;unsigned factorial;factorial=1;for(i=1;132768)break;printf(%d!=%dn,i,factorial);3.使用使用break语句的注意事项语句的注意事项:(1).break语句只能用于循环语句或语句只能用于循环语句或switch语句语句;例:输出例:输出100以内的素数。以内的素数。void main()int n,i;for(n=2;n=100;n+)for(i=2;i=n)printf(t%d,n);(2).在多层嵌套结构中在多层嵌套结构中,break语句终止并跳出它所在的语句终止并跳出它所在的那一层。那一层。