當前位置:首頁 » 編程語言 » c語言小技巧

c語言小技巧

發布時間: 2022-07-16 10:06:49

『壹』 c語言編程時有哪些小技巧

多參考別人的優秀的源代碼,試著在自己寫寫代碼熟悉語法和編寫代碼的規則。
要學會自己修改自己的錯誤,在修改的過程中將學會不少的編程經驗。
多用輸入(scanf)和輸出(printf)來調試錯誤的代碼段,就可以很快的找到錯誤的所在。

『貳』 怎樣才能學好C語言

1、學好c語言,你可以很好地應付任何一種編程工具。
2、一定要多上機練習,通過程式了解相關知識。幾經反復方得正果。
3、不要把學習c語言當成一種任務,更不要把它看成很難完成的任務。要充滿自信,只要是一個智力正常的人都能學好c語言。始終保持游戲的心態,多發現其中的樂趣。當感到編程趣味無窮,那你在電腦方面將前程無量。
4、如果一個程式一時無法弄清楚最後暫時放在一邊,過一段時間你可能會從其他的程式中悟出道理。
5、c語言是一個整體,各個方面是有機聯系的,要從總體上把握它,不要把它割裂成互不關聯的部件。
6、不要完全相信教材(包括本講義),所有結論最好都上機驗證。
怎樣學好c語言
1.
工欲善其事,必先利其器
准備工作:一個開發環境,如turbo
c
2.0、visual
c++等開發工具;一本好教材,如譚浩強主編的《c語言程序設計》(第二版)。我當時看的是他的第一版,就為它的簡潔、完美所吸引,簡直愛不釋手,用了兩個星期一口氣看完。
2.
秘密武器
初學者學習計算機語言要會「讀程序」,要對小型的應用型、游戲型程序感興趣,並模仿去加深對c語言程序設計的理解和操作,只有不斷地寫程序、調試程序才能得到編寫程序的經驗和加深對程序的理解,這也是學習編寫優秀高級程序的秘密武器。
3.
發揚探索精神
學習c語言程序設計有點像做數學難題,只要我們善於思考,善於探索,發揚探索精神去尋找好的設計思想和方法,才能把c語言的精髓真正地掌握。
備戰c語言考試要訣
1.
了解大綱,臨陣不亂
各類筆試中,大多數考題是與大綱要求的基本內容一致的,難度不高,但內容十分廣泛,應牢固掌握c語言考試大綱要求的基礎部分。只有熟悉題型,理解語法、句法,做到心中有數,才能臨陣不亂。
2.
善於歸納,強化記憶
對於需要記憶的計算機基礎知識和基本概念,如果考試時因此失分就十分可惜。如:c語言中有幾種不同的數據類型?運算的優先順序別是怎樣的?因此我們需要善於歸納這些計算機基礎知識,並在理解的基礎上強化記憶。
3.
重視實踐,善於調試
計算機科學是一門理論性、實踐性都很強的學科,對c語言考試的參加者來說,基礎理論方面要求不高,而上機試題往往是很多考生不能通過考試的重要原因,因此要勤於實踐。
4.
多做練習,查漏補缺
在認真地學完指定用書後,最好再找些試題,認真地測試一下,一則可以檢查自己的復習情況;二則可以查漏補缺;三則可以調節心理狀況,以備正式考試時沉著冷靜、萬無一失。

『叄』 C語言中有哪些實用的編程技巧

這篇文章主要介紹了C語言高效編程的幾招小技巧,本文講解了以空間換時間、用數學方法解決問題以及使用位操作等編輯技巧,並給出若干方法和代碼實例,需要的朋友可以參考下

引言:

編寫高效簡潔的C語言代碼,是許多軟體工程師追求的目標。本文就工作中的一些體會和經驗做相關的闡述,不對的地方請各位指教。

第1招:以空間換時間

計算機程序中最大的矛盾是空間和時間的矛盾,那麼,從這個角度出發逆向思維來考慮程序的效率問題,我們就有了解決問題的第1招——以空間換時間。

例如:字元串的賦值。

方法A,通常的辦法:

代碼如下:

#define LEN 32

char string1 [LEN];

memset (string1,0,LEN);

strcpy (string1,「This is a example!!」);

方法B:

代碼如下:

const char string2[LEN] =「This is a example!」;

char * cp;

cp = string2 ;

(使用的時候可以直接用指針來操作。)

