C语言程序设计:第5章 循环结构程序设计 (2)

上传人:工**** 文档编号:568653162 上传时间:2024-07-25 格式:PPT 页数:32 大小:898KB
返回 下载 相关 举报
C语言程序设计:第5章 循环结构程序设计 (2)_第1页
第1页 / 共32页
C语言程序设计:第5章 循环结构程序设计 (2)_第2页
第2页 / 共32页
C语言程序设计:第5章 循环结构程序设计 (2)_第3页
第3页 / 共32页
C语言程序设计:第5章 循环结构程序设计 (2)_第4页
第4页 / 共32页
C语言程序设计:第5章 循环结构程序设计 (2)_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《C语言程序设计:第5章 循环结构程序设计 (2)》由会员分享,可在线阅读,更多相关《C语言程序设计:第5章 循环结构程序设计 (2)(32页珍藏版)》请在金锄头文库上搜索。

1、1第第5 5章循环结构程序设计章循环结构程序设计 5.1 5.1 循环结构解决的问题循环结构解决的问题 5.2 while5.2 while语句语句 5.3 do-while5.3 do-while语句语句 5.4 for5.4 for语句语句 5.5 5.5 循环语句的比较循环语句的比较 5.6 5.6 循环嵌套循环嵌套 5.7 5.7 改变循环的执行流程改变循环的执行流程 5.8 5.8 gotogoto语句语句 5.9 5.9 循环结构程序综合举例循环结构程序综合举例5.15.15.15.1循环结构解决的问题循环结构解决的问题循环结构解决的问题循环结构解决的问题 程序设计解决实际问题的过

2、程中经常会碰到许多具有规律程序设计解决实际问题的过程中经常会碰到许多具有规律性的重复运算处理的问题,在处理这类问题时需要把程序中的性的重复运算处理的问题,在处理这类问题时需要把程序中的某些语句反复执行多次。下面是具有这种特征的一些例子:某些语句反复执行多次。下面是具有这种特征的一些例子: 向计算机系统输入向计算机系统输入100100个学生的档案,重复进行个学生的档案,重复进行100100次输入次输入操作。操作。 为全班为全班3030个学生分别计算其个学生分别计算其5 5门课的平均成绩,重复进行门课的平均成绩,重复进行3030次求平均数的算术运算。次求平均数的算术运算。 求求1 + 2 + 3

3、+ 1 + 2 + 3 + + 100 + 100的和,重复进行的和,重复进行100100次加法操作。次加法操作。 检查检查100100名毕业生是否具有获得学位证书的资格,重复进行名毕业生是否具有获得学位证书的资格,重复进行100100次判断操作。次判断操作。 C C语言提供标准的三种循环控制语句:语言提供标准的三种循环控制语句:whilewhile语句、语句、do-do-whilewhile语句和语句和forfor语句。语句。5.25.25.25.2 whilewhilewhilewhile语句语句语句语句whilewhile循环语句的一般形式如下:循环语句的一般形式如下:while(whi

4、le(表达式表达式) ) 语句语句使用使用whilewhile语句时应该注意以下几点:语句时应该注意以下几点:(1) (1) 循环体只能包含一条语句,当循环体需要多条语句组成时,使用复循环体只能包含一条语句,当循环体需要多条语句组成时,使用复合语句。合语句。(2) (2) 循环通常在重复有限的次数后结束,因此循环体中应该包含使循环循环通常在重复有限的次数后结束,因此循环体中应该包含使循环继续条件最终变为继续条件最终变为“假假”的语句。如果循环继续条件永远为的语句。如果循环继续条件永远为“真真”的情况,则循的情况,则循环无法结束,称为环无法结束,称为“死循环死循环”。(3) (3) 由于由于wh

