C函数设计.pptVIP

  1. 1、本文档共46页,可阅读全部内容。
  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函数设计

函数检查表 全局变量 是否是在迫不得已的情况下,才使某些变量成为全局的? 命名约定是否对局部、模块和全局变量进行了区分? 是否给所有全局变量都加了注释? 程序中是否不含有伪全局变量——传往各个函数的庞大而臃肿的数据结构? 是否用存取函数来代替了全局数据? 是把存取函数和数据组织成模块而不是随意归成一堆的吗? 存取函数的抽象层次是否超过了程序语言实现细节? 所有相互有联系的存取函数,其抽象程度都是一致的吗? 函数分析 int find_max(int array[10]) { int i; int max = array[0]; for(i=1;i10;i+=1) if(array[i]max) max=array[i]; return max; } 递归 递归函数就是直接或间接调用自身的函数。 编程实现:将一个整数从二进制形式转换为可打印的字符形式。 思路:对于4536,我们需要依次产生字符‘4’,‘5’,‘3’,‘6’。 策略:将这个值反复除以10,打印余数。 问题:7!=‘7’ 想法: ‘0’+0=‘0’ ‘0’+1=‘1’ ‘0’+2=‘2’ 新问题:余数顺序6 、3 、5 、4 解决:递归 递归程序 #include stdio.h void binary_to_ascii(unsigned int value) { unsigned int quotient; quotient = value /10 ; if( quotient != 0) binary_to_ascii(quotient); putchar(value % 10 + ‘0’); } 递归过程分析 Value:4 Quotient:0 Value:45 Quotient:4 Value:453 Quotient:45 Value:4536 Quotient:453 其它函数调用使用的变量 递归与迭代 阶乘的计算往往是递归形式描述的 n=0 :1 Factorial(n) n0 : n x factorial(n-1) 递归的两个特性: 存在限制条件,当符合这个条件时递归不再继续。 每次递归调用之后越来越接近这个限制条件。 递归计算阶乘 long factorial(int n) { if(n=0) return 1; else return n*factorial(n-1); } 迭代计算阶乘 long factorial(int n) { int result =1; while(n1) { result *=n; n-=1; } return result; } 用递归计算斐波那契数 斐波那契定义: n=1: 1 Fibonacci(n) n =2: 1 n 2: Fibonacci(n-1)+Fibonacci(n-2) 问题: 在计算Fibonacci(n-1)的时候也将计算Fibonacci(n-2) 严重性: 在递归计算Fibonacci(10)时,Fibonacci(3)计算了21次 但是在递归计算Fibonacci(30)时,Fibonacci(3)计算了317811次。额外开销相当大。 递归斐波那契 long fibonacci(int n) { if(n=2) return 1; return fibonacci(n-1)+fibonacci(n-2); } 可变参数列表 在函数原型中,列出了函数期望接受的参数,但原型只能显示固定数据的参数。如何让一个函数在不同的时候接受不同数目的参数呢?----访问可变参数列表 Stdarg宏 stdarg.h: valist类型+ 三个宏(va_start、va_arg、va_end) 其中: va_start:初始化参数列表未定义部分。 va_arg:访问参数列表,并指定参数类型。 va_end:确定可变参数访问完毕。 计算指定数量的平均值 #include stdarg.h float average( int n_values,...) { va_list var_arg; int count; float sum=0; va_start(var_arg,n_values); for(count=0;countn_values;count+=1) { sum+=va_arg(var_arg,int); } va_end(var_arg); return sum/n_values; } 可变参数限制 参数列表中至少有一个命名参数(va_start)。 这些宏无法判断实际存在的参数和数量。 这些宏

文档评论(0)

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

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

版权声明书
用户编号:5134022301000003

1亿VIP精品文档

相关文档