- 相關推薦
C語言常量的類型
在C語言中,其值不能被改變的量稱為常量。常量有5種類型:整型常量、實型常量、字符常量、字符串常量和符號常量。下面一起來詳細看看!
(一)數值轉換
數字的四種表現形式:
①:二進制:所有數字由0,1構成,逢二進一,二進制數中不會出現2.。
例:110101
②:八進制:以數字0(注意不是以字母O,o)開頭,所有數字由0~7構成,逢八進一,八進制數中不會出現8。
例:0112,0123,077等
、郏菏M制:所有數字由0~9構成,逢十進一,十進制數中不會出現10。
例:0,12,-15等
、埽菏M制:以0x或者0X(數字0加字母x)開頭,所有數字由0~9,A~F(或者a~f)構成,逢十六進一(其中A、B、C、D、E、F分別代表10、11、12、13、14、15)
例:0x4A、0X14c7等
在計算機內部,數字均以二進制形式表示和存放,用戶輸入的普通十進制數字都要被計算機轉換成二進制才能在計算機內部存儲,同樣計算機的運算結果也為二進制,一般要將其轉換成十進制數再輸出給用戶閱讀,這種轉換通常由計算機自動實現。
(1)將十進制轉換二進制、八進制和十六進制
除法:將十進制數除以2,記錄余數,得到的商繼續除以2,直到商為0,然后將各次相處所得的余數從后往前逆序排列,所得余數數字序列就是該十進制數對應的二進制數。八進制和十六進制轉換方法同上。
例:十進制數13轉換成二進制數的值為1101,轉換八進制為015,轉換成十六進制為D.
(2)將二進制、八進制和十六進制轉換成十進制
乘積求和:將二進制的每一位從低位到高位(右邊為低位,左邊為高位)分別乘以20,21,22。。。。,然后將這些積求和。
例如:(1101)2=(13)10 (317)8=(207)10 (23E)16=(574)10
(3)二進制與八進制、十六進制數之間的相互轉換
、伲憾M制轉八進制:從右往左每三位一組轉換成十進制數,將所得數據組合就是對應的八進制數(注意:高位不足三位補零)。
例:(010 110 111)2=(267)8
②:二進制轉十六進制:從右往左每四位一組轉換成十進制數,將所得數據組合就是對應的十六進制數(注意:高位不足四位補零)。
例:(0101 1011)2=(5B)16
③:八進制轉化二進制:每一位數字轉換為三位二進制數字
例:(13)8=(001 011)2=(1011)2
(注意:去掉前面的兩個00,因為0在高位沒有意義)
④:十六進制轉化二進制:每一位數字轉換為四位二進制數字
例:(E3)16=(1110 0011)2
(二)整型常量
整型常量有3種形式:十進制整型常量、八進制整型常量和十六進制整型常量。
(注意:c語言中沒有直接表示二進制的整型常量,在c語言源程序中不會出現二進制。)
書寫方式如下:
十進制整型常量:123 , 0 ,-24 , 85L(長整型常量) 等
八進制整型常量:051 ,-026 ,0773 等
十六進制整型常量:0x55 , 0x1101 , 0x , 0x5AC0 , -0xFF。
其中L為長整型。
(三)實型常量
實型常量有兩種表示形式:小數形式和指數形式。
小數形式:5.4 0.074 -23.0
指數形式:5.4e0 4.3e-3 -3.3e4
(1)小數部分為0的實型常量,可以寫為453.0 或453。
(2)用小數表示時,小數點的兩邊必須有數,不能寫成“ .453“和“453.“,而應該寫成“0.453“和“453.0“。
(3)用指數寫法時,e前必須有數字,e后面的指數必須為整數(注意:整數階碼可以是正數,負數,也可以是八進制數、十六進制數,但必須為整數)。
(四)字符常量
字符常量的標志是一對單引號‘ ’,c語言中的字符常量有兩類:
(1)由一對單引號括起來的一個字符,如‘a ’, ‘r’ ,‘#’。注意: ′a′ 和 ′A′ 是兩個不同的字符常量。
(2)由一對單引號括起來,以反斜杠開頭,后跟若干數字或者字母,比如‘ ’,其中““是轉義的意思,后面跟不同的字符表示不同的意思,這類字符常量叫轉義字符。具體如圖所示 。
轉義字符 轉義字符的意義 ASCII碼
回車換行 10
橫向跳到下一制表位置 9
退格 8
回車 13
f 走紙換頁 12
反斜線符"" 92
' 單引號符 39
” 雙引號符 34
a 鳴鈴 7
ddd 1~3位八進制數所代表的字符
xhh 1~2位十六進制數所代表的字符
(五)字符串常量
C語言中,以雙引號括起來的,由若干個字符組成的序列即為字符串常量。
例:“ni hao” “happy”等等。
(六)符號常量
符號常量是由宏定義“#define“定義的常量,在C程序中可用標識符代表一個常量。
例:計算圓的面積的c程序。
#include
#define PI 3.14159
main()
{
float r,s;
r=12.5;
S=PI *r*r;
printf(“s= %f ”,s);
}
說明:
#define 是宏定義,此程序中所有出現PI的地方都代表3.14159,同時PI稱為符號常量。習慣上我們用大寫字母來表示符號常量,小寫字母表示變量,這樣比較容易區別。
【拓展內容】
C語言變量理解
一、變量的概念
程序設計就是讓計算機按照一定的指令來進行工作,可以說數據的處理是程序設計的主要任務。那么數據是怎么加入到計算機的內存中呢?計算機最初的功能就是能夠存儲數據并處理數據的機器。那么數據是怎么加入到計算機的內存中呢?在學習程序設計之前,很多學生對計算機的硬件設施都大概已經很熟悉了。計算機的硬件設施中有一個區域是用來存儲數據的,計算機在工作的過程中會頻繁的從這個區域讀入和讀出數據。要想讓計算機按照某些指令(程序)自動工作,首先必須把數據存儲到計算機的存儲空間中。在某種計算機語言中實現這種數據存儲功能的就是變量。變量就是計算機內存中的某一個存儲單元。
二、變量的定義
C語言中變量在使用之前必須先對其進行定義,變量的定義的一般形式如下:【存儲類別】數據類型變量名;其中存儲類別是可以省略的。
1、存儲類別計算機的內存一般分為三個部分:1)程序區;2)靜態存儲區;3)動態存儲區;為了高效的發揮計算機的功能,不同類型的變量存放在不同的內存區域。變量的存儲類別決定了變量中的數據在計算機內存中的存儲位置。C語言中局部變量存放在動態存儲區,全局變量或者靜態變量存放在靜態存儲區。
2、數據類型在用程序處理問題之前,首先必須確定用何種方式描述問題中所涉及到的數據。這個問題在C語言中是由數據類型來決定的。變量的本質表現為在計算機中的存在時間和存儲空間。變量的數據類型是用來決定變量在計算機中占用內存空間的大小。比如:整型數據在TC編譯系統中占用兩個字節的存儲空間。C語言變量的類型不僅確定了數據在計算機內存中的存儲區域的大小,同時確定了該數據能夠參與的各種運算。任何一個C語言的變量必須有確定的數據類型,不管這個變量如何變化,變量的值都必須符合該變量數據類型的規定。
3、變量的名字通過以上介紹我們知道C語言中的變量就是計算機的某個存儲單元,假設你給某個變量賦予了一個數值,對變量的處理其實就是對這個數據的處理。那么計算機是如何快速準確的找到這個數據呢?計算機的內存是以字節為單位進行劃分的。每個存儲單元都有自己的地址編號,就向賓館中房間的房間號一樣。計算機就是通過地址來準確的確定數據的存儲位置。但是對于程序員特別是非專業計算機人士,如果用計算機內存地址記錄數據是非常難操作的。
為了更好的掌控變量,C語言規定可以給每個變量其一個容易識別的名字。這個名字的命名規則遵循C語言的標識符命名規則。C語言的變量名的命名在遵循C語言標識符規則的前提下,原則上可以是任意長度字符的組合。但是目前很多的C語言編譯系統只能識別前31個字符,如果兩個變量的前31個字符相同,則編譯系統會認為這兩個變量時同一個變量。為了避免這種混淆的出現最好避免使用多余31個字符的變量名。變量的理解變量就是計算機中的某個存儲單元。定義某個變量本質上就是向計算機申請一些存儲區域。這個存儲區域的大小由變量的數據類型決定,這個存儲區域的位置有變量的存儲類類別決定。給變量賦予某個數值,其實就是向該變量對應的存儲單元讀入數據,對變量的處理就是對這個存儲單元中的數據的處理。并且這個存儲單元中的數據在程序的運行期間是可以發生變化的。
C語言跳出循環
使用while或for循環時,如果想提前結束循環(在不滿足結束條件的情況下結束循環),可以使用break或continue關鍵字。
break關鍵字
在《C語言switch語句》一節中,我們講到了break,用它來跳出 switch 語句。
當 break 關鍵字用于 while、for 循環時,會終止循環而執行整個循環語句后面的代碼。break 關鍵字通常和 if 語句一起使用,即滿足條件時便跳出循環。
使用 while 循環計算1加到100的值:
#includeint main(){ int i=1, sum=0; while(1){ //循環條件為死循環 sum+=i; i++; if(i>100) break; } printf("%d ", sum); return 0;}
運行結果:
5050
while 循環條件為 1,是一個死循環。當執行到第100次循環的時候,計算完i++;后 i 的值為 101,此時 if 語句的條件 i> 100 成立,執行break;語句,結束循環。
在多層循環中,一個 break 語句只向外跳一層。例如,輸出一個4*4的整數矩陣:
#includeint main(){ int i=1, j; while(1){ // 外層循環 j=1; while(1){ // 內層循環 printf("%-4d", i*j); j++; if(j>4) break; //跳出內層循環 } printf(" "); i++; if(i>4) break; // 跳出外層循環 } return 0;}
運行結果:
1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16
當 j>4 成立時,執行break;,跳出內層循環;外層循環依然執行,直到 i>4 成立,跳出外層循環。內層循環共執行了4次,外層循環共執行了1次。
continue語句
continue 語句的作用是跳過循環體中剩余的語句而強制進入下一次循環。continue語句只用在 while、for 循環中,常與 if 條件語句一起使用,判斷條件是否成立。
來看一個例子:
#includeint main(){ char c = 0; while(c!=' '){ //回車鍵結束循環 c=get); if(c=='4' || c=='5'){ //按下的是數字鍵4或5 continue; //跳過當次循環,進入下次循環 } putc); } return 0;}
運行結果:
0123456789↙
01236789
程序遇到while時,變量c的值為'',循環條件c!=' '成立,開始第一次循環。get) 使程序暫停執行,等待用戶輸入,直到用戶按下回車鍵才開始讀取字符。
本例我們輸入的是 0123456789,當讀取到4或5時,if 的條件c=='4'||c=='5'成立,就執行 continue 語句,結束當前循環,直接進入下一次循環,也就是說putc);不會被執行到。而讀取到其他數字時,if 的條件不成立,continue 語句不會被執行到,putc);就會輸出讀取到的字符。
break與continue的對比:break 用來結束所有循環,循環語句不再有執行的機會;continue 用來結束本次循環,直接跳到下一次循環,如果循環條件成立,還會繼續循環。
C語言優缺點
1. 簡潔緊湊、靈活方便
C語言一共只有32個關鍵字,9種控制語句,程序書寫形式自由,主要用小寫字母表示。它把高級語言的基本結構和語句與低級語言的實用性結合起來。 C 語言可以像匯編語言一樣對位、字節和地址進行操作,而這三者是計算機最基本的工作單元。
2. 運算符豐富
C語言的運算符包含的范圍很廣泛,共有34種運算符。C語言把括號、賦值、強制類型轉換等都作為運算符處理。從而使C語言的運算類型極其豐富,表達式類型多樣化。靈活使用各種運算符可以實現在其它高級語言中難以實現的運算。
3. 數據結構豐富
C語言的數據類型有:整型、實型、字符型、數組類型、指針類型、結構體類型、共用體類型等。能用來實現各種復雜的數據結構的運算。并引入了指針概念,使程序效率更高。另外C語言具有強大的圖形功能,支持多種顯示器和驅動器。且計算功能、邏輯判斷功能強大。
4. C是結構式語言
結構式語言的顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可使程序層次清晰,便于使用、維護以及調試。C語言是以函數形式提供給用戶的,這些函數可方便的調用,并具有多種循環、條件語句控制程序流向,從而使程序完全結構化。
5.C語法限制
C語法限制不太嚴格,程序設計自由度大 雖然C語言也是強類型語言,但它的語法比較靈活,允許程序編寫者有較大的自由度
6. C語言允許直接訪問物理地址,可以直接對硬件進行操作
由于C語言允許直接訪問物理地址,可以直接對硬件進行
c語言鏈接程序
由匯編程序生成的目標文件并不能立即就被執行,其中可能還有許多沒有解決的問題。例如,某個源文件中的函數可能引用了另一個源文件中定義的某個符號(如變量或者函數調用等);在程序中可能調用了某個庫文件中的函數,等等。所有的這些問題,都需要經鏈接程序的處理方能得以解決。
鏈接程序
鏈接程序的主要工作就是將有關的目標文件彼此相連接,也即將在一個文件中引用的符號同該符號在另外一個文件中的定義連接起來,使得所有的這些目標文件成為一個能夠誒操作系統裝入執行的統一整體。
根據開發人員指定的同庫函數的鏈接方式的不同,鏈接處理可分為兩種:
(1)靜態鏈接
在這種鏈接方式下,函數的代碼將從其所在地靜態鏈接庫中被拷貝到最終的可執行程序中。這樣該程序在被執行時這些代碼將被裝入到該進程的虛擬地址空間中。靜態鏈接庫實際上是一個目標文件的集合,其中的每個文件含有庫中的一個或者一組相關函數的代碼。
(2)動態鏈接
在此種方式下,函數的代碼被放到稱作是動態鏈接庫或共享對象的某個目標文件中。鏈接程序此時所作的只是在最終的可執行程序中記錄下共享對象的名字以及其它少量的登記信息。在此可執行文件被執行時,動態鏈接庫的全部內容將被映射到運行時相應進程的虛地址空間。動態鏈接程序將根據可執行程序中記錄的信息找到相應的函數代碼。
對于可執行文件中的函數調用,可分別采用動態鏈接或靜態鏈接的方法。使用動態鏈接能夠使最終的可執行文件比較短小,并且當共享對象被多個進程使用時能節約一些內存,因為在內存中只需要保存一份此共享對象的代碼。但并不是使用動態鏈接就一定比使用靜態鏈接要優越。在某些情況下動態鏈接可能帶來一些性能上損害。
【C語言常量的類型】相關文章:
C語言入門知識:常量08-31
C語言常量入門學習06-05
C語言的枚舉類型知識07-22
C語言基礎之數據類型轉換09-23
C語言中各種類型的指針的概念總結11-24
C語言和C++的分別06-18
C語言的結構10-14
如何判斷三角形類型的c語言小程序09-16
C語言考點精選06-29
C語言的應用05-29