C语言程序设计教程 第4章.ppt

上传人:小飞机 文档编号:6504080 上传时间:2023-11-07 格式:PPT 页数:49 大小:347.49KB
返回 下载 相关 举报
C语言程序设计教程 第4章.ppt_第1页
第1页 / 共49页
C语言程序设计教程 第4章.ppt_第2页
第2页 / 共49页
C语言程序设计教程 第4章.ppt_第3页
第3页 / 共49页
C语言程序设计教程 第4章.ppt_第4页
第4页 / 共49页
C语言程序设计教程 第4章.ppt_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《C语言程序设计教程 第4章.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计教程 第4章.ppt(49页珍藏版)》请在三一办公上搜索。

1、第4章 循环结构,4.1 当型循环与直到型循环4.2 for 循 环4.3 循环的嵌套与其他有关语句4.4 程序举例,4.1 当型循环与直到型循环,4.1.1 当型循环结构当型循环结构的流程图如图4.1所示。,图4.1 当型循环结构流程图,返回目录,在图4.1中,条件在程序中一般是一个逻辑表达式,条件满足是指逻辑表达式的值为真。循环体可以是单个语句,也可以是由若干可执行语句组成的复合语句,它们是需要重复执行的操作。当型循环的执行过程是:当条件满足(即逻辑表达式的值为真)时,执行循环体中所包括的操作,当循环体执行完后,将再次判断条件,直到条件不满足(即逻辑表达式的值为假)为止,从而退出循环结构。

2、,实现当型循环结构的C语句形式为 while(表达式)循环体语句 功能:当表达式值0时,执行循环体,执行完后继续判断表达式值,只有当表达式值0时才退出循环。,例4.2 从键盘输入各学生成绩,并对90分以上(包括90分)的学生人数进行计数,直到输入的成绩为负为止,最后输出成绩在90分以上的学生人数。,图4.3 例4.2的流程图,其流程图如图4.3所示。其中变量count为整型,用于对90分以上的学生人数进行计数。,相应的C程序如下:#include stdio.hmain()int count;float grade;count0;scanf(%f,&grade);while(grade0.0)

3、if(grade90.0)countcount1;scanf(%f,&grade);printf(count%dn,count);,4.1.2 直到型循环结构直到型循环结构的流程图如图4.4所示。,图4.4 直到型循环结构流程图,直到型循环的执行过程是,首先执行循环体,然后判断条件(即计算逻辑表达式),如果条件满足(即逻辑表达式值为真),则退出循环结构;如果条件不满足(即逻辑表达式值为假),则继续执行循环体。实现直到型循环结构的C语句形式为do 循环体语句 while(表达式);功能:先执行循环体,然后判断表达式值,若表达式值0,则再次执行循环体,如此循环,直到表达式值0为止。,例4.3 计算

4、并输出下列级数和:,直到某项的绝对值小于 为止。,相应的流程图如图4.5所示。其中f用于改变每一项的符号,因为这是一个各项符号相间的级数。,图4.5 例4.3的流程图,相应的C程序如下:#include stdio.hmain()int k;double sum,d,f;sum1.0;k1;f1.0;do kk1;ff;d1.0/(k*(k1);sumsumf*d;while(d1.0e4);printf(sum%lfn,sum);,4.1.3 当型循环结构与直到型循环结构的区别与联系 当型循环结构与直到型循环结构既有共同之处,又有区别。主要体现在以下几个方面。(1)在当型循环中,其循环体可以

5、一次也不执行(即执行当型循环结构的一开始,其条件就不满足)。(2)不管是当型循环结构还是直到型循环结构,在循环体内部必须要有能改变条件(即逻辑表达式值)的语句,否则将造成死循环。(3)对于有些问题既可以用当型循环结构来处理,也可以用直到型循环结构来处理。(4)不管是当型循环结构还是直到型循环结构,其循环体如果包含一个以上的语句,应以复合语句形式出现。,4.2 for 循 环,C语言提供的for循环属于当型循环结构,其一般形式为for(表达式1;表达式2;表达式3)循环体语句(组)它等价于下列的当型循环结构:表达式1;while(表达式2)循环体语句 表达式3;,返回目录,下面对for循环语句作

