深入理解函数.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
深入理解函数

第五章;1. return语句;return的使用;在“if/else语句”中我们定义了一个检查奇偶性的print_parity函数,如果是奇数就打印x is odd.,如果是偶数就打印x is even.。 事实上这个函数并不好用,我们定义一个检查奇偶性的函数往往不是为了打印两个字符串就完了,而是为了根据奇偶性的不同分别执行不同的后续动作。 我们可以把它改成一个返回布尔值的函数:;return 的使用;;顺便说一下;写带return的函数的注意事项;写带return的函数的注意事项;顺便说一下;比如上面的绝对值函数,在你测试的时候运行得很好,也许是你没有测到x==0的情况,也许刚好在你的环境中x==0时返回的不确定值就是0 ,然后你放心地把它集成到一个数万行的程序之中。然后你把这个程序交给用户,起初的几天里相安无事,之后每过几个星期就有用户报告说程序出错,但每次出错的现象都不一样,而且这个错误很难复现,你想让它出现时它就不出现,在你毫无防备时它突然又冒出来了。然后你花了大量的时间在数万行的程序中排查哪里错了,几天之后终于幸运地找到了这个函数的问题,这时候你就会想,如果当初编译器能报个错多好啊!所以,如果编译器报错了,不要责怪编译器太过于挑剔,它是在帮你节省大量的调试时间。另外,在math.h 中有一个fabs函数就是求绝对值的,我们通常不必自己写绝对值函数。;练习;2.增量式(Incremental)开发;;问题;转化成C语言: 首先编写一个返回两点距离的函数,可以先写一个简单的定义: 写到这里你可能就已经不太自信了:这个函数定义写得对吗?虽然我是按我理解的语法规则写的,但之前并没有和这个一模一样的例子,万一不小心遗漏了什么呢?既然不自信就不要再往下写了,没有一个平稳的心态来写程序很可能会引入Bug。所以在函数定义中插一个return 0.0立刻结束掉它,然后立刻测试这个函数定义得有没有错: ;编译,运行,一切正常。这时你就会建立起信心了:既然没问题,就不用管它了,继续往下写。现在我们再往函数里添一点代码:;如果你不确定dx和dy这样初始化行不行,那么就此打住,在函数里插一条打印语句把dx和dy的值打出来看看。把它和上面的main函数一起编译运行,由于我们事先知道结果应该是多少,因此能够验证程序算得对不对。;一旦验证无误,函数里的这句打印就可以撤掉了。 像这种打印语句,以及我们用来测试的main函数,都起到了类似脚手架(Scaffold)的作用: 在盖房子时很有用,但它不是房子的一部分,房子盖好之后就可以拆掉。房子盖好之后可能还需要维修、加盖、翻新,又要再加上脚手架,这很麻烦,要是当初不用拆就好了,可是不拆不行,不拆多难看啊。 写代码却可以有一个更高明的解决办法:把Scaffolding的代码注释掉。这样如果以后出了新的Bug又需要跟踪调试时,还可以把这句重新加进代码中使用。;;;最后一步,我们完成这个函数: 然后编译运行,看看是不是得5.0。;随着编程经验越来越丰富,你可能每次写若干行代码再一起测试,而不是像现在这样每写一行就测试一次,但不管怎么样,增量式开发的思路是很有用的,它可以帮你节省大量的调试时间,不管你有多强,都不应该一口气写完整个程序再编译运行,那几乎是一定会有Bug的,到那时候再找Bug就难了。 这个程序中引入了很多临时变量:dx、dy、dsquared、result,如果你有信心把整个表达式一次性写好,也可以不用临时变量:;这样写简洁得??了。但如果写错了呢?只知道是这一长串表达式有错,根本不知道错在哪,而且整个函数就一个语句,插printf都没地方插。所以用临时变量有它的好处,使程序更清晰,调试更方便,而且有时候可以避免不必要的计算,例如上面这一行表达式要把(x2-x1)计算两遍,如果算完(x2-x1)把结果存在一个临时变量dx里,就不需要再算第二遍了。;;;;还有另一种组合的思路,不是把distance和area两个函数调用组合起来,而是把那两个函数中的语句组合到一起: ;这样组合是不理想的;小结;3.递归 要理解递归,你首先要理解递归;3.递归

文档评论(0)

yaocen + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档