什么是C語言?C語言的簡(jiǎn)介。
平桂網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)于2013年開始到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。
C語言是一種計(jì)算機(jī)程序設(shè)計(jì)語言,它既具有高級(jí)語言的特點(diǎn),又具有匯編語言的特點(diǎn)。
它可以作為工作系統(tǒng)設(shè)計(jì)語言,編寫系統(tǒng)應(yīng)用程序,也可以作為應(yīng)用程序設(shè)計(jì)語言,編寫不依賴計(jì)算機(jī)硬件的應(yīng)用程序。
因此,它的應(yīng)用范圍廣泛,不僅僅是在軟件開發(fā)上,而且各類科研都需要用到C語言,具體應(yīng)用比如單片機(jī)以及嵌入式系統(tǒng)開發(fā)。
語言特點(diǎn):C是中級(jí)語言/C是結(jié)構(gòu)式語言/C語言功能齊全/C語言適用范圍大/簡(jiǎn)潔緊湊、靈活方便/運(yùn)算符豐富/數(shù)據(jù)類型豐富/C是結(jié)構(gòu)式語言/語法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大/適用范圍大,可移植性好。
C語言程序設(shè)計(jì)課程是高等院校計(jì)算機(jī)專業(yè)基礎(chǔ)課程之一,其教學(xué)效果直接影響學(xué)生在計(jì)算機(jī)方面的應(yīng)用。C語言是一門面向過程的、抽象化的通用程序設(shè)計(jì)語言,廣泛應(yīng)用于底層開發(fā)。C語言能以簡(jiǎn)易的方式編譯、處理低級(jí)存儲(chǔ)器。那么要如何寫關(guān)于c語言程序設(shè)計(jì)心得呢?本文是c語言程序設(shè)計(jì)的心得,僅供參考。
c語言程序設(shè)計(jì)心得一
在這為期半個(gè)月的時(shí)間內(nèi),通過我們小組各成員之間的相互討論和合作,我們完成了學(xué)生信息管理系統(tǒng)的程序設(shè)計(jì),更值得高興的是我們的程序得到了大家的喜愛,在每次的簡(jiǎn)報(bào)中都得到了較好的成績(jī)。
雖然在上個(gè)學(xué)期中,我們已經(jīng)學(xué)習(xí)了《C 語言程序設(shè)計(jì)》這門課,但是我所學(xué)的知識(shí)最多也就是在做作業(yè)的時(shí)候才會(huì)用到,平時(shí)沒有什么練習(xí)的機(jī)會(huì),這次的課程設(shè)計(jì)是我第一次通過自己構(gòu)思,和同學(xué)討論并且不斷查閱資料來設(shè)計(jì)一項(xiàng)程序。這次設(shè)計(jì),不僅鞏固了我以前所學(xué)的知識(shí),還讓我對(duì)c語言有了更深一步的了解,掌握了更多的技巧和技能。
C語言是計(jì)算機(jī)程序設(shè)計(jì)的重要理論基礎(chǔ),在我們以后的學(xué)習(xí)和工作中都有著十分重要的地位。要學(xué)好這種語言,僅僅學(xué)習(xí)課本上的知識(shí)是不夠的,還要經(jīng)常自己動(dòng)手,有較強(qiáng)的實(shí)踐能力。只有多動(dòng)手,經(jīng)常編寫程序,才能發(fā)現(xiàn)我們學(xué)習(xí)上的漏洞和自己的不足,并在實(shí)踐中解決這些問題,不斷提高自己轉(zhuǎn)化知識(shí)的能力。
在我們小組有解決不了的問題時(shí),我們會(huì)主動(dòng)查閱相關(guān)的資料,或向其他同學(xué)詢問,這不僅豐富了我們的知識(shí),還增進(jìn)了我們同學(xué)之間的友誼。為了增大信息的安全性,需要用文件來存儲(chǔ)信息,由于我們?cè)谏险n時(shí)不注重對(duì)文件的運(yùn)用,所以在這方面有較大的困難。我先將書本認(rèn)認(rèn)真真地看了一遍,又做了一下課后習(xí)題來驗(yàn)證和增進(jìn)自己的理解,終于,經(jīng)過我們的不懈努力,我們小組的程序有了突破,成功地實(shí)現(xiàn)了用文件來保存并查看學(xué)生的信息。
這次設(shè)計(jì)中,我的收獲還有就是學(xué)會(huì)了用流程圖來表達(dá)自己的想法,并根據(jù)流程圖來逐步實(shí)現(xiàn)程序的功能。開始的時(shí)候,我畫流程圖很是困難,需要一個(gè)多小時(shí)才能清楚的根據(jù)自己的想法畫出圖來,后來畫多了,就更加了解它的功能,十分得心應(yīng)手,能夠比較快而準(zhǔn)確的畫出來。
在這次課程設(shè)計(jì)中,我們首先對(duì)系統(tǒng)的整體功能進(jìn)行了構(gòu)思,然后用結(jié)構(gòu)化分析 方法 進(jìn)行分析,將整個(gè)系統(tǒng)清楚的劃分為幾個(gè)模塊,再根據(jù)每個(gè)模塊的功能編寫代碼。而且盡可能的將模塊細(xì)分,最后在進(jìn)行函數(shù)的調(diào)用。我們?cè)诤瘮?shù)的編寫過程中,我們不僅用到了for循環(huán)、while循環(huán)和switch語句,還用到了函數(shù)之間的調(diào)用(包括遞歸調(diào)用)。由于我們是分工編寫代碼,最后需要將每個(gè)人的代碼放到一起進(jìn)行調(diào)試。因?yàn)槲覀兠總€(gè)人寫的函數(shù)的思想不都一樣,所以在調(diào)試的過程中也遇到了困難,但經(jīng)過我們耐心的修改,終于功夫不負(fù)有心人,我們成功了!
在參考書上,我們不僅參考了曾經(jīng)學(xué)過的高敬陽主編的《c語言程序設(shè)計(jì)》,還找到了由譚浩強(qiáng)主編的第三版《c語言》進(jìn)行參考。
當(dāng)然,我們的程序還有一些不完善的地方,比如說,當(dāng)輸入的數(shù)據(jù)不符合我們定義的數(shù)據(jù)的格式的時(shí)候,程序會(huì)出現(xiàn)一些錯(cuò)誤,有時(shí)會(huì)出現(xiàn)主菜單的死循環(huán);在一次程序運(yùn)行中,只能行使一種權(quán)限,要想再行使另一種權(quán)限,就只能退出程序,然后再運(yùn)行程序。
三周的小學(xué)期即將結(jié)束,時(shí)間雖短,但是我收獲了很多。最后,謝謝老師和同學(xué)們的指導(dǎo),更要感謝我們小組成員之間的合作與交流。
c語言程序設(shè)計(jì)心得二
通過本次教師發(fā)展在線的C語程培訓(xùn)中,我受益匪淺,幾位教授的精彩演講,讓我找到了自己的不足和日后教學(xué)中的改革方向和內(nèi)容。同時(shí),也讓我感覺到了,有今天各位教授的良好教學(xué)效果,這其中包含了他們的艱辛、背后的大量付出和無私奉獻(xiàn)。
我是一直從事C類語言的教學(xué)工作,對(duì)C語言的教學(xué)已有5年教齡,在這幾年的教學(xué)過程中,我們也一直在尋找好的 教學(xué)方法 和新的教學(xué)理念。通過本次學(xué)習(xí),我 總結(jié) 要教好《C語言程序設(shè)計(jì)》這門課,最基本要把握好以下幾個(gè)方面:
(一)要重視實(shí)踐環(huán)節(jié),上機(jī)調(diào)試成績(jī)非常重要。
學(xué)習(xí)一門語言,就是要按照它的語法來編程。要編程,當(dāng)然就要上機(jī)操作來驗(yàn)證你程序的正確性。所以上機(jī)非常重要,通過執(zhí)行你所寫的程序,完成你所寫程序的目標(biāo),最終達(dá)到你的目的。而且通過執(zhí)行程序,你會(huì)發(fā)現(xiàn)程序中的錯(cuò)誤,從而使你了解你所學(xué)知識(shí)中的不足,同時(shí),要學(xué)會(huì)根據(jù)編譯時(shí)提示的錯(cuò)誤來改正程序中發(fā)生的錯(cuò)誤,以便下次不會(huì)再犯同樣的錯(cuò)誤。
(二)基本語法學(xué)習(xí)雖然枯草乏味,但是它相當(dāng)于高樓大廈的一磚一瓦,一定要下硬功夫讓學(xué)生掌握熟練。
C語言的語法部分。這部分內(nèi)容是學(xué)好C語言的基礎(chǔ),只有學(xué)好了這些語法,才會(huì)寫程序,看程序。所以對(duì)一個(gè)初學(xué)者來說,這部分內(nèi)容是非常重要的,所以要扎實(shí)地熟悉每一個(gè)語法,并能根據(jù)這些語法來編程。
(三)學(xué)習(xí)要抓住重點(diǎn),難點(diǎn)部分要多講、多學(xué)、多練。
通過這次學(xué)習(xí)使得我對(duì)C語言的重點(diǎn),難點(diǎn),以及易出錯(cuò)的地方把握的更精準(zhǔn)了。當(dāng)然,這只是針對(duì)我個(gè)人而言。在C語言學(xué)習(xí)過程,重點(diǎn)就是數(shù)組,指針,以及結(jié)構(gòu)體了。難點(diǎn)也是它們了,不過數(shù)組和結(jié)構(gòu)體還是挺簡(jiǎn)單,所以在此主要就指針方面談?wù)勛约旱目捶ā?/p>
下面談?wù)勍ㄟ^這次學(xué)習(xí),結(jié)合我們學(xué)校的教學(xué)情況,打算對(duì)該課程的教學(xué)進(jìn)行如下幾個(gè)方面的改革:
(一)理論教學(xué)內(nèi)容的組織
C語言的重點(diǎn)知識(shí)包括:結(jié)構(gòu)化程序設(shè)計(jì)方法、流程圖的組織、三種程序設(shè)計(jì)結(jié)構(gòu)、三種基本數(shù)據(jù)類型和三種自定義數(shù)據(jù)類型;難點(diǎn)包括:結(jié)構(gòu)程序設(shè)計(jì)方法、算法的分析、流程圖的組織與設(shè)計(jì)、函數(shù)、指針等。
根據(jù)知識(shí)內(nèi)容和每年的新學(xué)時(shí)安排,我們將理論教學(xué)內(nèi)容分為授課內(nèi)容和自學(xué)內(nèi)容兩 大模塊。
(1)授課內(nèi)容
C語言的授課內(nèi)容分為兩階段:①基礎(chǔ)準(zhǔn)備階段 這部分內(nèi)容確保學(xué)生“實(shí)用、夠用”,主要包括三種基本數(shù)據(jù)類型(只要求掌握常用的int,float,char);三種常用運(yùn)算符及其表達(dá)式(賦值、算術(shù)、邏輯(包括關(guān)系));三種程序設(shè)計(jì)結(jié)構(gòu)(順序、選擇、循環(huán))。②實(shí)訓(xùn)項(xiàng)目驅(qū)動(dòng)階段 這部分內(nèi)容主要是“實(shí)訓(xùn)實(shí)戰(zhàn)”,主要包括數(shù)組、函數(shù)、指針和結(jié)構(gòu)體。通過第一階段的學(xué)習(xí),學(xué)生已經(jīng)具備了一些程序設(shè)計(jì)的基礎(chǔ)知識(shí),在這一階段將通過一個(gè)實(shí)訓(xùn)項(xiàng)目的完成來熟悉主要內(nèi)容,同時(shí)鞏固第一階段的成果。
(2)自學(xué)內(nèi)容
課本中的內(nèi)容上課沒重點(diǎn)介紹或者說就是沒提到的,劃為自學(xué)內(nèi)容。但這些內(nèi)容,我們并不是在課堂要求學(xué)生回去自學(xué):要求過高,規(guī)矩過多,這樣效果不佳。而是讓學(xué)生在實(shí)驗(yàn)中發(fā)現(xiàn)問題后,帶著問題去學(xué)習(xí),去找答案。
例:整型 我們只介紹int基本類型,當(dāng)學(xué)生想計(jì)算n!時(shí),學(xué)生測(cè)試5!=120時(shí),他可能會(huì)去測(cè)試20!、50!,這時(shí),存放階乘的變量Factorial再定義為int,結(jié)果就是0了,這時(shí)問題就來了,他就會(huì)去尋找正確的處理方法(long int)。
(二)實(shí)驗(yàn)教學(xué)的安排與設(shè)計(jì)
教學(xué)改革方案確定后,我們對(duì)本課程實(shí)驗(yàn)教學(xué)上從多方面進(jìn)行了教學(xué)更新。我們考慮到學(xué)生處于了解計(jì)算機(jī)語言及編程的初級(jí)階段,有許多最基礎(chǔ)的內(nèi)容有待掌握,所以本課程的實(shí)驗(yàn)教學(xué)不太適合完全以項(xiàng)目開發(fā)的形式進(jìn)行,注重的是加強(qiáng)模塊化實(shí)訓(xùn)。
(1)上好第一節(jié)實(shí)驗(yàn)課
我們常說“上好第一節(jié)課”,那么第一節(jié)實(shí)驗(yàn)節(jié)的重要性也不言而喻。這節(jié)課對(duì)培養(yǎng)學(xué)生的學(xué)習(xí)興趣、增強(qiáng)學(xué)生的學(xué)習(xí)信心、鍛煉學(xué)生的自主學(xué)習(xí)等多方面影響很大。
第一次實(shí)驗(yàn)項(xiàng)目是mdash;熟悉Turbo C的運(yùn)行環(huán)境,主要是掌握一些在TC中的一些鍵盤操作方式。一般是教師給學(xué)生提供程序代碼(三個(gè)),但我們?cè)趯W(xué)生不知情的情況下,給學(xué)生兩個(gè)有語法錯(cuò)誤的和一個(gè)正確的程序。這樣,當(dāng)學(xué)生運(yùn)行正確的程序時(shí),知道計(jì)算機(jī)可以幫我們處理問題,原來程序就是這樣寫的;當(dāng)學(xué)生運(yùn)行錯(cuò)誤的程序,首先他會(huì)詫異(老師給的程序原來是錯(cuò)的),于是要求他們自己修改,尤其是有時(shí)一個(gè)致命錯(cuò)誤導(dǎo)致的10多個(gè)errors,被學(xué)生修改后,沒有了errors或所剩無幾,這時(shí)學(xué)生表現(xiàn)的很興奮、很有成就感,從而加強(qiáng)了本課程的學(xué)習(xí)興趣和信心。
(2)分兩階段進(jìn)行
實(shí)驗(yàn)內(nèi)容與理論教學(xué)內(nèi)容相互應(yīng),在基礎(chǔ)準(zhǔn)備階段,這方面教學(xué)方法上主要是加強(qiáng)操練。通過各種大小程序、多重訓(xùn)練和一個(gè)問題的多種解法來加強(qiáng)語法知識(shí)點(diǎn)的掌握和訓(xùn)練,開闊學(xué)生編程的思路,掌握編程基礎(chǔ)。同時(shí),在這過程中我們嚴(yán)格把關(guān),讓學(xué)生課后認(rèn)真準(zhǔn)備,每次進(jìn)實(shí)驗(yàn)室時(shí),應(yīng)有寫好的完整代碼,上機(jī)調(diào)試,發(fā)現(xiàn)問題同時(shí)解決問題,要求認(rèn)真完成實(shí)驗(yàn)內(nèi)容,并在課后書寫實(shí)驗(yàn) 報(bào)告 。鼓勵(lì)學(xué)生多寫程序,要加強(qiáng)實(shí)踐環(huán)節(jié),首先要從量上有個(gè)劃分。在實(shí)訓(xùn)項(xiàng)目驅(qū)動(dòng)階段。本階段實(shí)訓(xùn)項(xiàng)目的設(shè)計(jì)非常重要,原則是既要使學(xué)生有切入點(diǎn)能夠動(dòng)手又要使各章的內(nèi)容之間有聯(lián)系點(diǎn)。
(三)案例教學(xué)法
C語言的教學(xué),教師一般受傳統(tǒng)應(yīng)試 教育 的影響,狠抓理論考試,忽略了程序設(shè)計(jì)能力的培養(yǎng),把授課重點(diǎn)放在程序設(shè)計(jì)語言的基本語法的講授和掌握上,所選的編程實(shí)例大多用于語法規(guī)則的驗(yàn)證和說明,僅從程序設(shè)計(jì)語言的使用這個(gè)單一的角度進(jìn)行教學(xué),而使得大多數(shù)學(xué)生在學(xué)完本課程后,“吃不透、用不活”,表現(xiàn)為學(xué)生在程序調(diào)試時(shí),對(duì)程序中出現(xiàn)的邏輯錯(cuò)誤經(jīng)常不知所措,在開發(fā)較大的應(yīng)用程序時(shí),不知道如何入手。
采用案例教學(xué)法,以程序設(shè)計(jì)為主線,以編程應(yīng)用為驅(qū)動(dòng),通過案例和問題引出教材內(nèi)容,重點(diǎn)講解程序設(shè)計(jì)的思想和方法,穿插講解相關(guān)的語言知識(shí)。使教學(xué)效果既有深度又有廣度,學(xué)生實(shí)際動(dòng)手能力大為增強(qiáng)。
以上是我個(gè)人結(jié)合我院C語言程序設(shè)計(jì)的教學(xué)情況,自己總結(jié)了幾點(diǎn)看法和一些改革 措施 ,拿出來和大家一起分享,請(qǐng)大家多提寶貴意見。通過這次學(xué)習(xí),我將會(huì)靈活運(yùn)用幾位教授的教學(xué) 經(jīng)驗(yàn) ,根據(jù)我院的教學(xué)對(duì)象,調(diào)整一些上課方法和措施,望能更好的提高教學(xué)質(zhì)量。
c語言程序設(shè)計(jì)心得三
通過此次C語言程序設(shè)計(jì)實(shí)踐,本人實(shí)在是獲益不淺!C語言是上個(gè)學(xué)期開的課程,所以這個(gè)學(xué)期并沒怎么看過,當(dāng)要開始設(shè)計(jì)的時(shí)候,還真不知從哪下手!結(jié)果,第一次的上機(jī),我傻坐著不知道該做什么,后來就寫了幾個(gè)預(yù)處理命令?;厝ヒ院?我想,這樣不行,這樣下去還得了!我就重新復(fù)習(xí)了一遍我們上個(gè)學(xué)期學(xué)習(xí)的內(nèi)容,發(fā)覺自已有許多都遺忘了!特別是有文件的操作,幾乎是一遍空白!溫習(xí)過后,開始做題!
一開始做題,也是有點(diǎn)模糊,在指導(dǎo)老師的指導(dǎo)下,我們慢慢的進(jìn)入狀態(tài),我們做的是一個(gè)通訊錄,內(nèi)容包括很多。運(yùn)用的函數(shù)也是非常的復(fù)雜,我們一組有七個(gè)人,我分工合作,首先我一起完成了結(jié)構(gòu)題,然后我們一人各負(fù)責(zé)一個(gè)函數(shù)程序的設(shè)計(jì),經(jīng)過幾星期的努力,我們完成了大半個(gè)程序,但是總是有很多錯(cuò)誤出現(xiàn),有好多是些小問題,這都是我們粗心大意造成的,所以設(shè)計(jì)程序一定要仔細(xì),不容一點(diǎn)的馬虎。當(dāng)然也有大問題,關(guān)于文件的操作,是我們最大的問題,不過,我們做好后,經(jīng)過老師的講解和改錯(cuò),我們也懂得設(shè)計(jì)和運(yùn)用了。同時(shí),也讓我知道了,合作的力量,如果是孤軍奮戰(zhàn)的話,我也不能在規(guī)定時(shí)間內(nèi)完成,當(dāng)然,也多虧老師的指導(dǎo)。
這次設(shè)計(jì),讓我重新掌握了C語言,而且還得到了用C語言解決實(shí)際問題的寶貴經(jīng)驗(yàn)!
↓↓↓點(diǎn)擊下一頁還有更多精彩的C語言編程 學(xué)習(xí)心得 ↓↓↓
#include?stdio.h
float?max(float?a[])
{
int?i;
float?m?=?a[0];
for(i=1;i10;i++)
{
if(ma[i])
m?=?a[i];
}
return?m;
}
float?min(float?a[])
{
int?i;
float?m?=?a[0];
for(i=1;i10;i++)
{
if(ma[i])
m?=?a[i];
}
return?m;
}
float?aver(float?a[])
{
float?sum?=?0;
int?i;
for(i=0;i10;i++)
sum?+=?a[i];
return?sum?/?10;
}
int?main()
{
float?num[10];
int?i;
for(i=0;i10;i++)
scanf("%f",num[i]);
printf("The?max?number?is?%f\n",max(num));
printf("The?min?number?is?%f\n",min(num));
printf("The?average?number?is?%f\n",aver(num));
return?0;
}
C++編程入門系列之二十四(C++程序設(shè)計(jì)必知:多文件結(jié)構(gòu)和編譯預(yù)處理命令)分類標(biāo)簽: C++ 編程入門 -
雞啄米上一講給大家講了常引用、常對(duì)象和對(duì)象的常成員,今天給大家講下編程入門知識(shí)--多文件結(jié)構(gòu)和編譯預(yù)處理命令。
一.C++程序的多文件結(jié)構(gòu)
之前雞啄米給大家看了很多比較完整的C++程序的例子,大家可能發(fā)現(xiàn)了,它們的結(jié)構(gòu)基本上可以分為三個(gè)部分:類的聲明、類的成員函數(shù)的實(shí)現(xiàn)和主函數(shù)。因?yàn)榇a比較少,所以可以把它們寫在一個(gè)文件中,但是我們實(shí)際進(jìn)行軟件開發(fā)時(shí),程序會(huì)比較復(fù)雜,代碼量比較大,
一個(gè)程序按結(jié)構(gòu)至少可以劃分為三個(gè)文件:類的聲明文件(*.h文件)、類的實(shí)現(xiàn)文件(*.cpp文件)和主函數(shù)文件(使用到類的文件),如果程序更復(fù)雜,我們會(huì)為每個(gè)類單獨(dú)建一個(gè)聲明文件和一個(gè)實(shí)現(xiàn)文件。這樣我們要修改某個(gè)類時(shí)就直接找到它的文件修改即可,不需要其他的文件改動(dòng)。
雞啄米在第十九講中講生存期時(shí)有個(gè)時(shí)鐘類的例子,現(xiàn)在雞啄米給大家看下將那個(gè)程序按照上面說的結(jié)構(gòu)分到三個(gè)文件里:
// 文件1:Clock類的聲明,可以起名為Clock.h
#include iostream
using namespace std;
class Clock //時(shí)鐘類聲明
{
public: //外部接口
Clock();
void SetTime(int NewH, int NewM, int NewS); //三個(gè)形參均具有函數(shù)原型作用域
void ShowTime();
~Clock(){}
private: //私有數(shù)據(jù)成員
int Hour,Minute,Second;
};
// 文件2:Clock類的實(shí)現(xiàn),可以起名為Clock.cpp
#include "Clock.h"
//時(shí)鐘類成員函數(shù)實(shí)現(xiàn)
Clock::Clock() //構(gòu)造函數(shù)
{
Hour=0;
Minute=0;
Second=0;
}
void Clock::SetTime(int NewH,int NewM,int NewS)
{
Hour=NewH;
Minute=NewM;
Second=NewS;
}
void Clock::ShowTime()
{
coutHour":"Minute":"Secondendl;
}
// 文件3:主函數(shù),可以起名為main.cpp
#include "Clock.h"
//聲明全局對(duì)象g_Clock,具有文件作用域,靜態(tài)生存期
Clock g_Clock;
int main() //主函數(shù)
{
cout"文件作用域的時(shí)鐘類對(duì)象:"endl;
//引用具有文件作用域的對(duì)象:
g_Clock.ShowTime();
g_Clock.SetTime(10,20,30);
Clock myClock(g_Clock); //聲明具有塊作用域的對(duì)象myClock,并通過默認(rèn)拷貝構(gòu)造函數(shù)用g_Clock初始化myClock
cout"塊作用域的時(shí)鐘類對(duì)象:"endl;
myClock.ShowTime(); //引用具有塊作用域的對(duì)象
}
在vs2010中如何生成這三個(gè)文件呢?我們可以點(diǎn)菜單中Project-Add Class,在彈出的對(duì)話框中選擇c++ class,然后由彈出個(gè)對(duì)話框,在class name處填上類名點(diǎn)finish就可以了,這樣.h文件和.cpp文件會(huì)自動(dòng)生成,我們也可以點(diǎn)Project-Add New Item,在彈出的對(duì)話框中選擇Header File(.h)或C++ File(.cpp)來生成.h文件或.cpp文件。
Clock.cpp和main.cpp都使用#include "Clock.h"把類Clock的頭文件Clock.h包含進(jìn)來。#include指令的作用就是將#include后面的文件嵌入到當(dāng)前源文件該點(diǎn)處,被嵌入的文件可以是.h文件也可以是.cpp文件。如果不包含Clock.h,Clock.cpp和main.cpp就不知道Clock類的聲明形式,就無法使用此類,所以所有使用此類的文件都應(yīng)該包含聲明它的頭文件。關(guān)于#include指令下面雞啄米會(huì)講。
上面的程序在編譯時(shí),由Clock.cpp和Clock.h編譯生成Clock.obj,由main.cpp和Clock.h編譯生成main.obj,然后就是鏈接過程,Clock.obj和main.obj鏈接生成main.exe可執(zhí)行文件。如果我們只修改了類的實(shí)現(xiàn)文件,那么只需重新編譯Clock.cpp并鏈接就可以,別的文件不用管,這樣就提高了效率。在Windows系統(tǒng)中的C++程序用工程來管理多文件結(jié)構(gòu),而Unix系統(tǒng)一般用make工具管理,如果大家從事Unix系統(tǒng)軟件開發(fā),就需要自己寫make文件。
二.編譯預(yù)處理程序
編譯器在編譯源程序以前,要由預(yù)處理程序?qū)υ闯绦蛭募M(jìn)行預(yù)處理。預(yù)處理程序提供了一些編譯預(yù)處理指令和預(yù)處理操作符。預(yù)處理指令都要由“#”開頭,每個(gè)預(yù)處理指令必須單獨(dú)占一行,而且不能用分號(hào)結(jié)束,可以出現(xiàn)在程序文件中的任何位置。
1.#include指令
#include指令也叫文件包含指令,用來將另一個(gè)源文件的內(nèi)容嵌入到當(dāng)前源文件該點(diǎn)處。其實(shí)我們一般就用此指令來包含頭文件。#include指令有兩種寫法:
#include 文件名
使用這種寫法時(shí),會(huì)在C++安裝目錄的include子目錄下尋找中標(biāo)明的文件,通常叫做按標(biāo)準(zhǔn)方式搜索。
#include "文件名"
使用這種寫法時(shí),會(huì)先在當(dāng)前目錄也就是當(dāng)前工程的目錄中尋找""中標(biāo)明的文件,若沒有找到,則按標(biāo)準(zhǔn)方式搜索。
2.#define和#undef指令
如果你學(xué)過C語言,就會(huì)知道用#define可以定義符號(hào)常量,比如,#define PI 3.14 這條指令定義了一個(gè)符號(hào)常量PI,它的值是3.14。C++也可以這樣定義符號(hào)常量,但一般更常用的是在聲明時(shí)用const關(guān)鍵字修飾。C語言還用#define定義參數(shù)宏,來實(shí)現(xiàn)簡(jiǎn)單的函數(shù)運(yùn)算,比如,#define add(x,y) (x+y) 這條指令說明如果我們用到add(1,2)則預(yù)處理后就會(huì)用(1+2)代替,C++中一般用內(nèi)聯(lián)函數(shù)來實(shí)現(xiàn)。
#undef用來刪除由#define定義的宏,使其不再起作用。
3.條件編譯指令
用條件編譯指令可以實(shí)現(xiàn)某些代碼在滿足一定條件時(shí)才會(huì)參與編譯,這樣我們可以利用條件編譯指令將同一個(gè)程序在不同的編譯條件下生成不同的目標(biāo)代碼。例如,我們可以在調(diào)試程序時(shí)加入一些調(diào)試語句,用條件編譯指令控制只有在debug模式下這些調(diào)試語句才參與編譯,而在release模式下不參與編譯。
條件編譯指令有5中形式:
a.第一種形式:
#if 常量表達(dá)式
程序正文 //當(dāng)“ 常量表達(dá)式”非零時(shí)本程序段參與編譯
#endif
b.第二種形式:
#if 常量表達(dá)式
程序正文1 //當(dāng)“ 常量表達(dá)式”非零時(shí)本程序段參與編譯
#else
程序正文2 //當(dāng)“ 常量表達(dá)式”為零時(shí)本程序段參與編譯
#endif
c.第三種形式:
#if 常量表達(dá)式1
程序正文1 //當(dāng)“ 常量表達(dá)式1”非零時(shí)本程序段參與編譯
elif 常量表達(dá)式2
程序正文2 //當(dāng)“常量表達(dá)式1”為零、“ 常量表達(dá)式2”非零時(shí)本程序段參與編譯
...
elif 常量表達(dá)式n
程序正文n //當(dāng)“常量表達(dá)式1”、...、“常量表達(dá)式n-1”均為零、“ 常量表達(dá)式n”非零時(shí)本程序段參與編譯
#else
程序正文n+1 //其他情況下本程序段參與編譯
#endif
d.第四種形式:
#ifdef 標(biāo)識(shí)符
程序段1
#else
程序段2
#endif
如果“標(biāo)識(shí)符”經(jīng)#defined定義過,且未經(jīng)undef刪除,則編譯程序段1,否則編譯程序段2。
e.第五種形式:
#ifndef 標(biāo)識(shí)符
程序段1
#else
程序段2
#endif
如果“標(biāo)識(shí)符”未被定義過,則編譯程序段1,否則編譯程序段2。
4.define操作符
define是預(yù)處理操作符,不是指令,所以不能用#開頭。使用形式為:define(標(biāo)識(shí)符)。如果括號(hào)里的標(biāo)識(shí)符用#define定義過,并且沒有用#undef刪除,則define(標(biāo)識(shí)符)為非0,否則為0。可以這樣使用:
#if !define(HEAD_H)
#define HEAD_H
我們?cè)诎^文件時(shí),有時(shí)多次重復(fù)包含同一個(gè)頭文件,比如下面這種情況:
// main.cpp文件
#include "file1.h"
#include "file2.h"
int main()
{
…
}
// file1.h文件
#include "head.h"
…
// file2.h文件
#include "head.h"
…
// head.h文件
...
class A
{
...
}
...
main.cpp包含了file1.h文件,file1.h又包含了head.h文件,main.cpp還包含了file2.h文件,file2.h也包含了head.h文件,那么main.cpp就包含了兩次head.h文件,在編譯時(shí)就會(huì)報(bào)錯(cuò),說head.h中的類A重復(fù)定義了。這時(shí)我們可以在被重復(fù)包含的文件head.h中使用條件編譯指令,用一個(gè)唯一的標(biāo)識(shí)符來標(biāo)識(shí)head.h文件是否已經(jīng)編譯過,如果已經(jīng)編譯過則不會(huì)重復(fù)編譯了。雞啄米給大家改寫下上面的head.h文件:
// head.h文件
#ifndef HEAD_H
#define HEAD_H
...
class A
{
...
}
...
#endif
在這個(gè)改好的head.h文件中,上來會(huì)先判斷HEAD_H是否被定義過,如果沒有被定義過,則head.h文件還沒參與過編譯,就編譯此文件中的源代碼,同時(shí)定義HEAD_H,標(biāo)記head.h文件已經(jīng)參與過編譯。如果HEAD_H已經(jīng)被定義過,則說明此文件已經(jīng)參與過編譯,編譯器會(huì)跳過本文件左右內(nèi)容編譯其他部分,類A也不會(huì)有重復(fù)定義的錯(cuò)誤了。