c是強大而簡潔的程式語言。它之所以流行,在於自身提供大量的實用的程式設計工具,能很好的控制硬體。而且與大多數程式相比,c語言更容易從乙個系統移植到另乙個系統。
c是是編譯型語言。c編譯器和鏈結器是把c語言源**轉換成可執行**的程式。
c程式是由乙個或多個c函式組成。每個c程式必須包含乙個main()函式,這是c程式要呼叫的第乙個函式。簡單的函式由函式頭和後面的一對花括號組成,花括號中是宣告、語句組成的函式體。
在c語言中,大部分語句都以分號結尾。宣告語句為變數指定變數名,並標識該變數中儲存的資料型別。變數名是一種識別符號。賦值表示式語句把值賦給變數,或者更一般地說,把值賦給儲存空間。函式表示式語句用於呼叫指定的已命名函式。呼叫函式執行完畢後,程式會返回到函式呼叫後面的語句繼續執行。
printf()函式用於輸出想要表達的內容和變數的值。
一門語言的語法是一套規則,用於管理語言中各有效語句組合在一起的方式。語句的語義是語句要表達的意識。編譯器可以檢測出語法錯誤,但是程式裡的語義錯誤只有在編譯完成之後才能從程式的行為中表現出來。檢查程式是否有語義錯誤要跟蹤程式的狀態,即檢查程式執行一步後所有變數的值。
c有多種資料型別。基本資料型別分為兩大類:整數型別和浮點數型別。通過為型別分配的儲存量以及是有符號還是無符號,區分不同的整數型別。最小的整數型別是char,因實現不同,可以使有符號的char或者無符號的char,即u nsigned char或signed char。但是,通常用char型別表示小整數時才這樣說明。其他整數型別有short、 int、 long和long long型別。c規定,後面的型別不能小於前面的型別。上述都是有符號的型別,但也可以使用unsigned關鍵字來建立相應的無符號型別: unsigned short、 unsigned int、 unsigned long和 unsigned long long。或者,在型別名前加上signed修飾符來顯示表明該型別是具有符號型別的。最後,_bool型別是一種無符號型別,可以儲存或,分別代表false和true。
浮點型別有3種:float、double和c90新增的long double。後面的型別應大於或等於前面的型別。有些事項可選擇支援複數型別和虛數型別,通過關鍵之_complex和_imaginary與對應的浮點型別關鍵字組合(如,double _complex型別和float _imaginary型別)來表示這些型別。
整數可以表示為十進位制、八進位制、或十六進製制。0字首表示八進位制數,0x或0x字首表示十六進製制數。例如、32、040、0x20分別表示為十進位制,八進位制,十六進製制表示同乙個值。l或l字尾表示該值是long型別,ll或ll字尾表明該值是long long型別。
在c語言中,直接表示乙個字元常量的方法是:把該字元用單引號括起來,如『q』、『8』和『$'。c語言的轉義序列(如,『\n』)表示某些非列印字元。另外,還可以在八進位制或十六進製制前加上乙個反斜槓(如,『\007』),表示ascii碼中的乙個字元。
浮點數可以寫成固定小數點的形式(如,9393.912)或指數形式(如,7.38e10)。c99和c11提供了第三種指數表示法,即用十六進製制和2的冪來表示(如,0xa.1fp10)。
printf()函式根據轉換說明列印各種型別的值。轉換說明最簡單的形式由乙個百分號%和乙個轉換字元組成,如%d或%f。
字串是一系列被視為乙個處理單元的字元。在c語言中,字串是以空字元(ascii碼是0)結尾的一系列字元。可以把字串儲存在字元陣列中。陣列是一系列同型別的項或元素。下面宣告了乙個命名為name、有30個char型別元素的陣列:
char name[30];
要確保有足夠多的元素來儲存整個字串(包括空字元)。
字串常量是用雙引號括起來的字串行,如:「this is an example of a string」。
strlen()函式(宣告在string.h標頭檔案中)可用於獲得字串的長度(末尾的空字元不計算在內)。scanf()函式中的轉換說明是%s時,可讀取乙個單詞。
c預處理器為預處理器指令(以#符號開始)查詢源**程式,並在開始編譯程式之前處理它們。處理器根據#include指令把另乙個檔案中的內容新增到該指令所在的位置。#define指令可以建立明示變數(符號變數),即代表常量的符號。limits.h和float.h的標頭檔案用#define定義了一組表示整型和浮點型不同屬性的符號常量。另外,還可以使用const限定符建立定義後就不能修改的變數。
printf()和scanf()函式對輸入和輸出提供多種支援。兩個函式都使格式字串,其中包含的轉換說明表明待讀取或待列印資料項的數量和型別。另外,可以使用轉換說明控制輸出的外觀:字段寬度、小數字和字段內的布局。
c語言有許多運算子。一般而言,運算子需要乙個或多個運算物件才能完成運算生成乙個值。只需要乙個運算物件的運算子(如負號和sizeof)稱為一元運算子,需要兩個運算物件的運算子(如加法運算符合乘法運算子)稱為二元運算子。
表示式由運算子和運算物件組成。c語言中,每個表示式都有乙個值,包括賦值表示式和比較表示式。運算子優先順序規則決定了表示式中各項的表示式中的求值順序。當兩個運算子共享乙個運算物件時,先進行優先順序高的運算。如果運算子的優先順序相等,由結合律(從左往右或從右往左)決定求值順序。
大部分語句都以分號結尾。常用的語句是表示式語句。用花括號起來的一條或多條語句構成了復合語句(或稱為塊)。while語句是一種迭代語句只要測試為真,就重複執行迴圈體中的語句。
在c語言中,許多態別轉換都是自動進行的。當char和short型別出現在表示式裡或作為函式的引數(函式原型除外)時,都會被公升級為int型別;float型別在函式引數中時,會被公升級為double型別。在k&r c(不是ansi c)下,表示式中的float也會被公升級double型別。當把一種型別的值賦給另一種型別的變數時,值將被轉換成與變數的型別相同。當把較大型別轉換為較小型別(如,long轉換成short,或double 轉換成float),可能會丟失資料。
定義帶乙個引數的函式時,便在函式定義中宣告了乙個變數,或稱為形式引數。然後,在函式呼叫中傳入的值被賦給這個變數。這樣,在函式中就可以使用該值了。
c語言為實現結構化的程式提供了許多任務具。while語句和for語句提供了入口條件迴圈,for語句特別適用於需要初始化和更新的迴圈。使用逗號運算子可以在for迴圈中初始化和更新多個變數。有些場合也需要使用出口條件迴圈,c為此提供了do while語句。
典型的while迴圈設計的偽**如下:
獲得初值
while (值滿足測試條件)
for迴圈也可以完成相同的任務
for(獲得初值; 值滿足測試條件; 獲得下乙個值)
處理該值
這些迴圈都使用測試條件來判斷是否繼續執行下一次迭代。一般而言,如果對於測試表示式求值為非0,則繼續執行迴圈;否者,結束迴圈。通常,測試條件都是關係表示式(由關係運算符合表示式構成)。表示式的關係為真,則表示式的值為1;如果關係為假,則表示式的值為0.c99新增了_bool型別,該型別只能儲存1或0,分別表示真或假。
除了關係運算子,我們還有其他組合的賦值運算子如+=或*=。這些運算子通過對其左側運算子物件執行算術運算子來修個它的值。
接下來還簡單地介紹了陣列。宣告陣列時,方括號中的值指明了該陣列的元素個數。陣列的第乙個元素編號為0,第二個元素編號為1,以此類推。例如,一下宣告:
double hippos[20];
建立了乙個有20個元素的陣列hippos,其元素從hippos[0]~hippos[19]。利用迴圈可以很方便的運算元組下標。
c 的開篇(自學 c 語言)
因為想要成為高階phper,所以開始認真學習c語言,我看的書名為 c k r.pdf。這系列文章將作為讀書筆記及心得不定時的發布到部落格上。the first c program 這是攝氏與華氏溫度轉換的公式 c 5 9 f 32 1 引入庫檔案 2 include 3 include 4 入口函式...
C語言自學之路
作用域 程式中可以訪問乙個識別符號的乙個或多個區域。它可以是1 塊作用域 2 函式原型作用域 3 檔案作用域。ps 另外還有一種被稱為函式作用域的作用域,但它只適用於goto語句使用的標籤。函式作用域意味著乙個特定函式中的goto標籤對該函式中任何地方的 都是可見的,無論該標籤出現在哪乙個 塊中。不...
自學C語言 函式
函式是c程式設計的核心,也是c程式設計的哲學。通過前幾課的學習,你已經了解了c語言的 庫函式是由編譯器提供的完整函式。本課將介紹使用者自定義函式,顧名思義,這是由你一一程式設計師定義的函式。本課將介紹以下內容 函式是 c程式設計的核心,也是 c程式設計的哲學。通過前幾課的學習,你已經了解了 c語言的...