C語言叨逼叨之一些注意事項
自五月中旬本菜雞進行轉專業補課:計算導論與程式設計(C語言)這門課已經有三個月了,雖然演算法還沒鑽研多深,不過結合一些經驗總結一些注意事項,估計沒有兄貴看吧2333.
1.do-while和while的使用,比如在你逐個輸入字元,直到#出現為止
2.sizeof來獲取資料型別所佔的位元組數,比如int型別在不同機器下所佔的位元組就不一樣,雖然大部分都是4個位元組
比如哈,看看ptr=(int*)malloc(n*sizeof(int)),這個sizeof(int)就最好別被4代替,目的也是為了提高程式碼移植性
3.很重要的一點,==和=分別是什麼,經常刷oj筆誤就會出這個問題,你還不容易看出來
4.接著上面那條,判斷整型資料和浮點型不都用==,判斷浮點型用abs(差)和0.00001這種比較
5.小心溢位,越界,其實現在記憶體已經不值錢了(誤)
6.scanf()輸入資料格式與格式控制串需要一致
7.這個地方,我被機考坑了好幾次,但是考試的時候都沒長記性,哎:
看下面這一部分程式碼:
printf(“輸入你的年齡”);scanf(“%d”,&age);printf(“age is %d\n”,age);
printf(“輸入你的性別”);scanf(“%c”,&sex);printf(“sex is %c\n”,sex);
當你輸入18,然後開開心心按下回車的時候,其實,你這個回車會被%c給讀進去,所以有時候這一類的問題經常有bug,這時候我們就需要在第一行末尾加一句getchar()來將緩衝區的回車符號讀入,避免被%c讀進去
當然,你也可以用fflush(stdin)用於清空鍵盤輸入緩衝區。
8.記住,字串是以\0結尾的,做一些oj題記住這一點,否則會產生越界訪問。
9.記得使用指標的時候,一旦有了malloc(某個空間),使用完畢後,一定要把指標free掉,並把這個指標置為NULL,否則每次執行一次程式,就會丟失一塊記憶體,導致記憶體洩漏
10.多個原始檔、標頭檔案的時候得注意一些細節,比如你可能需要巨集定義鎖
11.C語言中的math.h標頭檔案中有對數函式,原型為:
1.double log(double x) 求的是lnx(log(e)(x))
2.double log10(double x) 求log(10)(x)
求一般的話,假如以a為底的b的對數(log(a)(b)),利用換底公式轉化為lg(b)/lg(a)或ln(b)/ln(a) 進行求解
12.二進位制換十進位制遞迴方法,n==0/1返回n本身,否則返回n%10+convert(n/10)*2
13.有時候用對數解決問題會非常的騷,節省很多程式碼量,比如在求一個數的二進位制表示有多少位,方法很多,但是。。
14.閏年的判斷:(year%4==0&&year%100!=0)||year%400==0,並非四年就一閏
15.檔案用完就fclose了吧。
先寫這麼多。