下载此文档

C语言循环的小艺术.doc


文档分类:IT计算机 | 页数:约8页 举报非法文档有奖
1/8
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/8 下载此文档
文档列表 文档介绍
写代码,有两类追求,一种是追求实用(Coder),一种是追求代码艺术(Artist)我是那种追实用追腻了,偶然追一下艺术(就是偶然和艺术有一腿)的那种Coder很多人,已经习惯了for(i=0;i<n;i++)这种单调的循环,虽然这的确的使用率最高,但在特殊场合,特殊的循环写法,不但能提升循环的效率,,很多人可能会直接这样写:intisPrime(intn)//函数返回1表示是质数,返回0表示不是质数{   inti;   for(i=2;i<n;i++)        if(n%i==0)            break;   returni>=n;}又或者,有的人知道平方根的优化:intisPrime(intn){   inti,s=(int)(sqrt((double)n)+);   for(i=2;i<=s;i++)        if(n%i==0)            break;   returni>s;}再或者,消除偶数:intisPrime(intn){   inti,s=(int)(sqrt((double)n)+);   if(n<=3)return1;   if(n%2==0)return0;   for(i=3;i<=s;i+=2)        if(n%i==0)            break;   returni>s;}当然,这样还不是很够的话,我们可以考虑这个事实:所有大于4的质数,被6除的余数只能是1或者5比如接下来的5,7,11,13,17,19都满足所以,我们可以特殊化先判断2和3但后面的问题就出现了,因为并非简单的递增,从5开始是+2,+4,+2,+4,....这样递增的这样的话,循环应该怎么写呢?首先,我们定义一个步长变量step,循环大概是这样for(i=5;i<=s;i+=step)那么,就是每次循环,让step从2变4,或者从4变2于是,可以这么写:#include<>#include<>intisPrime(intn){   inti,s=(int)(sqrt((double)n)+),step=4;   if(n<=3)return1;   if(n%2==0)return0;   if(n%3==0)return0;   for(i=5;i<=s;i+=step)   {        if(n%i==0)            break;        step^=6;   }   returni>s;}intmain(){   intn;   for(n=2;n<100;++n)//找出2-100的质数并输出   {        if(isPrime(n))printf("%d,",n);   }   getchar();   return0;}如上代码,一个step^=6;完成step在2和4之间转换(这个^符号是C里的异或运算)理由是,2化二进制是010,4是100,6是110,于是2异或4得到6:2^4=>66^2=>46^4=>2于是利用异或,就可以构造这种步长在两个值之间来回变化的循环思考题:前面说的是双值循环,那么如何构造三值或者四值循环?,打印菱形在控制台的思路是

C语言循环的小艺术 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数8
  • 收藏数0 收藏
  • 顶次数0
  • 上传人cx545616
  • 文件大小24 KB
  • 时间2020-04-09
最近更新