1. 程式人生 > >C語言基礎知識(期末嘍)

C語言基礎知識(期末嘍)

演算法結構:一、順序結構、選擇結構、迴圈結構;二、迴圈結構又分為while型、until型、for迴圈結構;程式流程圖;

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

資料型別:

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

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

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

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

實型資料

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

實型變數:實數型資料在記憶體中的存放形式,一般在記憶體中佔4個位元組,分成整數部分和小數部分存放。實型變數分為float型、double型long double型。實型資料會存在舍入誤差。

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

字元型陣列

(一)字元常量:轉義字元( ——換行, ——tab, ——回車, ——換頁,——退格,ddd——1到3位8進位制的數代表的字元)

(二)字元變數:字元資料儲存形式實際是以ASCII碼儲存。“%c”

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

C的運算子有以下幾種

1、算術運算子(+ - * /%)結合方向自左向右

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

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

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

5、賦值運算子(=及符號擴充套件賦值運算子)

6、條件運算子(? : )

7、逗號運算子( , )

8、指標運算子(* &)

9、求位元組運算子(sizeof)

10、強制型別轉換運算子((型別))

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

12、下標運算子([])

13、其他

控制語句:完成一定的控制功能。

1、if()~else~

2、for()~

3、while()~

4、do~while()

5、continue

6、break

7、switch

8、goto

9、return

字元資料的輸入輸出

1、putchar()輸入字元變數

2、getchar()只能接受一個字元

格式輸入輸出

1、printf(%d—整型,%c—字元型,%ld,%md,%o,%u,%s,%-m.nf,%e,%g)

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

陣列

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

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

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

字串處理函式

1、puts()將一個字串輸出到終端

2、gets()從終端輸入一個字串到字元陣列,並且得到一個函式值。

3、strcat()連結兩個字元陣列中的字串。

4、strcpy()字串複製函式。

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

6、strlen()測試字串長度的函式不包括“”

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

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

函式

(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

(2)ifdef標誌符

程式段1

#endif

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