5、ilewhile语句执行过程是先判断条件,再执行循环体,因此循环语句执行过程是先判断条件,再执行循环体,因此循环体有可能一次都不执行。体有可能一次都不执行。例例5-15-1:编程求:编程求1 + 2 + 3 + 1 + 2 + 3 + + 100 + 100的值,使用的值,使用whilewhile语句。语句。whilewhile循环语句的一般形式如下:循环语句的一般形式如下:while(while(表达式表达式) ) 语句语句使用使用whilewhile语句时应该注意的语句时应该注意的3 3个问题:个问题:(1) (1) 当循环体需要多条语句组成时,使用复合语句。当循环体需要多条语句组成时,使

6、用复合语句。(2) (2) 循环通常在重复有限的次数后结束。循环通常在重复有限的次数后结束。(3) (3) 由于由于whilewhile语句执行过程是先判断条件,再执行循环体。语句执行过程是先判断条件,再执行循环体。例例5-15-1:编程求:编程求1 + 2 + 3 + 1 + 2 + 3 + + 100 + 100的值,使用的值,使用whilewhile语句。语句。 #include #include intint main() main() intint i, sum; i, sum; sum=0; / sum=0; /和的初始值为和的初始值为0 0 i=1; i=1; while(iwh

7、ile(i=100)=100) sum= sum=sum+isum+i; /; /累加运算累加运算 i=i+1; /i=i+1; /累加项加累加项加1 1,准备下次加法,准备下次加法 printf(1+2+3+.+100 = % printf(1+2+3+.+100 = %dn,sumdn,sum);); return 0; return 0; 1+2+3+.+100 = 50501+2+3+.+100 = 5050例例5-25-2:编写程序,从键盘输入多个字符,输入的字符是回车时:编写程序,从键盘输入多个字符,输入的字符是回车时表示字符输入结束,统计并输出其中数字字符的个数。表示字符输入结束

8、,统计并输出其中数字字符的个数。 #include #include intint main() main() intint count; count; char char chch; ; count=0; count=0; chch= =getchargetchar(); (); /输入第一个字符输入第一个字符 while(chwhile(ch!=n)!=n) if(chif(ch=0 & =0 & chch=9)=9) count+; count+; chch= =getchargetchar(); /(); /输入下一个字符输入下一个字符 printf(numberprintf(numb

9、er of digit: % of digit: %dndn, count);, count); return 0; return 0; ABC123,456XYZ7.ABC123,456XYZ7. number of digit: 7number of digit: 75.35.35.35.3 do-whiledo-whiledo-whiledo-while语句语句语句语句do-whiledo-while循环语句的一般形式如下:循环语句的一般形式如下:dodo 语句语句while(while(表达式表达式););使用使用do-whiledo-while语句时,需要注意以下问题:语句时,需要注

10、意以下问题:(1) (1) 循环体需要多条语句组成时,使用复合语句。循环体需要多条语句组成时,使用复合语句。(2) (2) 由于由于do-whiledo-while语句执行过程是先执行循环体,再判断循语句执行过程是先执行循环体,再判断循环条件,因此循环体至少会执行一次。环条件,因此循环体至少会执行一次。例例5-35-3:编程求:编程求1 + 2 + 3 + 1 + 2 + 3 + + 100 + 100的值,使用的值,使用do-whiledo-while语句。语句。 #include #include intint main() main() intint i=1, sum=0; i=1, s

11、um=0; do do sum= sum=sum+isum+i; ; i+; i+; while(iwhile(i=100)=100); ; printf(1+2+3+.+100 = % printf(1+2+3+.+100 = %dn,sumdn,sum);); return 0; return 0; 1+2+3+.+100 = 50501+2+3+.+100 = 50505.45.45.45.4 forforforfor语句语句语句语句forfor循环语句的一般形式如下:循环语句的一般形式如下:for(for(表达式表达式1; 1; 表达式表达式2; 2; 表达式表达式3)3) 语句语句使

12、用使用forfor语句时,需要注意以下问题:语句时,需要注意以下问题:(1) (1) 循环体中只能包含一条语句,当需要由多条语句组成时,则需使用复合语句。循环体中只能包含一条语句,当需要由多条语句组成时,则需使用复合语句。(2) for(2) for循环语句括号中的三个表达式之间用分号隔开;表达式循环语句括号中的三个表达式之间用分号隔开;表达式1 1通常是循环控制变通常是循环控制变量初始值,只执行一次;表达式量初始值,只执行一次;表达式2 2的值是循环控制条件,决定循环是否继续执行;表的值是循环控制条件,决定循环是否继续执行;表达式达式3 3在循环体每次执行后都计算一次,修改循环控制变量的值。