從上面的例子可以看出,A和B的效率是不能比的。在同樣的存儲空間下,B直接使用指針就可以操作了,而A需要調用兩個字元函數才能完成。B的缺點在於靈 活性沒有A好。在需要頻繁更改一個字元串內容的時候,A具有更好的靈活性;如果採用方法B,則需要預存許多字元串,雖然佔用了大量的內存,但是獲得了程序 執行的高效率。

如果系統的實時性要求很高,內存還有一些,那我推薦你使用該招數。

該招數的變招——使用宏函數而不是函數。舉例如下:

方法C:

代碼如下:

#define bwMCDR2_ADDRESS 4

#define bsMCDR2_ADDRESS 17

int BIT_MASK(int __bf)

{

return ((1U << (bw ## __bf)) - 1) << (bs ## __bf);

}

void SET_BITS(int __dst, int __bf, int __val)

{

__dst = ((__dst) & ~(BIT_MASK(__bf))) | /

(((__val) << (bs ## __bf)) & (BIT_MASK(__bf))))

}

SET_BITS(MCDR2, MCDR2_ADDRESS, RegisterNumber);

方法D:

代碼如下:

#define bwMCDR2_ADDRESS 4

#define bsMCDR2_ADDRESS 17

#define bmMCDR2_ADDRESS BIT_MASK(MCDR2_ADDRESS)

#define BIT_MASK(__bf) (((1U << (bw ## __bf)) - 1) << (bs ## __bf))

#define SET_BITS(__dst, __bf, __val) /

((__dst) = ((__dst) & ~(BIT_MASK(__bf))) | /

(((__val) << (bs ## __bf)) & (BIT_MASK(__bf))))

SET_BITS(MCDR2, MCDR2_ADDRESS, RegisterNumber);

函數和宏函數的區別就在於,宏函數佔用了大量的空間,而函數佔用了時間。大家要知道的是,函數調用是要使用系統的棧來保存數據的,如果編譯器里有棧檢查 選項,一般在函數的頭會嵌入一些匯編語句對當前棧進行檢查;同時,CPU也要在函數調用時保存和恢復當前的現場,進行壓棧和彈棧操作,所以,函數調用需要 一些CPU時間。而宏函數不存在這個問題。宏函數僅僅作為預先寫好的代碼嵌入到當前程序,不會產生函數調用,所以僅僅是佔用了空間,在頻繁調用同一個宏函 數的時候,該現象尤其突出。

D方法是我看到的最好的置位操作函數,是ARM公司源碼的一部分,在短短的三行內實現了很多功能,幾乎涵蓋了所有的位操作功能。C方法是其變體,其中滋味還需大家仔細體會。

第2招:數學方法解決問題

現在我們演繹高效C語言編寫的第二招——採用數學方法來解決問題。

數學是計算機之母,沒有數學的依據和基礎,就沒有計算機的發展,所以在編寫程序的時候,採用一些數學方法會對程序的執行效率有數量級的提高。

舉例如下,求 1~100的和。

方法E

代碼如下:

int I , j;

for (I = 1 ;I<=100; I ++){

j += I;

}

方法F

代碼如下:

int I;

I = (100 * (1+100)) / 2

這個例子是我印象最深的一個數學用例,是我的計算機啟蒙老師考我的。當時我只有小學三年級,可惜我當時不知道用公式 N×(N+1)/ 2 來解決這個問題。方法E循環了100次才解決問題,也就是說最少用了100個賦值,100個判斷,200個加法(I和j);而方法F僅僅用了1個加法,1 次乘法,1次除法。效果自然不言而喻。所以,現在我在編程序的時候,更多的是動腦筋找規律,最大限度地發揮數學的威力來提高程序運行的效率。

第3招:使用位操作

實現高效的C語言編寫的第三招——使用位操作,減少除法和取模的運算。

在計算機程序中,數據的位是可以操作的最小數據單位,理論上可以用「位運算」來完成所有的運算和操作。一般的位操作是用來控制硬體的,或者做數據變換使用,但是,靈活的位操作可以有效地提高程序運行的效率。舉例如下:

方法G

代碼如下:

int I,J;

I = 257 /8;

J = 456 % 32;

方法H

int I,J;

I = 257 >>3;

J = 456 - (456 >> 4 << 4);

在字面上好像H比G麻煩了好多,但是,仔細查看產生的匯編代碼就會明白,方法G調用了基本的取模函數和除法函數,既有函數調用,還有很多匯編代碼和寄存 器參與運算;而方法H則僅僅是幾句相關的匯編,代碼更簡潔,效率更高。當然,由於編譯器的不同,可能效率的差距不大,但是,以我目前遇到的MS C ,ARM C 來看,效率的差距還是不小。相關匯編代碼就不在這里列舉了。

運用這招需要注意的是,因為CPU的不同而產生的問題。比如說,在PC上用這招編寫的程序,並在PC上調試通過,在移植到一個16位機平台上的時候,可能會產生代碼隱患。所以只有在一定技術進階的基礎下才可以使用這招。

第4招:匯編嵌入

高效C語言編程的必殺技,第四招——嵌入匯編。

「在熟悉匯編語言的人眼裡,C語言編寫的程序都是垃圾」。這種說法雖然偏激了一些,但是卻有它的道理。匯編語言是效率最高的計算機語言,但是,不可能靠著它來寫一個操作系統吧?所以,為了獲得程序的高效率,我們只好採用變通的方法 ——嵌入匯編,混合編程。

舉例如下,將數組一賦值給數組二,要求每一位元組都相符。

代碼如下:

char string1[1024],string2[1024];

方法I

代碼如下:

int I;

for (I =0 ;I<1024;I++)

*(string2 + I) = *(string1 + I)

方法J

代碼如下:

#ifdef _PC_

int I;

for (I =0 ;I<1024;I++)

*(string2 + I) = *(string1 + I);

#else

#ifdef _ARM_

__asm

{

MOV R0,string1

MOV R1,string2

MOV R2,#0

loop:

LDMIA R0!, [R3-R11]

STMIA R1!, [R3-R11]

ADD R2,R2,#8

CMP R2, #400

BNE loop

}

#endif

方法I是最常見的方法,使用了1024次循環;方法J則根據平台不同做了區分,在ARM平台下,用嵌入匯編僅用128次循環就完成了同樣的操作。這里有 朋友會說,為什麼不用標準的內存拷貝函數呢?這是因為在源數據里可能含有數據為0的位元組,這樣的話,標准庫函數會提前結束而不會完成我們要求的操作。這個 常式典型應用於LCD數據的拷貝過程。根據不同的CPU,熟練使用相應的嵌入匯編,可以大大提高程序執行的效率。

雖然是必殺技,但是如果輕易使用會付出慘重的代價。這是因為,使用了嵌入匯編,便限制了程序的可移植性,使程序在不同平台移植的過程中,卧虎藏龍,險象環生!同時該招數也與現代軟體工程的思想相違背,只有在迫不得已的情況下才可以採用。切記,切記。

『肆』 學習c語言的方法

第一步、驗證性練習
在這一步要求按照教材上的程序實例進行原樣輸入,運行一下程序是否正確。在這一步基本掌握C語言編程軟體的使用方法(包括新建、打開、保存、關閉C程序,熟練地輸入、編輯C程序;初步記憶新學章節的知識點、養成良好的C語言編程風格)。
第二步、照葫蘆畫瓢
在第一步輸入的C程序的基礎上進行試驗性的修改,運行一下程序看一看程序結果發生了什麼變化,分析結果變化的原因,加深新學知識點的理解。事實上這和第一步時同步進行的,實現「輸入」加深知識的記憶,「修改」加深對知識的理解。記憶和理解是相輔相成的,相互促進。
第三步、不看教材看是否能將前兩步的程序進行正確地輸入並運行。
在這一步要求不看教材,即使程序不能運行,看能否將其改正,使其能正確運行。目的是對前兩步的記憶、理解進一步強化。
第四步、增強程序的調試能力
在《Turbo C/C++ for Windows 集成實驗與學習環境》集成的教材中每章都有C語言初學者易犯的錯誤,按照易出錯的類型,將教材中的正確的程序改成錯誤的程序,運行一下程序,看出現的錯誤信息提示,並記下錯誤信息,再將程序改成正確的,運行一下程序。這樣反復修改,就能夠學習C語言程序發生錯誤的原因和修改錯誤的能力。
第五步、研究典型的C語言程序,提高程序設計能力
經過上述過程的學習,我們已經學會了C語言各種語句的流程(即計算機是如何執行這些語句的過程),然後就可以研讀別人編寫C語言經典程序,看懂別人是如何解決問題的,學習解決問題的方法和程序設計技巧,提高自己的程序設計能力。
在軟體中有50多個典型的源程序,研究它的實現方法,提高自己的程序設計能力。
第六步、研究課程設計源成序,提高C語言程序設計能力和調試較大程序的能力。
C語言課程設計的目的:是讓學生綜合利用所學的C語言知識,解決一些接近實際問題題目,提高程序設計和調試較大程序的能力,為進一步進行軟體開發打下堅實的基礎。
學習C語言,就來北京尚學堂,優秀的師資和科學的授課方式,會帶給你最好的學習體驗。

『伍』 學習c語言的技巧有哪些呢

工欲善其事,必先利其器。所以選幾本好書十分重要:我建議不管是基礎還是提升,書最好是一本老外寫的和一本咱國人寫的。因為老外重思路,國人重基礎。
另外一定要下一個C語言函數標准庫,學會自己查函數,用函數,當然沒有必要全記住,只要會查會用就行。
練當然是不可缺少的哦,所以一定要有個VC++呀。不過說一句,VC++不支持c語言的圖形化呀,當學到圖形時,可能會打擊你的信心哦。
好了,兵器已有,該學會打仗了。當自己有一定基礎時,就要去看看別人的程序,來提高自己的編程水平。
其實技巧真的很多,就不在一一列舉了,你好好加油吧。
另外說一句其實暴風影音、酷狗等就是用c語言編出來的,希望這句話能激發你的興趣。
小弟我不才,至今還未編出一個像樣的播放器,希望一浪推一浪,你好好加油吧。
如有問題,可以多多交流。
附說一句,如果你學C語言是為了考2級等級考試的話,那我的這些所謂的技巧可能幫不上你了哦。
因為2級考試太基礎了。多做些題就OK了,別被譚浩強給害了。

『陸』 學會C語言的好方法

每個人在初學C語言時都有這樣或那樣的疑惑,而且沒有語言基礎的朋友也不清楚怎麼學。結合我自己的經歷,給你提供一下幾點經驗:

1:必須有一本好的教材。用譚浩強的《c程序設計》
就不錯。目前在這方面是銷售量最高的。

2:必須要問!只有書的話是不夠的,畢竟很多東西不是一下子就能理解了的,一定要多問!

3:做題。《C程序設計》
的每一道題目都要做完!不會的話就請教別人,但是必須先自己思考,寫寫代碼,寫錯了要自己調試,這是一個提高的過程,不要一遇到不會的或者錯誤的代碼就立馬問別人。

4:多看別人的程序,可以上網上找那個C語言經典演算法100例,把每一個代碼都研究透。

上面的都做完了,你C語言
應該是比較熟練了。

另外說一句,方法其實並不是最重要的。最重要的是你要有毅力,要有學好C語言的決心!更要有信心!

不付出努力,是不會得到回報的。

『柒』 C語言的技巧

如果你真的想學習編程,就請你認真的閱讀下去。
大家都知道C語言很強大,這個強大一是來自其功能,第一次出名就很牛逼的編出了UNIX系統。然後跟著UNIX這個明星,於是自己的影響一路飆升。二是C語言不但能夠寫UNIX的操作系統,而且編寫LINUX和Windows等操作系統時都離不開他的身影。三是它的實用,如果你是一個理科生,如果你學過單片機,你就知道無C不能。第四、很多就是電腦高手或黑客夢想的驅使,還有一些高手的推薦,於是你便選擇的C語言。
不管你是何種原因驅使,何種目的的驅動?當你選擇這個語言的時候,首先要考慮,你的基礎能行不?和你的目的到底是什麼?如果你是一個電腦菜鳥,或只想了解一下什麼是編程,我是不贊成學習C的,因為C初學時,很傷人鬥志的,也就是說你可能學習了一個月,還只能在黑色的框中徘徊,甚至資質差的只能算1+2+3+4+。。。+1000=?這個,,,會讓你成為編程高手嗎?顯然不能!如果你以後會從事硬體方面的開發,或在軟、硬體之間打交道,或一直從事軟體開發,那麼你一定要學習C,而且是不學不行的,有可能你還要學習匯編,因為有些情況匯編對硬體的操作比C更給力。而且他也是是不學不行的。
對於那些幾乎很少和硬、軟體打交道的童鞋,本人不建議學習C,因為一段時間後你會很快放棄它的,因為你知道1+2+3+。。。+1000=?根本就不能稱為程序,如果你掌握技巧,你算得比計算機還快,這和你的編程高手的理想是根本搭不上邊的。浪費你的時間,同時也在考驗你的心理,同時更會給你迷茫。針對基礎差,以後不想在軟體和硬體間混以及只想學習編個程序然後就出結果的童鞋,不建議學習C,你可以學習易語言,學習VB。原因他們是高級語言,簡單,易學、強大、更容易出成果。

比如VB寫個窗口,構建個菜單,寫個網頁瀏覽器、寫個遠控(比如木馬)等等,一個多月絕對能熟練掌握。我學近兩年C了,都沒法編出網頁瀏覽器,更無法讓一個MM圖片來美化我黑不籠統的窗口,但VB你只需要一分鍾,便可以讓你的窗口充滿色彩繽紛的效果,對於網路的埠掃描器,遠程聊天控制,遠程主機資源瀏覽等,VB都行。而且掌握他後,你變又附加的掌握了VBscript這個腳本語言。對於易語言,推薦不會英語的同學學吧,這個是中國人寫的編程工具,我沒用過,根據我的了解,功能也是很強大,中文的編程語言,會讓你更快的掌握這個語言,編出自己的作品。

上面的一番話,只是告訴你C固然好,但不是針對所有人都好。世界上沒有包治百病的仙丹,也沒有適合所有人的編程語言。

對於學習了C的童鞋,你面臨的是如何去深化,去鞏固C。學習了C語言基礎不是代表你已經會用C了,因為這才代表你剛入門,接下來你要學的是《數據結構》,這個是必修的,沒有他你無法編出嚴謹強大的C程序,開發出自己的系統——如果有意向開發系統的。
然後你要去學習操作系統的API,這個也很重要。如果你掌握了API,那麼你才能真正的可以成為自己學過C,會用C,才能知道原來C也可以無所不能。
這里是一個童鞋(08_小汪)的建議,我感覺很好,摘錄下來「首先C是入門,如果想C很牛的話,就要去研究演算法,C是為了過度到C++,C++會了。就要學windows程序設計,然後就學Visual c++,畢竟C++是計算機的底層。。。還有多動手寫程序,不然學的永遠不是自己的。。。」
然後08_小汪又推薦了四本書:
「推薦4本書《C語言陷阱和指針》,《C語言編程專家》,《thinking C++》,《數據結構-使用C++標准模板庫(STL)》。。。去專門的論壇看可能會專業點,畢竟面向的對象不同。。。」
有興趣深入研究C的童鞋,你需要讀一下。
C快速入門的方法是不斷的鞏固、不斷的編程。實踐是學習和掌握的重要途徑。

無論你學任何一門語言,都要一心不變的堅持下去,不要在學VB時,聽某某高手說C很強大,就放棄了VB,或在學易語言時,聽說易語言有局限而立即轉向別的語言。這樣不會成就你編程高手的夢想,只會讓你習慣半途而廢,然後是任何一個語言都不能學會。記住,只要你選擇了,一定要走下去,最後成功的才可能是你

更多資料【【【【愛我中 華夏聯盟 歡迎你】】】】】】

『捌』 計算機二級C語言備考技巧有哪些

1、筆試試卷分析
筆試試卷由選擇題和填空題組成。選擇題和填空題一般對基本知識和基本操作進行考查,它主要是測試我們對相關概念的掌握是否全面、理解是否准確、思路是否清晰。
(1)選擇題分析
選擇題為單選題,是客觀題,每道題的分值為2分,試題覆蓋面廣,一般情況下我們不可能做到對每個題目都有把握答對。考試時就需要我們學會放棄,對於不確定的題目不要在上面花費太多的時間,先記住,然後作答其他題目。等最後有空餘的時間再回過頭來仔細考慮這些題目。二級C語言筆試題目眾多,分值分散,我們一定要有全局觀,合理地安排考試時間。
選擇題一般分為:正面試題和反面試題。設問是正確觀點的題稱為正面試題,絕大多數選擇題為正面試題;設問是是錯誤觀點的題稱為反面試題。我們在解答選擇題時可以如下幾個答題方法來答題,這樣可以提高答題速度和准確率。
①順選法:如果對題中的4個選項,一看就能肯定其中的1個是正確的,就可以直接得出答案。對於一些比較容易看出正確選項的題,可以使用排除錯誤選項。
②排除法:排除法是將錯誤答案一一排除的方法。對題中的4個選項逐個去掉錯誤的選項。對於一些比較容易看出錯誤選項的題,可以使用排除錯誤選項。
③比較法:這種辦法是沒有辦法的辦法,如果有些題實在是沒有把握,那麼就只有比較四個選項中那個更接近題目要求了(這也稱之為「蒙猜法」)。
(2)填空題分析
填空填一般難度都比較大,一般需要我們准確地填入字元,往往需要非常精確,錯一個字也不得分。在分值方面,每題也是2分。在作答填空題時要注意以幾點:
①答案要寫得簡潔明了,盡量使用專業術語。
②認真填寫答案,字跡要工整、清楚,格式要規范、正確,在把答案往答題卡上填寫後盡量不要塗改。
③注意,在答題卡上填寫答案時,一定要注意題目的序號,不要弄錯位置。
④對於有兩種答案的情況,只需填一種即可,多填並不多給分。
2、上機試題分析
一個C語言源程序總是在一定的硬體和軟體環境支持下進行編輯、編譯、連接和運行的,而這其中的每一步都直接影響程序調試的效率。所以初學者必須了解所使用的計算機系統的基本操作方法,學會使用該系統,了解在該系統上如何編輯、編譯、連接和運行一個C語言程序。
上機考試重點考察我們綜合運用基礎的操作能力和程序編寫能力,要求我們具有綜合運用基礎知識進行實際操作的能力。上機試題綜合性強、難度較大。上機考試的評分是以機評為主,人工復查為輔的。機評不存在公正性的問題,卻存在呆板的問題,有時還可能因為出題者考慮不周出現錯評的情況。這就要求我們做題時要充分考慮到各種情況,盡可能的按規范編寫程序,否則有可能答對不得分。
掌握好上機考試的考試技巧,可以使我們的實際水平在考試時得到充分發揮,從而取得較為理想的成績。歷次考試均有考生因為忽略了考試技巧,加之較為緊張的考場氣氛影響了水平的發揮,致使考試成績大大低於實際水平。因此我們在考試前,要有充分的准備。總結起來有以下幾點供我們在復習和考試時借鑒:
(1)上機考試訓練時,一定不要死記硬背。以往有部分考生能夠順利通過筆試,卻不能通過上機考試,主要原因就是她們在平時訓練時死記硬背,而沒有真正的理解知識應用,到考試時,題目稍有變動就變的束手無策。所以我們一定要在熟記基本知識點的基礎上,加強上機訓練,做到真正理解、掌握解題方法和思路。
(2)一定要重視考試模擬軟體的使用。應使用考試模擬軟體進行實際的上機操作練習,尤其要做一些具有針對性的上機模擬題,以便熟悉考試題型,體驗真實的上機環境,減輕考試時的緊張程度。
(3)學會並習慣使用編程軟體的幫助系統。C語言編程軟體有非常全面的幫助系統,熟練掌握、使用幫助系統,可以使我們減少記憶量,解決解題中的陌生、疑難問題。
(4)熟悉考試場地及環境,尤其是要熟悉考場的硬體情況和所使用的相關軟體的情況。一般在正式考試前,考點會給我們提供一次模擬上機的機會,應盡可能地去參加。模擬考試時,不要把重點放在做題上,而應放在熟悉考試環境,相應軟體的使用方法,考試系統的使用等方面。
(5)在考試時不要急燥、慌張,而是要認真、冷靜地看清題目要求,在做完題後一定要保存文件,並運行程序檢測運行結果是否符合題目要求。在考完交卷前先關閉掉C語言編程軟體和其他打開的文件,再交卷,確保交卷過程中不出錯誤。
3、綜合應試技巧
(1)認真審題,先分析,後下筆。試題的考核是有針對性的,因此在答題時也要有針對性。解答前,除了要看清問題外,還要弄清楚題目考核的意圖。明白了問在那裡後,就可以開始考慮好如何答題了,然後依思路從容做答。
(2)對於十分了解或熟悉的問題,切忌粗心大意、得意忘形,一定要認真看題、分析,避免掉入陷阱,確定後再寫出答案。
(3)對於偶爾碰到或是雖然在復習中見過但已記不清的題目,也不要泄氣,將自己的判斷同書本知識聯系起來做答;對於完全陌生的問題,實在不知如何根據書本知識進行解答時,可以採用「蒙猜法」,用自己的思考和邏輯推斷作答。由於這這方法作出來的題沒有多大把握得分,因此不要花費太多時間去研究它。
 
 

『玖』 c語言編程技巧

第1招:以空間換時間

計算機程序中最大的矛盾是空間和時間的矛盾,那麼,從這個角度出發逆向思維來考慮程序的效率問題,我們就有了解決問題的第1招——以空間換時間。
例如:字元串的賦值。
方法A,通常的辦法:

#define LEN 32
char string1 [LEN];
memset (string1,0,LEN);
strcpy (string1,「This is a example!!」);
方法B:
const char string2[LEN] =「This is a example!」;
char * cp;
cp = string2 ;

(使用的時候可以直接用指針來操作。)

從上面的例子可以看出,A和B的效率是不能比的。在同樣的存儲空間下,B直接使用指針就可以操作了,而A需要調用兩個字元函數才能完成。B的缺點在於靈活性沒有A好。在需要頻繁更改一個字元串內容的時候,A具有更好的靈活性;如果採用方法B,則需要預存許多字元串,雖然佔用了大量的內存,但是獲得了程序執行的高效率。
如果系統的實時性要求很高,內存還有一些,那我推薦你使用該招數。

該招數的變招——使用宏函數而不是函數。舉例如下:
方法C:

#define bwMCDR2_ADDRESS 4
#define bsMCDR2_ADDRESS 17
int BIT_MASK(int __bf)
{
return ((1U << (bw ## __bf)) - 1) << (bs ## __bf);
}
void SET_BITS(int __dst, int __bf, int __val)
{
__dst = ((__dst) & ~(BIT_MASK(__bf))) | \
(((__val) << (bs ## __bf)) & (BIT_MASK(__bf))))
}

SET_BITS(MCDR2, MCDR2_ADDRESS, RegisterNumber);
方法D:
#define bwMCDR2_ADDRESS 4
#define bsMCDR2_ADDRESS 17
#define bmMCDR2_ADDRESS BIT_MASK(MCDR2_ADDRESS)
#define BIT_MASK(__bf) (((1U<<(bw ## __bf))-1)<< (bs ## __bf))
#define SET_BITS(__dst, __bf, __val) \
((__dst) = ((__dst) & ~(BIT_MASK(__bf))) | \
(((__val) << (bs ## __bf)) & (BIT_MASK(__bf))))

SET_BITS(MCDR2, MCDR2_ADDRESS, RegisterNumber);

函數和宏函數的區別就在於,宏函數佔用了大量的空間,而函數佔用了時間。大家要知道的是,函數調用是要使用系統的棧來保存數據的,如果編譯器里有棧檢查選項,一般在函數的頭會嵌入一些匯編語句對當前棧進行檢查;同時,CPU也要在函數調用時保存和恢復當前的現場,進行壓棧和彈棧操作,所以,函數調用需要一些CPU時間。而宏函數不存在這個問題。宏函數僅僅作為預先寫好的代碼嵌入到當前程序,不會產生函數調用,所以僅僅是佔用了空間,在頻繁調用同一個宏函數的時候,該現象尤其突出。

D方法是我看到的最好的置位操作函數,是ARM公司源碼的一部分,在短短的三行內實現了很多功能,幾乎涵蓋了所有的位操作功能。C方法是其變體,其中滋味還需大家仔細體會。

第2招:數學方法解決問題

現在我們演繹高效C語言編寫的第二招——採用數學方法來解決問題。

數學是計算機之母,沒有數學的依據和基礎,就沒有計算機的發展,所以在編寫程序的時候,採用一些數學方法會對程序的執行效率有數量級的提高。
舉例如下,求 1~100的和。
方法E
int I , j;
for (I = 1 ;I<=100; I ++){
j += I;
}
方法F
int I;
I = (100 * (1+100)) / 2

這個例子是我印象最深的一個數學用例,是我的計算機啟蒙老師考我的。當時我只有小學三年級,可惜我當時不知道用公式 N×(N+1)/ 2 來解決這個問題。方法E循環了100次才解決問題,也就是說最少用了100個賦值,100個判斷,200個加法(I和j);而方法F僅僅用了1個加法,1 次乘法,1次除法。效果自然不言而喻。所以,現在我在編程序的時候,更多的是動腦筋找規律,最大限度地發揮數學的威力來提高程序運行的效率。

第3招:使用位操作

實現高效的C語言編寫的第三招——使用位操作,減少除法和取模的運算。

在計算機程序中,數據的位是可以操作的最小數據單位,理論上可以用「位運算」來完成所有的運算和操作。一般的位操作是用來控制硬體的,或者做數據變換使用,但是,靈活的位操作可以有效地提高程序運行的效率。舉例如下:

方法G int I,J; I = 257 /8; J = 456 % 32; 方法H int I,J; I = 257 >>3; J = 456 - (456 >> 4 << 4); 在字面上好像H比G麻煩了好多,但是,仔細查看產生的匯編代碼就會明白,方法G調用了基本的取模函數和除法函數,既有函數調用,還有很多匯編代碼和寄存器參與運算;而方法H則僅僅是幾句相關的匯編,代碼更簡潔,效率更高。當然,由於編譯器的不同,可能效率的差距不大,但是,以我目前遇到的MS C ,ARM C 來看,效率的差距還是不小。相關匯編代碼就不在這里列舉了。 運用這招需要注意的是,因為CPU的不同而產生的問題。比如說,在PC上用這招編寫的程序,並在PC上調試通過,在移植到一個16位機平台上的時候,可能會產生代碼隱患。所以只有在一定技術進階的基礎下才可以使用這招。 第4招:匯編嵌入 高效C語言編程的必殺技,第四招——嵌入匯編。 「在熟悉匯編語言的人眼裡,C語言編寫的程序都是垃圾」。這種說法雖然偏激了一些,但是卻有它的道理。匯編語言是效率最高的計算機語言,但是,不可能*著它來寫一個操作系統吧?所以,為了獲得程序的高效率,我們只好採用變通的方法 ——嵌入匯編,混合編程。 舉例如下,將數組一賦值給數組二,要求每一位元組都相符。char string1[1024],string2[1024];方法Iint I;for (I =0 ;I<1024;I++)*(string2 + I) = *(string1 + I)方法J#ifdef _PC_int I;for (I =0 ;I<1024;I++)*(string2 + I) = *(string1 + I);#else#ifdef _ARM___asm{MOV R0,string1MOV R1,string2MOV R2,#0loop:LDMIA R0!, [R3-R11]STMIA R1!, [R3-R11]ADD R2,R2,#8CMP R2, #400BNE loop}#endif方法I是最常見的方法,使用了1024次循環;方法J則根據平台不同做了區分,在ARM平台下,用嵌入匯編僅用128次循環就完成了同樣的操作。這里有朋友會說,為什麼不用標準的內存拷貝函數呢?這是因為在源數據里可能含有數據為0的位元組,這樣的話,標准庫函數會提前結束而不會完成我們要求的操作。這個常式典型應用於LCD數據的拷貝過程。根據不同的CPU,熟練使用相應的嵌入匯編,可以大大提高程序執行的效率。雖然是必殺技,但是如果輕易可能使用會付出慘重的代價。這是因為,使用了嵌入匯編,便限制了程序的可移植性,使程序在不同平台移植的過程中,卧虎藏龍,險象環生!同時該招數也與現代軟體工程的思想相違背,只有在迫不得已的情況下才可以採用。切記,切記。

·下一條:編程修養

評論
發布者 標題 發布日期
暫沒有任何評論
以下發言只是廣嵌網會員個人意見,非本網立場 查看更多評論

發表評論
·尊重網上道德,遵守中華人民共和國的各項有關法律法規。
·承擔一切因您的行為而直接或間接導致的民事或刑事法律責任。
·本站管理人員有權保留或刪除其管轄留言中的任意內容,本站有權在網站內轉載或引用您的評論。
·參與本評論即表明您已經閱讀並接受上述條款。

標題:
發布者:
內容:
驗證碼:

相關信息
·.Net(C#)開發漫談..
·.Net(C#)開發漫談..
·C#編程實用技巧:輕松實..
·學生管理系統(C原代碼)
·嵌入式智能人機界面與PL..
·嵌入式系統編程中的代碼優..
·C++對象布局及多態實現..
·C和C++裡面的lval..
·C語言平台縮短SoC前期..
·用Visual C++實..

熱點內容
腳本微信取關 發布:2025-02-01 19:35:01 瀏覽:150
如何用雲伺服器部署svn 發布:2025-02-01 19:33:20 瀏覽:988
緩存迅雷 發布:2025-02-01 19:31:53 瀏覽:974
linux與unixshell編程指南 發布:2025-02-01 19:25:03 瀏覽:937
護膚品資料庫 發布:2025-02-01 19:25:02 瀏覽:647
python接受json數據 發布:2025-02-01 19:24:24 瀏覽:942
修改網站資料庫 發布:2025-02-01 19:02:16 瀏覽:423
果粉不換安卓怎麼辦 發布:2025-02-01 18:57:21 瀏覽:796
網頁卡需要什麼配置 發布:2025-02-01 18:50:30 瀏覽:136
編程玩家 發布:2025-02-01 18:22:36 瀏覽:823