《第五章循环控制ppt课件》由会员分享,可在线阅读,更多相关《第五章循环控制ppt课件(48页珍藏版)》请在金锄头文库上搜索。
1、第五章 循环控制,重点:1)三种循环结构,当型循环与while语句,直到型循环与do while语句,次数循环与for语句,2)break语句和continue语句,一、概述,循环结构:在一定的条件下,重复执行一组语句。,被重复执行的语句称为“循环体”,实现循环结构的语句有3种:,1.while语句,2.dowhile语句,3.for语句,当 (i小于20 ),练习:输出20以内的所有整数,i=1,i小于20,输出i,真,假,程序结束,i=i+1,重复操作 (循环),输出i,i=i+1,循环体,while,i20,printf(“%d”,i);,i=i+1;,#include void mai
2、n() int i; ,i=1;, ,while(i=20),printf(“%d”,i);,i=i+1;,1、循环结构之 while语句,形式: while (条件) 循环体 ,功能:在程序遇到while时,首先检查条件是否成立,若成立则执行循环体语句,然后再去检查条件,若条件仍然成立则继续执行循环体,依次反复,直到某个时刻条件不再成立,则退出循环执行后续语句。,用来实现“当型”循环,流程图:,条件p,循环体,真,假,后续语句,1、循环结构之while语句,形式: while (条件) 循环体 ,练习:输出100以内所有整数。,#include void main() int i=1; wh
3、ile(i100) printf(“%d”,i); i=i+1; ,if(i%3=0),能被3整除的数。,注: (1)循环体如果包含一个以上的语句,应该用花括号括起来,组成复合语句。,(2)循环体中必须有使循环趋向结束的语句,否则会出现死循环。,i=i+1;,例题:输出20以内的所有整数,i=1,i小于20,输出i,真,假,程序结束,i=i+1,二者的区别?,先判断 再执行操作,先执行操作 再进行条件判断,实现形式: while(条件) 循环体 ,实现形式: do 循环体 while(条件);,2、循环结构之dowhile语句,注意不要漏掉分号,#include void main() int
4、 i=1; while(i20) printf(“%d”,i); i=i+1; ,例题:输出20以内的所有整数,改成do while结构,do printf(“%d”,i); i=i+1; while(i20);,do 语句与dowhile的区别,while () 循环体,do 循环体 while();,循环体至少执行一次,有可能循环体一次也执行不到。,#include void main() int i=1; while(i20) printf(“%d”,i); i=i+1; ,#include void main() int i=1; do printf(“%d”,i); i=i+1; w
5、hile(i20); ,20;,20;,作用:使变量的值增1或减1,补充: 自增、自减运算符 + -,1)该运算符为单目运算符,其运算对象只能是变量,不能为常量或者表达式。,例如:i+ x- - 都是正确的 5+ (x+y)+ 都是错误的,2)该运算符作前缀、后缀都可以 例如 i+ +i i- - - -i 都是正确的,3)对变量而言 i+ 或者+i都相当于i=i+1 i- -或者- -i 都相当于i=i-1,程序的输出结果为,3)但如果作为表达式,前缀和后缀则不同: 前缀:先运算再取值 后缀:先取值再运算,例如: void main() int i=3; printf(“%dn”,i+ );
6、 ,+i,3,4,下列程序的输出结果为,void main()int i=5,j; j=i+; printf(“i=%d,j=%dn”,i,j); ,程序结果: i=6,j=5,j=+i;,i=6,j=6,4)多用于循环语句中,使变量自增或者自减,也用于指针变量,使指针指向下一个或者前一个地址。 例如前例中:,#include void main() int i=1; while(i20) printf(“%d”,i); i=i+1; ,#include void main() int i=1; do printf(“%d”,i); i=i+1; while(i20) ; ,i+;,i+;,例
7、题:求 s=1+2+3+4+100,s=0,s+1,s,s+2,s,s+3,s,s+99,s,s+100,s,s+i,i+,1,1+2,1+2+3,1+2+3+99,1+2+3+99+100,S=0,i=1,i=100,s=s+i,真,假,输出s,i=i+1,main() int i,s; i=1; s=0; ,while (i=100),s=s+i;,i+;,printf(“s=%dn”,s);, ,练习:求p=5!,main() int i ,p; i=1; p=1; ,while (i=5),p=p*i;,i+;,printf(“p=%dn”,p);, ,p=1,5,p=p*i,p,作业
8、:,1:编写一个猜数的小游戏。 游戏规则:由计算机随机产生一个100以内的整数,用户猜该数是多少,如果没有猜对,则系统提示“太大”或者“太小”,然后继续猜。直到猜对为止。(guess.c),2:编程进行100以内的四则运算练习。并统计做题的总数、答对题的数目和答错题的数目。(opration.c),3:输入一个任意位数的正整数,然后由低位到高位输出每一位上的数字。如输入456789,则输出9,8,7,6,5,4,引申练习:可以玩多次的猜数游戏,知道不想玩为止。,引申练习:输入一个任意位数的正整数,然后由高位到低位输出每一位上的数字。 如输入446789,则输出4,5,6,7,8,9,for(
9、),#include void main() int i; i=1 ; while(i20) printf(“%d”,i); i+; ,i=1,i20,i+,基本形式: for(表达式1;表达式2;表达式3) 循环体,printf(“%d”,i);,3、循环结构之for语句,(1)形式:,多用于已经知道循环次数确定的情况下,也可以用于已知循环条件的情况。使用最为灵活。,for(表达式1;表达式2;表达式3) 循环体,(2)执行过程:,求解表达式1,判断表达式2,真,循环体,表达式3,假,循环体后的语句,for(表达式1;表达式2;表达式3) 循环体,注:一般情况下各部分表达式的作用:,表达式1
10、:循环变量赋初值,表达式2:循环成立的条件,表达式3:循环变量的变化,所以,for语句最多的采用形式为:,for(循环变量赋初值;循环条件;循环变量变化) 循环体,例如:for(i=0;i8;i+) ,例:,/循环变量赋初值,/循环条件,/循环变量的变化,/循环语句,用for语句实现:,for( ; ; ),i=1,i=100,i+,s=s+i;,for(循环变量赋初值;循环条件;循环变量变化) 循环体,注:1)各个部分均可省略,但分号不能省。,省略表达式1:应在for语句之前给循环变量赋初值。,for(i=1;i=100;i+) s=s+i;,i=1;,省略表达式2:不进行循环条件的判断,则
11、循环将会无终止的执行下去,即死循环。,for(i=1; i=100;i+) s=s+i;,省略表达式3:可以在循环体内实现循环变量的变化,for(i=1; i=100;i+) s=s+i;,i+;, ,注:2)各个部分可以为各种形式的与循环无关的表达式,各表达式之间用逗号隔开。,main() int i,s; s=0; for( i=0;i=100; i+) s+=i; printf(“sum is %dn”,s); ,s=0,s+=i ,;,main() int i; for(i=1;i=4;i+) printf( ); ,练习:输出4的乘法表,1*4=4 2*4=8 3*4=12 4*4=
12、16,“ ”,*4=,%d,%d,i,i*4,练习:输出九九乘法表(lt5_5.c),1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*9=9 2*9=18 3*9=27 9*9=81,main() int i; for(i=1;i=4;i+) printf(“%d* 4 =%d ”,i, i*4 ); ,j,%d,j, ,for(j=1;j=9;j+),j;,printf(“n”);,printf(“n”);,i*j,4、循环结构的嵌套,以上3种形式的循环结构可以相互嵌套。,一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多
13、层循环。,练习:编写一个猜数的小游戏。 游戏规则:由计算机随机产生一个100以内的整数,用户猜该数是多少,如果没有猜对,则系统提示“太大”或者“太小”,然后继续猜。直到猜对为止。,提示:太大了,否,太小了,否,提示:太小了,是,提示:猜对了。 程序结束,系统产生数据,输入数据,太大了,是,x,y,printf(“太大了!n“);,else,printf(“太小了!n“);,if(yx),if(yx),#include #include #include void main() int x,y; srand(time(0); /以系统时钟作为随机种子 x=rand()%100; /产生随机数 ,
14、 ,printf(请输入你猜的数据:“);,scanf(“%d”,printf(“太大了!n“);,else,printf(“太小了!n“);,if(yx),while(y!=x);,do,if(yx),printf(恭喜你,猜对了!该数是:%dn,x);,printf(请输入你猜的数据:“);,scanf(“%d”,printf(太大了!n);,else,printf(太小了!n;,if(yx),while(y!=x);, ,printf(请输入你猜的数据:);,scanf(“%d”,改成while结构,提示:太大了,太大了,是,提示:太小了,是,提示:猜对了。 程序结束,系统产生数据,输入
15、数据,猜对了吗,否,否,例题:编程判断一个数是否为素数(质数)。素数是大于1的整数,除了1和本身之外不能被其他的任何数整除。 例如:3,7,11,13,19,23,31等,void main()int x,i; scanf(“%d”, ,输入x,i=2,x与i能否整除?,真,i+,ix,假,假,退出循环,真,for(i=2;ix;i+),if(i=x) printf(“non”); else printf(“yesn”);,if(x%i=0),break;,5、break语句,作用:跳出其所在的循环体。提前结束该层循环。,练习:输出100以内的所有素数。,练习:将下面程序补充完整,使程序计算100以内所有可被7整除的自然数之和。 #include void main() int x=1; int sum=0; while(1) if(x100) _; if( )sum=sum+x; x+; printf(“%dn”,sum); ,break,x%7=0,程序分析题 #include voidmain() inti,j; for(i=l;i=4;i+=1) for(j=2;j=4;j+=j) if(i+j5) printf(+);