




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
C--優(yōu)秀課件分析第一頁,共43頁。1.0本科程在專業(yè)學(xué)習(xí)中的地位智能無線終端應(yīng)用(5-7學(xué)期)電磁場與電磁波;數(shù)字圖象處理;信號檢測與處理;微波技術(shù)與天線;射頻電路設(shè)計(jì)原理與應(yīng)用。
專業(yè)基礎(chǔ)課程第一層次(3-5學(xué)期):電路原理、模擬電子技術(shù)、數(shù)字電路與數(shù)字邏輯;第二層次(5-6學(xué)期):信號與系統(tǒng)、數(shù)字信號處理、電子測量原理;第三層次(5-7學(xué)期):MATLAB與系統(tǒng)仿真、電子線路CAD、DSP原理及應(yīng)用智能信息處理支持課程1.高端軟件設(shè)計(jì)支持(2-4學(xué)期)
程序設(shè)計(jì)基礎(chǔ)C;C++程序設(shè)計(jì);
可視化編程與應(yīng)用。
2.芯片級設(shè)計(jì)支持(5-7學(xué)期)
微機(jī)原理與應(yīng)用;單片機(jī)原理與應(yīng)用;嵌入式系統(tǒng);專業(yè)課程設(shè)計(jì)。工業(yè)信號檢測系統(tǒng)與智能電子產(chǎn)品研發(fā)(5-7學(xué)期)傳感器原理與應(yīng)用;檢測技術(shù)基礎(chǔ);數(shù)據(jù)庫開發(fā)與應(yīng)用;現(xiàn)代電氣及PLC技術(shù);樓宇智能化技術(shù)。
第一頁第二頁,共43頁。本科程學(xué)習(xí)的高端目標(biāo):1.程序設(shè)計(jì)競賽;2.初級程序員(證書):第四~五學(xué)期
相當(dāng)于實(shí)習(xí)工程師(本科畢業(yè))3.中級程序員(證書):第五~六學(xué)期
相當(dāng)于助理工程師(本科畢業(yè)工作1年以上)4.高級程序員(證書):第六~七學(xué)期
相當(dāng)于工程師(本科畢業(yè)工作5年以上)5.軟件設(shè)計(jì)師(證書):第七~八學(xué)期
相當(dāng)于高級工程師(本科畢業(yè)工作9年以上)第二頁第三頁,共43頁。
C++到底難不難學(xué)?它從開始誕生以來,發(fā)展勢頭一直旺到現(xiàn)在,背后一定也有它的道理。C++綜合了各家之長,功能多,操作起來簡單。有人說它難學(xué),這是正常的,否則,一學(xué)就會的東西,還用得著努力教和學(xué)嗎?至于學(xué)習(xí)的結(jié)果,就因人而異,甚至大相徑庭了。難怪有的人趣味盎然,有的人大嘆苦經(jīng)。中國古代有名畫家王冕就是因?yàn)樾欧盍诉@樣一句話而成才的:沒有學(xué)不會的事情!
第三頁第四頁,共43頁。1.1程序設(shè)計(jì)語言(ProgrammingLanguage)
人們用程序設(shè)計(jì)語言描述需要解決的問題,用“語言翻譯/編譯器”加工以使計(jì)算機(jī)理解其描述,爾后就能使計(jì)算機(jī)代替人們工作了。雖然編程語言最終目的是促使計(jì)算機(jī)為人們工作,但人們用編程語言對問題的描述方式與內(nèi)容,隨著使用群體的擴(kuò)大,越來越多地成為人們之間相互交流過程描述與信息表達(dá)的工具。計(jì)算機(jī)上的機(jī)器指令也稱為機(jī)器代碼,它是機(jī)器語言的程序。機(jī)器語言是低級語言,匯編語言是機(jī)器語言的直接符號表示,所以基本上也是低級語言。而C++則是高級語言。第四頁第五頁,共43頁。⑴
moveax,DWORDPTRa
$[ebp]
8b45fc⑵
leaeax,DWORDPTR[eax+eax*2]8d0440⑶
movecx,DWORDPTRb
$[ebp]8b4df8⑷
addecx,ecx
03c9⑸
subeax,ecx
2bc1⑹
inceax
40⑺
movDWORDPTRa
$[ebp],eax
8945fc匯編語言和某個(gè)特定的機(jī)器語言:第五頁第六頁,共43頁。程序語言越低級,則必須對過程描寫越具體,指令也就越接近機(jī)器的硬件邏輯。程序語言越高級,就越接近對問題的描述與表達(dá),因而更直觀,容易被人們所理解。程序語言從低級到高級的發(fā)展,也就是從具體描述(編程)到抽象描述(編程),高級語言的抽象描述最后都需用“語言編譯器”自動轉(zhuǎn)化成機(jī)器的具體實(shí)現(xiàn)。
語言編譯器的發(fā)展,則是從簡單到復(fù)雜的過程。語言越是高級,描述越是抽象,則用于自動化轉(zhuǎn)換的語言編譯器越復(fù)雜,以便人們對問題只需有個(gè)相對簡單的描述(編程),就能夠被機(jī)器所理解。第六頁第七頁,共43頁。1.2
C++前史(Pre-C++history)1953年12月,IBM公司的JohnBackus寫了一份備忘錄,建議為IBM704設(shè)計(jì)一種全新的編程語言。Backus多年工作在計(jì)算機(jī)上,深切體會到編程困難,他的目標(biāo)是設(shè)計(jì)一種用于科學(xué)計(jì)算的“公式翻譯語言”。他帶領(lǐng)的一個(gè)團(tuán)隊(duì),終于在1954年完成了FORTRAN語言的設(shè)計(jì)和實(shí)現(xiàn)。在那以后,不同版本的FORTRAN語言紛紛面世。1966年,美國統(tǒng)一了它的標(biāo)準(zhǔn),稱為FORTRAN66語言,此后,又被更新為FORTRAN77和FORTRAN90。FORTRAN語言的后繼版本要兼容以前大量的FORTRAN老程序,這一負(fù)擔(dān)阻礙了它,無法革新成現(xiàn)代編程語言特征。但不管怎樣,F(xiàn)ORTRAN語言一直活躍了40多年,Backus為此摘取了1977年度的“圖靈獎(jiǎng)”。第七頁第八頁,共43頁。代數(shù)語言ALGOL1958年,一個(gè)國際商業(yè)和學(xué)術(shù)計(jì)算機(jī)科學(xué)家組成的委員會在瑞士開會,探討改進(jìn)FORTRAN問題,并嘗試設(shè)計(jì)一種標(biāo)準(zhǔn)化的計(jì)算機(jī)語言。1960年,該委員會在1958年討論的基礎(chǔ)上,定義了一種新的語言——國際代數(shù)語言ALGOL60,首次引入了局部變量和遞歸概念,在數(shù)學(xué)表達(dá)和算法描述上比FORTRAN更出色,而且它不是解釋執(zhí)行,而是編譯后運(yùn)行,比FORTRAN程序效率更高。但由于ALGOL語言的設(shè)計(jì)要求是獨(dú)立于機(jī)器的,所以就面臨許多語言實(shí)現(xiàn)方面的技術(shù)問題,致使ALGOL語言無法流行。但它卻演變?yōu)槠渌幊陶Z言設(shè)計(jì)的概念基礎(chǔ)。第八頁第九頁,共43頁??茖W(xué)計(jì)算借助于FORTRAN獲得快速進(jìn)展的時(shí)候,還沒有一種適用于商業(yè)計(jì)算的語言。美國國防部注意到了這種情況,1959年5月,五角大樓委托GraceMurrayHopper博士領(lǐng)導(dǎo)一個(gè)委員會,開始設(shè)計(jì)面向商業(yè)的通用語言COBOL。COBOL最重要的特征是語法與英文很接近,可以讓不懂計(jì)算機(jī)的人也能看懂程序。1968年,COBOL語言進(jìn)行了標(biāo)準(zhǔn)化。后又在1974年和1984年進(jìn)行了標(biāo)準(zhǔn)化更新。COBOL語言曾經(jīng)風(fēng)靡一時(shí)。
商用語言COBOL第九頁第十頁,共43頁。BASIC語言60年代中期,美國Dartmouth學(xué)院的JohnG.Kemeney和ThomasE.Kurtz認(rèn)為,像FORTRAN這樣的編程語言,都是為專業(yè)人員設(shè)計(jì)的,而他們希望能為無經(jīng)驗(yàn)的人提供一種簡單的編程語言,特別希望那些非計(jì)算機(jī)專業(yè)的學(xué)生也能通過這種語言學(xué)會使用計(jì)算機(jī)。于是,他們在簡化FORTRAN的基礎(chǔ)上,研究出了BASIC語言。由于BASIC語言易學(xué)易用,很快就成為最流行的計(jì)算機(jī)語言之一,幾乎所有小型和個(gè)人計(jì)算機(jī)都使用它。BASIC語言發(fā)展到后來,出現(xiàn)了許多改版,典型的有1983年推出的TrueBASIC,1985年推出的QBASIC,以及1991年推出的VisualBASIC(簡稱VB)。VB一直風(fēng)靡至今長盛不衰。第十頁第十一頁,共43頁。Lisp語言同在60年代中期,美國MIT的JohnMcCarthy等人設(shè)計(jì)和實(shí)現(xiàn)了用于人工智能研究的Lisp語言。Lisp語言是基于表處理的函數(shù)語言,由于該語言更面向問題,因此較容易編程,描述能力更強(qiáng),更易于進(jìn)行程序正確性驗(yàn)證和軟件維護(hù)。但由于實(shí)現(xiàn)技術(shù)復(fù)雜,處理文件等能力不強(qiáng),運(yùn)行效率低,該工具一直停留在實(shí)驗(yàn)室階段。第十一頁第十二頁,共43頁。計(jì)算機(jī)教學(xué)語言LOGO和結(jié)構(gòu)化的編程語言Pascal1967年,美國麻省理工大學(xué)人工智能實(shí)驗(yàn)室S.Papert為兒童設(shè)計(jì)了一種LOGO編程語言。他用LOGO語言啟發(fā)孩子們的學(xué)習(xí)與思考,一些孩子用LOGO語言設(shè)計(jì)出了真正的程序,于是LOGO成為一種熱門的計(jì)算機(jī)教學(xué)語言。1971年,瑞士聯(lián)邦技術(shù)學(xué)院N.Wirth教授發(fā)明了Pascal語言。Pascal語言語法嚴(yán)謹(jǐn),層次分明,程序易寫,具有很強(qiáng)的可讀性,是第一個(gè)結(jié)構(gòu)化的編程語言。它一出世就受到廣泛歡迎,為此,他獲得1984年度的“圖靈獎(jiǎng)”。第十二頁第十三頁,共43頁。Simula67語言1967年,挪威奧斯陸的JohanDahl和KristenNygaard推出了Simula67語言。該語言第一次提出類的概念,能夠把應(yīng)用中的概念直接用編程語言描述,比其他語言編寫的程序更具可讀性,而且編譯系統(tǒng)捕捉類型錯(cuò)誤的能力十分強(qiáng),保證了程序規(guī)模擴(kuò)大之后,錯(cuò)誤量不會非線性增長。該語言曾配置在好幾個(gè)大型計(jì)算機(jī)上,但由于編譯實(shí)現(xiàn)不完善,導(dǎo)致運(yùn)行效率低下,只能執(zhí)行一些小型程序,所以像ALGOL語言一樣,沒能流行,但成為未來面世的面向?qū)ο缶幊陶Z言的概念基礎(chǔ)。第十三頁第十四頁,共43頁。C語言1970年,AT&T的Bell實(shí)驗(yàn)室D.Ritchie和K.Thompson共同發(fā)明了C語言。研制C語言的初衷是用它編寫UNIX系統(tǒng)程序,因此,它實(shí)際上是UNIX的“副產(chǎn)品”。它充分結(jié)合了匯編語言和高級語言的優(yōu)點(diǎn),高效而靈活,又容易移植,所以大受程序設(shè)計(jì)師的青睞,成為計(jì)算機(jī)產(chǎn)業(yè)界的寵兒。為此,他們兩位獲得了1983年度的“圖靈獎(jiǎng)”。第十四頁第十五頁,共43頁。C++語言70年代中期,BjarneStroustrup在劍橋大學(xué)計(jì)算機(jī)中心工作。他使用過Simula和ALGOL,實(shí)現(xiàn)過低級語言BCPL,接觸過C。他對Simula的類體系感受頗深,對ALGOL的結(jié)構(gòu)也頗有好感,他深知運(yùn)行效率的意義,所以,十分欣賞C語言。以C為背景,以Simula思想為基礎(chǔ),正好符合既要編程簡單、正確可靠,又要運(yùn)行高效、可移植的設(shè)想。1979年,BjarneStroustrup到了Bell實(shí)驗(yàn)室,開始從事將C改良為帶類的C
(Cwithclasses)的工作。1983年將該語言正式命名為C++。90年代,程序員開始慢慢從C中淡出,轉(zhuǎn)入C++。此后,C++穩(wěn)步發(fā)展,1998年ISO/ANSIC++標(biāo)準(zhǔn)正式制定,如今已是如日中天。鑒于C++對現(xiàn)代計(jì)算機(jī)產(chǎn)業(yè)的貢獻(xiàn),1995年《BYTE》雜志將BjarneStroustrup列入“計(jì)算機(jī)工業(yè)20個(gè)最具影響力的人”。第十五頁第十六頁,共43頁。1.3C++
C++是從C語言中繼承而來的。C++的發(fā)展壯大,主要是因?yàn)槌绦蛟O(shè)計(jì)方法的發(fā)展。程序設(shè)計(jì)方法的發(fā)展,主要是計(jì)算機(jī)應(yīng)用范圍的擴(kuò)大和編程規(guī)模的擴(kuò)大。C語言之所以風(fēng)靡一時(shí),在于當(dāng)時(shí)需要計(jì)算機(jī)解決的問題多半是小規(guī)模問題,一般通過單臺計(jì)算機(jī)獨(dú)立蠻算便可解決。隨著計(jì)算機(jī)的發(fā)展,人們開始著手解決大數(shù)據(jù)量的處理問題,需要處理大量復(fù)雜結(jié)構(gòu)的數(shù)據(jù)。C程序員雖然經(jīng)過艱苦的努力,設(shè)計(jì)出許多精巧的程序,但是在理解上卻越來越困難,運(yùn)行問題也越來越多。程序需要“保修(可維護(hù)性要求)”,需要“擴(kuò)充(可擴(kuò)展性要求)”,需要“加固(安全性要求)”。而這些精巧的程序由于內(nèi)在結(jié)構(gòu)的弱點(diǎn)——數(shù)據(jù)結(jié)構(gòu)與算法盤根錯(cuò)節(jié),無法被可逆地拆解,很難分析“險(xiǎn)情”和重新使用。第十六頁第十七頁,共43頁。設(shè)計(jì)計(jì)算機(jī)語言的專家要改革這一現(xiàn)狀,提出程序設(shè)計(jì)語言應(yīng)該具有數(shù)據(jù)類型的擴(kuò)充能力。于是基于數(shù)據(jù)類型和面向數(shù)據(jù)類型的編程語言不斷浮出水面。這些方法,是以程序員自己定義或設(shè)計(jì)數(shù)據(jù)類型的方式將復(fù)雜結(jié)構(gòu)的數(shù)據(jù)進(jìn)行系統(tǒng)的組織,統(tǒng)一的管理,以使程序組織合理,算法設(shè)計(jì)簡單和易懂,C++便是其中之一,從商業(yè)化角度看,C++更是其中的跤跤者。在C的簡捷、高效的基礎(chǔ)上,C++添加了自定義數(shù)據(jù)類型的整套設(shè)施,以適應(yīng)大規(guī)模編程的需要。因此,進(jìn)入市場后,面向?qū)ο蟮木幊谭椒ㄒ查_始工業(yè)化了。第十七頁第十八頁,共43頁。C繼承者
C++對C的繼承是青出于藍(lán)而勝于藍(lán),因?yàn)槭菍的繼承,也就承諾了對C的包容。C++對C的包容,也包括對程序設(shè)計(jì)方法的包容,這就決定了C++擅長面向?qū)ο蟪绦蛟O(shè)計(jì)的同時(shí),還可以進(jìn)行基于過程的程序設(shè)計(jì),因而C++就適應(yīng)的問題規(guī)模而論,大小由之。C++是一種混合型程序設(shè)計(jì)語言,“混合”體現(xiàn)在可以采用不同的程序設(shè)計(jì)方法,進(jìn)行各種目的的編程?!盎旌稀币馕吨^不放棄計(jì)算機(jī)高效運(yùn)行的實(shí)用性特征,而又致力于提高大規(guī)模程序的編程質(zhì)量,提高程序設(shè)計(jì)語言的問題描述能力。第十八頁第十九頁,共43頁。標(biāo)準(zhǔn)C++
有了C++標(biāo)準(zhǔn),專家們在開發(fā)C++編譯器時(shí),可以避免大量的研究無序性和重復(fù)勞動,并且也為組織大規(guī)模的編譯軟件開發(fā)創(chuàng)造了前提條件;有了C++標(biāo)準(zhǔn)文檔,語言設(shè)計(jì)者,程序員和用戶三者就可以有一致的語言來互通,在程序員社區(qū)可以暢通地交流,編寫的程序變得更有效,更通用,更易懂。有了C++標(biāo)準(zhǔn),程序員所開發(fā)的軟件產(chǎn)品具有更高的系統(tǒng)可移植性;C++標(biāo)準(zhǔn)還在防止技術(shù)封鎖,促進(jìn)軟件技術(shù)的交流,提高軟件競爭力等方面起到了很好的保護(hù)作用;所以當(dāng)C++發(fā)展到一定規(guī)模的時(shí)候,無論是用戶、程序員,還是C++語言的設(shè)計(jì)者,都在竭力推動標(biāo)準(zhǔn)化的工作。第十九頁第二十頁,共43頁。使用標(biāo)準(zhǔn)C++,也意味著程序員可以充分享用C++的資源——標(biāo)準(zhǔn)庫。從而帶來更多的快速和方便,提高抽象編程的程度。所以,學(xué)習(xí)C++,理所當(dāng)然地要學(xué)習(xí)標(biāo)準(zhǔn)C++。在我國,個(gè)人計(jì)算機(jī)配置的操作系統(tǒng)以Windows居多,比較容易獲得的標(biāo)準(zhǔn)C++工具就是Borland公司的C++Builder6或者以上版本,或者微軟公司的VisualC++、.net或者以上版本。若在linux系統(tǒng)上,比較容易獲得的標(biāo)準(zhǔn)C++工具就是BorlandC++Kylix3.0以上版本。另外,通用的C++編譯器當(dāng)數(shù)C++3.0了,它即有Windows版本,又有Linux版本。第二十頁第二十一頁,共43頁。1.4C++編程流程
程序設(shè)計(jì)語言發(fā)展到現(xiàn)在,無論編譯型還是解釋型,一般都附帶提供一個(gè)集成開發(fā)環(huán)境(IntegratedDevelopmentEnvironment,IDE)。程序員可以在該環(huán)境中,編輯程序代碼,逐個(gè)編譯源文件,裝配和鏈接全部源文件及其資源文件,直至調(diào)試運(yùn)行。甚至軟件包裝和做成軟件產(chǎn)品都可以一體化。解釋型環(huán)境(如VB)中,編輯代碼后,沒有編譯和鏈接的中間環(huán)節(jié),可以直接運(yùn)行,方便編程開發(fā)。但由于程序運(yùn)行不能離開解釋器現(xiàn)場,所以效率上便落了下風(fēng)。對于規(guī)模化的大程序,低性能表現(xiàn)得更加明顯,所以真正的計(jì)算任務(wù)和中大型軟件開發(fā)一般都不用解釋型環(huán)境開發(fā)。第二十一頁第二十二頁,共43頁。C++語言的程序因?yàn)橐w現(xiàn)高性能,所以都是編譯型的。C++的IDE(集成開發(fā)環(huán)境)用解釋型的逐條語句執(zhí)行方式以方便開發(fā)調(diào)試,用編譯型的方式來生成最終能脫離開發(fā)環(huán)境的執(zhí)行代碼以提高運(yùn)行效率。IDE功能齊全,調(diào)試功能很強(qiáng),程序編好后,可以立刻在環(huán)境中調(diào)試以獲得初步測試結(jié)果,然后,可以方便地做成beta版形式,拿到實(shí)際環(huán)境中進(jìn)一步測試,最后做成軟件發(fā)行版。一般的編程操作流程為:編輯(edit)——編譯(compile)——鏈接(link或make或build)——調(diào)試(debug),該過程循環(huán)往復(fù),直至完成。第二十二頁第二十三頁,共43頁。C++源程序,或稱源代碼(sourcecode),簡稱代碼(code),以擴(kuò)展名為.cpp(在Windows環(huán)境中)的文本形式存放。程序被編譯(compile)后,會生成目標(biāo)代碼(objectcode),以.obj為文件擴(kuò)展名存放。目標(biāo)代碼即機(jī)器代碼,是計(jì)算機(jī)能夠識別的指令集合,但是,目標(biāo)指令(也稱目標(biāo)代碼)還不能在具體的計(jì)算機(jī)上運(yùn)行,因?yàn)槟繕?biāo)代碼只是一個(gè)個(gè)獨(dú)立的程序段,程序段之間還沒有彼此呼應(yīng),程序段中用到的C++庫代碼和其他資源還沒有掛上。第二十三頁第二十四頁,共43頁。為了把成組的程序段轉(zhuǎn)換為可執(zhí)行程序,必須進(jìn)行鏈接(link),鏈接的過程就是將目標(biāo)代碼整合(或稱轉(zhuǎn)換)成可執(zhí)行文件,可執(zhí)行文件通常以.exe為文件擴(kuò)展名。C++程序在編譯后,通過同時(shí)鏈接若干個(gè)目標(biāo)文件與若干個(gè)庫文件而創(chuàng)建可執(zhí)行程序。庫文件是系統(tǒng)提供的程序鏈接資源,不同公司的IDE產(chǎn)品有不同的后綴,例如,VisualC++的庫文件的后綴是.lib。標(biāo)準(zhǔn)C++提供C++標(biāo)準(zhǔn)庫,用戶庫是由軟件開發(fā)商或程序員提供的。目標(biāo)文件與庫文件鏈接的結(jié)果,生成計(jì)算機(jī)可執(zhí)行程序。第二十四頁第二十五頁,共43頁。1.5最小樣板程序(MinimumSampleProgram)
C++編譯器能理解的有標(biāo)準(zhǔn)輸出的最小程序?yàn)椋?include<iostream>intmain(){std::cout<<”helloworld.\n”;}為了讓人能更好地理解,并讓程序體現(xiàn)出其邏輯結(jié)構(gòu)。上述程序最好寫成如下所示的有結(jié)構(gòu)形式:#include<iostream>intmain(){
std::cout<<”helloworld.\n”;}第二十五頁第二十六頁,共43頁。程序中“iostream”是C++為特定環(huán)境編制的標(biāo)準(zhǔn)輸入輸出流類的標(biāo)準(zhǔn)庫頭文件。“cout”是標(biāo)準(zhǔn)輸出設(shè)備的名字,“<<”是操作命令,指示將后面的數(shù)據(jù)(字串"Helloworld.\n"),送到顯示器設(shè)備上去?!皊td”是“名空間”。程序中有若干名字,程序規(guī)模大起來后,難免會有名字沖突,就好像學(xué)校中遇到同名學(xué)生:A班中有張三,B班中也有張三,當(dāng)A、B班在一起上課時(shí),就有名字沖突問題。解決的簡單辦法就是兩個(gè)張三分別命名為:“A班的張三”,“B班的張三”。C++也是這樣來解決問題的。為了防止程序員自己又命名一個(gè)“cout”而造成沖突,就特地對語言專門提供的標(biāo)準(zhǔn)設(shè)備名“cout”冠以前綴“std::”,表示“標(biāo)準(zhǔn)庫中的cout”。第二十六頁第二十七頁,共43頁。編程風(fēng)格(ProgrammingStyle)
C++的程序語法是以空格和換行(回車)來區(qū)分詞法單位,以特定的字符來辨認(rèn)語法的,如,分號“;”表示語句的結(jié)束。除此之外,其書寫形式就比較隨意。程序設(shè)計(jì)格式的隨意性,給程序設(shè)計(jì)風(fēng)格帶來了可朔性。程序設(shè)計(jì)風(fēng)格應(yīng)以可讀性為準(zhǔn)則,合理的緊湊性、模塊整體性、對齊、鋸齒型嵌套、注釋都是形成特定風(fēng)格的因素。為了讓程序表現(xiàn)出美感,又不致于語句前后內(nèi)容含混不清、結(jié)構(gòu)混亂,語句書寫講究疏密得當(dāng)。高級程序員的程序風(fēng)格,體現(xiàn)了極大的一貫性和藝術(shù)性。每個(gè)初學(xué)者必須要模仿編程風(fēng)格,隨著編程量的增加,對程序的感受多多,會不知不覺地形成自己獨(dú)特的風(fēng)格。第二十七頁第二十八頁,共43頁。最小樣本程序//=====================================//min_sample.cpp//帶標(biāo)準(zhǔn)輸出的最小樣本程序//=====================================#include<iostream>intmain(){std::cout<<”helloWorld.\n”; //顯示字符串}//====================================第二十八頁第二十九頁,共43頁。1.6程序與算法(Program&Algorithm)
計(jì)算機(jī)程序是用計(jì)算機(jī)語言所要求的規(guī)范描述出來的一系列動作,它表達(dá)了程序員要求計(jì)算機(jī)執(zhí)行的操作。優(yōu)秀的程序員尤其是C++程序員,追求編程方法的實(shí)效性。這意味著所謂“學(xué)會計(jì)算機(jī)語言,看得懂語法,了解了語言的描述方法”,還是不夠的,它和熟練運(yùn)用計(jì)算機(jī)語言,能用語言高效、正確地描述問題、解決問題是有天壤之別的。學(xué)習(xí)計(jì)算機(jī)語言在于讓計(jì)算機(jī)準(zhǔn)確地執(zhí)行程序,和學(xué)習(xí)其他語言一樣,都需要一個(gè)充分的實(shí)踐過程。第二十九頁第三十頁,共43頁。算法(Algorithm)的定義
1)目的性
算法是有求解目的的動作序列,算法必須有運(yùn)算結(jié)果,而程序只是強(qiáng)調(diào)過程性;2)抽象性算法離不開數(shù)據(jù)結(jié)構(gòu),而數(shù)據(jù)結(jié)構(gòu)在具體的計(jì)算機(jī)上實(shí)現(xiàn)要受到表示范圍的限制,算法比具體的程序設(shè)計(jì)抽象層次要高一些,算法甚至不在乎用什么編程語言來描述;3)研究性算法許多時(shí)候用于理論研究,描述算法的目的是溝通人們的思想,而不是實(shí)現(xiàn),所以,算法可以用偽編程語言來描述。第三十頁第三十一頁,共43頁。編程與結(jié)構(gòu)(Programming&Structure)
編程是為了解決計(jì)算問題,計(jì)算問題強(qiáng)調(diào)算法,程序設(shè)計(jì)也就是在一定抽象層次上的算法設(shè)計(jì)。這里的抽象層次應(yīng)理解為數(shù)據(jù)的描述方式。當(dāng)許多編程問題含有大量縱橫交錯(cuò)的數(shù)據(jù)時(shí),人們便逐漸意識到數(shù)據(jù)組織與數(shù)據(jù)結(jié)構(gòu)的重要,意識到數(shù)據(jù)存在的形式必須脫離程序。1976年,計(jì)算機(jī)專家N.Wirth提出這樣的經(jīng)典公式:
程序=算法+數(shù)據(jù)結(jié)構(gòu)強(qiáng)調(diào)編程中數(shù)據(jù)結(jié)構(gòu)的描述應(yīng)相對算法而獨(dú)立。程序不再是單純的過程體(操作序列)了,不再是單純的算法了,而是算法和數(shù)據(jù)結(jié)構(gòu)的有機(jī)組織。第三十一頁第三十二頁,共43頁。1.7過程化程序設(shè)計(jì)(ProceduralProgramming)
過程化程序設(shè)計(jì)主要體現(xiàn)在算法上,編程就是解決算法如何設(shè)計(jì)問題。當(dāng)算法很大時(shí),就考慮將它按功能劃分。程序組織圍繞算法的切分而展開。這一類問題一般都是小規(guī)模的問題,一般的程序設(shè)計(jì)語言都可以勝任。過程程序設(shè)計(jì)按照問題來設(shè)計(jì)算法。它所使用的是語言中現(xiàn)成的基本數(shù)據(jù)類型。問題模型反映為過程結(jié)構(gòu)模型,實(shí)際上就是功能模型。但由于過程模塊與數(shù)據(jù)的復(fù)雜關(guān)系沒有清晰地分離出來,所以它一般都是“具體問題具體解決”,無法重復(fù)使用其中的“零部件”,而且,問題龐大以后,其復(fù)雜性會無法收場。第三十二頁第三十三頁,共43頁。結(jié)構(gòu)化程序設(shè)計(jì)(StructuredProgramming)
結(jié)構(gòu)化程序設(shè)計(jì)方法主要體現(xiàn)在過程的功能劃分與過程內(nèi)部的編寫規(guī)則上,因此它是一種規(guī)范的過程化程序設(shè)計(jì)思想。結(jié)構(gòu)化程序描述任何實(shí)體的操作序列只需用“順序,選擇(分支),重復(fù)(循環(huán))”三種基本控制結(jié)構(gòu)。結(jié)構(gòu)化程序設(shè)計(jì)中的各個(gè)過程體和各個(gè)組成部分以模塊來表示。每個(gè)模塊,其內(nèi)聚性(agregation)越強(qiáng),外聯(lián)性(association)越少,則模塊獨(dú)立性越好。第三十三頁第三十四頁,共43頁。
內(nèi)聚性,即模塊內(nèi)部所涉及的功能越單一越好。這樣一旦修改起來,就職責(zé)明確,不會因?yàn)檫@個(gè)原因那個(gè)原因都來找這個(gè)模塊算帳。
外聯(lián)性,即模塊之間的聯(lián)系越少越好,聯(lián)系意味著依賴性,外聯(lián)性少,模塊的獨(dú)立性就好,獨(dú)立性意味著自說自話地修改本模塊與外界無關(guān)。因此就容易編程和修改。減少外聯(lián)性還涉及到對數(shù)據(jù)的分離與歸類。將過程體中的數(shù)據(jù)分離出來,獨(dú)立地用數(shù)據(jù)結(jié)構(gòu)去描述其數(shù)據(jù)和處理,這都是模塊劃分的原則。第三十四頁第三十五頁,共43頁。1.8對象化程序設(shè)計(jì)(ObjectifiedProgramming)
伴隨著人類對計(jì)算機(jī)的依賴性日益增強(qiáng),程序規(guī)模不斷擴(kuò)大,模塊數(shù)呈指數(shù)級遞增,模塊間的數(shù)據(jù)傳遞五花八門,同一程序中模塊之間的關(guān)系錯(cuò)綜復(fù)雜,結(jié)構(gòu)化程序設(shè)計(jì)的規(guī)范已經(jīng)不能保證程序的正確性,可維護(hù)性和重用性了。人們開始意識到不可能在語言中內(nèi)置所有的待解決問題的數(shù)據(jù)結(jié)構(gòu),必須讓語言具有自建數(shù)據(jù)結(jié)構(gòu)的能力。數(shù)據(jù)結(jié)構(gòu)對于算法,對于程序是如此的重要,但當(dāng)時(shí)大多數(shù)語言都沒有專門支持對數(shù)據(jù)結(jié)構(gòu)的直接描述。第三十五頁第三十六頁,共43頁。在C語言中有一種結(jié)構(gòu)(struct)類型,可以在單純空間上復(fù)合其他數(shù)據(jù)類型,描述數(shù)據(jù)的組織,但還是不能避免其數(shù)據(jù)操作的安全問題。在大規(guī)模程序設(shè)計(jì)中,問題尤其突出。軟件發(fā)展似有一個(gè)不可逾越的極限,因此,在軟件產(chǎn)業(yè)界曾一度有軟件危機(jī)之說。其實(shí)浩瀚的編程大軍并非每個(gè)人都必須要精通問題的每個(gè)細(xì)節(jié),這就像使用電視機(jī)的人并非都要精通其內(nèi)部的每個(gè)細(xì)節(jié)!我們可用電視機(jī)的外殼,把電視機(jī)的內(nèi)部電路和外部使用一分為二。外部使用只需要了解電視機(jī)的基本操作方法,內(nèi)部電路提供電視機(jī)的各項(xiàng)功能,兩者都需要一個(gè)共同的規(guī)范——電視機(jī)的按鈕操作功能。第三十六頁第三十七頁,共43頁。
抽象數(shù)據(jù)類型就是想要描述這一共同的規(guī)范,它描述數(shù)據(jù)的組織和相關(guān)的操作。如果語言能夠自由定義數(shù)據(jù)類型,那么,問題就能化成以抽象數(shù)據(jù)類型為媒介的使用與實(shí)現(xiàn)獨(dú)立的兩部分,因而該語言的解決問題的能力一定就強(qiáng)。衡量一個(gè)語言的優(yōu)劣,能否自定義或者說擴(kuò)充數(shù)據(jù)類型是其重要指標(biāo)。C++有一個(gè)類(class)機(jī)制,這正是C語言欠缺的地方。數(shù)據(jù)類型的本質(zhì)是數(shù)據(jù)組織(實(shí)現(xiàn))和其操作(使用)的捆綁性。當(dāng)對應(yīng)到具體編程時(shí),用抽象數(shù)據(jù)類型來界定,就能把編程大軍分為兩個(gè)陣營,一個(gè)是專業(yè)性極強(qiáng)的,專門實(shí)現(xiàn)抽象數(shù)據(jù)類型的編程,好比生產(chǎn)電視機(jī)者;另一個(gè)是專門使用抽象數(shù)據(jù)類型的編程,好比使用電視機(jī)者。第三十七頁第三十八頁,共43頁。要能使抽象數(shù)據(jù)類型能夠維護(hù)兩大程序員陣營的編程利益,必須要在語言的設(shè)計(jì)中加入一些語言機(jī)制,這些語言機(jī)制采用了許多難以想象的技術(shù),實(shí)現(xiàn)了數(shù)據(jù)封裝,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 視頻制作合同
- 2023年一級消防工程師消防安全技術(shù)實(shí)務(wù)真題
- 湘教版品與生二下教案
- 中醫(yī)院實(shí)操考試題及答案
- 中醫(yī)院的護(hù)士面試題及答案
- 中醫(yī)醫(yī)院考試試題及答案
- 中醫(yī)行醫(yī)考試題庫及答案
- 執(zhí)業(yè)藥師之《西藥學(xué)專業(yè)一》能力提升題庫及答案詳解
- 企業(yè)招聘題庫及答案
- 配方設(shè)計(jì)題目及答案
- 2025年農(nóng)產(chǎn)品質(zhì)量安全追溯體系構(gòu)建與農(nóng)業(yè)供應(yīng)鏈管理創(chuàng)新報(bào)告
- 煤礦筆試題目及答案
- 2025年?;方?jīng)營單位安全管理人員培訓(xùn)全國考試題庫(含答案)
- 2025年助理工程師考試試題基礎(chǔ)理論(附答案)
- 2024年江門職業(yè)技術(shù)學(xué)院招聘考試真題
- 2024年北京水務(wù)投資集團(tuán)有限公司集團(tuán)系統(tǒng)招聘真題
- 2025年福建省養(yǎng)老護(hù)理員技師預(yù)測題目(含答案)
- 危險(xiǎn)品運(yùn)輸資格(裝卸管理人員)考試2025年題庫及答案
- 《知識管理辦法》
- 2026年高考數(shù)學(xué)一輪復(fù)習(xí)策略《指向深度學(xué)習(xí)的高中數(shù)學(xué)教學(xué)策略》講座
-
評論
0/150
提交評論