C語言基礎01

2021-10-23 10:45:52 字數 3404 閱讀 5379

一、資料型別

為什麼對資料進行分類:節約儲存空間,提高執行速度。

整型:signed

signed char 1 -128~127

signed short 2 -32678~32767

signed int 4 正負20億

signed long 4/8 正負20億/9開頭19位整數

signed long long 8 9開頭19位整數

注意:signed 不加就**

unsigned:

unsigned char 1 0~255

unsigned short 2 0~65535

unsigned int 4 0~40億

unsigned long 4/8 0~40億/1開頭20位整數

unsigned long long 8 1開頭20位整數

注意:由於定義無符資料時比較麻煩,標準庫把這些無符型別重新定義成了以下型別

需要包含標頭檔案 stdint.h

uint8_t、uint16_t、uint32_t、uint64_t

int8_t、int16_t、int32_t、int64_t

浮點:float 4

double 8

long double 12/16

注意:採用科學計算法,二進位制與真實資料之間需要翻譯,因此計算整數要比整型要慢。

小數點後六位有效。

模擬:char 字元其實就是符號或圖案,在記憶體中儲存的是整數,需要顯示時會根據ascii表中的對應關係顯示出相應的符號或圖案。

『\0』 0 特殊字元,字串的結束標誌。

『0』 48

『a』 65

『a』 97

bool 布林 先有了c語言之後才有 bool 型別,所有c語言不可能有真正布林型別,stdbool.h標頭檔案對布林型別做的模擬。

bool true false

可以使用sizeof計算型別的位元組數。

二、變數與常量

什麼是變數:程式執行期間數值可以變化的叫變數,相當於儲存資料的盒子。

定義:型別 變數名;

int num;

取名規則:

1、由字母、數字、下劃線組成

2、不能以數字開頭

3、不能與關鍵字重名,能默寫。

4、見名知義(功能、型別、範圍)

printf scanf bool

注意:變數的預設值是隨機,為了安全要給初始化,一般初始化為0。

使用:賦值:num = 10;

參與運算:num * 100;

變數的輸入、輸出:

int printf(const char *format, …);

功能:輸出資料

format:雙引號包含的格式資訊(提示資訊+佔位符)

…:變數列表

返回值:輸出字元個數

int scanf(const char *format, …);

功能:輸入資料

format:雙引號包含的格式資訊(佔位符)

…:變數位址列表

返回值:成功輸入變數的個數

注意:scanf需要的是變數型別和變數位址,變數位址=&變數名

練習1:定義各型別的變數並初始化,使用printf顯示。

練習2:定義各型別的變數並初始化為0,使用scanf輸入,printf顯示。

型別佔位符:c語言通過佔位方式來傳遞變數的型別。

%hhu %hu %u %lu %llu

%hhd %hd %d %ld %lld

%f %lf %lf

什麼是常量:程式執行期間數值不能變化的叫常量

100 預設int

100l long

100ll long long

100u unsigned int

100lu unsigned long

100llu unsigned long long

3.14 預設double型別

3.14f float

3.14l long double

三、格式化輸入輸出

%nd 顯示n個字元寬度,不夠則補空格,右對齊

%-nd 顯示n個字元寬度,不夠則補空格,左對齊

%0nd 顯示n個字元寬度,不夠則補0

%n.mf 顯示n個字元寬度(小數點算一位),不夠則補空格,m表示小數點後的位數(四捨五入)

%g 不顯示小數點後多餘的0

四、運算子

自變運算子:++/-- 使變數的值自動加1或減1

前自變:立即有效

後自變:下一條語句才有效

注意:不要一行**中多次使用自變運算子;

算術運算子:+ - * / %

整數/整數結果沒有小數點。

/ % 除數不能為零,否則會產生浮點數例外,核心轉儲。

關係運算子:> < >= <= == !=

比較的結果是 0 或 1 比較結果還能繼續參與運算。

10 < n < 100 結果永遠為真,與數學中的運算規則不同。

邏輯運算子:&& || !

會先把運算物件轉換邏輯值,0轉換成假,非0轉換為真。

a && b 一假即假

a || b 一真即真

!a 求反

&& || 具有短路特性,當左邊的值可以確定表示式結果,右邊不同計算。

三目運算子:運算物件有三個部分

a?b:c; 判斷a的值如果為真執行b,如果為假執行c。

該語句不能使用流程控制語句,因為它必須要有運算結果。

賦值運算子:+= *= /= …

a += b; a = a+b;

a = b; a = ab;

位運算子:& | ~ ^ >> <<

五、型別轉換

自動型別轉換:

只有相同型別的資料才能進行運算,不同型別資料轉換成相同型別再進行計算。

轉換規則(以不丟失資料為基礎,適當犧牲一些空間):

1、字少的向位元組多的轉。

2、有符號向無符號轉。

3、整型向浮點型轉。

強制型別轉換:

(型別)資料 有丟失資料的風險,慎重使用。

六、分支語句

if(表示式)//單分支

if(表示式)//雙分支

else

if(表示式1)//多分支

else if(表示式2)

else

作業:1、輸入三個整數,從大到小顯示。

2、輸入乙個年份,判斷是閏年還是平年。

3、輸入乙個年份和月份,判斷該月有多少天。

4、輸入乙個3位整數,判斷是否是水仙花數。

abc == aaa+bbb+ccc

5、輸入乙個成績,判定級別。

[100,90] a

(90,80] b

(80,70] c

(70,60] d

(60,0] e

other 輸入的成績有誤

C語言基礎 01

1.陣列和鍊錶的區別是?主要是有結構和實現不同,導致的讀取效率 空間占用即擴充套件性的差別!2.乙個程式從開始執行到結束的完整過程 4個過程 3.如何引用乙個已經定義過的全域性變數?用extern,不會產生重複定義,因為只是宣告,不重複分配記憶體。4.佇列和棧的區別是什麼?如果用佇列實現棧的功能?佇...

c語言基礎01

列印字元 include int main 會將hello,world!列印在終端中。轉義字元 含義 a 響鈴 bel b退格 bs 將當前位置移到前一列 f換頁 ff 將當前位置移到下頁開頭 n換行 lf 將當前位置移到下一行開頭 r回車 cr 將當前位置移到本行開頭 t水平製表符 ht 跳到下乙...

C語言基礎01 函式

引用呼叫 int main int argc,char ar 預設庫math.h string.h stdlib.h malloc realloc free 申請 釋放記憶體 函式 本身有 鏈結時程式執行先將函式引數入棧,再執行函式 實參在主調函式中定義與使用 進入被調函式後,實參變數不能使用 實參...