C程序基礎
1. 標識符
在程序中使用的變量名、函數名、數組名、指針名、標號等稱為標識符.
標識符分類
a) 關鍵字
原先的C89標準中只有32個關鍵字然後在1999年之後進行了兩次技術修正,新出臺了C99標準新增加了5個關鍵字 分別是:restrict, inline, _Complex, _Imaginary, _Bool
b) 預定義標識符
包括C語言提供的庫函數、預編譯處理命令。這類標識符可以另做他用,但將會失去原意,所以一般不另他用。
c) 用戶標識符
根據需要定義的標識符。一般用來給變量、函數、數組、文件等命名。
用戶標誌符如果與C語言的關鍵字重名,系統報錯;若與標準庫函數重名,系統不報錯,但預定義標識符將會失去原意,代之以用戶新定義的含義。顯然如果後面用到這個函數將會報錯。
標識符注意事項:
1. 不能使用關鍵字作為用戶標誌符
2. 只能用數字,下劃線,字母組合(數字不能做開頭)
3. 標識符最好有含義
4. 大小寫代表的意義不同
5. 儘量不要與某個庫函數相同,如果相同這個庫函數將失去作用
2. 數據類型
數據類型分類
a) 基本數據類型
整型
三種形式:十進位、八進位、十六進位
八進位數據前面加0
十六進位數據前面加0X或0x
實型
小數形式:數值加小數點,必須要有小數點. 如24.或24.0
指數形式:e或E後跟一個整數表示10的冪數,e或E之前必須有非0數字. 如.45e4或4.e4
float變量的有效數字是6-7位,超過7位以後都是無效數字double變量的有效數字是15-16,超過16位以後都是無效數字 例如:
float apple = 0.4; 100*0.4=40.000000
而100*apple=40.000001(以%f輸出)因為0.4被強制轉化為double,所以正確,而100*apple的結果中整數已經佔了2位,故後面的01是無效的,但是比較大小時40.000001>40.000000, 而不是相等.
字符型
字符常量只能用單引號括起來
字符常量是用ASCII碼表示,在比較字符時就是將字符轉換為對應的ASCII值進行比較,在if語句中字符型數據就是對應的ASCII值
字符常量可以是字符集中的任意字符,數字被定義後就原數字不能參與運算。如』5』與5不同
字符常量通常佔一個字節內存,而字符串常量所佔內存等於字符串常量加1。因為字符串的結束標誌存放一個字符『\0』.
b) 構造數據類型
c) 指針數據類型
d) 空數據類型
數據類型轉換
a) 自動轉換
運算時必須轉換為同一類型,轉換按數據長度曾加的方 向進行,以保證精度不降低,所有浮點型都要轉換為double型再進行運算,char和short必須轉換為int型,在賦值運算時=右邊的轉換為左邊的。
b) 強制類型轉換
通過類型轉換運算實現的,一般形式為(類型說明符)(表達式)如(int)(x+y)將x+y強制轉換為int型,與(int)x+y不同。
無論強制轉換或是自動轉換,都只是為了本次運算的需要而對變量的數據進行臨時性的轉換,不改變對數據說明是對該變量的定義的類型。
3. 數據運算
運算符
a) 按功能分類
算術運算符:+ - * / % ++ --
關係運算符: > >= < <= == !=
邏輯運算符:! && |||
位運算符:<< >> ~ | & ^
賦值運算符:= (+= -= *= /= %=)
條件運算符:?:
逗號運算符:,
指針運算符:* &
求字節運算符:sizeof
強制類型轉換運算符:(類型標識符)
分量運算符:->
下標運算符:[]
其他:函數調用運算符()
b) 按運算對象個數
單目
雙目
三目
優先級與結和性
醋-初等,4個: ( ) [ ] -> 指向結構體成員 . 結構體成員
壇-單目,9個: ! ~ ++ -- -負號 (類型) *指針 &取地址 sizeof長度
酸-算術,5個: * / % + -減
味-位移,2個: << >>
灌-關係,6個: < <= > >= == 等於 != 不等於
味-位邏,3個: & 按位與 ^ 按位異或 | 按位或
落-邏輯,2個: && 邏輯與 || 邏輯或
跳-條件,1個,三目: ? :
福-賦值,11個: = += -= *= /= %= >>= <<= &= ^= |=
豆-逗號,1個: ,
結合方向自右向左的只有三類:賦值、單目和三目
同一優先級的運算順序由結合方向決定
口訣:單(單目)算(算術)移(移位)關(關係)與(按位與),異(按位異或)或(按位或)邏(邏輯)條(條件?:)賦(賦值)
單算移關於,異或邏條賦
算術運算
除數運算符 /:
兩個數都是整數就是取整運算,有一個為小數運算結果就是小數
兩個數都是整數,但有一個為負數,等於按其絕對值相除後加上負號
除數不能為0,否則會導致錯誤
0%x=0且0/x=0
求餘運算符 %:
兩個數必須是整數,如果有負數,先按絕對值求餘然後取被除數的符號為結果的符號,可以與取整配合驗證5/-3 = -1;5%-3 = 2;(-1*-3+2=5)
邏輯運算
位運算
注意:
1. /兩側的操作數為整型時,計算結果為整型。
2. %兩側的操作數必須為整型、不能為浮點型。
3. ++和--只能用於一個單獨的變量。
4. 一般形式:表達式一,表達式二,表達式三……整個逗號表達式的值是最後一個表達式的值。求解是自左向右的。
5. 並不是所有的逗號都是逗號表達式,如在定義變量是只是間隔符。
6. 逗號表達式的各個表達式也可是逗號表達式的形式如((表達式1,表達式2),表達式3)。
4. 數據輸出
格式化輸入輸出
(1) printf();
注意:計算表達式中當有多個%d的時候採用從右向左的順序進行輸出,應該是先計算在列印(在VC編譯器中是從右向左)
例如
int i = 10;
printf(「%d %d %d」,++i,++i,++i);
輸出結果是 13 12 11
控制符:
%c單一字符
%d十進位
%o八進位
%x十六進位
%s字符串
%p地址
修飾字符:#用於八進位和十六進位的0,0x
(2) scanf();
%d之間儘量不要加入別的字符
*%d表示輸入讀入但不賦值給變量
遇到以下情況認為輸入結束
a) 遇到空格,或者回車鍵或者Tab鍵
b) 遇到輸入域寬度結束(實數沒有位數限制)
c) 遇到非法輸入
流程控制
1. 順序結構
C語言程序從主函數開始運行,一步一步執行,遇到對應的語句執行對應的過程
2. 選擇結構
1. 簡單分支結構:
if(表達式)
語句1;
運行過程:表達式為真執行語句2
2. 雙分支結構:
if(表達式)
語句1;
else 語句2;
運行過程:表達式為真運行語句1否則執行語句2
3. 垂懸else
if (條件1)
if (條件2)
語句1
else
語句2
規定:上面這類一般else與最接近它的進行匹配
4. switch…case分支結構:常與break一起使用
switch(表達式)
{
case 常量表達式:語句1
……
}
運行過程:首先選擇程序的入口,找到對應的case值進行執行,直到遇到break,或者運行到程序的結束
如果找不到程序的入口那麼就進入default然後直到break結束或者程序結束。不管default的位置在哪裡,都先找對應的case值如果沒有default的話就結束
Switch後面的表達式和常量表達式都是整數或字符型
case對應的值一般可以是整形、字符型,enum封裝的類型不能出現變量或含變量的表達式只能是常量表達式且不能相等
3. 循環結構
1. if…goto語句:
a1:語句1 (a1為語句之前的標號一般是字母)
a2:語句2
……
an:if 條件;goto 某語句;else goto a(n+1);
a(n+1): 語句;
2. while 語句:
while(表達式)
語句;
運行過程:當表達式為真,執行語句
3. for語句:
for(i=1;i
{
語句1;
}
運行過程:i=1; i
4. do…while語句:
do
{
語句1;
}
While(條件);
運行過程:首先執行語句1,如果條件為真,繼續運行語句1;
5. 循環控制語句:
(1) break語句:
跳出循環(注意一定是跳出循環)
(2) continue語句:
繼續循環語句