13、在循环体每次执行后都计算一次,修改循环控制变量的值。(3) for(3) for语句执行过程是先判断循环条件,再执行循环体。语句执行过程是先判断循环条件,再执行循环体。(4) for(4) for语句中的三个表达式都可以省略,但是作为分隔符的分号是不能省略的。语句中的三个表达式都可以省略,但是作为分隔符的分号是不能省略的。例例5-35-3:编程求:编程求1 + 2 + 3 + 1 + 2 + 3 + + 100 + 100的值,使用的值,使用forfor语句。语句。 #include #include intint main() main() intint i, sum=0; i, sum=0

14、; for(ifor(i=1;i=100;i+)=1;i=100;i+) sum= sum=sum+isum+i; ; printf(1+2+3+.+100 = % printf(1+2+3+.+100 = %dn,sumdn,sum);); return 0; return 0; 1+2+3+.+100 = 50501+2+3+.+100 = 5050使用使用forfor语句时,需要注意以下问题:语句时,需要注意以下问题:(1) (1) 循环体只能包含一条语句,当需要多条语句组成时,使用复合语句。循环体只能包含一条语句,当需要多条语句组成时,使用复合语句。(2) for(2) for循环语句

15、括号中的三个表达式之间用分号隔开,表达式循环语句括号中的三个表达式之间用分号隔开,表达式1 1只执行一次,一般用来进行整只执行一次,一般用来进行整个循环开始之前的初始化工作,常见的用法是初始化循环控制变量;表达式个循环开始之前的初始化工作,常见的用法是初始化循环控制变量;表达式2 2的值决定循环是否的值决定循环是否继续执行,是循环控制条件;表达式继续执行,是循环控制条件;表达式3 3在循环体每次执行后都计算一次,常见的用法是修改循环在循环体每次执行后都计算一次,常见的用法是修改循环控制变量的值。控制变量的值。(3) for(3) for语句执行过程是先判断循环条件,再执行循环体,因此循环体有可

16、能一次也不执行。语句执行过程是先判断循环条件,再执行循环体,因此循环体有可能一次也不执行。(4) for(4) for语句中的三个表达式都可以省略,但是作为分隔符的分号是不能省略的。省略表达式语句中的三个表达式都可以省略,但是作为分隔符的分号是不能省略的。省略表达式1 1时,对应的初始化工作可以放在循环语句前面完成;省略表达式时,对应的初始化工作可以放在循环语句前面完成;省略表达式3 3时,相应的工作可以放在循环时,相应的工作可以放在循环体的最后完成;省略表达式体的最后完成;省略表达式2 2时,时,forfor循环语句的循环条件默认为非循环语句的循环条件默认为非0 0,即循环条件永远为真。,即

17、循环条件永远为真。5.5 5.5 5.5 5.5 循环语句的比较循环语句的比较循环语句的比较循环语句的比较whilewhile循环和循环和forfor循环的循环继续条件检查是在循环体执行之前进循环的循环继续条件检查是在循环体执行之前进行的,称为前置检测循环,循环体执行次数最少为行的,称为前置检测循环,循环体执行次数最少为0 0次;次;do-whiledo-while循环的循环继续条件检查是在循环体执行之后进行的,称为后置循环的循环继续条件检查是在循环体执行之后进行的,称为后置检测循环,循环体执行次数最少为检测循环,循环体执行次数最少为1 1次。而次。而forfor语句最为灵活。在语句最为灵活。

