1. 程式人生 > >C語言程式設計 細節總結(1-7章)

C語言程式設計 細節總結(1-7章)

C語言細節總結

溫故而知新,許久沒看C語言,發現了一些從前沒注意的小細節,總結下來~

第1章C語言及C程式概述

1.C語言有34中運算子、32個關鍵字、9中控制語句

第2章資料型別、運算子與表示式

2.實型常量只採用十進位制,表示方法:十進位制小數形式、指數形式(aE±n) 3.實型常量不區分float和double型 4.轉義字元 \ddd : 1~3位8進位制數ddd所對應的字元;\xhh :1~2位16進位制數hh所對應的字元 5.長度為n的字串常量,在記憶體中佔用n+1個位元組 6.浮點數在計算機中以指數形式儲存,小數部分越多,精確度越高;指數部分位數越多,表示範圍越大。 7.單精度實數提供7位有效數字,雙精度實數提供15~16位有效數字 8.編譯器對邏輯表示式求解,只有在需要下一步計算才能確定表示式的值時,才進行下一步邏輯運算。 9.移位運算不改變原運算元的值,複合移位賦值運算改變。 10.按位右移運算>>,無符號數高位補0,有符號數正數補0,負數補1. 11.逗號表示式具有從左到右結合性,最後一個表示式的值是整個逗號表示式的值,逗號表示式優先順序最低。 12.取模:餘數的符號與被除數相同(-8%3=-2,15%-8=7)。 13.printf(“%d”,9.2/1.61.6==9.2); 結果為0,原因:9.2/1.6所得值有效位數有限。 14.i=8; printf(“%d %d”,j=i+2,–i); //9,7 Printf(“%d %d”,j=i+2,i,i–); //9,7,8 原因:VC6.0中printf語句執行順序為從右至左。 15.x=2; printf(“%d”,++x * ++x); //4

4=16 16.如果程式中不使用中間變數temp,可使用複合語句實現兩數交換:{a=a+b;b=a-b;a=a-b;}

第3章演算法、輸入輸出函式、順序結構

17.常用的輸入函式:scanf、getchar、gets ; 常用的輸出函式:printf、putchar、puts。 18.scanf格式:scanf(“格式字串”,輸入項地址表); (1)如果兩格式說明符之間不指定資料分隔符,則輸入時空格、Tab、Enter均可 如果指定或格式字串內有任何普通字元,必須原樣輸入 (2)如果指定輸入資料寬度,系統自動擷取 如scanf(“%2d%2d”,&a,&b);//輸入1234,則a=12,b=34; (3)輸入實型資料,不能規定小數點後位數 19.printf格式: printf(“格式字串”[,輸出列表]); 格式說明符:%[標誌][最小寬度][.精度][長度][格式字元] (1)標誌: - : 結果左對齊,右面填空格 + : 正數輸出(+),負數輸出(-) # : 八進位制和十六進位制數顯示前導0和0x 空格: 正數輸出空格代替加號,負數輸出減號 (2)最小寬度:指定超過實際寬度,補空格;指定不超過或不指定,按實際輸出。 (3)精度: 實數:小數點後最多輸出位數,不足補0,多出部分四捨五入 整數:最少輸出位數,不足補0,多出按實際 字串:最多輸出位數,不足補空格,多出丟棄 (4)長度:h、l

20.將整數用字元形式輸出時,系統先求該整數對256的餘數,將餘數作為ASCII碼值,轉換成相應字元後再輸出。

第4章選擇結構

21.條件運算子結合方向是從右向左 22.Switch case語句: (1)case語句後面只能是常量表達式; (2)應在case分支後加break,否則會順序執行後面的case;

第5章迴圈結構

第6章陣列

23.C語言不允許動態定義陣列,陣列長度必須在定義時確定。 24.陣列全部初始化為0可以這樣寫:int a[5]={0}; 25.氣泡排序思想:比較相鄰兩個元素,n個數要進行n-1趟比較,第i趟比較中要進行n-i次兩兩比較。 26.選擇排序思想:依次選擇第i個元素分別與其後元素作比較,n個數要進行n-1躺比較,第i趟比較中要進行n-(i+1)次兩兩比較。 27.二維陣列,如果對全部元素初始化,第一維長度可以不指定,但必須指定第二維長度。 28.字元陣列初始化:char a[]={‘C’,’h’,’i’,’n’,’a’};//陣列長度為5,包含5個字元 char a[]=”China”;//陣列長度為6,包含5個字元和字串結束標誌’\0’ 29.字串處理函式: (1)gets(); gets函式只以回車為輸入結束標誌,而scanf函式回車和空格都為結束標誌。 (2)puts(); (3)strlen(); (4)strcpy(字串1,字串2); 將字串2拷貝至字串1,包括結束符’\0’ 字元陣列中不能用賦值語句,如 char str1[10],str2[]=”China”; str1=str2;//非法 str1=”China”;//非法 strcpy(str1,str2);//合法 (5)strcat(); (6)strcmp(); 兩字串不能直接比較,只能使用函式 (7)strlwr(); strupr(); 30.M*N的二維字元陣列可存放M個字串,每個字串最大長度為N-1(一個位置放’\0’)

第7章函式

31.實參傳遞給形參值得方式:值傳遞、地址傳遞(實參和形參必須是地址常量或變數,如陣列名) 32.如果定義的函式值的返回型別和return表示式值不一致,以定義的函式返回型別為準 33.使用者使用的記憶體區:程式儲存區、靜態儲存區、動態儲存區 34.變數儲存類別: (1)auto(自動型):可不加auto,函式和複合語句中使用,儲存空間自動分配和釋放 (2)static(靜態型):靜態區域性變數-程式執行期間不釋放;靜態全域性變數-只限於本檔案中的函式引用 (3)register(暫存器型):使用頻率較高的資料放在暫存器中,優化的編譯系統完成,不需要程式設計者制定 (4)extern(外部型):全域性變數作用域從變數定義處到程式結束,如果在全域性變數定義位置之前引用,應該用extern宣告;可以將在另一個檔案中定義的全域性變數作用域擴充套件到本檔案。 35.外部函式extern,內部函式static,預設函式為外部函式,同時在需要呼叫該外部函式的檔案中用extern對函式宣告。