C語言第6 7章學習筆記

2021-10-05 18:49:49 字數 4307 閱讀 1328

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中產生這個勢力,以後每次呼叫都用此例...