1. 程式人生 > >9月26日-高階語言程式設計-課程內容(4)

9月26日-高階語言程式設計-課程內容(4)

9月26日第四次上課記錄


1,運算子和表示式

邏輯運算子:!,&&,||
位運算子:<<,>>,~,^,&,|
進行表示式的值的運算時,要考慮以下幾點:

  1. 運算子連線的運算物件個數。有幾個運算物件就叫幾目運算子。
  2. 運算子的優先順序。算術運算子的優先順序和數學一樣,c語言共有15個運算級,其中括號的運算及最高。
  3. 運算子的結合性。左結合和右結合。

除法運算時,如果要對小數部分進行捨棄,大多數編譯器採用向零取整的方法。
求餘運算時,運算結果的符號和被除數(即第一個運算物件)相同,例如-7%5=-2。
自增運算子(++)和自減運算子(–)運算速度比+1或者-1快,程式碼效率高,因為它和實際機器語言指令類似,但是隨著編譯器越來越智慧,這一優勢正在消失。++(–)i速度要比i++(–)快,因為後者要創造一個臨時變數,把值賦給臨時變數,然後自增,返回臨時變數,前者增加後直接返回值。

  • ++i先遞增後運算
  • i++先運算後遞增

C語言採用“=”作為複製運算子,賦值表示式的語法:

  • 變數=表示式

表示式把右值賦給左值。“=”不能用來判斷,如要判斷需要用“==”,並且如果右值為表示式,還要注意精度問題。整數可以直接用 ==來比較,浮點數因為精度問題,只可以用|a-b|<x來比較。

複合賦值運算時的規則是:x(符號)=y即x=x(符號)y。
複合賦值運算的執行效率相比算術運算更高,因為複合賦值運算中的變數值計算一次,不像算數運算中要運算一次,再賦值一次。
sizeof運算子用於獲得運算物件所佔空間的位元組數,返回整型。

2,資料混合運算和資料型別轉換

1,自動型別轉換(隱式型別轉換),自動想表達資料能力更強的資料型別轉換。轉換順序:long double>double>float>unsigned long>long>unsigned int>int
2,強制型別轉換,其轉換語法是:(資料型別關鍵字)表示式。
3,把一個數據從較低型別轉換成較高型別稱為型別擴充套件,反之稱為型別壓縮,型別壓縮可能導致精度缺失。無論是自動還是強制轉換型別都不會改變原來表示式的值和型別。

3,位運算

位運算是對二進位制的位進行的運算,只能用於整型運算元,即帶符號或不帶符號的char,short,int,long。

運算子 名稱 功能說明
取反 單目,運算元每個二進位制位都取反
& 按位與 雙目,兩個運算元對應二進位制位都是1時,結果為1
| 按位或 雙目,兩個運算元對應二進位制位其一是1時,結果為1
^ 按位異或 雙目,兩個運算元對應二進位制位相同結果為0,不同為1
<< 左移 雙目,運算元的二進位制位全部左移
>> 右移 雙目,運算元的二進位制位全部右移

左移n位即把原數乘以2的n次方,右移反之,移位即把對應位溢位。

4,C語句

C語句可大致分為兩類,一類是描述計算機操作和運算的操作運算語句,一類是用於控制操作執行順序的流程控制語句。

  • 表示式語句有:
    1,賦值語句
    2,函式呼叫語句
    3,空語句

  • 流程控制語句有:
    1,選擇結構控制語句
    2,迴圈結構控制語句
    3,結束本次迴圈語句
    4,終止迴圈和多分支語句
    5,無條件轉移語句
    6,函式返回語句

  • 複合語句由花括號{}形成,稱為一個語句塊。

除了花括號和各別語句不需要分號結束語句之外,所有的語句都需要分號作為結尾。

5,資料的輸入和輸出

使用輸入裝置向計算機程式提供資料的過程稱為資料輸入
計算機程式將資料通過輸出裝置展示出來的過程稱為資料輸出
C語言中所有資料輸入和輸出操作都是通過對標準I/O庫函式呼叫完成,標頭檔案stdio.h中聲明瞭這些輸入和輸出庫函式。

  • printf函式
    printf(格式控制字串,輸出列表)。格式控制字串包括兩部分,格式說明符和普通字元。
    格式說明符:%[附加格式字元]格式字元,其中附加格式字元位可選,對輸出資料的現實方式進行修飾,不能單獨使用。
格式字元 含義
d 以十進位制輸出整數
o 以八進位制輸出整數
x,X 以十六進位制輸出整數,x大小寫控制十六進位制大小寫
u 以無符號十進位制輸出整數
f 以小數形式輸出實數,保留6位
e,E 以指數形式輸出實數,位數部分保留6位小數,大小寫對應指數e,E
g,G 以f或e格式符中輸出寬度較短的實數
c 以字元形式輸出一個字元
s 輸出一個字串
附加格式字元 含義
l 指定輸出long(d,o,x,u)或者double(e,f,g)
h 用於d,o,x,u前輸出short精度
m m為正整數常量。實際資料寬度小於m時,輸出資料在寬度m的區域右對齊,左邊補空格;實際資料寬度大於m時,按實際位數輸出
.n n為正整數常量,用於f,e前表示輸出n位小數;用於s前表示輸出n個字元;用於整型前補n-1個0
- 用於m前,使資料寬度範圍內左對齊
+ 用於d,f,e前,輸出正數帶符號
0 用於m前,輸出區域左邊的空白補0
# 用於o,x前,表示輸出八進位制和十六進位制的前導(0,0x)
* 作為佔位符,不列印輸出列表某一項
  • scanf函式
    scanf(格式控制字串,地址列表)。scanf函式的格式字串包括兩部分:格式說明符和普通字元。
    地址列表:地址列表有多個地址組成,由逗號分開,變數的地址可以使用&來獲取。
格式字元 含義
d 輸入十進位制整數
o 輸入八進位制整數
x 輸入十六進位制整數
u 輸入無符號十進位制整數
f,e,g 輸入實數,輸入double型時,必須使用附加格式字元l
c 輸入一個字元
s 輸入一個字串
附加格式字元 含義
l 用於d,o,x,u前,制定輸入精度為long;用於e,f,g前,制定輸入精度為double
h 用於d,o,x前,制定輸入精度為short
m m為正整數常量,表示輸入資料的寬度為m
* 表示輸入的資料不存放到地址列表的地址

scanf輸入字元時,輸入內容要與格式控制字串要求一致。