18、在一定条件下,三者可以相互取代。一定条件下,三者可以相互取代。基于代码易读性考虑,编写程序处理循环结构时,选择哪一种循环语基于代码易读性考虑,编写程序处理循环结构时,选择哪一种循环语句没有严格规定,几个常用的规则如下:句没有严格规定,几个常用的规则如下:如果循环次数已经知道的情况使用如果循环次数已经知道的情况使用forfor语句;语句;循环次数不确定的情况使用循环次数不确定的情况使用whilewhile语句;语句;如果需要在检查循环继续条件之前执行循环体,则使用如果需要在检查循环继续条件之前执行循环体,则使用do-do-whilewhile语句。语句。5.6 5.6 5.6 5.6 循环嵌套循

19、环嵌套循环嵌套循环嵌套一个循环语句的循环体内包含另一个完整的循环语句,称为一个循环语句的循环体内包含另一个完整的循环语句,称为循环的嵌套。循环的嵌套可以有很多层,一个循环的内嵌一循环的嵌套。循环的嵌套可以有很多层,一个循环的内嵌一层循环叫双层循环嵌套,简称双重循环。在循环嵌套的内层层循环叫双层循环嵌套,简称双重循环。在循环嵌套的内层循环中再内嵌一层或多层循环语句可以形成多重循环。循环中再内嵌一层或多层循环语句可以形成多重循环。(1) while()(1) while() . . While() While() . . (2) while()(2) while() . . do do . . w

20、hile(); while(); (3) while()(3) while() . .for(;)for(;) . . (4) do(4) do . . while() while() . while();while();(5) do(5) do . . do do . while(); while();while();while();(6) do(6) do . . for(;) for(;) . . while();while();(7) for(;)(7) for(;) . . while() while() . . (8) for(;)(8) for(;) . . do do . .

21、while(); while(); (9) for(;)(9) for(;) . . for(;) for(;) . . 例例5-55-5:编写程序输出九九乘法表。:编写程序输出九九乘法表。思路分析:九九乘法表由思路分析:九九乘法表由9 9行构成,第行构成,第1 1行有行有1 1个乘法等式,第个乘法等式,第2 2行有行有2 2个乘法等式,依此类推。解决这类问题时,可以采用逐步分析的方法,个乘法等式,依此类推。解决这类问题时,可以采用逐步分析的方法,分析思路如下:分析思路如下:(1) (1) 首先考虑如何需要输出首先考虑如何需要输出9 9行数据。可以设计如下的循环结构,该行数据。可以设计如下的循

22、环结构,该循环用于控制行的输出,每循环执行循环体一次,就输出一行。循环用于控制行的输出,每循环执行循环体一次,就输出一行。for(ifor(i=1; i=9; i+)=1; i=9; i+) 输出第输出第i i行行; ; (2) (2) 然后考虑如果输出第然后考虑如果输出第i i行。根据分析,第行。根据分析,第i i行由行由i i个乘法等式和一个乘法等式和一个换行字符组成,因此可以设计一个循环结构输出个换行字符组成,因此可以设计一个循环结构输出i i个乘法等式,然后个乘法等式,然后再输出一个换行。再输出一个换行。(3) (3) 最后将上述分析的循环结构进行嵌套,可以得到程序的整体结构。最后将上

23、述分析的循环结构进行嵌套,可以得到程序的整体结构。 #include #include intint main() main() intint i, j; i, j; for(ifor(i=1; i=9; i+)=1; i=9; i+) for(jfor(j=1; j=i; j+)=1; j=i; j+) printf(%dprintf(%d*%d=%2d , *%d=%2d , i,j,ii,j,i*j);*j); printf(nprintf(n);); return 0; return 0; 1*1= 11*1= 12*1= 2 2*2= 42*1= 2 2*2= 43*1= 3 3*2

24、= 6 3*3= 93*1= 3 3*2= 6 3*3= 94*1= 4 4*2= 8 4*3=12 4*4=164*1= 4 4*2= 8 4*3=12 4*4=165*1= 5 5*2=10 5*3=15 5*4=20 5*5=255*1= 5 5*2=10 5*3=15 5*4=20 5*5=256*1= 6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=366*1= 6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=367*1= 7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=497*1= 7 7*2=14 7*3=

25、21 7*4=28 7*5=35 7*6=42 7*7=498*1= 8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=648*1= 8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=649*1= 9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=819*1= 9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=815.75.75.75.7改变循环的执行流程改变循环的执行流程改变循环的执

