由一個函數調用加一個分號構成 例如:printf("haha");
由一個表達式加一個分號構成(比如賦值語句)
只有一個分號
用{}把一些語句和聲明括起來成為復合語句(又稱語句塊)
1.if(表達式) 語句; 2.if(表達式) 語句1; else 語句2; 3. if(表達式1)語句1; else if(表達式2)語句2; else if(表達式3)語句3; … else 語句n; 4.條件運算符 (a>b)?a:b; 說明:條件為真,表達式取值a,否則取值b 5.switch() case:
for(; ; ){ } while語句 先判斷表達式後執行. do-while語句 先執行語句後判斷表達式. goto語句 實現程序跳轉(盡量少使用).
1.一組有序數據的集合 2.每一個元素都屬於同一個數據類型
定義的形式:類型符 數組名[常量表達式] (不能動態定義) 引用形式:數組名[下標] 初始化: 1.定義時全部賦值 例如:int a[3]={1,23,4}; 2.定義時部分元素賦值 例如:int b[12]={1,2,33,4}; 3.個數已定可以不指定長度 例如:int c[]={1,2,34,5}; 例子: #includeint main(){ int i; int f[20]={1,1}; for(i=2;i<20;i++) f[i]=f[i-2]+f[i-2]; for(i=0;i<20;i++) { if(i%5==0) printf("\n"); printf("%12d",f[i]); } printf("\n"); return 0; }
定義: 類型說明符 數組名[常量表達式][常量表達式] 引用:數組名[下標][下標] 初始化: 1.分行給二維數組賦值(裡面的括號代表行值) int a[3][4]={{1,2,3,4},{2,3,4,5},{2,3,4,5}}; 2.所有的數據都寫在一個花括號內 int a[3][4]={1,2,3,4,2,3,4,5,2,3,4,5}; 3.對部分元素進行賦值 int a[3][4]={{1},{5},{8}}; 4.一維長度不指定,二維長度不能省 int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
初始化:char c[10]={'I','','a','m','','h','a','p','p','y'}; C系統用在字符數組存儲字符串常量時,會自動加一個\n作為結束符
輸入和輸出:
1.逐個字符輸入和輸出格式符 “%c”
2.將整個字符串一次性輸入用”%s”
在C語言中,函數是來完成子程序或者某個模塊的功能。有主程序或者其他函數調用,其他函數之間可以相互調用。 同一函數可以被一個或多個函數任意次調用。 注意: a、一個C程序有一個或多個程序模塊組成,每一個程序模塊作為一個源程序文件。一個源文件可以為多個C程序共用。 b、程序在編譯時是以源文件為單位進行編譯,而不是以函數為單位進行編譯。一個源文件就是一個編譯單元 c、C程序的執行是從main函數開始,也是在main函數中結束整個程序 d、所有函數是平行的,即在定義函數時是分別進行的,是互相獨立的。一個函數並不從屬於另一個函數,即函數不能嵌套定義。 函數之間可以相互調用,但不能調用main函數。main函數是系統調用的。 e、從用戶使用角度看,函數分為兩種: (1)標准函數。標准函數即函數庫,它由系統提供。不同的C語言編譯系統提供的標准函數的數量和功能或有不同,但是基本函數是一樣的。 (2)用戶自定義函數。 f、從函數形式看,函數分為兩種: (1)有參函數。 (2)無參函數。在調用函數時,主調函數通過參數向被調函數傳遞數據
定義無參函數的一般形式: 類型表示符 函數名() { 聲明部分 語句部分 } 2、函數的定義
定義無參函數的一般形式: 類型表示符 函數名() { 聲明部分 語句部分 }
} 空函數就是沒有函數體的函數,如: void test(){ ... }
定義函數時指定的參數稱為“形參”,調用函數時傳遞的參數稱為“實參”。 a、在定義函數中指定的形參,在未出現函數調用時,它們並不占內存中的存儲單元。只有在發生函數調用時,函數中的形參才被分配內存單元。 在調用結束後,形參所占用的內存單元也被釋放。 b、實參可以是常量、變量或表達式,如:max(3, a+b); c、在被定義的函數中,必須指定形參的類型 d、實參和形參的類型應相同或賦值兼容。 e、在C語言中,實參向形參數據傳遞是“值傳遞”,單向傳遞,只由實參傳遞給形參,而形參不能傳遞給實參。在內存中形參和實參是不同的內存單元。 因此,改變形參的值不會影響實參的值。
通常,希望通過函數調用是主調函數能得到一個確定的值,這就是函數的返回值。 a、函數的返回值是通過函數中的return語句獲得的。return語句將被調用函數中的一個確定值帶回主調函數中去。如果需要從被調用函數帶回一個函數值, 被調函數中必須包含return語句。如果不需要從被調函數帶回函數值可以不需要return語句。一個函數可以有多個return語句,執行到哪個return語句, 哪個語句就起作用。 b、函數值的類型。既然函數有返回值,這個值當然應屬於某一個確定的類型,應當在定義函數時指定函數值的類型。C語言中,凡是不加類型說明的函數, 自動按整型處理。在Turbo C 2.0中不寫返回類型可以通過,Turbo C++ 3.0編譯時不能通過。所以建議讀者在定義時對所有函數都指定函數類型。 c、在定義函數是指定的類型應該與return返回類型一致。如果函數值的類型和return語句中表達式值類型不一致,則按照函數類型為准。 d、對於不帶回值的函數,應當用“void”定義函數為“無類型”或稱“空類型”。此時函數體中不得出現return語句。
函數調用的一般形式為:函數名(實參列表);如: 代碼如下: int a = max(2, 4); 按函數在程序中出現的位置來分,可以有以下3種函數調用方式: a、函數語句。把函數調用作為一個語句。此時不許要函數返回值。如: show(); b、函數表達式。函數出現在一個表達式中,這種表達式稱為函數表達式,需要函數返回一個確定的值。如:a = 2*max(a, b); c、函數參數。函數調用作為一個函數的參數。如:m = max(a, max(b, c));
在一個函數中調用另一個函數需要具備以下條件: a、被調函數必須是已經存在的函數 b、如果使用函數庫,還應該在文本文件開頭用#include命令將調用有關庫函數時所需用到的信息“包含”到本文件中來。如:#include其中“stdio.h”是一個“頭文件”。在stdio.h文件中包含了輸入輸出庫函數所用到的一些宏定義信息。如果不包含stdio.h文件的信息, 就無法使用輸入輸出庫中的函數。 c、如果使用用戶自己定義的函數,而該函數的位置在調用它的函數的後面(在同一個文件中),應該在主調函數中對被調用的函數進行聲明。如:
a局部變量 在一個函數內部定義的變量是內部變量,它只能在函數范圍內才有效,也就是說只在本函數內才能使用它們,在此函數外部不能使用這些變量。如: 注意: 1)主函數中定義的變量(m、n)也只在主函數中有效,而不因為在主函數中定義而在整個文件或程序中有效。主函數也不能使用其他函數中定義的變量。 2)不同函數中可以使用相同名字的變量,它們代表不同的對象,互不干擾。 3)形式參數也是局部變量。
b全局變量 在函數外部定義的變量就是全局變量。全局變量可以為本文件中其他函數所共用。它的有效范圍為從定義變量的位置開始到本源文件結束。如: 注意: (1)全局變量是函數之間交換數據的一個渠道。一般第一個字母大寫 (2)建議不再必要時不要使用全局變量。原因如下:全局變量在程序的全部過程中都占用存儲單元、使函數的通用性降低,因為依賴外部變量、使 用過多全局變量會降低程序的清晰性 (3)如果全局變量和局部變量同名,則局部變量優先
從變量存在的生命周期來看,變量可以分為:靜態存儲方式和動態存儲方式。所謂靜態存儲方式是指在程序運行期間由系統分配固定的存儲空間的方式。 而動態存儲方式是在程序運行期間根據需要進行動態的分配存儲空間的方式。 內存中的供用戶使用的存儲空間的情況。存儲空間分為三部分: (1)程序區 (2)靜態存儲區。(存放:全局變量)內存空間在程序開始時給全局變量賦值、分配空間,一直保存到程序運行結束才釋放, (3)動態存儲區。(存放:函數形參、自動變量、函數調用時的現場保護和返回地址等)調用時才分配空間,調用結束就釋放空間。 在C語言中,每個變量和函數有兩個屬性:數據類型和數據的存儲類別。 存儲類別分為量大方式: 1)、靜態存儲類別 2)、動態存儲類別 具體包含4種:自動的(auto)、靜態的(static)、寄存器(register)、外部的(extern) a、auto b、static c、register d、extern
a、內部函數 如果一個函數只能被本文件中其他函數調用,則稱為“內部函數”。在定義內部函數時,在函數名和函數類型前面加上static。語法如下: b、外部函數。 在定義函數時,如果在函數首部的最左端加關鍵字extern,則表示此函數是外部函數,可以供其他文件調用。如: