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