• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            變態(tài)的C語言程序【轉(zhuǎn)】


            主要是是像大家展示了一些C語言的變態(tài)玩法。也向大家展示了一下程序是可以寫得讓人看不懂的,在那篇文章中,可以看到很多人的留言,很多人都覺得很好玩,是的,那本來是用來供朋友們“消遣作樂”,供娛樂娛東而已,不必太過認真。

             

            不過,通過這種極端的寫法,大家可以看到源代碼都可以寫得那么復(fù)雜難懂的。大家也許在贊嘆之余一笑了之,而我則希望,大家能夠在娛樂以后認真思考一下,你不要以為咱們自己不會把代碼搞得那么復(fù)雜,只不過沒有像那6個Hello World一樣那么極端,不過,說句老實話,咱們每個程序都有把清晰的程序搞得一團混亂的潛能,只不過程度不一樣罷了,我并不是在這里危言聳聽,大家好自為之。

             

            下面是一個Step by Step的教程,教你如何把一個清晰的代碼變得復(fù)雜難懂的。當然,這只是一個“簡明教程”了。還是那句話——“本文僅供朋友們“消遣作樂”,如果你要覺得有意思的話,頂個貼。如果你覺得沒什么意思的話,一笑了之。僅供娛樂而已,不必太過認真。”

            正常程序
            下面是一個找出素數(shù)的程序:

            void primes(int cap)
            {
                int i, j, composite;

                for(i = 2; i < cap; ++i) {
                    composite = 0;
                    for(j = 2; j * j < i; ++j) {
                        composite += !(i % j);
                    }
                    if(!composite){
                        printf("%d\t", i);
                    }
                }
            }

            int main()
            {
                primes(100);
            }
            下面我們來看看如何把上面這段代碼搞得復(fù)雜難懂。

            第一步、把for變成while
            通常來說,for循壞要以while循壞簡單一些,上面的程序有二重for循環(huán),我們不但要把其變成while循環(huán),而且還要把二重循環(huán)的變成一重的循環(huán),然后使用大量的if-else語句來判斷。

            void primes(int cap)
            {
                int i, j, composite, t = 0;
               
                while(t < cap * cap) {
                    i = t / cap;
                    j = t++ % cap;
                    if(i <= 1);
                    else if(!j)
                        composite = j;
                    else if(j == i && !composite)
                        printf("%d\t",i);
                    else if(j > 1 && j < i)
                        composite += !(i % j); 
                }
            }

            int main()
            {
                primes(100);
            }
            第二步,把循壞變成遞歸
            遞歸在某些時候是可以把代碼變得簡單,但大多數(shù)的情況下是把代碼變得復(fù)雜,而且很沒有效率。下面是把上面的while循環(huán)變成了遞歸。變成了遞歸后,函數(shù)的參數(shù)都變成3個了。

            void primes(int cap, int t, int composite)
            {
                int i,j;
                i = t / cap;
                j = t % cap;
                if(i <= 1)
                    primes(cap,t+1,composite);
                else if(!j)
                    primes(cap,t+1,j);
                else if(j == i && !composite)
                    (printf("%d\t",i), primes(cap,t+1,composite));
                else if(j > 1 && j < i)
                    primes(cap,t+1, composite + !(i % j));
                else if(t < cap * cap)
                    primes(cap,t+1,composite);
            }
             
            int main()
            {
                primes(100,0,0);
            }
            第三步,弄亂代碼結(jié)構(gòu)/使用沒有含義的變量名
            關(guān)于如何弄亂代碼結(jié)構(gòu),其中一個小技巧是,使用“?”表達式代替if-else語句。

            void primes(int m, int t, int c)
            {
                int i,j;
                i = t / m;
                j = t % m;
                (i <= 1) ? primes(m,t+1,c) : (!j) ? primes(m,t+1,j) : (j == i && !c) ?
                (printf("%d\t",i), primes(m,t+1,c)) : (j > 1 && j < i) ?
                primes(m,t+1,c + !(i % j)) : (t < m * m) ? primes(m,t+1,c) : 0;
            }
             
            int main()
            {
                primes(100,0,0);
            }
            第四步,取消臨時變量
            臨時變量一般用來保存反復(fù)使用的一個表達式的值。使用大量重復(fù)的表達式來取消這些臨時變量的也可以讓代碼復(fù)雜起來。

            void primes(int m, int t, int c)
            {
              ((t / m) <= 1) ? primes(m,t+1,c) : !(t % m) ? primes(m,t+1, t % m) :
              ((t % m)==(t / m) && !c) ? (printf("%d\t",(t / m)), primes(m,t+1,c)) :
              ((t % m)> 1 && (t % m) < (t / m)) ? primes(m,t+1,c + !((t / m) % (t % m))) :
              (t < m * m) ? primes(m,t+1,c) : 0;
            }

             
            int main()
            {
                primes(100,0,0);
            }
            第五步,繼續(xù)弄亂變量名
            我們知道,下劃線是合法的變量名,所以,我們不妨用__,___,____來代替m,t,c。函數(shù)名也可以使用下劃線來代替。讓我們來看看求素數(shù)的函數(shù)能變成什么。

            void _(int __, int ___, int ____)
            {
                ((___ / __) <= 1) ? _(__,___+1,____) : !(___ % __) ? _(__,___+1,___ % __) :
                ((___ % __)==(___ / __) && !____) ? (printf("%d\t",(___ / __)),
                _(__,___+1,____)) : ((___ % __) > 1 && (___ % __) < (___ / __)) ?
                _(__,___+1,____ + !((___ / __) % (___ % __))) : (___ < __ * __) ?
                _(__,___+1,____) : 0;
            }

            int main()
            {
                _(100,0,0);
            }
            第六步,移除常量
            在上面的程序中,還有一些常量,你可以通過增加一個宏定義,或是增加一個函數(shù)的形參來取代這一常量。

            void _(int __, int ___, int ____, int _____)
            {
                ((___ / __) <= _____) ? _(__,___+_____,____,_____) : !(___ % __) ? _(__,___+_____,___ % __, _____) :
                ((___ % __)==(___ / __) && !____) ? (printf("%d\t",(___ / __)),
                _(__,___+_____,____,_____)) : ((___ % __) > _____ && (___ % __) < (___ / __)) ?
                _(__,___+_____,____,_____ + !((___ / __) % (___ % __))) : (___ < __ * __) ?
                _(__,___+_____,____,_____) : 0;
            }
             
            int main() {
                _(100,0,0,1);
            }
            程序到這里應(yīng)該差不多了。還是那句話——“每一個程序員都有把源代碼弄復(fù)雜的潛質(zhì)”,大家好自為之。


            本文來自CSDN博客,轉(zhuǎn)載請標明出處:http://blog.csdn.net/haoel/archive/2009/05/30/4225974.aspx

            posted on 2009-06-01 23:18 colen 閱讀(212) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            <2009年6月>
            31123456
            78910111213
            14151617181920
            21222324252627
            2829301234
            567891011

            導(dǎo)航

            統(tǒng)計

            公告

            Polymerized Myblog successfully, WELCOME...

            常用鏈接

            留言簿(1)

            隨筆分類(4)

            相冊

            study community

            搜索

            最新評論

            少妇无套内谢久久久久| 97久久久精品综合88久久| 天天综合久久久网| 久久久久久国产精品无码下载| 久久97久久97精品免视看| 久久久久亚洲精品日久生情| 无码人妻久久一区二区三区免费| 久久99国产精品久久| 日韩久久久久中文字幕人妻| 蜜臀av性久久久久蜜臀aⅴ麻豆| 久久国产精品-久久精品| 亚洲午夜精品久久久久久app| 97久久国产露脸精品国产| 日本久久久精品中文字幕| 久久久这里有精品| 88久久精品无码一区二区毛片| 国内精品久久国产| 青青草国产精品久久久久| 日产精品久久久一区二区| 美女久久久久久| 色综合久久久久网| 97久久超碰成人精品网站| 99久久免费国产精品特黄| 日本免费一区二区久久人人澡| 亚洲国产精品成人久久| 午夜精品久久久久久影视riav| 精品欧美一区二区三区久久久 | 亚洲国产视频久久| 久久国产乱子伦精品免费强| 欧美熟妇另类久久久久久不卡| 日本WV一本一道久久香蕉| 久久91精品综合国产首页| 欧美日韩中文字幕久久伊人| 久久久久国产视频电影| 亚洲国产精品热久久| 国产精品久久久久影院色| 国产99精品久久| 国产精品无码久久综合| 久久精品国产亚洲av高清漫画 | 性欧美大战久久久久久久久| 久久精品国产精品亚洲精品|