天天看點

c語言入門經典doc,C語言入門經典C語言程式設計.ppt

c語言入門經典doc,C語言入門經典C語言程式設計.ppt

C語言入門經典C語言程式設計.ppt

第01章 C語言程式設計,C語言是一種功能強大、簡潔的計算機語言,通過它可以編寫程式,指揮計算機完成指定的任務。我們可以利用C語言建立程式即一組指令,并讓計算機依指令行事。 用C語言程式設計并不難,本書将用淺顯易懂的方法介紹C語言的基礎知識,讀完本章,讀者就可以編寫第一個C語言程式了,其實C語言很簡單。 。,1.1 建立C程式,C程式的建立過程有4個基本步驟或過程編輯,編譯,連結,執行。這些過程很容易完成就像翻轉手臂一樣簡單,而且可以随時翻轉,首先介紹每個過程,以及它們對建立C程式的作用 。 編輯 編譯 連結1.1.1 編輯,編輯過程就是建立和修改C程式的源代碼我們編寫的程式指令稱為源代碼。有些C編譯器帶一個編輯器,可幫助管理程式。通常,編輯器是提供了編寫、管理、開發與測試程式的環境,有時也稱為內建開發環境縮寫為IDE。1.1.2 編譯,編譯器可以将源代碼轉換成機器語言,在編譯的過程中,會找出并報告錯誤。這個階段的輸入是在編輯期間産生的檔案,常稱為源檔案。 編譯器能找出程式中很多無效或無法識别的錯誤,以及結構錯誤,例如程式的某部分永遠不會執行。編譯器的輸出結果稱為對象代碼object code,存放它們的檔案稱為對象檔案object file,這些檔案的擴充名在Windows環境中通常是.obj,在Linux/UNIX環境中通常是.o。編譯器可以在轉換過程中找出幾種不同類型的錯誤,它們大都會阻止對象檔案的建立,1.1.3 連結,連結器linker将源代碼檔案中将編譯器産生的各種子產品組合起來,再從C語言提供的程式庫中添加必要的代碼子產品,将它們組合成一個可執行的檔案。連結器也可以檢測和報告錯誤,例如,遺漏了程式的某個部分,或者引用了一個根本不存在的庫元件。1.1.4 執行,執行階段就是當成功完成了前述3個過程後,運作程式。但是,這個階段可能會出現各種錯誤,包括輸出錯誤及什麼也不做,甚至使計算機崩潰。不管出現哪種情況,都必須傳回編輯階段,檢查并修改源代碼。1.2 建立第一個程式,本節先浏覽一下建立C語言程式的流程,從輸入代碼到執行程式的所有4個步驟。在這個階段,若不了解所鍵入的代碼資訊,别擔心,筆者會解釋每一個步驟。1.3 編輯第一個程式,我們可以修改程式,在螢幕上輸出其他資訊。例如可以将程式改成 include int mainvoid printf“If at first you dont succeed, try, try, try again “; return 0; 1.4 處理錯誤,犯錯乃人之常情,沒什麼難為情的。幸好計算機一般不會出錯,而且非常擅長于找出我們犯的錯誤。編譯器會列出在源代碼中找到的一組錯誤資訊甚至比我們想象的多,通常會指出有錯誤的語句。此時,我們必須傳回編輯階段,找出有錯誤的代碼并更正。 有時一個錯誤會使後面本來正确的語句也出現錯誤。這多半是程式的其他部分引用了錯誤語句定義的内容所造成的。當然,定義語句有錯,但被定義的内容不一定有錯 。,1.5 剖析一個簡單的程式,編寫并編譯了第一個程式後,下面是另一個非常類似的例子,了解各行代碼的作用 include int mainvoid printf“Beware the Ides Of March“; return 0; 。 注釋 預處理指令 定義main()函數 關鍵字函數體 輸出資訊 參數 控制符,1.5.1 注釋,上述示例的第一行代碼如下 這不是程式代碼,因為它沒有告訴電腦執行操作,它隻是一個注釋,告訴閱讀代碼的人,這個程式要做什麼。位于之間的任意文本都是注釋。隻要編譯器在源檔案中找到為止。放在同一行代碼上,也可以放在不同的代碼行上。1.5.2 與處理指令,下面的代碼行 include 嚴格說來,它不是可執行程式的一部分,但它很重要,事實上程式沒有它是不執行的。符号表示這是一個預處理指令preprocessing directive,告訴編譯器在編譯源代碼之前,要先執行一些操作。編譯器在編譯過程開始之前的預處理階段處理這些指令。預處理指令相當多,大多放于程式源檔案的開頭1.5.3 定義main()函數,函數是兩個括号之間執行某組操作的一段代碼。每個C程式都由一個或多個函數組成,每個C程式都必須有一個main函數因為每個程式總是從這個函數開始執行。是以假定建立、編譯、連結了一個名為progname.的檔案。執行它時,作業系統會調用這個程式的main函數。1.5.4 關鍵字,在C語言中,關鍵字是有特殊意義的字,是以在程式中不能将關鍵字用于其他目的。關鍵字也稱為保留字。在前面的例子裡,int就是一個關鍵字,void和return也是關鍵字。C語言有許多關鍵字,我們在學習C語言的過程中,将逐漸熟悉這些關鍵字。附錄C列出了完整的C語言關鍵字表。1.5.5 函數體1.5.6 輸出資訊,例子中的main函數體包含了個調用printf函數的語句 printf“Beware the Ides of March“; printf是個标準的庫函數,它将引号内的資訊輸出到螢幕上,在這個例子裡,調用這個函數會顯示引号内的一段警示語雙引号内的字元串稱為字元串字面量。注意這行代碼用分号作為結尾。1.5.7 參數,包含在函數名如上面語句中的printf函數後的圓括号内的項稱為參數,它指定要傳送給函數的資料。當傳送給函數的參數多于一個時,要用逗号分開。 在上面的例子中,函數的參數是雙引号内的文本字元串。如果不喜歡例子中引号内的文本,可以改用自己想輸出的句子。例如,使用馬克白Macbeth的一句話 printf“Out,damned Spot Out I say“; 修改源代碼後,必須再次編譯及連結程式,才可執行。1.5.8 控制符,反斜杠在字元串裡有特殊的意義,它表示轉義序列的開始。轉義序列可以在字元串中插入無法指定的字元,例如制表符及換行,或編譯器在某些情況下會混淆的字元,例如雙引号一般用于界定字元串。反斜杠後面的字元表示是哪種轉義序列。在這個例子裡,n表示換行。還有其他許多轉義序列。顯然,反斜杠是有特殊意義的,是以需要一種方式在字元串中指定反斜杠。為此,應使用兩個反斜杠。同樣,如果要輸出雙引号,就用“1.6 用C語言開發程式,如果讀者從未寫過程式,對C語言開發程式的過程就不會很清楚,但它和我們日常生活的許多事務是相同的,萬事開頭難。一般首先大緻确定要實作的目标,接着把該目标轉變成比較準确的規範。有了這個規範後,就可以制訂達到最終目标的一系列步驟了。就好比光知道要蓋房子是不夠的,還得知道需要蓋什麼樣的房子,它有多大,用什麼材料,要蓋在哪裡。這種詳細規劃也需要運用到編寫程式上 。 了解問題 詳細設計 實施 測試1.6.1 了解問題,第一步是弄清楚要做什麼。在不清楚應提供什麼設施多少間卧房、多少間浴室、各房間多大等等之前就開始建造房子,會有不知所措之感。所有這些都會影響建造房子所需的材料和工作量,進而影響整個房子的成本。一般來說,在滿足需求和完成項目的有限資金、人力及時間之間總會達成某種一緻。1.6.2 詳細設計,要建造房子,必須有詳細的計劃。這些計劃能讓建築勞工按圖施工,并較長的描述房子如何建造具體的尺寸、要使用的材料等。還需要确定何時完成什麼工作。例如,在砌牆之前須先挖地基,是以這個計劃必須把工作分為可管理的單元,以便執行起來井然有序。1.6.3 實施,有了房子的詳細設計,就可以開始工作了。每組建築勞工必須按照進度完成他們的工作。在下一階段開始前,必須先檢查每個階段是否正确完成。省略了這些檢查,将可能導緻整棟房子倒塌。 當然,假使程式很大,可以一次編寫部分。一個部分完成後,再寫下部分。每個部分都要基于詳細的設計規範,在進行下一個部分之前,應盡可能詳細地檢查每個部分的功能。這樣,程式就會逐漸完成預期的任務1.6.4 測試,房子完成了,還要進行許多測試排水裝置、水電設施、暖氣等。任何部分都有可能出問題,這些問題必須解決。這有時是一個反複的過程,一個地方的問題可能會造成其他地方出問題。1.7 函數及子產品化程式設計,到目前為止,“函數”這個詞已出現過好幾次了,如main、printf、函數體等。下面将深入研究函數是什麼,為什麼它們那麼重要。 大多數程式設計語言包含C語言都提供了一種方法,将程式切割成多個段,各段都可以獨立編寫。在C語言中,這些段稱為函數。一個函數的程式代碼與其他函數是互相隔絕的。函數與外界有一個特殊的接口,可将資訊傳進來,也可将函數産生的結果傳出去。這個接口在函數的第一行即在函數名的地方指定。1.8 常見錯誤,錯誤是生活中的一部分。用C語言編寫計算機程式時,必須用編譯器将源代碼轉換成機器碼,是以必須用非常嚴格的規則控制使用C語言的方式。漏掉一個該有的逗點,或添加不該有的分号,編譯器都不會将程式轉換成機器碼。 即使實踐了多年,程式中也很容易出現輸入錯誤。這些錯誤可能在編譯或連結程式時找出。但有些錯誤可能使程式執行時,表面上看起來正常,卻不定時地出錯,這就需要花很多時間來跟蹤錯誤了 。1.9 要點,1.10 小結,本章編寫了幾個C程式。我們學習了許多基礎知識,本章的重點是介紹一些基本概念,而不是詳細探讨C程式語言。現在讀者應該對編寫、編譯及連結程式很有信心了。也許讀者目前對如何建構C程式隻有模糊的概念。以後學了更多的C語言知識,編寫了一些程式後,就會清楚明白了 。