微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题C语言程序简化一例
栏目软件世界
作者李明
发布2001年37期
  编者按:上一期,我们给大家介绍了一下如何精简VB程序,受到了初学者的欢迎。这一期我们为大家简单介绍一下C程序的简化,相信对大家也很有帮助。
  由于受到教材既定思路的影响,我们很多人在编写C语言程序的时候显得思路虽然清晰,但代码稍显冗长。若加以改进,来一个“程序压缩”,不但利用了C语言使用灵活的优点,还能使人养成编写程序短小简洁的好习惯。一举两得,何乐不为?
  现举一例说明:
  [例]用π/4≈1-1/3+1/5-1/7+……公式求π的近似值,直到最后一项的绝对值小于10e-6(10的-6次方)为止。
   原解:
  #include <math.h>
  main()
  {
  int s;
  float n,t,pi;
  long int i=0;
  t=1;
  pi=0;
  n=1.0;
  s=1;
  while((fabs(t))>1e-6)
  { pi=pi+t
  n=n+2;
  s=-s;
  t=s/n;
  }
  pi=pi*4;
  printf("pi=%10.6f\n",pi);
  }
   新的解法:
  main()
  {
  float pi=0,s=-1;
  long int i;
  for(i=1;i<1e6;i+=2)pi+=(s*=-1)/(float)i;
  printf(“pi=%10.6f\n”,pi*4);
  }
   说明:
  为什么同样的结果,第二个程序却如此短小呢?其实,它是在三个地方进行了压缩:
  1.原解是先定义变量,再赋值;而它是在定义变量的过程中赋值。
  2.原解在每次循环时对符号变量s、分母n和符号变量与分母的比值t分别赋值;而它则是在一个表达式pi+=(s*=-1)/(float)i中完成。
  3.原解用于判断循环结束的方法是判断t是否小于10e-6,而我则是直接判断分母是否大于10e6。区别在于:在原解中t时正时负,因而要用到绝对值函数fabs(),那么就必须调用math.h;而我的解中i既是循环变量,又是分母,它恒为正,就不用math.h了。
  经过以上三个压缩,程序就大大减小了,本示例的压缩率达到了46%。
  不要小看程序的压缩。CIH的作者陈盈豪就是以程序短小简练著称,他曾经以一个三行的程序令计算机专业的学生拜服。相信你学会了压缩程序后,这也不再是什么难事了。