6、几点说明:(1)在for语句中,三个表达式中的任何一个表达式均可省略,但其中的两个“;”不能省略。(2)下列两个循环都是死循环:for(表达式1;表达式3)循环体与 for(;)循环体 因为它们都没有用于判断循环是否结束的条件(即表达式2)。(3)for循环本质上也是当型循环结构,只不过它对于事先可以确定循环次数的问题特别方便。(4)在for循环中,循环体也可以是复合语句(即用一对花括号 括起来的语句组)。,4.3 循环的嵌套与其他有关语句,4.3.1 循环的嵌套 所谓循环的嵌套是指一个循环体内又包含了另一个完整的循环结构。C语言允许循环结构嵌套多层。循环的嵌套结构又称为多重循环。,返回目录,

7、例4.6 计算并输出10以内(包括10)所有自然数的阶乘值。即计算1!,2!,3!,4!,5!,6!,7!,8!,9!,10!。,采用的方法是,对于10以内的每一个自然数分别求它们的阶乘值。其流程图如图4.7所示。显然,这是一个二重循环结构。,图4.7 例4.6的流程图,相应的C程序如下:#include stdio.hmain()int n,k;double s;for(n1;n10;nn1)s1.0;for(k1;kn;kk1)ss*k;printf(%2d!%16.7fn,n,s);,4.3.2 break 语句C语言中的break语句有以下两个功能:(1)跳出 switch 结构;(2

8、)退出当前循环结构,包括 while 结构、dowhile 结构和for循环结构。,4.3.3 continue 语句 continue语句的功能是结束本次循环的执行,但不退出循环结构。下面举两个例子来说明continue语句的使用。,例4.10 输出100200之间所有能被7或9整除的自然数。相应的C程序如下:#include stdio.hmain()int n;for(n100;n200;nn1)if(n%7!0)&(n%9!0)continue;/*结束本次循环,继续进行下次循环*/printf(%d n,n);,实际上,上述程序等价于#include stdio.hmain()int

9、 n;for(n100;n200;nn1)if(n%70)|(n%90)printf(%d n,n);,4.4 程序举例,4.4.1 列举算法 所谓列举算法,是指根据提出的问题,列举所有可能的情况,并根据条件检验哪些是需要的,哪些是不需要的。,返回目录,例4.11 某单位要在A,B,C,D,E,F 6人中选派若干人去执行一项任务,选人的条件如下:(1)若C不去,则B也不去;(2)C和D两人中去一个;(3)D和E要么都去,要么都不去;(4)A,B,F 3人中要去两个;(5)C和F不能一起去:(6)E和F两人中至少去一个。问应该选哪几个人去?,C程序如下:#include stdio.hmain(

10、)int a,b,c,d,e,f;for(a0;a1;a)for(b0;b1;b)for(c0;c1;c)for(d0;d1;d)for(e0;e1;e)for(f0;f1;f),if(bc0|c1)&(cd1)&(de0|de2)&(abf2)&(cf!2)&(ef1)printf(A will%s be assigned.n,a?:not);printf(B will%s be assigned.n,b?:not);printf(C will%s be assigned.n,c?:not);printf(D will%s be assigned.n,d?:not);printf(E wil

11、l%s be assigned.n,e?:not);printf(F will%s be assigned.n,f?:not);,4.4.2 密码问题 在报文通信中,为使报文保密,发报人往往要按一定规律将其加密,收报人再按约定的规律将其解密(即将其译回原文)。,例4.13 从键盘输入一行字符,将其中的英文字母进行加密输出(非英文字母不用加密)。C程序如下:#include stdio.hmain()char c;int k;printf(input k:);scanf(%d,&k);scanf(%c,&c);/*吃掉上次输入的回车符*/cgetchar();while(c!n)if(ca&cz

