




已阅读5页,还剩59页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章 循环结构程序设计,顺序结构和选择结构中的语句最多只执行一遍,有些语句可能不执行就跳过了。当程序中出现需要反复执行相同的代码时,就要用到循环结构。循环结构既可以简化程序,又可以提高程序的效率。例如,要计算全校学生的平均成绩,求若干个数之和。几乎所有实用的程序都包含循环。,5.1 为什么需要循环控制,循环结构是程序中一种很重要的结构。其特点是, 在给定条件成立时,反复执行某程序段,直到条件不成立为止。 给定的条件称为循环条件,反复执行的程序段称为循环体。 语言提供了多种循环语句,可以组成各种不同形式的循环结构。,循环的类型: 无休止的循环(死循环) 有终止的循环,C语言中的三种循环结构 while 语句 dowhile 语句 for 语句,5.2 用while语句实现循环,【一般格式】 while(表达式) 循环体语句 ,(while 语句是一种先判断后执行的循环语句.),【流程图及N-S图】,一While循环语句,/“表达式”一般为关系表达式或逻辑表达式。,/循环体可以是单个语句,也可是多个语句;如果是多个语句必须使用大括号“ ”将多个语句括起来构成一个复合语句。,先计算表达式的值并判断,若表达式的值为真(非零),则执行循环体的语句;若表达式的值为假(零)时,结束循环。,【执行过程】,例:main() int i=0; while(i4) printf(“%dn”,i+); printf(“endn”);,while(e),则e等价于: A、e=0 B、e=1 C、e!=0 D、e!=1 int a=6,while(a-),循环次数是( ) 。,利用while语句求1+2+3+4+5,例2:利用while语句计算 n!(即:1*2*3*(n-1)*n),main( ) int i=1, n, s=1; scanf(“%d”, ,例:从0开始求奇数累加和,当和大于500时,结束求和过程。 例:从键盘连续输入若干字符,并以回车作为结束标记,统计字符个数,不包括回车。,5.3 用dowhile语句实现循环,二dowhile语句 【一般格式】, 【流程图及N-S图】,循环体,真,假,表达式,do 循环体语句 while(表达式);,do - while 语句是一种先执行后判断的循环语句,【执行过程】 先执行循环体语句,再计算表达式的值,若表达式的值为真(非零),再执行循环体的语句;当表达式的值为假(零)时,结束循环。,【应用】用dowhile语句求1+2+3+99+100的和,main( ) int i, sum=0; i=1; do sum=sum+i; i+; while(i=100); printf(“sum=%dn“,sum); ,练习:用dowhile语句编程计算n!(即:1*2*3*n) 模仿上例同学们自己写出相应的程序。,4while与do-while语句的区别 while语句是先判断,后执行的循环语句;而do-while语句是先执行,后判断循环语句。 当第一次进行判断表达式的值时,表达式的值为假时,while语句不执行循环体语句,而转去执行循环结构的下一语句;而do-while语句先执行一次循环体语句,而后转去执行循环结构的下一语句。 不论是while还是do-while语句构成的循环,在循环体中都应有修改循环控制变量值的语句,否则程序会进行无限循环状态。,例:用公式求 的近似值,直到某一项的绝对值小于10-6为止。,#include #include int main( ) int sign=1; double pi=0.0,n=1.0,term=1.0; while(fabs(term)=1e-6) pi=pi+term; n=n+2; sign=-sign; term=sign/n; pi=pi*4; printf(“pi=%10.8fn“,pi); return 0; ,5.4 用for语句实现循环,一、for循环语句一般格式 for (表达式1;表达式2;表达式3) 循环体; 相当于while循环语句: 表达式1; while(表达式2) 循环体语句(组); 表达式3; ,二、for循环语句的执行顺序 (1)执行表达式1; (2)计算表达式2的值; (3)如果表达式2的值为真,则执行循环体,再执行表达式3,转到(2)步执行; (4)如果表达式3的值为假,则结束循环的执行,转而去执行for语句后的语句。,用for循环语句求解1+2+3+100 main() int i,s; s=0; for(i=1; i=100;i+) /*i的值小于等于100时继续循环*/ s=s+i; /*累加*/ printf(“s=%dn”,s); /*输出累加结果*/ ,三、for语句的各种形式: 1、在for语句中,三个表达式中的任何一个表达式都可省略,但其中的两个“;”不能省略。 例如,下面的四种循环语句是等价形式: (1)for(i=1; i=100;i+) 循环体 (2)i=1; for( ; i=100;i+) 循环体 在这种形式中,for语句将提供循环初值的表达式1放到for语句前,从而省略了表达式1。 (3)i=1; for( ; i=100; ) 循环体;i+; 在这种形式中,for语句将提供循环初值的表达式1放到for语句前,从而省略了表达式1;并且将表达式3放到循环体中作为循环体的最后一个语句。 (4)i=1; while(i=100) 循环体;i+; 在这种形式中,是将第(3)种形式的for语句换成while语句,这也是将for循环语句改成while语句的方法,即将表达式1放到循环前面,将表达式3放到循环体中作为最后一个语句,最后将for语句换成while。,例:下面两种形式可能导致死循环: for(表达式1; ;表达式3) 循环体 与 for( ; ;) 循环体 上面两个语句都没有用于判断循环结束的条件(即表达式2)。在C语言中,一个空表达式的值一般为非零值。因此,在for语句中如果省略了表达式2,就意味着表达式2的值一直为真,从而可能导致死循环。在这种情况下,要想避免死循环,可以在循环体中增加if语句+转移控制语句跳出循环(还可以使用if+goto形式退出循环),比如可以使用: if(表达式) break;,2、在for循环语句中,循环体中可以是单语句,也可以是空语句(只有一个;的语句)或复合语句,如果是复合语句,则必须括在之中。 3、for循环也是当型循环结构,只不过它对于事先可以确定循环次数的问题特别方便。 在C语言中,虽然for循环语句的形式很灵活,但从程序的可读性考虑,建议使用如下两种形式: for(i=初值;i=终值;i=i-步长) 循环体,for循环程序举例,求Fibonacci数列前40项。这个数列有如下特点:第1,2两个数为1,1。从第3个数开始,该数是其前面个数之和。即: F1=1 (n=1) F2=1 (n=2) F3=Fn-1+Fn-2 (n3),思考题,1、下述循环的循环次数为() int k=0; while(k=0) printf(“%d”,k); k-; printf(“n”);,2、int c; while(c=getchar()!n) switch(c-2) case 0: case 1: putchar(c+4); case 2: putchar(c+4);break; case 3: putchar(c+3); case 4: putchar(c+2);break; printf(“n”);,3、int x=3; do printf(“%d”,x-=2); while(!(-x);,for(j=10;j3;j-) if(j%d) j-; -j; -j; printf(“%d”,j); ,main() int a=0,i; for(i=1;i5;i+) switch(i) case 0: case 3: a+=2; case 1: case 2: a+=3; default: a+=5; printf(“%dn”,a);,5.5 循环嵌套,所谓循环的嵌套是指一个循环体中完整地包含了另一个循环结构,又称多重循环。在C语言中,允许循环结构多重嵌套,并且while、do-while和for循环语句都可以嵌套。另外,在一个循环体内还可以包括各种完整的选择结构,在一个选择结构的某个独立部分中,还可以包括完整的循环结构。,下列程序段输出“#”的个数是: #include #include main( ) int i,j; for(i=1;i5;i+) for(j=2;j=i;j+) putchar(#); ,#include #include main( ) int a=0,b=0,k=0; for(;a5;a+) if(a%2) for( ;b=3;b+) k=a+b; printf(“%d,%d,%dn”,a,b,k);,输出所有的水仙花数:,#include void main() int i,j,k; for(i=1;i=9;i+) for(j=0;j=9;j+) for(k=0;k=9;k+) if(i*i*i+j*j*j+k*k*k=i*100+j*10+k) printf(“%d%d%dn“,i,j,k); ,百钱买百鸡,一只公鸡5元,一只母鸡3元,三只小鸡1元。用100元钱买100只鸡,怎么买?,#include void main() int i,j,k; for(i=0;i20;i+) for(j=0;j33;j+) for(k=0;k100;k+) if(5*i+3*j+k/3=100 ,打印九九乘法表,#include void main() int i,j,k; for(i=1;i=9;i+) for(j=1;j=i;j+) printf(“%d*%d=%2d “,i,j,i*j); putchar(n); ,输出以下图案,* * * * * * * * * * * * * * * * * * * * * * * * *,中国古典算术问题,某工地需搬运砖块,已知男人一人搬3块,女人一人搬2块,小孩两人搬一块,用45人正好搬45块砖,问有多少种搬法。,#include void main() int man,woman,child; for(man=0;man15;man+) for(woman=0; woman22; woman+) for(child=0; child45; child+) if(3*man+2*woman+child/2=45 ,打印如下的数字三角形,0 1 1 2 2 2 3 3 3 3 4 4 4 4 4 5 5 5 5 5 5 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7,输出以下4*5的矩阵,1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20,#include #include int main() int i,j,n=0; for(i=1; i=4; i+) for(j=1; j=5; j+,n+) if(n%5=0) printf(“n“); printf(“%dt“,i*j); printf(“n“); return 0; ,#include #include int main() int i,j,n=0; for(i=1; i=4; i+) for(j=1; j=5; j+,n+) printf(“%2dt“,i*j); printf(“n“); return 0; ,5.6 几种循环的比较,3种循环都可以用来处理同一问题,一般情况下它们可以互相代替。 for语句的功能更强,凡用while循环能完成的,用for循环都能实现。,5.7 改变循环执行的状态,循环一般是在预定的循环条件不成立时结束,但有时当出现某种特殊情况时,需要提早结束正在执行的循环操作,可以用break语句和continue语句来提前结束循环。,break语句与continue语句,为了使循环控制更加灵活,语言提供了break语句和continue语句。 1一般格式: break; continue; 2功能 (1)break:强行结束循环,转向执行循环语句的下一条语句。 (2)continue:对于for循环,跳过循环体其余语句,转向循环变量增量表达式的计算;对于while和do-while循环,跳过循环体其余语句,但转向循环继续条件的判定。 3说明 (1)break能用于循环语句和switch语句中,continue只能用于循环语句中。 (2)循环嵌套时,break和continue只影响包含它们的最内层循环,与外层循环无关。,#include #include main( ) int i; for(i=1;i=100;+i) if(i=5) continue; printf(“%dn”,i); if(i=10) break;,#include #include main( ) int i=0; while(i1000) if (i=5) break; else printf(“%dn”,i); i+;,#include #include main( ) int i,j; for(i=0;i2) break; printf(“%dn”,j); printf(“%dn”,i);,全系1000学生中,征集慈善募捐,当总数达到10万元时就结束,统计此
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023-2024学年江苏省南通市高二下学期6月期末数学试题(解析版)
- 2023-2024学年福建省福州市联盟校高二下学期期末考试数学试题(解析版)
- 2025年秋三年级上册语文同步教案 语文园地
- 环保艺术漆团队合作协议
- 源荷储可行性研究报告
- 食堂承包经营方案
- 作业许可规范管理制度
- 供暖公司全套管理制度
- 供水企业内控管理制度
- 供水公司报装管理制度
- 电脑教室搬迁方案
- 2023高教版中职中国特色社会主义基础模块课程标准
- 林区施工防火安全施工方案
- 充电桩维保合同书样本
- 16J934-3中小学校建筑设计常用构造做法
- 我的家乡潍坊昌邑宣传介绍课件
- 国开学习网《中国古代文化常识》形考任务1-3答案
- 食材配送服务方投标方案(技术标)
- 内河船舶船员健康检查记录
- 大学生应急救护智慧树知到课后章节答案2023年下西安欧亚学院
- 《高中生物必修3课件:细胞分裂和遗传》
评论
0/150
提交评论