C语言程序设计第五讲_第1页
C语言程序设计第五讲_第2页
C语言程序设计第五讲_第3页
C语言程序设计第五讲_第4页
C语言程序设计第五讲_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2020/7/5,C语言程序设计,主讲:杨雪青 E-mail: ,华北水利水电学院计算中心,2020/7/5,一、几种循环的比较 C语言中,三种循环结构都可以用来处理同一个问题,但在具体使用时 存在一些细微的差别。如果不考虑可读性,一般情况下它们可以相互代替。 循环变量初始化:while和do-while循环,循环变量初始化应该在 while和do-while语句之前完成;而for循环,循环变量的初始化可以在 表达式1中完成。 循环条件:while和do-while循环只在while后面指定循环条件;而for 循环可以在表达式2中指定。 循环变量修改使循环趋向结束:while和do-while

2、循环要在循环体内 包含使循环趋于结束的操作;for循环可以在表达式3中完成。 for循环可 以省略循环体,将部分操作放到表达式2,表达式3中,for语句功能强大。 while和for循环先测试表达式,后执行循环体,而do-while是先执行循 环体,再判断表达式。(所以while,for循环是典型的当型循环, 而do-while循环可以看作是直到型循环)。,第五讲 循环结构程序设计(二),2020/7/5,一、几种循环的比较 三种基本循环结构一般可以相互替代,不能说哪种更加优越。具体使 用哪一种结构依赖于程序的可读性和程序设计者个人程序设计的风格 (偏好)。我们应当尽量选择恰当的循环结构,使程

3、序更加容易理解。 (尽管for循环功能强大,但是并不是在任何场合都可以不分条件使)。 例:将50-100之间的能被3整除的数输出(用三种循环结构实现),第五讲 循环结构程序设计(二),/* 用while语句实现 */ main() int i=50; while(i=100) if(i%3=0) printf(“%4d”,n); i+; ,2020/7/5,二、 循环的嵌套 所谓循环的嵌套是指一个循环体内又包含了另一个完整的循环结构。C语言允许循环结构嵌套多层。循环的嵌套结构又称为多重循环。,第五讲 循环结构程序设计(二),do 循环体1 for(表达式1;表达式2;表达式3) 循环体2 wh

4、ile 条件,2020/7/5,二、循环的嵌套 2. 循环嵌套的执行过程 例. 写出下列程序的执行结果, ,#include main() int i, j; for (i=1; i=6; i+) for (j=1; j=i; j+) printf(*); printf(n); ,第五讲 循环结构程序设计(二),2020/7/5,例 计算并输出10以内(包括10)所有自然数的阶乘值。即计算1!,2!,3!,4!,5!,6!,7!,8!,9!,10!。,采用的方法是,对于10以内的每一个自然数分别求它们的阶乘值。其流程图如图4.7所示。显然,这是一个二重循环结构。,第五讲 循环结构程序设计(二)

5、,2020/7/5,相应的C程序如下: #include stdio.h main() int n,k; double s; for (n1; n10; nn1) s1.0; for (k1; kn; kk1) ss*k; printf(%2d!%16.7fn ,n,s); ,第五讲 循环结构程序设计(二),2020/7/5,例 百钱买百鸡:公元5世纪末,我国古代数学家张建丘在算经中提出了“问题”;“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?” 此题用代数方法是无法求解的。因为有3个未知数,只有2个方程 式。设公鸡x只,母鸡y只,小鸡z只,可以列出方程:

6、 x+y+z=100 5x+3y+z/3=100 由于无法直接用代数方法解,可以用“穷举法”来解此问题。 分析一下x,y,z的可能取值范围:公鸡最多能买20只,故0 x20;母鸡最多能买33只,所以0y33;在x,y确定后,自然就得出z=100-x-y。,第九讲 循环结构程序设计(三),2020/7/5,百钱买百鸡问题程序,#include stdio.h main() int x,y,z; printf(n cock hen chickn); for (x = 0;x=19; x+) for (y = 0; y=32; y+) z = 100 - x - y; if (5 * x + 3 *

