C语言程序设计第7讲.pptVIP

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言程序设计第7讲

SUN Yat-sen University Chen Pingping 一、几种循环的比较 三种基本循环结构一般可以相互替代,不能说哪种更加优越。具体使 用哪一种结构依赖于程序的可读性和程序设计者个人程序设计的风格 (偏好)。我们应当尽量选择恰当的循环结构,使程序更加容易理解。 (尽管for循环功能强大,但是并不是在任何场合都可以不分条件使)。 例:将50-100之间的能被3整除的数输出(用三种循环结构实现) 百钱买百鸡问题程序 C语言程序设计 主讲:杨雪青 E-mail: yangxueqing@ncwu.edu.cn 华北水利水电学院计算中心 5.3 模块的递归调用 人们在解决一些复杂问题时,为了降低问题的复杂程度(如问题的规模等),一般总是将问题逐层分解,最后归结为一些最简单的问题。 第六讲 模块程序设计(一) 例5.5 编写一个C函数,对于输入的参数n,依次打印输出自然数1到n。 这是一个很简单的问题,实际上不用递归就能解决,其C函数如下: #include stdio.h wrt(int n) { int k; for (k=1;k<=n;k++) printf(%d\n,k); return; } 解决这个问题还可以用以下的递归函数来实现: #include stdio.h wrt1(int n) { if (n!=0) { wrt1(n-1); printf(%d\n,n);} return; } 自己调用自己的过程称为递归调用过程。在C语言中,自己调用自己的函数称为递归函数。 递归分为直接递归与间接递归两种。 所谓直接递归,是指直接调用函数本身。 5.4 程序举例 例5.6 编写一个函数,其功能是判断给定的正整数是否是素数,若是素数则返回函数值1,否则返回函数值0。 其C函数如下: #include math.h sushu(int n) { int k,i,flag; k=sqrt((double)n); i=2; flag=0; while ((i<=k)(flag==0)) { if (n%i==0) flag=1; i=i+1; } return(!flag); } 例5.8 Hanoi塔问题。 相传古代印度有一座Bramah庙,庙中有三根插在黄铜板上的宝石柱,在其中的一根柱子上放了64个金盘子,大盘在下,小盘在上,称为Hanoi塔。有一天,庙里的和尚们想把这些盘子从一根柱子上移到另一根柱子上,规定每次只允许移动一个盘子,并且,在移动过程中都不允许出现大盘子压在小盘子上面的现象,但在移动盘子的过程中可以利用三根柱子中的任何一根。 为了使问题具有普遍性,假设圆盘数为n,按直径从小到大依次编号为1,2,…,n;三根柱子的名称分别为X,Y,Z。开始时,n个圆盘按从大到小的顺序(即下面放大圆盘,上面放小圆盘)放在X柱子上,现在要将X柱子上的n个圆盘移到Z柱子上,其移动的原则如上所述。这个问题称为n阶Hanoi塔问题。 可以写出C程序如下: #include stdio.h main() { int n; char x=X,y=Y,z=Z; void hanoi(); printf(input n=); scanf(%d,n); hanoi(n,x,y,z); } ? void hanoi(n,x,y,z) int n; char x,y,z; { void move(); if (n==1) move(x,n,z); else { hanoi(n-1,x,z,y); move(x,n,z); hanoi(n-1,y,x,z); } return; } ? void move(x,n,z) int n; char x,z; { printf(%c(%d)----%c\n,x,n,z); } 5.5 编译预处理 编译预处理功能是C语言的一个重要特点。所谓编译预处理,是指C语言编译系统首先对程序模块中的编译预处理命令进行处理。 C语言提供的编译预处理命令主要有以下3种: (1)宏定义; (2)文件包含命令; (3)条件编译命令。 编译预处理命令一般是在函数体的外面。正确使用编译预处理命令,可以编写出易于调试、易于移植的程序模块。 5.5.1 文件包含命令 文件包含是指一个源文件可以将另一个指定的源文件包括进来。 文件包含命令的

文档评论(0)

wuyoujun92 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档