2022-01-24 11:15:56|已瀏覽:1687次
編寫高效簡潔的C語言代碼,是許多軟件工程師追求的目標(biāo)。本文就工作中的一些體會和經(jīng)驗做做了一下三個問題,對其進(jìn)行了優(yōu)化,不對的地方請各位指教。
<1>.輸出 int 型數(shù)組a的元素個數(shù)很容易可以想到數(shù)組元素個數(shù)有奇偶之分,那么可以這樣填:(n%2==1)?(n/2+1):(n/2) 這樣寫當(dāng)然沒有錯,只是有些繁瑣,而且條件運算符的三個部分都要用括號括起來,否則會出現(xiàn)語法錯誤,這樣的代碼當(dāng)然就不夠好了。那么要怎么寫?
其實這類問題可以用數(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。
再補充說一個小的點,在 (n%2==1)?(n/2+1):(n/2) 中 n%2==1 就等價于 n%2 ,它們的值是一樣的,總結(jié)一下就是n==1等價于n,而n==0就等價于!n,這樣寫可以避免使用==號帶來的容易錯寫成=賦值號造成答案錯誤的問題,提高了代碼的安全性。for(int i=0;i<5*k;i++) printf("%d ",a[i%5]);
這樣就變成了一重循環(huán)啦,降低了時間復(fù)雜度而且也沒有提高空間復(fù)雜度,代碼效率自然就變高了。
注:尊重原創(chuàng)文章,轉(zhuǎn)載請注明出處和鏈接 http://m.universityresearchassociates.com/news-id-17704.html 違者必究!部分文章來源于網(wǎng)絡(luò)由培訓(xùn)無憂網(wǎng)編輯部人員整理發(fā)布,內(nèi)容真實性請自行核實或聯(lián)系我們,了解更多相關(guān)資訊請關(guān)注c語言頻道查看更多,了解相關(guān)專業(yè)課程信息您可在線咨詢也可免費申請試課。關(guān)注官方微信了解更多:150 3333 6050