C語言基礎知識總結

算法結構:一、順序結構、選擇結構、循環結構;二、循環結構又分爲while型、until型、for循環結構;程序流程圖;

結構化程序設計方法:(1)自頂向下;(2)逐步細化;(3)模塊化設計;(4)結構化編碼。

數據類型:

常量:常量包括字面常量、直接常量和符號常量;

變量:C語言規定標誌符只能由字母、數字和下劃線三種字符組成,且第一個字符必須是字母或者下劃線;必須壓迫先定義後使用;每一個變量被定義以確定類型後,在編譯時就能爲其分配相應的存儲單元;

整數類型:整數常量有十進制、八進制和十六進制;“%d

整形變量:數據在內存中存放形式是以二進制形式存放;有int型、short int型和long int型,無符號整型變量的範圍是-3276832767,有符號型爲0~65535.通常把long定義爲32位,把short定義爲16位,int可以是32位也可以爲16位,這都主要取決於機器字長。

實型數據

實型常量的表示方法:(1)十進制,0.0;(2)指數形式,123e3

實型變量:實數型數據在內存中的存放形式,一般在內存中佔4個字節,分成整數部分和小數部分存放。實型變量分爲float型、doublelong double型。實型數據會存在舍入誤差。

實型常量的類型:C編譯系統將實型常量作爲雙精度來處理。

字符型數組:(一)字符常量:轉義字符(\n——換行,\t——tab,\r——回車,\f——換頁,\b——退格,\ddd——138進制的數代表的字符)

           (二)字符變量:字符數據存儲形式實際是以ASCII碼存儲。“%c

字符串常量:雙撇號括起來的一系列字符序列。

 

