<menu id="ycqsw"></menu><nav id="ycqsw"><code id="ycqsw"></code></nav>
<dd id="ycqsw"><menu id="ycqsw"></menu></dd>
  • <nav id="ycqsw"></nav>
    <menu id="ycqsw"><strong id="ycqsw"></strong></menu>
    <xmp id="ycqsw"><nav id="ycqsw"></nav>
  • 零基礎學c語言pdf教程(計算機編程入門基礎知識)


    這是一個C語言系列文章,如果是初學者的話,建議先行閱讀之前的文章。筆者也會按照章節順序發布。

    零基礎學C語言——變量、常量與數據類型

    變量

    對于初學編程語言的人來說,變量這個概念第一反應或許是數學中的自變量x。在編程中,與之相似,即變量中存放的數據可以更改。但是與數學不同的是,變量在計算機中還有額外的屬性。

    一個變量包含的屬性:

    1. 變量的值
    2. 變量所處的位置

    對于第一點,大家很好理解,x=1,那么變量x的值為1,x = x + 1之后,x的值為2。

    對于第二點,我們不得不提及兩個事物——內存寄存器。

    這里我們暫時先不介紹寄存器,留待后續章節討論,這并不會妨礙你學習和使用C語言。

    在一般情況下,C語言中定義的變量都存儲在內存中(請暫時忽略,函數的部分參數是存在寄存器中的事實)。內存是一塊連續的區域,如果類比的話我們可以參考路邊劃線的停車位。

    零基礎學C語言——變量、常量與數據類型

    一組停車位相當于一段內存空間,而每一個停車位就相當于這段內存空間中的一部分片段。我們的變量就好比是一個停車位區域。

    額外補充一下,內存的最小存儲單位是比特(bit),也叫位,即只能存儲一個值,這個值要么是0,要么是1。8個bit稱作一字節(byte)。

    為了能更好的管理停車位,我們都要對停車位進行命名編號,便于我們快速定位某一個車位,內存亦然。因此,也就出現了一個概念叫做地址。

    假設,圖片中離鏡頭最近的車位為1號車位,編號逐個向遠處遞增。同時,我給1號車位區域起了個名字叫x。這時,有一輛奔馳停入了1號車位,那么我也可以說,x中的車是奔馳車。

    等價到內存這個概念上就是,我有一個變量叫x,它在內存中的地址是1,它的值是奔馳。

    隨后,奔馳開走了,又來了輛路虎。那么這時,我可以說變量x的值是路虎,它的內存地址是1。

    常量

    前面介紹了變量,表示一段內存中的數據是可以變化的。與之相對的,就是常量,即一段內存中存放的數據是不可改變的。這就好比一張光盤(暫時不考慮可擦寫的…),一旦寫入內容,就不可再更改了。

    常量在C語言中的關鍵字為const,初學者先不必糾結,且繼續閱讀。

    數據類型

    本小節討論的是基礎數據類型,因此不會討論數組這樣的結構。

    在編程語言中,人為的給定了存放在內存中數據的類型,在C語言中,這些類型有:

    • 整型,即整數
    • 浮點型,即實數
    • 字符型,即單個的可打印字符(什么叫可打印的我們后面會說到)
    • 空類型,即無類型
    • 指針類型

    下面我們將逐個類型說明,初學者暫時不需要死記硬背每一個類型的數值范圍,在有需求時查閱范圍即可。

    整型分為:

    • 有符號短整型,對應關鍵字為short,占用2字節內存,即該類型的數據值范圍為-32,768 到 32,767
    • 無符號短整型,對應關鍵字為unsigned short,占用2字節內存,數據值范圍0 到 65,535
    • 有符號整型,關鍵字int,占用4字節(注意,在windows上這個類型占2字節),數據值范圍-2,147,483,648 到 2,147,483,647
    • 無符號整型,關鍵字unsigned int,占用4字節,數據值范圍0 到 4,294,967,295
    • 有符號長整型,關鍵字long32位系統上占4字節,數據值范圍-2,147,483,648 到 2,147,483,647,64位系統上占8字節,數據值范圍-9223372036854775808到9223372036854775807
    • 無符號長整型,關鍵字unsigned long,32位系統上占4字節,數據值范圍0 到 4,294,967,295,64位系統上占8字節,數據值范圍0到18446744073709551615
    • 還有long longunsigned long long,占8字節內存,數據值范圍分別為-9223372036854775808到9223372036854775807和0到18446744073709551615

    浮點型分為:

    • 單精度浮點型,關鍵字為float,占4字節,數值范圍1.2E-38 到 3.4E+38,精度是精確到6位小數
    • 雙精度浮點型,關鍵詞為double,占8字節,數值范圍2.3E-308 到 1.7E+308,精度是精確到15位小數
    • 還有一種,碼哥我詞窮了,不知道中文該怎么叫了,關鍵詞為long double,占16字節,數值范圍3.4E-4932 到 1.1E+4932,精度是精確到19位小數

    可以看到,實數都是有一個精度范圍的,如果超出這個精度范圍就會造成精度損失,因此在運行一些除法運算后再執行乘法力圖恢復初始值時有時是不可能的。

    字符型分為:

    • 有符號字符,關鍵詞char,占1字節,數值范圍-128 到 127
    • 無符號字符,關鍵詞unsigned char,占1字節,數值范圍0 到 255

    其中char型字符為可輸出字符,參考ASCII碼表來找到其對應的輸出到終端上的字符:零基礎學C語言——變量、常量與數據類型

    ASCII碼表

    其中,值為0~31和127的字符是控制類字符,剩余為可顯示字符。

    空類型:又稱為void型,關鍵字為void,表示無類型或者不知其類型。

    指針類型:本節暫時不討論,留待后續專門討論指針的文章中詳述。

    看一些例子

    到此,我們來看一下各種類型的例子,鞏固一下前面的內容。

    整型示例:

    short var_1 = -1; //有符號短整型
    
    unsigned short var_2 = 65535; //無符號短整型
    
    int var_3 = 1000000; //有符號整型
    
    unsigned int var_4 = 999999999; //無符號整型
    
    long var_5 = 9876278913; //有符號長整型
    
    unsigned long var_6 = 12871236897; //無符號長整型
    
    long long var_7 = -1238123871; //碼哥詞窮,這類型你就當是長長整型吧...
    
    unsigned long long var_8 = 1987623453;
    
    const int a = 10; //整型常量a的值為10
    
    const short b = 127; //短整型常量b的值為127

    浮點型示例:

    float var_1 = 3.141592; //單精度浮點數
    
    double var_2 = 1.124987651; //雙精度浮點數
    
    long double var_3 = 3231.3123817682;
    
    const float pi = 3.141592; //單精度浮點型常量pi的值為3.141592

    字符型示例:

    char var_1 = 70; //有符號字符型
    
    char var_2 = 'F'; //有符號字符型,var_2和var_1其實是相等的,在ASCII碼表中,F的十進制值即為70
    //如果要給char型變量賦值ASCII碼表中可顯示字符,需要用單引號擴住,且單引號內只能有一個字符
    //但有一種特例,叫做轉譯字符例如下面:
    char var_3 = 'n'; //這里的  就是轉義字符,當編譯器遇到轉自字符時會吞掉轉義字符,
    //并查看其后字符是什么字符,然后轉成相應特定字符,本例中n為換行符,即ASCII中值為10的換行符。
    
    unsigned char var_4 = 255; //無符號字符型
    
    const char enter = 'n'; //字符型常量enter的值為 n

    變量以及常量的命名要求

    上面的示例中碼哥對變量和常量的名字命名都是形如:

    var_xxx

    其實在C語言中,變量與常量的名字命名是有規范的,要求如下:

    名字必須以字母或者下劃線開頭,后面的字符既可以是字母也可以是下劃線也可以是數字。

    所以,形如如下名字是不合法的:

    123_abc
    -a
    +a
    123bcd

    類型轉換

    先來看一個例子體會一下:

    int a = 5.0 / 2;

    /表示?,即除法。這時a的值是多少呢?

    答案是2,而不是2.5。這里就是類型轉換起了作用。5.0是浮點數,浮點數除整數,得到的結果還是浮點數,但是這個值賦給了整型變量a,因此除法的結果需要滿足a的類型約束,只保留整數部分,因此就是2。這里也不存在四舍五入一說,即便是2.99999也會是2,而不是3。

    上面的這種轉換叫做自動類型轉換,與之相對的轉換模式叫強制類型轉換

    我們先看下強制類型轉換的例子,也就能理解上面這個例子叫自動類型轉換了。

    int b = (int)2.5;

    在這個例子中,如果不在2.5前加(int),那么編譯器會給出警告,說你這么寫等于是“偷摸地”將雙精度浮點數轉換為整型了。為了避免這個警告(當然,取整數也是符合這個例子中我的預期的,即我要的也是整數),在2.5前加入:

    (基礎數據類型) //本例為(int)

    將2.5先轉成整型2,然后賦給變量b。

    下面看一些其他類型轉換的例子:

    unsigned char var_1 = (unsigned char)'F'; //因為'F'默認為char型
    
    short var_2 = (short)999999; //999999為int型,直接賦值會爆出警告,強制類型轉換后不會有警告,但是var_2的值為16959

    這里var_2的值為16959的原因是:

    整型999999占4字節,其十六進制為0x000F423F。short類型占2字節,因此會將int型的低16位(即后兩字節)內容賦給變量var_2,也就是0x423F,這個十六進制數轉換為十進制后的值就是16959。

    對于十六進制不了解的讀者,可以去網上先充一下電,因為十六進制在編程中用到的頻度不比整數低。

    版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

    發表評論

    登錄后才能評論
    国产精品区一区二区免费