變數: 什麼是變數?一個可以存儲數據(存儲的地方在記憶體中),並可以在代碼的運行中,給與數據的改變 註意:變數的聲明必須在最前面 語法:數據類型 變數名稱 = 值; 案例: %d - 輸出一個整數 %.2f - 輸出一個小數(2代表的是小數位,可以改變) %c - 輸出一個字元 %s - 輸出一個字元 ...
變數:
- 什麼是變數?一個可以存儲數據(存儲的地方在記憶體中),並可以在代碼的運行中,給與數據的改變
- 註意:變數的聲明必須在最前面
- 語法:數據類型 變數名稱 = 值;
- 案例:
- %d - 輸出一個整數 %.2f - 輸出一個小數(2代表的是小數位,可以改變)
- %c - 輸出一個字元 %s - 輸出一個字元串
-
//引入頭文件 #include <stdio.h> void main(){ int num = 1; //給num變數賦值1 double score = 2.3; char gendr = 'A'; char name[] = "我是字元串"; //註意:改被值的內容,要放到所有變數聲明的後面 //因為c語言的變數聲明必須在最前面,num = 2已經不是變數聲明 num = 2; //改變a變數值 printf("num=%d score=%.2f gendr=%c name=%s",num,score,gendr,name); getchar();//讓視窗停留(cmd視窗) }
-
記憶體分析:
- 不同的變數,改成(不同的數據) - 畫圖時搞錯
-
細節:
- 變數表示記憶體中的一個存儲區域,(不同的數據類型,占空間也不一樣)
- 變數必先聲明,後使用
- 變數名,在同一個作用域不能重名
- 同一類型,並同一區域的變數,可以不斷變化(不遵守,可能導致數據丟失)
數據類型:
- 什麼是數據類型?用來表示一個數據是什麼類型,併在記憶體中分配對應的類型空間大小,不同的類型分配的記憶體大小也不一樣
- 有哪些數據類型? - 記下來
- 註意:在C語言中沒有字元串類型,用字元數組表示字元串
- 在不同的系統上,部分的數據類型長度不一樣,如int可能是2或4
-
整數類型:
- 整數類型的作用? 用來存放整數,負整數和正整數都可以,但不同的整數可以存放的值範圍也不同
- 如:int 在系統上是2個位元組值範圍就是:-32768到32767 (如果超過該值,就會出現越界的問題,導致數據混亂)
- 如:int在系統上是4個位元組值範圍就是:-214483648到2147483647
- 為什麼會同樣是int分2個位元組和4個位元組?
- 因為跟操作系統、系統位數、編譯器有關
- C語言的數據類分有符號和無符號?
- 有符號 sigend int - 等價於int - C語言預設是帶符號 - 其它數據類型也分有無符號,不止是int類型有
- 無符號 unsigned int - 值範圍 - 0到65636 - 占2個位元組
- 區別:
- 值範圍不同,主要原因底層二進位分析不同
- 案例:
-
#include <stdio.h> void main(){ int i = 2147483647; signed int j = 2147483648; //越界 unsigned int q = 999999655351; //越界 printf("int的位元組數=%d\n",sizeof(int)); printf("i=%d j=%d q=%d",i,j,q); getchar();//讓視窗停留(cmd視窗) }
-
整數類型細節:
- C程式中整數說明一般用int型,不夠在使用long或者long long
- long的輸出是 %ld
- long long的輸出是 %lld
- bit(位):電腦中最小的存儲單位
- byte(位元組):電腦中基本的存儲單位
- 1byte=8bit
- C程式中整數說明一般用int型,不夠在使用long或者long long
- 整數類型的作用? 用來存放整數,負整數和正整數都可以,但不同的整數可以存放的值範圍也不同
-
浮點類型:
- 浮點數的作用?用來表示一個小數,如:123.1,99.9等
- 浮點數又分兩個精度?
- float-單精度:存儲大小(4給位元組),值範圍1.2E-38到3.4E+38,精度是6位小數(是點後面的數)
- double-雙精度:存儲大小(8個位元組),值範圍2.3E-308到1.7+308,精度是15位小數(是點後面的數)
-
浮點類型細節:
- 浮點型常量預設為double型,聲明float型常量時,必須加‘F’或'f'
- float i = 1.1; - 就算這樣聲明其實也double型,必須是 float i = 1.1f;才是float型
- 不然會有這麼一句話:“初始化”: 從“double”到“float”截斷
- 浮點型有兩種表達形式:
- 十進位:如:5.12、5.20
- 科學計數法:如:5.12e2 、5.12E-2
- 通常情況下用double型,因為精度比float高
- double可以輸出15位小數,float6位,如果超過小數會數據混亂
- 輸出浮點型時預設小數保存6位
- 浮點型常量預設為double型,聲明float型常量時,必須加‘F’或'f'
-
//引入頭文件 #include <stdio.h> void main(){ float a = 10.1; //“初始化”: 從“double”到“float”截斷 float a2 = 10.2f; double b = 10.2; double b2 = .521;//等價於0.521 double c = 5.21e2;//等價5.12*(10^2) = 521 double c2 = 5.21e-2;//等價5.12*(10^-2)= 5.12/100= 0.0521 printf("b=%.15f b2=%f",b,b2);//輸出預設保存6位小數,.15是15位小數 getchar(); }
-
布爾類型:
- 布爾類型作用? 代表真(true)和假(false),一般使用場景條件控制(if),迴圈控制(while)
- C語言(C89)沒有定義布爾型,通過0代表假,非0代表真的(負整數也算)
- 因為是數字表示,非常的不直觀,可以通過巨集定義來完成真假操作
- C語言(C99)提供了_Bool型,_Bool型仍是整數型,接收0和非0,不是非0的數都會被存儲為1
-
//引入頭文件 #include <stdio.h> //使用巨集定義來完成 #define BOOL int //定義BOOL為整型 #define TURE 1 //TURE等價於1 #define FALSE 0 //FALSE等價於0 void main(){ int i = 0; //0假,1真,-1真 BOOL isOK = TURE; //TURE等價於1 BOOL OKis = FALSE; //FALSE等價於0 if(OKis){ printf("i為true就輸出改語句"); } getchar(); }
-
自動類型的轉換:
-
什麼是自動類型轉換?在C語言程式中進行賦值或運算時,精度小的類型自動轉換為精度大的數據類型
-
細節:
-
多個數據類型進行數據轉換時,系統首先自動將所有數據轉換為精度最大的數據類型(int和double進行運算,就轉成double)
-
精度大的值賦值給比它小的值會造成精度丟失(如:double給float賦值)
-
兩類型的位元組數不同,轉換成位元組數大的類型,若兩個類型的位元組數相同,且一種由符號,一種無符號,則轉換成無符號類型
-
-
-
強制轉換:
- 什麼是強制轉換?把精度高的數據轉換為精度小的數據類型
- 語法:數據類型 名稱 = (數據類型) 變數或數據
-
細節:
- 高精度轉低精度會照成數據流失
- 強轉只對只近的的數有效,如果是對多個數據可以用()括弧括起來
- 強轉不是四捨五入,直接獲取小數點前面的數
-
//引入頭文件 #include <stdio.h> void main(){ double i = 10.99; int M = 20; int k = (int)i; //強轉 int num1 = (int)3.5*10 + 6*1.5; //強制轉換隻對最近的有效 - 這就是對3.5發生強轉 int num2 = (int)(3.5*10 + 6*1.5); // 這對求出來的結果發生強轉 //k結果10,強轉不是四捨五入,而是直接獲取小數前面的部分 printf("k=%d i=%f",k,i);//i=10.99,i仍然是double getchar(); }