C語(yǔ)言學(xué)習(xí)過程中如何優(yōu)化代碼
2022-01-24點(diǎn)擊量:1686
編寫高效簡(jiǎn)潔的C語(yǔ)言代碼,是許多軟件工程師追求的目標(biāo)。本文就工作中的一些體會(huì)和經(jīng)驗(yàn)做做了一下三個(gè)問題,對(duì)其進(jìn)行了優(yōu)化,不對(duì)的地方請(qǐng)各位指教。.輸出int型數(shù)組a的元素個(gè)數(shù)printf("%d\n",_________);這里怎么填對(duì)我們來說非常簡(jiǎn)單了,我們一般用的32位機(jī),所以直接寫sizeof(a)/4就可以,開始這樣代碼就只適用于32位機(jī),就降低了代碼的移植性,所以可以改為sizeof(a)/sizeof(int),讓系統(tǒng)自行計(jì)算int類型占用空間?扇绻囊幌骂}目,輸出數(shù)組a的元素個(gè)數(shù)呢?這時(shí)數(shù)組的元素類型不確定,但是數(shù)組每個(gè)元素的類型一定相同,因此只要寫sizeof(a)/sizeof(a[0])就可以了。.int型數(shù)組a有n個(gè)元素,將數(shù)組從中間一分為二,輸出數(shù)組后半段的起始下標(biāo)printf("%d\n",_________);很容易可以想到數(shù)組元素個(gè)數(shù)有奇偶之分,那么可以這樣填:(n%2==1)?(n/2+1):(n/2)這樣寫當(dāng)然沒有錯(cuò),只是有些繁瑣,而且條件運(yùn)算符的三個(gè)部分都要用括號(hào)括起來,否則會(huì)出現(xiàn)語(yǔ)法錯(cuò)誤,這樣的代碼當(dāng)然就不夠好了。那么要怎么寫?其實(shí)這類問題可以用數(shù)學(xué)知識(shí)來解決:n為奇數(shù)時(shí)后半段起始下標(biāo)是/2+1,為偶數(shù)則是n/2+0,n為奇數(shù)時(shí)加的1和n為偶數(shù)時(shí)加的0可以看成是他本身對(duì)2取余,所以可以填:/2+(n%2)。好像還是不夠好看,再想一下還可以怎么優(yōu)化呢:一個(gè)奇數(shù)和比它小1的偶數(shù)除以2得到相同的數(shù),那么如果n是奇數(shù),n/2+1和(n+1)/2等價(jià),如果n是偶數(shù),n/2+0和(n+1)/2等價(jià),于是這里可以這樣填了:(n+1)/2。再補(bǔ)充說一個(gè)小的點(diǎn),在(n%2==1)?(n/2+1):(n/2)中n%2==1就等價(jià)于n%2,它們的值是一樣的,總結(jié)一下就是n==1等價(jià)于n,而n==0就等價(jià)于!n,這樣寫可以避免使用==號(hào)帶來的容易錯(cuò)寫成=賦值號(hào)造成答案錯(cuò)誤的問題,提高了代碼的安全性。那如果一句代碼是要判斷兩個(gè)數(shù)m與n相等或不等的關(guān)系呢?想一下,如果相等,那么m-n==0,于是判斷相等用!(m-n),判斷不等用(m-n)。.將數(shù)組a={10,20,30,40,50}輸出k次如k=3,輸出:102030405010203040501020304050可以這樣寫:for(intloop=0;loop...