5.5型別轉換
不同的型別運算時,會由低等級轉換成高等級。
型別的級別從高到底依次是:long double、 double、float、unsigned long long、long long、unsigned long、long、unsigned int、int。例外:當long和int的大小相同時,unsigned int比long的級別更高。
在賦值表示式語句中,計算的最終結果會被轉換成被賦值變數的型別,可能導致公升級或者降級。
強制型別轉換
例如:mice=1.6+1.7;
mice=(int)1.6+(int)1.7;
其中mice是int型別的變數。
第一行,首先運算,得到3.3,然後為了匹配int型別的變數,3.3倍型別轉換截斷為整數3.
第二行,首先把1.6和1.7分別強制型別轉換為1和1,然後運算得到2.
c語言的一些運算子:
算數運算子:++ 對其右側的值加一(字首模式),對其左側的值加一(字尾模式)
–與++類似
其他運算子:
sizeof 獲得其右側運算物件的大小(以位元組為單位),運算物件可以是乙個被圓括號括起來的型別說明符,如sizeof(float),或者是乙個具體的變數名、陣列名等,如sizeof foo
(型別名) 強制型別轉換符將其左側的值轉換成圓括號中指定的型別,如(float)9把整數9轉換成浮點數9.0
5.6帶引數的函式
帶有引數的pound()函式如下
#include
void pound(int n); //ansi函式原型宣告
int main(void)
void pound(int n) //ansi風格函式頭
真值與假值
#include
int main(void)
輸出結果為:true=1;false=0
只有0為假,其他的值均為真。
_bool型別
不確定迴圈和計數迴圈
不確定迴圈:在測試表示式為假之前,不知道要執行多少次迴圈。計數迴圈則是:在執行迴圈之前就知道要執行多少次。
例子:#include
int main(void)
return 0;
}for迴圈
把(初始化、測試和更新)結合在了一處。
例子:#include
int main(void)
關鍵字for後面的圓括號中有三個表示式,分別用兩個分號隔開,第乙個表示式是初始化,只會在for迴圈開始時執行一次,第二個表示式是測試條件,在執行迴圈之前對表示式求值,如果表示式為假,迴圈結束。第三個表示式執行更新,每次迴圈結束後求值。
逗號運算子
x=(y=3,(z=++y+2)+5);
整個逗號表示式的值是右側項的值。
效果是,先把3賦值給y,遞增y為4,然後4+2=6賦值給z,6再加上5等於11賦值給x。
從左到右運算,例如:
ounces++,cost=ounces*2;
先執行逗號左邊的,然後用ounces的新值進行右邊的運算。
出口條件迴圈
do while
例子:#include
int main(void)
while (code_entered !=secret_code);
printf(「congtatulations! you are cured!\n」);
return 0;
}do while迴圈的通用形式:
dostatement
while (expression);
陣列
和python中的陣列一樣,不做解釋。
if 和if else語句,python類似,不做解釋。
介紹getchar()和putchar()
這是對字元輸入/輸出函式
getchar()函式不帶任何引數,它從輸入佇列中返回下乙個字元,如:下列語句讀取下乙個字元輸入,並把該字元的值賦給變數ch;
ch=getchar();
該語句與下面的語句效果相同:
scanf("%c",&ch);
putchar(ch);該語句與下列的語句效果相同:
printf("%c",&ch);
這些函式只處理字元,故比printf()和scanf()函式更快更簡潔,而且putchar()和getchar()函式不需要轉換說明,因為它們只處理字元。這兩個字元定義在stdio.h標頭檔案中。
ctype.h系列的字元函式
這是一系列專門用來處理字元的函式,ctype.h標頭檔案包含了這些函式的原型,這些函式接受乙個字元作為引數,如果該字元屬於某特殊的類別,就返回乙個非零值(真);否則,返回0(假)。例如,如果isalpha()函式的引數是乙個字母,則返回乙個非零值。否則返回0(假)。
邏輯運算子
&& 與
|| 或
! 非程式示例如下:
#include
#define period 『.』
int main(void)
printf(「there are %d non-quote chatacters,\n」,charcount);
return 0;
}輸出如下:
i didn』t read the "i』m a programming fool"best seller.
there are 50 non-quote chatacters.
程式首先讀入乙個字元,並檢查它是否是乙個句點,接下來,if語句的測試條件中使用了邏輯與運算子&&。該if語句翻譯成文字是「如果待測試的字元不是雙引號,並且它也不是單引號,那麼charcount遞增1」。
備選拼寫:iso646.h標頭檔案
可替代邏輯運算子的拼寫,被定義在iso646.h標頭檔案中,如果在程式中包含該標頭檔案,那麼可以用and替代&&、or替代||、not替代!。
範圍
&&運算子可用於測試範圍,例如,要測試score是否在90~100範圍內,可以這樣寫:
if(range>=90 && range<=100)
pringf(「good show!\n」);
千萬不要模仿數學上的寫法:
if (90<=range<=100)
printf(「good show!」);
這樣寫有語義錯誤,編譯器會解釋為:
(90<=range)<=100
子表示式90<=range的值要麼是1(為真),要麼是0(為假),這兩個值都小於100,所以不管range的值是多少,整個表示式都恒為真。因此,在範圍測試中要用&&
條件表示式:?:
例子:x=(y<0)? -y:y;
在=和;之間的內容就是條件表示式,該語句的意思是「如果y小於0,那麼x=-y;否則,x=y」
迴圈輔助:continue和break
continue語句:
後面的語句不再執行,重新跳到while迴圈的判斷條件。
break語句:
退出迴圈,執行下一步。
和python中的作用相同。
switch語句
基本格式switch(表示式)
執行過程是:
首先計算「表示式」的值,假設為m。
從第乙個case開始,比較「整型數值1」和m,如果他們相等,就執行冒號後邊的所有語句,也就是從「語句1」一直執行到"語句 n+1",而不管後邊的case是否匹配成功。
如果"整型數值1"和m不相等,就跳過冒號後邊的「語句1」,繼續第二個case,第三個case,一但發現和某個整型數值相等了,就會執行後面所有的語句。假設m和「整型數值5」相等,那麼就會從「語句5」一直執行到語句「n+1」
如果直到最後乙個整型數值n都沒有找到相等的值,那麼就執行default後的語句"n+1"。
另外,有break和無break的區別如下圖:
多重標籤
可在switch語句中使用多重case標籤。如上述。
學習筆記《C 入門經典 第6版 》C 語言 第4章
c 當中大部分的流程控制語句與 c c 中的流程控制語句都是一樣的。但也有新特性。一 布林邏輯 布林變數bool 在c 和c 得加上 stdbool.h 標頭檔案 當中也有。但是在 c 中的布林運算子有一些新的變化。1 處理布林值的布林運算子 運算子類別示例表示式結果!一元var1 var2 邏輯非...
學習筆記《C 入門經典 第6版 》C 語言 第6章
一 引數陣列 c 允許為函式指定乙個 只能指定乙個 特殊引數,這個引數必須是函式定義中的最後乙個引數,稱為引數陣列。引數陣列允許使用個數不定的引數呼叫函式,可以使用 params 關鍵字定義它們。例如 static int sumval params int vals return sum stat...
學習筆記 第4章
standard 標準模式,呼叫startactivity殘生乙個例項 singletop 檢測是否已經存在乙個例項位於activitystack的頂部,如果存在就不產生新的勢力,否則呼叫newinstance產生新的勢力 singletask 在乙個新的task中產生這個勢力,以後每次呼叫都用此例...