12、)|(cA&cZ)cck;if(cz|(cZ&cZk)cc26;printf(%c,c);cgetchar();,4.4.3 对分法求方程实根 设非线性方程为f(x)0 用对分法求在区间a,b上的实根。具体方法如下:从区间端点x0a出发,以h为步长,逐步往后进行扫描。对于每一个被扫描的子区间xi,xi1(其中xi1xih)作如下处理:若在子区间两个端点上的函数值f(xi)与f(xi1)同号,则说明在该子区间上没有实根,将扫描下一个子区间;否则说明在该子区间上至少有一个实根。此时就可以在该子区间上采用对分法进一步搜索实根。,对分法的基本过程如下:取子区间xi,xi1的中点如果f(x)与f(xi)

13、同号,则令xix;否则令xi1x。然后重复这个过程,直到满足条件为止。其中为事先给定的精度要求。,图4.9 对分法求方程实根的流程图,对分法求方程实根的流程图如图4.9所示。,例4.15 用对分法求方程f(x)x26x10 在区间10,10上的实根,即A10,B10。取扫描步长H0.1,精度要求。,相应的C程序如下:#include stdio.hmain()int flag;double a10.0,b10.0,h0.1,x1,y1,x2,y2,x,y;x1a;y1x1*x16*x11.0;x2x1h;y2x2*x26*x21.0;while(x1b)if(y1*y20.0)x1x2;y1y

14、2;x2x1h;y2x2*x26*x21.0;else flag0;while(flag0)x(x1x2)/2;if(fabs(x2x1)0.000001)printf(x%11.7fn,x);x1x0.5*h;y1x1*x16*x11.0;x2x1h;y2x2*x26*x21.0;flag1;,else yx*x6*x1.0;if(y1*y0.0)x2x;y2y;else x1x;y1y;,4.4.4 迭代法求方程实根 设非线性方程为f(x)0 用迭代法求一个实根的基本方法如下:首先将方程f(x)0改写成便于迭代的格式x(x)然后初步估计方程实根的一个初值x0,作如下迭代:,n0,1,2,直

15、到满足条件|或者迭代了足够多的次数还不满足这个条件为止。其中为事先给定的精度要求。,反映上述过程的流程图如图4.10所示。,图4.10 迭代法求方程实根流程图,例4.16 求非线性方程x1arctanx0 的一个实根。取初值x01.0,精度要求0.000001。并改写成如下迭代格式:,相应的C程序如下:#include stdio.h#include math.hmain()int m;double x1.0,eps0.000001,x0;printf(input m:);scanf(%d,&m);/*输入最大迭代次数*/do x0 x;x1.0atan(x0);mm1;while(m!0)&

16、(fabs(xx0)eps);if(m0)printf(FAIL!n);else printf(x%11.fn,x);,4.4.5 牛顿法求方程实根 设非线性方程为f(x)0 在选取一个初值x0后,牛顿迭代格式为 实际上牛顿迭代格式是一种特殊的简单迭代格式,相当于 上述迭代过程一直进行到满足条件|或者迭代了足够多的次数还不满足这个条件为止。其中为事先给定的精度要求。,反映上述过程的流程图如图4.11所示。,图4.11 牛顿法求方程实根流程图,例4.17 求非线性方程x1cosx0的一个实根。取初值x01.0,精度要求0.000001。其牛顿迭代格式为 其中f(xn)xn1cos xn,f(xn

17、)1sin xn。,相应的C程序如下:#include stdio.h#include math.hmain()int m;double x1.0,eps0.000001,x0;printf(input m:);scanf(%d,&m);/*输入最大迭代次数*/do x0 x;xx0(x01cos(x0)/(1.0sin(x0);mm1;while(m!0)&(fabs(xx0)eps);if(m0)printf(FAIL!n);else printf(x%11.fn,x);,4.4.6 梯形法求定积分 设定积分为 由微积分的知识可以知道,该积分值的几何意义是在区间a,b内的曲线f(x)下的面

18、积,如图4.12所示。,图4.12 定积分几何意义,梯形法求定积分的基本思想是:首先将积分区间a,bn等分,得到n个子区间xi,xi1(i0,1,2,n1),每一个子区间的长度为h(ba)/n,如图4.12所示,其中xiaih。然后在每一个子区间上用梯形的面积来近似代替该子区间上小长条的面积。最后将所有小长条的面积近似值Si累加就可得到积分值的近似值。即S,其流程图如图4.13所示。,图4.13 梯形法求定积分,例4.18 用梯形法求积分dx即a0,b1,f(x)。,相应的C程序如下:#include stdio.h#include math.hmain()int n,k;double a0.0,b1.0,h,s,p,x;printf(input n:);scanf(%d,&n);/*输入等分数*/h(ba)/n;sh*(exp(a*a)exp(b*b)/2;p0.0;for(k1;kn;kk1)xak*h;ppexp(x*x);ssp*h;printf(s%11.7fn,s);,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号