26、行流程改变循环的执行流程 无论哪种循环语句,正常执行情况下都是由无论哪种循环语句,正常执行情况下都是由“循环条件循环条件”来来决定是否结束循环的执行。但在实际程序设计中有时需要根据循决定是否结束循环的执行。但在实际程序设计中有时需要根据循环执行情况的变化而环执行情况的变化而“提前提前”结束循环执行或跳过本次循环的剩余语结束循环执行或跳过本次循环的剩余语句进入下一次循环的情况。句进入下一次循环的情况。C C语言使用语言使用breakbreak语句和语句和continuecontinue语句解决这语句解决这些问题。些问题。1. break1. break语句语句 break break语句可以应用

27、循环语句中,用于跳出循环体。下面对语句可以应用循环语句中,用于跳出循环体。下面对breakbreak语语句的使用进行详细说明:句的使用进行详细说明:(1) (1) 一般形式:一般形式:break;break;(2) break(2) break语句只能用于语句只能用于switchswitch、whilewhile、do-whiledo-while和和forfor语句中。语句中。(3) break(3) break语句的作用是结束语句的作用是结束“直接包含直接包含”它的循环或它的循环或switchswitch语句的执语句的执行,即它只能跳出包含它的一层语句结构。当行,即它只能跳出包含它的一层语句

28、结构。当breakbreak出现循环语句的嵌出现循环语句的嵌套结构时,只能跳出包含它的最内层循环;当套结构时,只能跳出包含它的最内层循环;当breakbreak出现在循环语句与出现在循环语句与switchswitch语句的嵌套结构时,同样只能跳出包含它的最内层的语句的嵌套结构时,同样只能跳出包含它的最内层的switchswitch语句或循语句或循环语句。环语句。例例5-65-6:输入一个正整数判断并输出它是否是素数。:输入一个正整数判断并输出它是否是素数。思路分析:素数也称为质数,其数学定义为:一个大于思路分析:素数也称为质数,其数学定义为:一个大于1 1的正整的正整数,除了数,除了1 1和它

29、本身外,不能被整除以其他正整数。和它本身外,不能被整除以其他正整数。根据定义,该问题可以采用穷举法进行实现,即对于正整数根据定义,该问题可以采用穷举法进行实现,即对于正整数n n,从从2 2开始到开始到n n依次尝试每个数是否能够被依次尝试每个数是否能够被n n整除,如果存在能够整除,如果存在能够这样的数,则这样的数,则n n不是素数;如果不存在这样的数,则不是素数;如果不存在这样的数,则n n是素数。是素数。进一步分析可以知道,在找到第一个可以整除的数后,无需继进一步分析可以知道,在找到第一个可以整除的数后,无需继续检查,直接结束循环即可。续检查,直接结束循环即可。 #include #in

30、clude #include #include intint main() main() intint i, n, i, n, is_primeis_prime, k;, k; printf(Inputprintf(Input a number(1): ); a number(1): ); scanf(%dscanf(%d, &n);, &n); is_primeis_prime = 1; / = 1; /假设假设n n是素数是素数 k = k = sqrt(nsqrt(n); /); /计算计算n n的平方根的平方根 for(ifor(i=2; i=k; i+)=2; i1): 171):

31、17 17 is prime number17 is prime numberInput a number(1): 161): 16 16 is not prime number16 is not prime number2. continue2. continue语句语句 有时并不希望终止整个循环的执行,而只是提前结束本次循环迭代,有时并不希望终止整个循环的执行,而只是提前结束本次循环迭代,进入下一次循环迭代。这时可以使用进入下一次循环迭代。这时可以使用continuecontinue语句,其使用方法如下:语句,其使用方法如下:(1) (1) 一般形式:一般形式:continue;conti