7、 y + z / 3 =100) ,第九讲 循环结构程序设计(三),2020/7/5,例:有一个数列,前两个数是1,1,第三个数是前两个数之和,以后每个数都是其前两个数之和,此数列的前几个数为1,1,2,3,5,8要求输出前20个数。数列称为Fibonacii,斐波那契数列,第九讲 循环结构程序设计(三),递推过程:,112 3581321,(第1次),f1,f2,+,f1,f2,(第2次),(第3次),f1,f2,+,f1,f2,f1,f2,+,f1,f2,2020/7/5,第九讲 循环结构程序设计(三),#include stdio.h main() int f1=1,f2=1,i; pr

8、intf(%8d%8d,f1,f2); for (i = 1;i10; i+) f1 = f1 + f2; f2 = f2 + f1; printf(%8d%8d,f1,f2); ,斐波那契数列问题程序,2020/7/5,三、循环控制语句 1、break 语句 C语言中的break语句有以下两个功能: (1)跳出 switch 结构; (2)退出当前循环结构,包括 while 结构、 dowhile 结构和for循环结构。 2、continue 语句 continue语句的功能是结束本次循环的执行,但不退出循环结构。 下面举两个例子来说明continue语句的使用。,第五讲 循环结构程序设计(

9、二),2020/7/5,第七讲 循环结构程序设计(一),#include stdio.h main() int i,sum=0; for (i = 1;i= 100) break; printf(i=%d,sum=%d,i,sum); ,2020/7/5,例:输入一个整数n,判断它是否为素数。,#include main() int n, k, i,flag=0; printf(ninput n:); scanf(%d, ,第五讲 循环结构程序设计(二),2020/7/5,例 输出100200之间所有能被7或9整除的自然数。,第五讲 循环结构程序设计(二),相应的C程序如下: #include

10、 stdio.h main() int n; for (n100; n200; nn1) if (n%7!0)&(n%9!0) continue; /*结束本次循环,继续进行下次循环*/ printf(%d n,n); ,2020/7/5,第五讲 循环结构程序设计(二),实际上,上述程序等价于 #include stdio.h main() int n; for (n100; n200; nn1) if (n%70) | | (n%90) printf(%d n,n); ,2020/7/5,例:输出100200之间的所有素数。,?,第五讲 循环结构程序设计(二),2020/7/5,四、循环结构

11、程序设计举例 1、密码问题 在报文通信中,为使报文保密,发报人往往要按一定规律将其加密,收报人再按约定的规律将其解密(即将其译回原文)。 最简单的加密算法是将报文中的每一个英文字母换成其后的第k个字母,例如k=3时,字母a转换为d,b转换为e,z转换为c等。,第五讲 循环结构程序设计(二),2020/7/5,例 从键盘输入一行字符,将其中的英文字母进行加密输出(非英文字母不用加密)。C程序如下:,#include stdio.h main() char c; int k; printf(input k:); scanf(%d,&k); scanf(%c,&c); /*吃掉上次输入的回车符*/

12、cgetchar(); while(c!n) if (ca & cz) | | (cA & cZ) cck; if (cz | | (cZ & cZk) cc26; printf(%c,c); cgetchar(); ,2020/7/5,解密算法C程序如下:,#include stdio.h main() char c; int k; printf(input k:); scanf(%d,&k); scanf(%c,&c); /*吃掉上次输入的回车符*/ c=getchar(); while(c!n) if (ca & cz) | | (cA & cZ) cc - k; if (ca- k )

13、| | (cA) cc+26; printf(%c,c); cgetchar(); ,2020/7/5,四、循环结构程序设计举例 2、梯形法求定积分 设定积分为 由微积分的知识可以知道,该积分值的几何意义是在区间a,b内的曲线f (x)下的面积,如图4.12所示。,定积分几何意义,2020/7/5,梯形法求定积分的基本思想是: 首先将积分区间a,bn等分,得到n个子区间xi, xi1(i0,1,2,n1),每一个子区间的长度为h(ba)/n,如图4.12所示,其中xiaih。 然后在每一个子区间上用梯形的面积 来近似代替该子区间上小长条的面积。 最后将所有小长条的面积近似值Si累加就可得到积分值的近似值。即 S ,2020/7/5,其流程图如图4.13所示。,图4.13 梯形法求定积分,2020/7/5,例4.18 用梯形法求积分 dx 即a0,b1,f(x) 。,2020/7/5,相应的C程序如下:,#include stdio.h #include math.h main() int n,k; double a0.0,b

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论