教你如何写快速的程序.docVIP

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

第1讲——如何写快速的程序 1. 善于使用符号常量定义(宏定义) 原则1:对于运行过程中值不变的数据,尽量在常量说明中赋值,编译时分配存储空间并立即赋值(替换),这样既增加不了多少编译时间,又节省了目标代码的执行时间,同时增强程序的通用性和可读性。如: const int PI = 3.14; 原则2:对于很短又频繁调用的函数,使用宏函数(或内联函数),因为在函数调用时,系统需要开辟工作栈并保存当前的工作环境,因此需要耗费时间;而宏函数是在编译阶段嵌到代码中,相对于函数来说,使用宏函数的程序执行速度更快。但编译器对宏只简单地进行文本替换,使用时要避免出错。以下的宏函数完成取较小值的操作。 #define MAX(x, y) (x = y ? x, y) 2. 优化算术运算 原则1:各种算术运算的执行效率差别很大,稍加注意即可提高效率。表1给出了各种算术运算的效率比较。 乘和除的运算速度要比加和减慢很多,应该用加和减来优化乘和除,如: 3 * x (x + x + x 使用自增、自减或符合运算符,如: a = a + 1; ( a++; sum = sum + a[i]; ( sum += a[i]; 原则2:乘除和对2n求余。大部分C编译器的求余运算时调用子程序完成的,比较费时。如果求2n的余数,可以通过位操作完成。如果乘或除2n,可以通过移位操作完成。如: a % 2 ( a 1 a / 2 ( a 1 a * 2 ( a 1 原则3:避免重复计算。相同的运算最好执行一次并暂存起来,这样虽然增加了一个临时变量,但实际编译时,系统也会为运算的中间结果设置中间存储单元,因此,这样做不会增加内存消耗。如: 再有如下语句,编译程序为这两条语句分别安排单元,分配操作指令,但实质上两个表达式的绝对值相同,可以改为: x = a – b; x = a – b; y = b – a; y = -x; 原则4:有利于编译优化。编译程序的处理过程是对源程序自上而下逐句扫描,以基本块为单位进行的,所谓基本块指的是说明语句、复合语句、条件语句、循环语句等,编译优化一般是在基本块内进行。 3. 优化逻辑运算 大多数编译程序在计算逻辑表达式的值时都具有短路功能,所谓短路功能指的是自左向右计算,一旦可以得到表达式的结果就跳出表达式的计算。如: (i =0 a[i] !=x) 先计算i =0的值,若为真,再计算下一个表达式,若为假,则整个表达式的值为假,余下的表达式就不进行计算了, 同理,对于: (i =0 || a[i] !=x) 先计算i =0的值,若为假,再计算下一个表达式,若为真,则整个表达式的值为真,余下的就不再做了。 需要注意的是,如果余下的表达式中要改变变量的值,则可能会出错,如: (x y x++ z) 4. 合理安排条件语句的顺序 原则1:将执行概率较大的条件放在前面,如: if (x == 0 ) sign = 0; if (x 0 ) sign = 1; else if (x 0) sign = 1; else if (x 0) sign = -1; else sign = -1; else sign = 0; 原则2:避免重复判断,如: if (x = 0) if (x 0) … else … 5. 改善循环结构 原则1:由于循环语句有赋初值、条件判断、改变循环变量等时空开销,所以能用表达式实现的功能就不用循环语句,例如执行几次的循环: for (i = 0; i 3; i++) sum +=a[i]; 原则2:合理安排嵌套循环,在不影响程序逻辑的情况下,将循环次数多的作为内循环(即小循环套大循环),例如下面的程序: for (i = 1; i = 10; i++) ---------执行11次 for (j = 1; j =100; j++) --------10*101次 x++; ---------执行10*100次 for (j = 1; j =100; j++) --------执行101次 for (i = 1; i =10; i++) --------执行100*11次 x++; --------执行1000次 原则3:合并

文档评论(0)

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

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

1亿VIP精品文档

相关文档