32、nue;(2) continue(2) continue语句只能用于语句只能用于whilewhile、do-whiledo-while和和forfor语句中。语句中。(3) continue(3) continue语句的作用是结束循环体的本次执行,即跳过循环体中语句的作用是结束循环体的本次执行,即跳过循环体中continuecontinue语句之后的其它语句,转去判定循环条件,决定能否继续执语句之后的其它语句,转去判定循环条件,决定能否继续执行循环。行循环。用于用于whilewhile和和do-whiledo-while语句中时,跳过循环体中语句中时,跳过循环体中continuecontinu

33、e语句之后的其语句之后的其它语句后,直接判断循环条件是否成立;而用于它语句后,直接判断循环条件是否成立;而用于forfor语句中时,跳过循语句中时,跳过循环体中环体中continuecontinue语句之后的其它语句后,语句之后的其它语句后,先执行表达式先执行表达式3 3,然后再去判,然后再去判断循环条件是否成立。断循环条件是否成立。例例5-75-7:统计在:统计在100100到到10001000之间不能被之间不能被7 7整除的整数的个数。整除的整数的个数。思路分析:解决该问题需要对指定范围中的每一个整数进行检思路分析:解决该问题需要对指定范围中的每一个整数进行检查,如果不能被查,如果不能被7

34、 7整除,就进行计数加整除,就进行计数加1 1;若能被;若能被7 7整除,则不加整除,则不加1 1。 #include #include intint main() main() intint i, count; i, count; count = 0; / count = 0; /计数初始为计数初始为0 0 for(ifor(i=100; i=1000; i+)=100; i=1000; i+) if(i%7 = 0) if(i%7 = 0) continue; / continue; /如果整除如果整除7 7,跳过计数语句,继续检查下一个数,跳过计数语句,继续检查下一个数 count =

35、count+1; / count = count+1; /计数加计数加1 1 printf(countprintf(count=%=%dndn, count);, count); return 0; return 0; count=773count=7733. 3. gotogoto语句语句 gotogoto语句也称为无条件转移语句,其一般格式如下:语句也称为无条件转移语句,其一般格式如下: gotogoto 语句标号语句标号; ;如:如: label: i+;label: i+;loop: loop: while(xwhile(x7)7)C C语言不限制程序中使用标号的次数,但各标号不得重名

36、。语言不限制程序中使用标号的次数,但各标号不得重名。gotogoto语句的语句的语义是改变程序流向,转去执行语句标号所标识的语句。语义是改变程序流向,转去执行语句标号所标识的语句。gotogoto语句通常与条件语句配合使用,可用来实现条件转移、构成循环语句通常与条件语句配合使用,可用来实现条件转移、构成循环和跳出循环体等功能。和跳出循环体等功能。但是,在结构化程序设计中一般但是,在结构化程序设计中一般不主张使用不主张使用gotogoto语句语句,以免造成程序流,以免造成程序流程的混乱,使理解和调试程序都产生困难。程的混乱,使理解和调试程序都产生困难。例例5-85-8:使用:使用gotogoto

37、语句实现求语句实现求1+2+3+1+2+3+100+100的值。的值。Sum=5050Sum=50505.9 5.9 5.9 5.9 循环结构程序综合举例循环结构程序综合举例循环结构程序综合举例循环结构程序综合举例例例5-9 5-9 使用下面多项公式计算使用下面多项公式计算的近似值,直到发的近似值,直到发现某一项的绝对值小于现某一项的绝对值小于1010-6-6为止。为止。Sum=3.14159065Sum=3.14159065例例例例5-115-115-115-11输出输出输出输出100100100100以内的所有素数,每行输出以内的所有素数,每行输出以内的所有素数,每行输出以内的所有素数,每行输出10101010个素数。个素数。个素数。个素数。例例例例5-12 5-12 5-12 5-12 如果一个整数恰好等于它的所有小于它的因子之和,如果一个整数恰好等于它的所有小于它的因子之和,如果一个整数恰好等于它的所有小于它的因子之和,如果一个整数恰好等于它的所有小于它的因子之和,则称该数为则称该数为则称该数为则称该数为“完全数完全数完全数完全数”。课后习题课后习题教材课后习题教材课后习题4 4、5 5、6 6 、 7 7本章结束

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号