❶ C語言源程序文件的後綴是什麼,經過編譯後生成文件的後綴是什麼經過連接後生成文件的後綴是什麼
C語言源文件後綴名是.c,編譯生成的文件後綴名是.obj,連接後可執行文件的後綴名是.exe。
源文件的後綴僅僅是為了表明該文件中保存的是某種語言的代碼(例如.c文件中保存的是C語言代碼),這樣程序員更加容易區分,編譯器也更加容易識別,它並不會導致該文件的內部格式發生改變。
(1)源程序文檔化符號名包括什麼擴展閱讀
C語言是一種結構化語言,它有著清晰的層次,可按照模塊的方式對程序進行編寫,十分有利於程序的調試,且c語言的處理和表現能力都非常的強大。
依靠非常全面的運算符和多樣的數據類型,可以輕易完成各種數據結構的構建,通過指針類型更可對內存直接定址以及對硬體進行直接操作,因此既能夠用於開發系統程序,也可用於開發應用軟體。
C語言是普適性最強的一種計算機程序編輯語言,它不僅可以發揮出高級編程語言的功用,還具有匯編語言的優點。
❷ C語言編程
(一)「項目驅動」式教學
目前最纖衫著名、最有影響、應用最廣泛的windows、linux和UNIX三個操作系統都是用C語言編寫的。0S是計算機系統(由軟硬體兩個子系統構成)的核心和靈魂,它是軟體中最龐大最復雜的系統軟體。既然如此龐大復雜的0S都可以用c語言編寫,從狹義而言,還有什麼系統軟體和應用軟體不能用c語言編寫呢?由此可以肯定的說,c語言是一門十分優秀而又重要的語言。
c語言程序設計是過程性程序設計語言,它的發展貫穿了計算機發展的歷程,它蘊含了程序設計的基本思想,囊括了程序設計的基本概念,所以它是理工科高等院校的一門基礎課程。
從市面上有關c語言的書籍和高等院校採用的教材來看,它們有一個共性,那就是:脫離了實際應用(全是小打小鬧的小例子),純粹的過程性程序設計,沒有軟體工程思想的體現,沒有一定程序設計風格,僅僅是為了讓大家明白什麼是c語言而已。
高等院校開設c語言程序設計的目的是讓學生對程序設計有個入門,有個直觀的理解,同時為其他後續課程作鋪墊。但是如果教學僅僅以此為目的,那麼教學本身就效果而言是個大大的失敗。
大家知道,在商業上講究唯利是圖,「利」是商業追求的目標,離開了「利」經商,則商無動力,其結果是必敗無疑。在c語言程序設計教學當中,教師應該把「唯用是圖」作為教學的首要目標。如果拋開了實際應用進行程序設計教學,就是紙上談兵,就是「說明書」式的教學。印度的程序設計課程採用「事件驅動式」教學,我認為在中國的c語言程序設計教學中應該採用「項目驅動式」教學。「項目驅動式」教學就是以項目為目的,以c語言理論教學為過程,最終能用c語言設計項目,實現項目的要求。「項目驅動式」教學的關鍵在於培養學生「如何做什麼」和「可以干什麼」。一個項目就是一個工程,在「項目驅動式」教學中,首先應該讓學生簡單了解什麼是軟體工程思想,其次在c語言理論教學過程中,讓學生懂得面向對象的程序設計的風格,最後引導他們來設計項目。
(二)「項目驅動」式教學應注意的問題
1.c語言程序設計教學要幫助學生樹立面向工程的觀點
在計算機行業中,軟體是通過人們的智力活動、把知識與技術轉化成信息的一種產品。軟體的設計已經用工程的觀念來進行管理。軟體設計工作被當作一項系統工程來對待。軟體的的生存周期一般可分為以下階段:問題定義、可行性研究、需求分析、概要設計、詳細設計、編碼、測試、運行與維護。我們不難看出軟體工程的復雜程度是很大的。理工科高等院校把c語言作為一門基礎課程,也是為了給社會培養信息技術人才。眾所周知,養成一個好的習慣是非常重要的,所以c語言程序設計作為大多數工科院校學生接觸的第一門程序設計語言(有的院校講pascal),就應該讓學生樹立正確的觀點。那麼當前的程序設計教學也必須以切合將來軟體工程開發的實際需要為第一目標,使學生在學習程序設計的初級階段就樹立正確的軟體工程觀點。這樣做不僅可以為學生將來從事計算機應用設計打下良好的基礎,而且有利於培養學生分析問題的完備性,以及統籌全局,協調關系的基本素質。
2.理論教學應從單一的「結構化程序設計」向「結構化與面向對象並舉」轉變
「結構化程序設計」方法是程序設計的基礎,必須讓學生掌握得堅實可靠。結構化程序設計的過程是培養學生思維能力的過程,在教學中經常發現有些學生的思維混亂。這些都是缺乏思維訓練的結果。結構化程序設計的訓練不僅可以讓學生養成良好的程序設計習慣,而且可以有效地培養學生思維的條理性和邏輯性。所以在授課過程中要注意講解結構化程序設計的思想時應突出兩點:(1)程序的質量首先取決於它的結構。(2)程序設計的基本方法是自頂向下地逐步求精和模塊化。
在c程序教學過程中,越到後面的章節,學生越會產生設計毀穗腔程序逐漸變難的感覺,這是不符合邏輯的一種怪現象。按照常理,C語言學的越多,說明你的程序設計知識越多,設計起程序來應該更加得心應手,那麼出現這種現象的原因何在呢?當然該問題的出現的原因是多方面的,但是其中最重要的一點就是長期以來程序設計的觀念不是以如何處理好對象為出發點,而是以如何使用好語言為基本點。受這種思想的影響,我們的程序設計教學大多數不是以如何解決好問題為重點,而是以講解語法規則和語句格式為重點,是「說明書」式的教學。這樣做造成的結果就是見到一個程序後學生首先想到是該用哪條語句,而不是思考怎樣合理的解析。族拍要切實解決這個問題,首先應該改變程序設計的觀念。「面向對象程序設計」思想是目前最為流行、極為實用的一種程序設計方法,但是讓學生直接接觸「面向對象程序設計」,肯定不能對程序設計打下牢固的基礎。「結構化與面向對象並舉」是現代計算機程序設計的發展趨勢,應該認真探索研究,讓學生有一個較為輕松的學習過程。程序設計的實質就是編寫處理對象的過程,所以將c與c++有機的融為一體的教材應該是首選教材,在教學過程中,我們應該從社會發展的角度進行探索研究,將目前最為流行又極為實用「面向對象程序設計」思想融合到c語言教學中。
3.c語言教學應培養學生良好的程序設計風格
具有良好的設計風格應該是程序員所具備的基本素質,在實際的項目中程序員往往都有自己的一些編程風格。目前95%以上的程序設計書籍不注重程序設計風格問題,這導致了很多學生沒有良好的程序設計風格,在他們剛剛畢業踏入社會時,如果周圍的同事沒有良好的編程風格,那麼很難通過環境來使自己提高這方面的素質,即使有提高也不容易比較全面的提高。因此在學生接觸的第一門程序設計語言教學中,就應該培養學生良好的程序設計風格,使他們一進工作環境就具備這個素質。
Pascal設計者N.Writh教授十分重視程序設計風格的養成,他堅信「教給學生們以表達他們思維的語言會深深地影響他們思維和創造發明的習慣,而正是這些語言本身的混亂直接影響著學生們的程序設計的風格」,他這里所指的「這些運用」是當時那些主要用於程序設計教學的計算機語言。對學生來講,一開始就強調程序設計風格很有必要,良好的程序設計風格不僅有助於提高程序的可靠性、可理解性、可測試性、可維護性和可重用性,而且也能夠促進技術的交流,改善軟體的質量。所以培養良好的程序設計風格對於初學者來說非常重要。
程序設計風格,實際上是指的是編碼風格。在教學過程中應從源程序文檔化,數據說明的原則,輸入/輸出方法這三個方面培養學生的編碼風格,進而從編碼原則探討提高程序的可讀性、改善程序質量的方法。
(1)源程序文檔化。編碼的目的是產生程序,但是為了提高程序的可維護性。源代碼是需要實現文檔化的。源程序文檔化包括選擇標識符(變數和標號)的名字、安排注釋以及標準的書寫格式等。
①選擇標識符的命名規則。標識符包括模塊名、變數名、常量名、標號名、子程序名等。這些名字應能反映它所代表的實際東西,應有一定實際意義,使其能顧名思義。另外在模塊名、變數名、常量名、標號名、子程序名中使用下劃線是一種風格。使用這一技術的一種廣為人知的命名規則就是匈牙利命名法(變數類型由一個或兩個字元表示,並且這些字元將作為變數名的前綴)。當然使用匈牙利命名法與否都沒有錯誤,重要的是要保持一致性——在整個程序中使用相同的命名規則。這就是說,如果你在一個小組環境中編程,你和其他小組成員應該制定一種命名規則。並自始至終使用這種規則。如果有人使用了別的命名規則,那麼集成的程序讀起來將是很費勁的。此外,你還要與程序中用到的第三方庫(如果有的話)所使用的風格保持一致。如果可能的話,你應該盡量使用與第三方庫相同的命名規則,這將加強你的程序的可讀性和一致性。
②注釋。程序中的注釋是程序設計者與程序閱讀者之間通信的重要手段。注釋能夠幫助讀者理解程序,並為後續測試維護提供明確的指導信息。因此,注釋是十分重要的,大多數程序設計語言提供了使用自然語言來寫注釋的環境,為程序閱讀者帶來很大的方便。注釋分為功能性注釋和序言性注釋。
a.功能性注釋。功能性注釋在源程序中,用以描述其後的語句或程序段是在做什麼工作,也就是解釋下面要「做什麼」,而不是解釋下面怎麼做。對於書寫功能性注釋,要注意以下幾點:第一描述一段程序,而不是每一個語句。第二利用縮進和空行,使程序與注釋容易區別。第三注釋要准確無誤。
b.序言性注釋。序言性注釋通常位於每個程序模塊的開頭部分,它給出程序的整體說明,對於理解程序具有引導作用。有些軟體開發部門對序言性注釋做了明確而嚴格的規定,要求程序編制者逐項列出。有關內容包括:程序標題;有關該模塊功能和目的的說明;主要演算法;介面說明:包括調用形式,參數描述,子程序清單;有關數據描述;模塊位置(在哪一個源文件中,或隸屬於哪一個軟體包);開發簡歷:模塊設計者、復審考、復審日期。
③用標準的書寫格式。源程序清單的書寫建議採用以下幾點:
a.每行只寫一條語句;
b.用分層縮進的寫法顯示嵌套結構層次,這樣可使程序的邏輯結構更加清晰,層次更加分明。
c.書寫表達式時適當使用空格或圓括弧作隔離符。
d.在注釋段周圍加上邊框;
e.注釋段與程序段、以及不同的程序段之間插入字行;
(2)數據說明採用的原則。在編寫程序時,要注意數據說明的風格。
數據說明的次序如果規范,將有利於測試,排錯和維護。首先說明的先後次序要固定,例如,按常量說明、簡單變數類型說明、數組說明用數據塊說明、所有的文件說明的順序說明。當然在類型說明中還可進一步要求,例如按如下順序排列:整型量說明、實型量說明、字元量說明、邏輯說明。
其次當用一個語句說明多個變數名時,應當對這些變數按字母的順序排列。
最後對於復雜數據結構,應利用注釋說明實現這個數據結構的特點。
(3)輸入/輸出方法。輸入/輸出的方式和格式應當盡量避免因設計不當給用戶帶來的麻煩。這就要求,源程序的輸入/輸出風格必須滿足能否為用戶接受這一原則。所以在設計程序時,應考慮以下原則:輸入數據時,要使輸入的步驟和操作盡可能簡單,應允許使用自由格式輸入;應允許預設值;對輸入的數據要進行檢驗,以保證每個數據的有效性。
(三)結束語
在教學過程中,我們讓學生設計一個程序模擬體育彩票的銷售與對獎的過程,取得了良好的效果。他不僅啟發和誘導了學生獨立思考、積極思維的主動性,而且充分調動了學生學習的自覺性和積極性,使學生融會貫通地掌握了所學知識,提高了分析問題和解決實際問題的能力。
搞好c程序設計的教學工作涉及的因素很多,如果以項目來驅動教學,首先讓學生樹立面向工程的思想,其次把教學從單一的「結構化程序設計」向「結構化與面向對象並舉」轉變,最後特別要培養學生養成良好的編碼風格,從而使他們學會能夠「干什麼」,那麼我們認為教學目的就達到了。
❸ C語言源程序文件、目標文件和可執行文件的擴展名是什麼
C語言源程序文件擴展名:.c
目標文件擴展名:.obj
可執行文件擴展名:.exe
源程序:程序可以用高級語言或匯編語言編寫,用高級語言或匯編語言編寫的程序稱為源程序。C語言源程序的擴展名為「.c」。源程序不能直接在計算機上執行,需要用「編譯程序」將源程序編譯為二進制形式的代碼。
目標程序:源程序經過「編譯程序」編譯所得到的二進制代碼稱為目標程序。目標程序
的擴展名為「.obj」。
目標代碼盡管已經是機器指令,但是還不能運行,因為目標程序還沒有解決函數調用問題,需要將各個目標程序與庫函數連接,才能形成完整的可執行程序。
可執行程序:目標程序與庫函數連接,形成的完整的可在操作系統下獨立執行的程序
稱為可執行程序。可執行程序的擴展名為「.exe「。
(3)源程序文檔化符號名包括什麼擴展閱讀:
C語言創建程序的步驟:
編輯:就是創建和修改C程序的源代碼-我們編寫的程序稱為源代碼。
編譯:就是將源代碼轉換為機器語言。編譯器的輸出結果成為目標代碼,存放它們的文件稱為目標文件。擴展名為.o或者.obj。(該部分編譯是指匯編器編譯匯編語言或者編譯器編譯高級語言)
鏈接:鏈接器將源代碼由編譯器產生的各種模塊組合起來,再從C語言提供的程序庫中添加必要的代碼模塊,將它們組成一個可執行的文件。在windows下擴展名為.exe,Unix下無擴展名。
執行:運行程序。
IT專家網——C語言編程程序編譯全過程剖析
❹ 源程序的文檔化不包括()。
【答啟伏案】:B
源程序的文檔化主要包括3點:(1)符號名應具有一定實際的含義,便於理解程序功能:猛旁螞(2)正確的程序注釋;(3)良好的視覺組織。利用空格、空行、縮進等技巧使程序層次枝埋清晰。
❺ 求計算機二級公共基礎知識
1.3.1 基本數據結構與演算法
1.演算法的基本概念及特徵
演算法的概念是考試的重點,是指解題方案的准確而完整的描述,它由兩種基本要素組成:一是對數據對象的運算和操作,二是演算法的控制結構。
演算法具有可行性、確定性、有窮性、擁有足夠的情報等特徵。其中,確定性和有窮性是考試的重點。
演算法的確定性,是指演算法中的每一步驟都必須有明確定義,不允許有模稜兩可的解釋,也不允許有多義性。
演算法的有窮性,是指演算法必須能在有限的時間內做完,即演算法必須能在執行有限個步驟之後終止。
2.演算法復雜度的概念和意義
一個演算法質量肢肢亂的好壞可從演算法的時間復雜度和空間復雜度兩個方面來衡量。演算法的復雜度也是每次考試的重點,要注意明確有關概念。
演算法的時間復雜度是指演算法所需要的計算工作量;演算法的空間復雜度是指執行這個演算法所需要的內存 空間。
3.數據結構的定義
數據結構主要研究和討論以下三個方面的問題:
① 數據集合中各元素之間所固有的邏輯關系,即數據的邏輯結構。
② 在對數據進行處理時,各數據元素在計算機中的存儲關系,即數據的存儲結構。
③ 對各種數據結構進行的運算。
要注意數據的邏輯結構與存儲結構的區別與聯系。
4.線性結構與非線性結構
根據數據結構中各元素之間前後件關系的復雜程度,一般數據結構分為兩大類型:線性結構與非線性結構。要注意這兩種結構的特徵、它們之間的區別以及常見的有關結構。
(1)線性結構(或稱線性表)有以下主要特徵:
① 有且只有一個根結點,它無前件。
② 有且只有一個終結點,它無後件。
③ 除根結點與終端結點外,其他所有結點有且只有一個前件,也有且只有一個後件。線性表中結點的個數稱為線性表的長度,當結點個數為0時,該線性表為空表。
常見的線性結構有:線性表、棧、隊列等。
(2)如果一個數據結構不是線性結構,則稱之為非線性結構,常見的非線性結構有:樹、二叉樹、圖等。
5.線性表的順序存儲結構(順序表)及其插入與刪除運算
線性表既可以採用順序存儲結構,又可以採用鏈式存儲結構進行存儲。要注意掌握二者在存儲數據方面的方式與特點。
(1)線性表的順序存儲結構的特點
① 線性表中所有元素所佔的存儲空間是連續的。
② 線性表中各數據元素在存儲空間中是按邏輯順序依次存放的。
由此可見,在線性表的順序存儲結構中,其前後件兩個元素在存儲空間中是緊鄰的,且前件元素一定存儲在後件元素的前面。
(2)線性表在順序存儲結構下的插入與刪除運算
線性表在順序存儲結構下,若在第i(1in,n為線性表中元素的個數)個位置上插入一個飢李新元素,則首先從最後一個(即第n個)元素開始,直到第i個元素之間共有n–i+1個元素依次向後移動一個位置,移動結束後,第i個位置就被空出,然後將新元素插入到第i個位置。插入結束後,線性表的長度增1。
顯然,在最好的情況下,插入位置在線性表的末尾進行,即在第n個元素之後插入運算,此時,不需要移動表中的元素。而在最壞的情況下,插入位置在第1個元素上,此時需要移動表中所有的元素。在平均情況下,要在線性表中插入一個新元素,需要移動表中一半的元素。
同理,線性表在順序存儲結構下的刪除運算,也需要移動表中的元素,只不過是向前移動,在最好的情況下,刪除運算在線性表的末尾進行,即刪除第n個元素,此時,不需要移動表中的元素。而在最壞的情況下,刪除位置在第1個元素上,此時需要移動表中所有的元素。在平均情況下,要在線性表中刪除一個元素,需要移動表中一半的元素。
線性表的順序存儲結構的特點,以及在順序存儲結構下插入與刪除運算的效率是考試的重點。
6.棧與隊列
要深刻領會二者的概念,以及對二者進行插入、刪除運算的特點,這是考試的重點。
棧實際上也是線性表,只不過是一種特殊的線性表。在這種特殊的線性表中歷檔,其插入與刪除運算都只在線性表的一端進行。即在這種線性表的結構中,一端是封閉的,不允許進行插入與刪除元素;另一端是開口的,允許插入與刪除元素。允許插入與刪除運算的一端稱為棧頂,而不允許插入與刪除運算的一端稱為棧底。棧頂元素總是最後被插入的元素,從而也是最先能被刪除的元素;棧底元素總是最先被插入的元素,從而也是最後才能被刪除的元素。即棧是按照「先進後出」(First In Last Out,FILO)或「後進先出」(Last In First Out,LIFO)的原則組織數據的,因此,棧也被稱為「先進後出」表或「後進先出」表。由此可以看出,棧具有記憶作用。對棧常可以進行進棧、出棧、讀取棧頂元素的運算。
隊列是指允許在一端進行插入運算、而在另一端進行刪除運算的線性表。允許插入運算的一端稱為隊尾,通常用一個稱為隊尾指針的指針指向隊尾元素,即隊尾指針總是指向最後被插入的元素。允許刪除運算的一端稱為隊頭,通常也用一個隊頭指針指向隊頭的元素。顯然,在隊列這種數據結構中,最先插入的元素將最先能夠被刪除,反之,最後插入的元素將最後才能被刪除。因此,隊列又稱為「先進先出」(First In First Out,FIFO)或「後進後出」(Last In Last Out,LILO)的線性表。對隊列可以進行入隊、退隊運算。
7.循環隊列
重點注意循環隊列的概念、存儲方式。
循環隊列是隊列順序存儲結構的一種,它將m個物理上連續的存儲單元,在邏輯上形成一個環狀,供隊列循環使用。
具體來說,在循環隊列中,用隊尾指針rear指向隊列中的隊尾元素,用隊頭指針front指向隊頭元素的前一個位置,因此,從隊頭指針front指向的後一個位置直到隊尾指針rear指向的位置之間所有的元素均為隊列中的元素。
8.線性表的鏈式存儲結構(線性鏈表)
(1)線性表的鏈式存儲結構及其有關運算
在線性表的鏈式存儲結構中,一個元素用一個結點來存儲,每個結點含有兩個域,一個數據域用於存放數據元素值,一個指針域,用於存放指針,該指針用於指向該結點的前一個或後一個結點(即前件或後件)。
在鏈式存儲結構中,存儲數據結構的存儲空間可以不連續,各數據結點的存儲順序(即存儲空間位置)與數據元素之間的邏輯關系可以不一致,而數據元素之間的邏輯關系是由指針域來確定的。要特別注意,線性表的鏈式存儲結構與順序存儲結構方式的不同。
線性表的鏈式存儲結構又稱為線性鏈表。
對線性鏈表的運算主要包括:查找指定元素、插入、刪除運算等。不像順序存儲結構那樣,對線性鏈表的插入與刪除運算不需要移動數據元素,而只需改變有關結點的指針即可。
(2)循環鏈表
在對線性鏈表進行運算的過程中,雖然其插入與刪除運算比較方便,但還存在一個問題,即對於空表和對第一個結點的處理必須單獨考慮,使空表與非空表的運算不統一。為了克服線性鏈表的這個缺點,可以採用另一種鏈接方式,即循環鏈表的結構,使整個鏈成為一個環狀結構。在此,需要注意線性鏈表與循環鏈表在存儲方式上的不同。
循環鏈表的結構與線性鏈表相比,具有以下兩個特點:
① 在循環鏈表中增加了一個表頭結點,其數據域為任意或者根據需要來設置,指針域指向線性表的第一個元素的結點。循環鏈表的頭指針指向表頭結點。
② 循環鏈表中最後一個結點的指針域不是空,而是指向表頭結點。即在循環鏈表中,所有結點的指針構成了一個環狀鏈。
9.樹與二叉樹
樹是一種非線性結構,在這種結構中,所有數據元素之間的關系具有明顯的層次特性。而二叉樹也是一種非線性結構,它與樹結構相似,並且樹結構的所有術語都可以用到二叉樹這種數據結構上。
二叉樹具有以下兩個特點:
① 非空二叉樹只有一個根結點。
② 每一個結點最多有兩棵子樹,且分別稱為該結點的左子樹與右子樹。
因此,二叉樹中每一個結點的度最大為2,即所有子樹(左子樹或右子樹)也均為二叉樹。
對於二叉樹,其概念與性質是考試的重點。要特別注意二叉樹的有關性質。
10.滿二叉樹與完全二叉樹
滿二叉樹與完全二叉樹是兩種特殊形態的二叉樹,對這兩種二叉樹的概念上的理解是考試的重點。
(1)滿二叉樹
滿二叉樹是指這樣的一種二叉樹:除最後一層外,每一層上的所有結點都有兩個子結點,也就是說,在滿二叉樹中,每一層上的結點數都達到最大值,即在滿二叉樹的第k層有2k–1個結點,且深度為m的滿二叉樹有2m–1個結點。
(2)完全二叉樹
完全二叉樹是這樣的二叉樹,除最後一層外,每一層上的結點數均達到最大值。
11.二叉樹的遍歷
二叉樹的遍歷是指不重復地訪問二叉樹中的所有結點。二叉樹的遍歷可以分為三種:前序遍歷、中序遍歷、後序遍歷。這三種遍歷方式是每次考試的重點,要求對於某一棵二叉樹應能寫出對應的遍歷序列。
12.順序查找及其特點
需要重點掌握順序查找的概念及查找的效率。
順序查找又稱順序搜索。它從線性表的第一個元素開始,依次將線性表中的元素與被查元素進行比較,若相等則表示找到(即查找成功);若線性表中所有的元素都與被查元素進行了比較但都不相等,則表示線性表中沒有要找的元素(即查找失敗)。
很明顯,在進行順序查找過程中,在最好的情況下,如果線性表中的第一個元素就是被查元素,則只需做一次比較就查找成功,查找效率最高;但如果被查的元素是線性表中的最後一個元素,或者被查元素根本不在線性表中,則為了查找這個元素需要與線性表中所有的元素進行比較,這是順序查找的最壞情況。在平均情況下,利用順序查找法在線性表中查找一個元素,大約與線性表中一半的元素進行比較。
13.二分法查找及其特點
重點掌握二分法查找的適用對象、查找的方法與查找效率。
二分法查找只適用於順序存儲的有序表。此處的有序表是指線性表中的元素按值非遞減排列(即從小到大,但允許相信元素值相等)。
設有序線性表的長度為n,被查元素為x,則二分查找的方法如下所述。
將x與線性表的中間項進行比較:
若中間項的值等於x,則說明查到,查找結束;
若x小於中間項的值,則在線性表的前半部分(即中間項以前的部分)以相同的方法進行查找;
若x大於中間項的值,則在線性表的後半部分(即中間項以後的部分)以相同的方法進行查找。
這個過程一直進行到查找成功或子表長度為0(說明線性沒有這個元素)為止。
顯然,當有序線性表為順序存儲時才能採用二分查找,並且,二分查找的效率要比順序查找高得多。對於長度為n的有序線性表,在最壞情況下,二分查找只需要比較log2n次。
14.排序技術
排序是指將一個無序序列整理成按值非遞減順序排列的有序序列。常見的排序方法主要有交換類排序、插入類排序和選擇類排序。各種排序方法的特點以及在最壞情況下的排序效率是考試的重點。
(1)交換類排序法
交換類排序法是指藉助數據元素之間的互相交換進行排序的一種方法。冒泡排序法與快速排序法都屬於交換類排序方法。
冒泡排序法是一種最簡單的交換類排序方法,它是通過相鄰數據元素的交換逐步將線性表變成有序。假設線性表的長度為n,則在最壞情況下,冒泡排序需要經過n/2遍的從前往後的掃描和n/2遍的從後往前的掃描,需要的比較次數為n(n–1)/2。但這個工作量不是必需的,一般情況下要小於這個工作量。
快速排序法也是一種交換類的排序方法,但由於它比冒泡排序法的速度快,因此稱之為快速排序法。其關鍵是對線性表進行分割,以及對各分割出的子表再進行分割。
(2)插入類排序法
插入類排序法主要有簡單插入排序法和希爾排序法。
簡單插入排序法,是指將無序序列中的各元素依次插入到已經有序的線性表中。在這種排序方法中,每一次比較後最多移掉一個逆序,因此,這種排序方法的效率與冒泡排序法相同。在最壞情況下,簡單插入排序需要n(n–1)/2次比較。
希爾排序法對簡單插入排序做了較大的改進。它是將整個無序序列分割成若干小的子序列分別進行插入排序。希爾排序的效率與所選取的增量序列有關。在最壞情況下,希爾排序所需要的比較次數為O(n1.5)。
(3)選擇類排序
選擇類排序主要有簡單選擇類排序法和堆排序法。
簡單選擇排序法的基本思想是:掃描整個線性表,從中選出最小的元素,將它交換到表的最前面(這是它應有的位置);然後對剩下的子表採用同樣的方法,直到子表空為止。對於長度為n的線性表,在最壞情況下需要比較n(n–1)/2次。
堆排序法也屬於選擇類排序法。具有n個元素的序列(h1, h2, …, hn),當且僅當滿足條件:
或
(i=1, 2, …, n/2)時稱之為堆。可見,堆頂元素(即第一個元素)必為最大項。
堆排序的方法對於規模較小的線性表並不適合,但對於較大規模的線性表來說是很有效的。在最壞情況下,堆排序需要比較的次數為O(nlog2n)。
1.3.2 程序設計基礎
1.程序設計方法與風格
除了好的程序設計方法和技術外,程序設計風格也是很重要的內容。程序設計風格是指編寫程序時所表現出的特點、習慣和邏輯思路。要形成良好的程序設計風格,主要應注重和考慮下述一些因素。
(1)源程序文檔化
符號名的命名:符號名的命名應具有一定的實際含義,以便於對程序功能的理解。
程序注釋:注釋一般分為序言性注釋和功能性注釋。序言性注釋通常位於每個程序的開頭部分,它給出程序的整體說明;而功能性注釋的位置一般嵌在源程序體中,主要描述其後的語句或程序做什麼。
視覺組織:可以在程序中利用空格、空行、縮進等技巧使程序層次清晰。
(2)數據說明的方法
主要包括數據說明的次序規范化、說明語句中變數安排有序化和使用注釋來說明復雜數據結構等。
(3)語句的結構
語句構造應該簡單直接,不應該為提高效率而把語句復雜化。
(4)輸入和輸出
輸入和輸出方式和格式應盡可能方便用戶的使用。
2.結構化程序設計
結構化程序設計的主要原則、設計要素應是重點掌握的內容。
由於軟體危機的出現,人們開始研究程序設計方法,其中最受關注的是結構化程序設計方法。結構化程序設計方法的主要原則可以概括為自頂向下、逐步求精、模塊化、限制使用goto語句。
在結構化程序設計的具體實施中,要注意把握如下要素。
(1)使用程序設計語言中的順序、選擇、循環等有限的控制結構表示程序的控制邏輯。
(2)使用的控制結構只准許有一個入口和一個出口。
(3)程序語句組成容易識別的塊,每塊只有一個入口和一個出口。
(4)復雜結構應該用嵌套的基本控制結構進行組合嵌套來實現。
(5)語言中所沒有的控制結構,應該採用前後一致的方法來模擬。
(6)嚴格控制goto語句的使用。
3.面向對象的程序設計及其重要概念
面向對象的程序設計方法及其有關概念是重點掌握的內容,也是考試的重點。
面向對象的程序方法主張從客觀世界固有的事物出發來構造系統,提倡用人類在現實生活中常用的思維方法來認識、理解和描述客觀事物,強調最終建立的系統能夠映射問題域。它具有與人類習慣的思維方法一致、穩定性好、可重用性好、易於開發大型軟體產品、可維護性好等優點。
在面向對象的程序方法中,有如下重要的概念。
(1)對象
用來表示客觀世界中的任何實體,即應用領域中有意義的、與所要解決的問題有關系的任何事物都可以作為對象。它既可以是具體的物理實體的抽象,也可以是人為的概念,或者是任何有明確邊界和意義的東西。面向對象的程序設計方法中涉及的對象是系統中用來描述客觀事物的一個實體,是構成系統的一個基本單位,它由一組表示其靜態特徵的屬性和它可執行的一組操作組成。
屬性即對象所包含的信息,它在設計對象時確定,一般只能通過執行對象的操作來改變。
操作描述了對象執行的功能,若通過消息傳遞,還可以為其他對象使用。
(2)類和實例
將屬性、操作相似的對象歸為類,即是具有共同屬性、共同方法的對象的集合。因此,類是對象的抽象,它描述了屬於該對象類型的所有對象的性質,而一個對象則是其對應類的一個實例。
(3)消息
面向對象的世界是通過對象與對象間彼此的相互合作來推動的,對象間的這種相互合作需要一個機制協助進行,這樣的機制稱為「消息」。消息是一個實例與另一個實例之間傳遞的信息,它請示對象執行某一處理或回答某一要求的信息,它統一了數據流和控制流。一個消息由接收消息的對象的名稱、消息標識符(即消息名)、零個或多個參數組成。
(4)繼承
繼承是面向對象的方法的一個主要特徵。繼承是使用已有的類定義作為基礎建立新類的定義技術。已有的類可當做基類來引用,則新類相應地可當做派生類來引用。一個類的上層可以有父類,下層可以有子類。一個類直接繼承其父類的描述(數據和操作)或特性,子類自動地共享基類中定義的數據和方法。
(5)多態性
對象根據所接受的消息而做出動作,同樣的消息被不同的對象接受時可導致完全不同的行動,該現象稱為多態性。
❻ c語言源程序的擴展名是什麼
c語言源程序的擴展名是:「.c」。由C語言構成的指令序列稱為C源程序,源程序文件的後綴為「.c」。註:在絕大多數的操作系統里,C源代碼文件的後綴的大小寫無所謂,如「index.C」和「index.c」指的是同一個文件;但老練的程序員通常使用小寫。
對於計算機語言來說,其源代碼文件的命名會有一個特定的後綴。如C++的源代碼文件的後綴是「.cpp」;Python的源代碼文件的後綴是「.py」;而C的源代碼文件的後綴則是「.C」。
源程序的結構特點
1、一個C語言源程序可以由一個或多個源文件組成。
2、每個源文件可由一個或多個函數組成。
3、一個源程序不論由多少個文件組成,都有一個且只能有一個main函數,即主函數。
4、源程序中可以有預處理命令(include 命令僅為其中的一種),預處理命令通常應放在源文件或源程序的最前面。
5、每一個說明,每一個語句都必須以分號結尾。但預處理命令,函數頭和花括弧「}」之後不能加分號。
6、標識符,關鍵字之間必須至少加一個空格以示間隔。若已有明顯的間隔符,也可不再加空格來間隔。
❼ c語言源程序名的後綴 C語言中的源程序的擴展名是什麼
1、源程序:在各個平台上,C語言的源程序擴展名都是相同的,即c。 比如test.c等。
2、C語陪握言源代碼文件一般擴展名為.c,目標文件擴展名一般為.obj,生成的可空信執行文件擴蘆虧慶展名一般為.exe。不同平台的C源代碼擴展名都為.c,但目標文件擴展名不同。