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