C的運算符有以下幾種:1、算術運算符(+ - * /  %)結合方向自左向右

                      2、關係運算符(> < == >= <= !=

3、邏輯運算符(! && ||)

4、位運算符(<< >> ~ | ^ &)

5、賦值運算符(=及符號擴展賦值運算符)

6、條件運算符(? : )

7、逗號運算符( , )

8、指針運算符(* &

9、求字節運算符(sizeof

10、強制類型轉換運算符((類型))

11、分量運算符( . ->)

12、下標運算符([])

13、其他

控制語句:完成一定的控制功能。1if()~else~

2for()~

3while()~

4do~while()

5continue

6break

7switch

8goto

9return

字符數據的輸入輸出:1putchar()輸入字符變量

2getchar()只能接受一個字符

格式輸入輸出:1printf%d—整型,%c—字符型,%ld%md%o%u%s%-m.nf%e%g

              2scanf(格式控制,地址列表)

數組

一維數組的定義:類型說明符 數組名【常量表達式】;先定義後引用;一維數組初始化時可以只對一部分元素初始化,在對全部數組元素初始化的時候可以部規定長度;但是若被定義的數組長度與提供的初始值不一樣時,則數組長度不能省略。

二維數組的定義:類型說明符 數組名【常量表達式】【常量表達式】C語言中存放二維數組是先存放第一行的元素,緊接着是第二行,其實也是以一維的方式存放。如果初始化時能指定所有元素的初始值,第一維大小可以省略,但是第二維不能省略。

字符數組:定義和初始化跟數組差不多,只是需要加單引號。字符和字符串結束標誌,C語言規定,以‘\0’代表。

字符串處理函數:1puts()將一個字符串輸出到終端

2gets()從終端輸入一個字符串到字符數組,並且得到一個函數值。

3strcat()鏈接兩個字符數組中的字符串。

4strcpy()字符串複製函數。

5strcmp()比較字符串作用。

6strlen()測試字符串長度的函數不包括“\0

7strlwr()將字符串中的大寫字母轉換爲小寫字母。

8strupr()將字符串中的小寫字母轉換爲大寫字母。

 

函數

(1)       一個源程序由多個函數組成。

(2)       C程序的執行從main()函數開始;

(3)       所有函數都是平行的;

(4)       函數分類;可以分爲標準和自定義,還可以分爲有參函數和無參函數。

函數定義的一般形式:(1)類型標誌符  函數名()

{

聲明部分

語句

}

2)類型標誌符  函數名(形式參數列表)

    {聲明部分

     語句

}

函數參數和函數值:一、關於形參和實參的說明

(1)    在定義函數中指定的形參,在未出現函數調用時,他們並不佔用內存中的存儲單元,只有發生調用時,纔會分配內存。

(2)    實參可以是常量、變量或者表達式;有時傳遞的時地址;

(3)    在被定義中,形參必須指定類型;

(4)    實參與形參的類型應相同或賦值兼容;

(5)    C語言規定,實參變量對形參變量的數據傳遞是“值傳遞”,即單向傳遞,只有實參傳遞給形參,而不能由形參傳遞給實參。

函數的返回值:希望通過函數調用使主調函數得到一個確定的值。(1)函數的返回值是通過函數中的return語句獲取的。(2)函數值的類型;(3)如果函數值的類型和return語句中表達式的值不一樣,則以函數類型爲準。(4)如果調用函數中沒有return語句,並不帶回一個確定的用戶需要的值,函數不是不帶回值,而只是不帶回有用的值,帶回一個不確定的值。(5)如不需要帶回任何值,用void

函數的調用:調用方式1、函數語句;2、函數表達式;3、函數參數。

被調用的函數的聲明:一個函數調用另一個函數所具備的條件:

1、  首先被調用的函數必須是已經存在的函數;

2、  如果使用庫函數,一般應該在本文件開頭用#include命令將調用有關庫函數時在所需要用到的信息“包含”到本文件中。.h文件是頭文件所用的後綴。

3、  如果使用用戶自己定義的函數,而且該函數與使用它的函數在同一個文件中,一般還應該在主調函數中對被調用的函數做聲明。

4、  如果被調用的函數定義出現在主調函數之前可以不必聲明。

5、  如果已在所有函數定義之前,在函數的外部已做了函數聲明,則在各個主調函數中不必多所調用的函數在做聲明。

局部變量和全局變量:(一)局部變量在一個函數內部定義的變量是內部變量,它只是在本函數範圍內的有效,主函數也不能使用其它函數中定義的變量;不同函數中可以使用相同的名字的變量,他們代表不同的對象,互不干擾;形式參數也是局部變量;在一個函數內部,可以在複合語句中定義變量,這些變量只在本複合語句中有效,這種複合句也可以稱爲“分程序”或“程序塊”;(二)全局變量,在函數之外定義的變量稱爲外部變量,全局變量可以增加函數間數據聯繫的渠道,一般不再必要時不要使用,他在程序的全部執行過程中佔用存儲單元,是函數的通用性,使用全局變量會使程序的清晰性降低。還要注意若果同一源文件中,外部變量和局部變量同名,則在局部變量作用範圍內,外部變量被“屏蔽”,不起任何作用。

變量的存儲類別:(變量值存儲時間)動態存儲方式,在程序運行期間進行分動態的分配存儲空間的方式,靜態存儲方式是指在程序運行期間分配固定的存儲空間的方式;存儲空間分爲程序區、靜態存儲區和動態存儲區;全局變量全部放在靜態存儲區中,程序開始時分配空間,完畢時釋放;動態存儲區中存放以下數據:1、函數形式參數;2、自動變量;3、函數調用時的現場保護和返回地址;在C語言中每個變量和函數都有兩個屬性,是數據類型和數據存儲類型,存儲類別是數據在內存中存儲的方式。

存儲方式分爲靜態和動態存儲類,具體包含有四種:自動的(auto),靜態的(static),寄存器的(register),外部的(extern),如果不加以聲明,就自認爲是auto型就會自動分配存儲空間屬於動態存儲方式。Static聲明局部變量是在函數調用結束後不消失而保留原值,即佔用存儲單元不釋放,在下一次調用該函數時,該變量已有值,就是上次函數調用結束時的值。其中需要說明的是在定義局部變量不賦初值的話,則靜態局部變量編譯時自動賦值爲0或者空字符,雖然靜態局部變量在函數調用結束後仍然存在,但是其他函數不能引用它的。靜態局部變量主要用在當初始化後,變量只是被引用而不改變其值。Register變量是C語言中允許將局部變量的值放在CPU中的寄存器中需要時直接從寄存器中取出來參加運算,不必再到內存中提取,但是計算機系統中寄存器數量有限,不能任意定義任意多的存儲器,局部靜態變量不能定義爲寄存器變量。Extern聲明外部變量,用以擴展外部變量的作用域。在一個文件中,如果定義之前的函數想引用該外部變量,則應該在引用之前用關鍵字extern對該變量做外部變量聲明。在多文件中,也可以採用extern聲明的辦法進行外部變量聲明。有時希望某些局部變量只限於被本文件引用,而不能被其他文件引用,這時就可以採用在定義外部變量時外加一個static,這在程序模塊化設計中加強了通用性。Static來聲明一個變量的作用有二個,一個是在聲明對局部變量時。則爲該變量分配的空間在整個程序執行期間始終存在;一個是在對全局變量聲明中,該變量的作用域僅限於本文件模塊操作。注意:這些方法同樣適用於函數的聲明

 

C語言中預處理

C語言中提供的預處理功能主要有三種:1、宏定義;2、文件包含;3、文件編譯。

宏定義:(一)不帶參數的宏定義,#define 標誌符 字符串, 標誌符稱爲“宏名”,在與編譯時將宏名替換成字符串的過程中稱爲“宏展開”。宏名一般大寫字母,用宏名代替一字符串,但是不做錯誤檢查;宏定義不必加分號;它的生命週期到源程序結束;對程序中使用雙撇號括起來的字符串的字符,及時與宏名相同,也不進行置換。(二)帶參數的宏定義,#define  宏名(參數表)字符串,這裏要與函數區別開來,其中的區別可參見譚浩強《C程序設計第二版》P191,宏替換不佔用運行時間,只佔編譯時間。

文件包含處理:是指一個源文件可以將另外一個源文件的全部內容包含進來,在編譯時並不是作兩個文件進行連接的,而是作爲一個源程序編譯時,得到一個目標文件(.obj),因此被包含的文件也應該是源文件而不是目標文件。被包含的文件通常是標題文件或者頭文件,在include命令中,文件可以用雙撇號或尖括號括起來,二者的區別是用尖括號時,系統到存放C庫函數頭文件所在的目錄中尋找要包含的文件,稱爲標準方式,用雙撇號時,系統現在用戶當前所在的目錄中尋找要包含的文件,若找不到,再按標準方式查找。

條件編譯:一般情況下,源程序中所有的行都參加編譯。但是有時希望對其中的一部分內容只有在滿足條件下編譯,也就是對一部分內容指定編譯條件。

1#ifdef  標誌符

       程序段 1

     #else

       程序段2

     #endif

2ifdef   標誌符

   程序段1

#endif

其中的程序段可以是語句組也可以是命令行。這種條件編譯對於提高C源程序的通用性是很有好處的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章