




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第六章C 语言程序设计循环结构1本章要点建立循环程序设计的基本概念和逻辑思维 掌握循环程序设计的方法2什么是循环?为什么要使用循环?循环的基本概念循环是有规律的重复操作。将复杂问题分解为简单的操作过程,程序只对简单过程描述,这些过程的多次重复就可完成对问题的求解。重复的频繁性决定了循环在程序设计中必不可少!问题1:问题2:求学生平均成绩 分数相加后除以课数做99次加法问题3:找出数x中能同时被3和7整除的数 找数问题分解循环控制3 if-goto 循环 while循环 for循环 do while循环 先判断后循环 先循环后判断 特点:难点:循环嵌套 C提供四种循环控制:46.1 if-got
2、o 语句循环 一般形式: goto 标号; 标号:语句 其中:标号用标识符表示,即由字母、数字和下划线组成,且首字符必须为字母或下划线。不能用整数作标号。用途:1. 与if语句一起构成循环结构。2. 从循环体中跳到循环体外(一般指最深层)。3. 改变程序自上而下的执行顺序。缺点:滥用goto语句,可使程序无规律、可读性差。5 #include stdio.h main( ) int i=1,s=0;L1: if(i=100) s=s+i; i+ ; goto L1; printf(s=%dn,s); i=100开始i=1,s=0s=s+i ,i+零非零结束输出s 求和 s=1+2+100运行结
3、果: S=?例161.while循环语句的形式 while(表达式)语句 先判断条件,后执行语句表达式语句零非零2.执行过程注意: 循环体若包含一个以上语句,应该用花括号括起来(使用复合语句)。 循环体内应注意设置修改循环条件的语句。否则循环无法终止。 如果表达式的值第一次计算就等于0,则循环体一次也不执行。6.2 while循环语句 7 求i=1,sum=0i=100?sum=sum+ii=i+1零非零#include stdio.hmain() int i=1,sum=0; while (i=100) sum=sum+i; i+; printf(%d,sum);例2思考:删除i+;后果?
4、调换i+;与求和语句的后果?8 输出华氏-摄氏温度转换表例3华氏温度3035之间的每一度都转换成相应的摄氏温度。转换公式:C=5*(F-32)/9F=35开始F=30C=5*(F-32)/9零非零结束输出 F CF=F+1#include stdio.h main() int F; float C; F=30; while(F=35) C= 5*(F-32)/9.0; printf(F=%d C= %f n, F,C) ; F=F+1; 9 输出华氏-摄氏温度转换表运行结果 F C -1.1 -0.6 0.0 0.6 1.135 1.710 输入一批正数,输入0时表示输入结束,求这些正数的和。
5、#include stdio.h main( ) int s=0, x; scanf(%d,&x); while( x!=0 ) s=s+x; scanf(%d,&x); printf(s=%dn,s); 零非零x!=0开始s=0s=s+x结束输出s输入正数x输入正数x例4思考:取消循环内的输入语句后果? 111. dowhile循环语句的形式 do 语句 while(表达式); 先执行语句,后判断条件 2. 执行过程说明:(1)dowhile循环语句首先执行循环体,然后计算表达式并检查循环条件,所以循环体至少执行一次。(2)退出dowhile循环的条件与退出while循环的条件相同。表达式语
6、句零非零6.3 dowhile循环语句12表达式=0?语句零非零i=n?s=s*ii=i+1i=1,s=1输入n 用do-while型循环求n!S=123(n-1) n#include main() int i=1,n ; long s=1; scanf( %d ,&n); do s*=i; i+; while (i=n) ; printf(%d!=%ldn,n,s); 例5不能省略13 用迭代法求a的算数平方根。公式 :xn=0.5*(xn-1+a/xn-1) 确定初值为x0, 取a/2为x0的初值,迭代结束条件:|x1-x0|=10-5.#include #include main()fl
7、oat a,x0,x1; scanf(%f,&a); x1=a/2; do x0=x1; x1=(x0+a/x0)/2; while (fabs(x1-x0)1e-5); printf(squrt(a)=%fn,x1);例6表达式=0?语句零非零 |x1-x0|10-5 ?x0=x1x1=(x0+a/x0)/2输入ax1=a/2输出a,x114注意:当while后的表达式为真时,while语句和dowhile语句的结果相同,否则不同。main( )int i , s=0;scanf(%d,&i); while(i=10) s=s+i; i+; printf(s=%dn, s); 输入:1 打印
8、:55输入:11 打印:0main( )int i , s=0; scanf(%d&i); do s=s+i; i+; while(i=10) ; printf(s=%dn, s); 输入:1 打印:55 输入:11 打印:11156.4 for循环语句1.for循环语句的形式 for(表达式1;表达式2;表达式3)语句表达式2表达式1语句表达式3零非零2. 执行过程说明:(1)计算表达式1;(2)计算表达式2,值非零执行循环体,计算表达式3,重复(3)表达式1仅被执行一次;表达式2决定了是否继续执行循环;表达式3则不断修改循环控制变量的值。(4)三个表达式均可省略,分号不能省略。for 循环
9、体可以是复合语句。163.说明:(1)基本的应用形式:for(循环变量赋初值;循环条件;循环变量增值) 求级数12+22+32+前10项之和。main() int i, sum=0; for (i=1;i=10;i+) sum=sum+i*i; printf(%d,sum);17(2)三个表达式均可缺省,但起分割作用的两个分号不可省略。 例如:for( ; ; ) 相当于while (1) 语句(3)表达式1和表达式3可为逗号表达式。 例: int i,j,sum; for(sum=0, i=0,j=100;i=j;i+,j- ) sum=sum+i+j;18 输出100以内所有偶数的和与所有
10、奇数的和。#include main() int i,s1=0,s2=0; for(i=1;i=100;i+) if(i%2=0) s2=s2+i; else s1=s1+i; printf(s1=%d,s2=%dn,s1,s2); 例719 用for循环编写输出华氏-摄氏温度转换表输出华氏-摄氏温度的转换表,要求输入华氏温度取值范围。转换公式:C=5*(F-32)/9F=下限开始输入华氏上下限 C=5*(F-32)/9假真结束输出 F ,CF=F+1#include main() int f1,f2; float c; 例820分析:求前n 项和,要循环n次,每次累加1项。除第1项外,每次循
11、环分母都递增2,符号交替变化。#include main() int i,n,t=1,flag=1; double sum=0,item; scanf(%d,&n); for(i=1;i=n;i+) item=flag*1.0/t; /* 计算第i项的值 */ sum=sum+item; /* 累加第i项的值 */ flag=-flag; /*改变符号,为下次循环做准备*/ t=t+2; /*分母递增2,为下次循环做准备*/ printf(sum=%fn,sum); 例9输入一个正数n,计算1-1/3+1/5-1/7+的前n项之和。运行结果: 输入:5sum=0.834921216.5 三种循
12、环语句的比较for语句和while语句先判断条件,后执行语句,故循环体有可能一次也不执行,而dowhile语句的循环体至少执行一次。必须在while 语句和dowhile语句之前对循环体变量赋初值,循环体中必须包含能最终改变循环条件真假的操作;而for语句可在表达式1中对循环变量赋初值,表达式3中修改循环变量的值。在循环次数已经确定的情况下,一般用for语句;而对于循环次数不确定,只给出循环结束条件的问题,习惯用while或do while 语句解决。221. 定义:在循环体内又包含一个循环结构,称为循环嵌套。三种循环都可以嵌套。下面几种都是合法的嵌套形式: for( ; ; ) while(
13、 ) for循环体嵌套while循环体for( ; ; ) for( ; ; ) for循环体嵌套for循环6.6 循环语句的嵌套23do do while( ); while( );do_while循环体嵌套do_while循环while( ) do while( ); while循环体嵌套do_while循环while( ) for( ; ; ) while循环体嵌套for循环 do for( ; ; ) while( ); do_while循环体嵌套for循环24 2.嵌套结构规则 外循环内循环交叉循环外循环入口内循环出口内循环出口外循环出口25for语句的循环嵌套:for(i=1;i=
14、2;i+) for(j=1;j=2;j+) printf(%3d ,i+j); printf(n ); for(i=1;i=2;i+) for(j=1;j=2;j+) printf(%3d,i+j); printf(n); output: 2 3 3 4output: 2 3 3 426 编写程序输出图形讨论1. 输入m(行数);2. for ( k=1; k=m; k+) 打印 k 个 * ; 换新行; 细化:1. 输入m;2. for ( k=1; k=m; k+) for ( j=1; j=k; j+) printf (* ); printf(n) ; * * * * * * *说明:1
15、. 循环变量可以控制循环次数; 2. 外循环变量可作为内循环次数的控制变量,例1027#include main( ) int k,m,j; scanf (%d,&m); for ( k=1;k=m;k+) for ( j=1;j=k;j+) printf (* ); printf(n); 整理得到程序如下:28使用循环嵌套计算:1!+2!+3!+100!#include main() int i,j; double sum=0,item; for(i=1;i=100;i+) item=1; for(j=1;j=i;j+) item=item*j; sum=sum+item; printf(s
16、um=%fn,sum);例1129for循环嵌套while循环:输入6名学生5门课程的成绩,分别统计每名学生5门课程的平均成绩。#include main() int i,j; float score,sum,ave; for(i=1;i=6;i+) sum=0; j=1; while(j=5) scanf (%f,&score); sum=sum+score; j+; ave=sum/5; printf(i=%d ave=%6.2fn,i,ave); 例1230例12 输出5以内的数字金字塔。#include stdio.hmain() void pyramid(int n); /*函数声明
17、*/ pyramid(5); /*函数调用*/void pyramid(int n) int i,j; for(i=0;i=n;i+) /*需要输出的行数*/ for(j=1;j=n-i;j+) /*输出每行前空格*/ printf( ); for(j=1;j=i;j+) /*输出每行数字*/ printf(%d ,i); printf(n); 打印以下图形: 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 316.7 break和continue语句1. break 语句语法: break ;功能:终止包含该语句的最内层循环。 main( ) int n; for(n=100;n
18、=200;n+) if(n%3=0) break ; printf(%6d,n); 2. continue 语句语法:continue ;功能:结束循环体的本次执行。main( ) int n; for(n=100;n=200;n+) if(n%3=0) continue ; printf(%6d,n); 该语句只能出现在for, while或dowhile语句中。该语句只能出现在switch,for, while或dowhile语句中。32for 循环结构中的break结构for循环结构中的continue结构表达式2表达式1语句1表达式3零非零break语句2是否表达式2表达式1语句1表达
19、式3零非零continue语句2是否33循环结束的条件:发生下列情况之一时,循环结束执行:表达式的值为0;循环体内遇到break语句;循环体内遇到goto 语句,且与该goto语句配合 使用的标号所指定的语句在本循环体外;343. 空语句形式: ;(只由一个分号构成)功能: 什么也不做。(可出现在程序中任何语句可以出现的地方)例:求级数12+22+32+,前10项之和。main( ) int i, sum=0; for(i=1;i=10;sum+=i*i, i+) ; printf(sum=%dn, sum); 注意:空语句的正确用法!351. 输入一个整数m,判断是否为素数。若m不能被2m-
20、1之间的任何一个整数整除,则m为素数。算法分析: (1)设k=m-1,用2至m-1依次去除m, 若m能被2 k之中任何一个整数整除,则不必除下去,肯定不是素数,跳出循环,(i=k+1.在循环之后判别i的值是否大于或等于k+1,若是,则表明未曾被2 k之间任一整数整除过,因此输出“是素数”。编程举例36程序如下:#include stdio.hmain( ) int m, i, k; scanf(%d,&m); k=m-1; for(i=2; i=k+1) printf (%d is a prime numbern, m); else printf(%d is not a prime numbe
21、rn, m);37分析:程序采用逐位分离的方法。 设x为正整数,x%10分离1位,x=x/10 为下次分离做准备,直到x=0.#include stdio.hmain( ) int x; printf(Enter x:); scanf(%d,&x); while(x!=0) printf(%d,x%10); x=x/10; 2.输入一个正整数,将其逆向输出。38 3.求sin(x)的近似值(x是弧度)。sin x=x- x3/3!+x5/5!-x7/ 7!+(-1)n+1x2n-1/(2n-1)! +分析:本例可作为循环累加问题处理,考虑适当的精度要求。设i为项数,s为累加和,s=s+级数的下
22、一项第i项的绝对值:x2i-1/ (2i-1)!第i项的运算符号(-1)i+1第i+1项的绝对值等于x2(i+1)-1/(2(i+1)-1)!= x2i+1/(2i+1)!因此,第i+1项的绝对值等于第i项的绝对值乘x2再除以(2i)*(2i+1)级数的下一项可用下面表达式实现: -(上一项的值)*x*x/(2+i)*(2*i+1);39程序如下:#include stdio.hmain() int i; double x,t,s=0.0; scanf(%lf,&x); x=x*3.1415926/180; /*度化为弧度*/ for(t=x,i=1;i=10;i+) s=s+t; t=-t*x*x/(2*i)*(2*i+1); printf(sin(x)=%fn,s); 程序运行演示40小 结1.循环程序设计的要点 循环初值,循环条件,循环体设定2.C语言循环程序设计的三种结构 for, while, do- while3.程序设计的一般步骤分析给定问题的详细步骤,总结出解决问题的一般方法; 画出程序流程图或写出程序草案; 编制程序; 输
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年批量商品采购框架合同范文
- 潮流服饰设计创新-深度研究
- 2025年教育资源策划长期租用合同模板
- 经济制度创新-深度研究
- 2025年建筑工程废弃物回收合同范本
- 2025年全屋智能锁销售合同范文
- 海洋生物多样性研究-深度研究
- 2025年专业咨询服务合同范文性转让协议范本
- 深海油气开发-深度研究
- 科技助力提升体验-深度研究
- AutoCAD-2020基础教程配套课件
- 广东省广州市《公共基础科目》事业单位招聘考试国考真题
- 高考报名资格审查表
- 幽门螺杆菌的诊治规范课件
- 数学基础模块上册课件
- 中国化学家侯德榜市公开课获奖课件
- 2022年人教部编版三年级下册道德与法治全册教案
- 支气管镜室工作制度
- 紫精丹_圣惠卷九十五_方剂加减变化汇总
- 天蓝色商务发展历程时间轴PPT模板课件
- 第5章液相传质步骤动力学
评论
0/150
提交评论