




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 goto 5.8 goto语句语句 5.9 5.9 循环结构程序综合举例循环结构程序综合举例 程序设计解决实际问题的过程中经常会碰到许多具有规律程序设计解决实际问题的过程中经常会碰到许多具有规律性的重复运算处理的
2、问题,在处理这类问题时需要把程序中的性的重复运算处理的问题,在处理这类问题时需要把程序中的某些语句反复执行多次。下面是具有这种特征的一些例子:某些语句反复执行多次。下面是具有这种特征的一些例子: 向计算机系统输入向计算机系统输入100100个学生的档案,重复进行个学生的档案,重复进行100100次输入次输入操作。操作。 为全班为全班3030个学生分别计算其个学生分别计算其5 5门课的平均成绩,重复进行门课的平均成绩,重复进行3030次求平均数的算术运算。次求平均数的算术运算。 求求1 + 2 + 3 + + 1001 + 2 + 3 + + 100的和,重复进行的和,重复进行100100次加法
3、操作。次加法操作。 检查检查100100名毕业生是否具有获得学位证书的资格,重复进名毕业生是否具有获得学位证书的资格,重复进行行100100次判断操作。次判断操作。 C C语言提供标准的三种循环控制语句:语言提供标准的三种循环控制语句:whilewhile语句、语句、do-do-whilewhile语句和语句和forfor语句。语句。whilewhile循环语句的一般形式如下:循环语句的一般形式如下:while(while(表达式表达式) ) 语句语句使用使用whilewhile语句时应该注意以下几点:语句时应该注意以下几点:(1) (1) 循环体只能包含一条语句,当循环体需要多条语句组成时,
4、使用复循环体只能包含一条语句,当循环体需要多条语句组成时,使用复合语句。合语句。(2) (2) 循环通常在重复有限的次数后结束,因此循环体中应该包含使循环循环通常在重复有限的次数后结束,因此循环体中应该包含使循环继续条件最终变为继续条件最终变为“假假”的语句。如果循环继续条件永远为的语句。如果循环继续条件永远为“真真”的情的情况,则循环无法结束,称为况,则循环无法结束,称为“死循环死循环”。(3) (3) 由于由于whilewhile语句执行过程是先判断条件,再执行循环体,因此循环体语句执行过程是先判断条件,再执行循环体,因此循环体有可能一次都不执行。有可能一次都不执行。例例5-15-1:编程
5、求:编程求1 + 2 + 3 + + 1001 + 2 + 3 + + 100的值,使用的值,使用whilewhile语句。语句。 #include #include intint main() main() intint i i, sum;, sum; sum=0; / sum=0; /和的初始值为和的初始值为0 0 i i=1;=1; while( while(i i=100)=100) sum= sum=sum+isum+i; /; /累加运算累加运算 i i=i+1; /=i+1; /累加项加累加项加1 1,准备下次加法,准备下次加法 printfprintf(1+2+3+.+100
6、= %d(1+2+3+.+100 = %dn,sumn,sum);); return 0; return 0; 1+2+3+.+100 = 50501+2+3+.+100 = 5050例例5-25-2:编写程序,从键盘输入多个字符,输入的字符是回车时:编写程序,从键盘输入多个字符,输入的字符是回车时表示字符输入结束,统计并输出其中数字字符的个数。表示字符输入结束,统计并输出其中数字字符的个数。 #include #include intint main() main() intint count; count; char char chch; ; count=0; count=0; chch=
7、 =getchargetchar(); (); /输入第一个字符输入第一个字符 while(while(chch!=n)!=n) if( if(chch=0 & =0 & chch=9)=9) count+; count+; chch= =getchargetchar(); /(); /输入下一个字符输入下一个字符 printfprintf(number of digit: %dn, count);(number of digit: %dn, count); return 0; return 0; ABC123,456XYZ7.ABC123,456XYZ7. number of
8、 digit: 7number of digit: 7do-whiledo-while循环语句的一般形式如下:循环语句的一般形式如下:dodo 语句语句while(while(表达式表达式););使用使用do-whiledo-while语句时,需要注意以下问题:语句时,需要注意以下问题:(1) (1) 循环体需要多条语句组成时,使用复合语句。循环体需要多条语句组成时,使用复合语句。(2) (2) 由于由于do-whiledo-while语句执行过程是先执行循环体,再判断循语句执行过程是先执行循环体,再判断循环条件,因此循环体至少会执行一次。环条件,因此循环体至少会执行一次。例例5-35-3:编
9、程求:编程求1 + 2 + 3 + + 1001 + 2 + 3 + + 100的值,使用的值,使用do-whiledo-while语句。语句。 #include #include intint main() main() intint i i=1, sum=0;=1, sum=0; do do sum= sum=sum+isum+i; ; i i+;+; while( while(i i=100);=100); printfprintf(1+2+3+.+100 = %d(1+2+3+.+100 = %dn,sumn,sum);); return 0; return 0; 1+2+3+.+10
10、0 = 50501+2+3+.+100 = 5050forfor循环语句的一般形式如下:循环语句的一般形式如下:for(for(表达式表达式1; 1; 表达式表达式2; 2; 表达式表达式3)3) 语句语句使用使用forfor语句时,需要注意以下问题:语句时,需要注意以下问题:(1) (1) 循环体需要多条语句组成时,使用复合语句。循环体需要多条语句组成时,使用复合语句。(2) for(2) for循环语句括号中的三个表达式之间用分号隔开,表达式循环语句括号中的三个表达式之间用分号隔开,表达式1 1只执行一次,一般用只执行一次,一般用来进行整个循环开始之前的初始化工作,常见的用法是初始化循环控
11、制变量;表达式来进行整个循环开始之前的初始化工作,常见的用法是初始化循环控制变量;表达式2 2的值决定循环是否继续执行,是循环控制条件;表达式的值决定循环是否继续执行,是循环控制条件;表达式3 3在循环体每次执行后都计算在循环体每次执行后都计算一次,常见的用法是修改循环控制变量的值。一次,常见的用法是修改循环控制变量的值。(3) for(3) for语句执行过程是先判断循环条件,再执行循环体,因此循环体有可能一次也语句执行过程是先判断循环条件,再执行循环体,因此循环体有可能一次也不执行。不执行。(4) for(4) for语句中的三个表达式都可以省略,但是作为分隔符的分号是不能省略的。省语句中
12、的三个表达式都可以省略,但是作为分隔符的分号是不能省略的。省略表达式略表达式1 1时,对应的初始化工作可以放在循环语句前面完成;省略表达式时,对应的初始化工作可以放在循环语句前面完成;省略表达式3 3时,相应时,相应的工作可以放在循环体的最后完成;省略表达式的工作可以放在循环体的最后完成;省略表达式3 3时,时,forfor循环语句的循环条件默认为循环语句的循环条件默认为非非0 0,即循环条件永远为真。,即循环条件永远为真。例例5-35-3:编程求:编程求1 + 2 + 3 + + 1001 + 2 + 3 + + 100的值,使用的值,使用forfor语句。语句。 #include #inc
13、lude int main() int main() int i, sum=0; int i, sum=0; for(i=1;i=100;i+) for(i=1;i=100;i+) sum=sum+i; sum=sum+i; printf(1+2+3+.+100 = %dn,sum); printf(1+2+3+.+100 = %dn,sum); return 0; return 0; 1+2+3+.+100 = 50501+2+3+.+100 = 5050whilewhile循环和循环和forfor循环的循环继续条件检查是在循环体执行之前进循环的循环继续条件检查是在循环体执行之前进行的,称为
14、前置检测循环,循环体执行次数最少为行的,称为前置检测循环,循环体执行次数最少为0 0次;次;do-whiledo-while循环的循环继续条件检查是在循环体执行之后进行的,称为后置循环的循环继续条件检查是在循环体执行之后进行的,称为后置检测循环,循环体执行次数最少为检测循环,循环体执行次数最少为1 1次。而次。而forfor语句最为灵活。在语句最为灵活。在一定条件下,三者可以相互取代。一定条件下,三者可以相互取代。基于代码易读性考虑,编写程序处理循环结构时,选择哪一种循环语基于代码易读性考虑,编写程序处理循环结构时,选择哪一种循环语句没有严格规定,几个常用的规则如下:句没有严格规定,几个常用的
15、规则如下:如果循环次数已经知道的情况使用如果循环次数已经知道的情况使用forfor语句;语句;循环次数不确定的情况使用循环次数不确定的情况使用whilewhile语句;语句;如果需要在检查循环继续条件之前执行循环体,则使用如果需要在检查循环继续条件之前执行循环体,则使用do-do-whilewhile语句。语句。一个循环语句的循环体内包含另一个完整的循环语句,称为一个循环语句的循环体内包含另一个完整的循环语句,称为循环的嵌套。循环的嵌套可以有很多层,一个循环的内嵌一循环的嵌套。循环的嵌套可以有很多层,一个循环的内嵌一层循环叫双层循环嵌套,简称双重循环。在循环嵌套的内层层循环叫双层循环嵌套,简称
16、双重循环。在循环嵌套的内层循环中再内嵌一层或多层循环语句可以形成多重循环。循环中再内嵌一层或多层循环语句可以形成多重循环。(1) while()(1) while() . . While() While() . . (2) while()(2) while() . . do do . . while(); while(); (3) while()(3) while() . .for(;)for(;) . . (4) do(4) do . . while() while() . while();while();(5) do(5) do . . do do . while(); while();w
17、hile();while();(6) do(6) do . . for(;) for(;) . . while();while();(7) for(;)(7) for(;) . . while() while() . . (8) for(;)(8) for(;) . . do do . . while(); while(); (9) for(;)(9) for(;) . . for(;) for(;) . . 例例5-55-5:编写程序输出九九乘法表。:编写程序输出九九乘法表。思路分析:九九乘法表由思路分析:九九乘法表由9 9行构成,第行构成,第1 1行有行有1 1个乘法等式,第个乘法等式,第
18、2 2行有行有2 2个乘法等式,依此类推。解决这类问题时,可以采用逐步分析的方法,个乘法等式,依此类推。解决这类问题时,可以采用逐步分析的方法,分析思路如下:分析思路如下:(1) (1) 首先考虑如何需要输出首先考虑如何需要输出9 9行数据。可以设计如下的循环结构,该行数据。可以设计如下的循环结构,该循环用于控制行的输出,每循环执行循环体一次,就输出一行。循环用于控制行的输出,每循环执行循环体一次,就输出一行。for(for(i i=1; =1; i i=9; =9; i i+)+) 输出第输出第i i行行; ; (2) (2) 然后考虑如果输出第然后考虑如果输出第i i行。根据分析,第行。根
19、据分析,第i i行由行由i i个乘法等式和一个乘法等式和一个换行字符组成,因此可以设计一个循环结构输出个换行字符组成,因此可以设计一个循环结构输出i i个乘法等式,然个乘法等式,然后再输出一个换行。后再输出一个换行。(3) (3) 最后将上述分析的循环结构进行嵌套,可以得到程序的整体结构。最后将上述分析的循环结构进行嵌套,可以得到程序的整体结构。 #include #include intint main() main() intint i i, j;, j; for( for(i i=1; =1; i i=9; =9; i i+)+) for(j=1; j= for(j=1; j=i i;
20、j+); j+) printfprintf(%d(%d* *%d=%2d , %d=%2d , i,j,ii,j,i* *j);j); printfprintf(n);(n); return 0; return 0; 1 1* *1= 11= 12 2* *1= 2 21= 2 2* *2= 42= 43 3* *1= 3 31= 3 3* *2= 6 32= 6 3* *3= 93= 94 4* *1= 4 41= 4 4* *2= 8 42= 8 4* *3=12 43=12 4* *4=164=165 5* *1= 5 51= 5 5* *2=10 52=10 5* *3=15 53=1
21、5 5* *4=20 54=20 5* *5=255=256 6* *1= 6 61= 6 6* *2=12 62=12 6* *3=18 63=18 6* *4=24 64=24 6* *5=30 65=30 6* *6=366=367 7* *1= 7 71= 7 7* *2=14 72=14 7* *3=21 73=21 7* *4=28 74=28 7* *5=35 75=35 7* *6=42 76=42 7* *7=497=498 8* *1= 8 81= 8 8* *2=16 82=16 8* *3=24 83=24 8* *4=32 84=32 8* *5=40 85=40 8
22、* *6=48 86=48 8* *7=56 87=56 8* *8=648=649 9* *1= 9 91= 9 9* *2=18 92=18 9* *3=27 93=27 9* *4=36 94=36 9* *5=45 95=45 9* *6=54 96=54 9* *7=63 97=63 9* *8=72 98=72 9* *9=819=81 无论哪种循环语句,正常执行情况下都是由无论哪种循环语句,正常执行情况下都是由“循环条件循环条件”来来决定是否结束循环的执行。但在实际程序设计中有时需要根据循决定是否结束循环的执行。但在实际程序设计中有时需要根据循环执行情况的变化而环执行情况的变化而
23、“提前提前”结束循环执行或跳过本次循环的剩结束循环执行或跳过本次循环的剩余语句进入下一次循环的情况。余语句进入下一次循环的情况。C C语言使用语言使用breakbreak语句和语句和continuecontinue语句解决这些问题。语句解决这些问题。1. break1. break语句语句 break break语句可以应用循环语句中,用于跳出循环体。下面对语句可以应用循环语句中,用于跳出循环体。下面对breakbreak语句的使用进行详细说明:语句的使用进行详细说明:(1) (1) 一般形式:一般形式:break;break;(2) break(2) break语句只能用于语句只能用于swi
24、tchswitch、whilewhile、do-whiledo-while和和forfor语句中。语句中。(3) break(3) break语句的作用是结束语句的作用是结束“直接包含直接包含”它的循环或它的循环或switchswitch语句的语句的执行,即它只能跳出包含它的一层语句结构。当执行,即它只能跳出包含它的一层语句结构。当breakbreak出现循环语句出现循环语句的嵌套结构时,只能跳出包含它的最内层循环;当的嵌套结构时,只能跳出包含它的最内层循环;当breakbreak出现在循环出现在循环语句与语句与switchswitch语句的嵌套结构时,同样只能跳出包含它的最内层的语句的嵌套结
25、构时,同样只能跳出包含它的最内层的switchswitch语句或循环语句。语句或循环语句。例例5-65-6:输入一个正整数判断并输出它是否是素数。:输入一个正整数判断并输出它是否是素数。思路分析:素数也称为质数,其数学定义为:一个大于思路分析:素数也称为质数,其数学定义为:一个大于1 1的正整的正整数,除了数,除了1 1和它本身外,不能被整除以其他正整数。和它本身外,不能被整除以其他正整数。根据定义,该问题可以采用穷举法进行实现,即对于正整数根据定义,该问题可以采用穷举法进行实现,即对于正整数n n,从从2 2开始到开始到n n依次尝试每个数是否能够被依次尝试每个数是否能够被n n整除,如果存
26、在能够整除,如果存在能够这样的数,则这样的数,则n n不是素数;如果不存在这样的数,则不是素数;如果不存在这样的数,则n n是素数。是素数。进一步分析可以知道,在找到第一个可以整除的数后,无需继进一步分析可以知道,在找到第一个可以整除的数后,无需继续检查,直接结束循环即可。续检查,直接结束循环即可。 #include #include #include #include intint main() main() intint i i, n, , n, is_primeis_prime, k;, k; printfprintf(Input a number(1): );(Input a numb
27、er(1): ); scanfscanf(%d, &n);(%d, &n); is_primeis_prime = 1; / = 1; /假设假设n n是素数是素数 k = k = sqrtsqrt(n); /(n); /计算计算n n的平方根的平方根 for(for(i i=2; =2; i i=k; 1): 171): 17 17 is prime number17 is prime number2. continue2. continue语句语句 有时并不希望终止整个循环的执行,而只是提前结束本次循环迭有时并不希望终止整个循环的执行,而只是提前结束本次循环迭代,进入下一次
28、循环迭代。这时可以使用代,进入下一次循环迭代。这时可以使用continuecontinue语句,其使用方法语句,其使用方法如下:如下:(1) (1) 一般形式:一般形式:continue;continue;(2) continue(2) continue语句只能用于语句只能用于whilewhile、do-whiledo-while和和forfor语句中。语句中。(3) continue(3) continue语句的作用是结束循环体的本次执行,即跳过循环体中语句的作用是结束循环体的本次执行,即跳过循环体中continuecontinue语句之后的其它语句,转去判定循环条件,决定能否继续执语句之后
29、的其它语句,转去判定循环条件,决定能否继续执行循环。行循环。用于用于whilewhile和和do-whiledo-while语句中时,跳过循环体中语句中时,跳过循环体中continuecontinue语句之后的语句之后的其它语句后,直接判断循环条件是否成立;而用于其它语句后,直接判断循环条件是否成立;而用于forfor语句中时,跳语句中时,跳过循环体中过循环体中continuecontinue语句之后的其它语句后,先执行表达式语句之后的其它语句后,先执行表达式3 3,然后,然后再去判断循环条件是否成立。再去判断循环条件是否成立。例例5-75-7:统计在:统计在100100到到10001000之间不能被之间不能被7 7整除的整数的个数。整除的整数的个数。思路分析:解决该问题需要对指定范围中的每一个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 长江工程职业技术学院《金融学》2023-2024学年第二学期期末试卷
- 重庆建筑科技职业学院《农村新能源应用技术》2023-2024学年第二学期期末试卷
- 福建技术师范学院《民族民间工艺》2023-2024学年第二学期期末试卷
- 盘锦职业技术学院《伦理学》2023-2024学年第二学期期末试卷
- 基于超磁致伸缩效应的除冰装置设计与研究
- 晋中学院《商务谈判》2023-2024学年第二学期期末试卷
- 四川传媒学院《畜牧微生物学A》2023-2024学年第二学期期末试卷
- 以高中物理教学培养学生信息素养的策略研究
- 多重中介模型相对重要性分析方法研究
- 2024-2025学年安徽省合肥市三年级数学第二学期期末联考模拟试题含解析
- 《儿童绘本创编与应用》课件 第1讲 儿童绘本-绪论
- 2025年天翼云解决方案架构师认证考试指导题库-下(多选、判断题)
- 2024年甘肃省白银市中考数学试卷(附答案)
- 煤矿机电维护工职业技能理论考试题库150题(含答案)
- 《走进汽车》课件
- 中国充电桩行业运营趋势及投资价值评估研究报告
- 2025年小红书品牌博主合作合同
- 2025年华能铜川照金煤电有限公司招聘笔试参考题库含答案解析
- 2025年危化企业安全教育培训计划
- 《HR的成长之路》课件
- 2025年山东浪潮集团有限公司招聘笔试参考题库含答案解析
评论
0/150
提交评论