C Primer Plus 第3章 數(shù)據(jù)和C 筆記

示例程序

#include <stdio.h>
int main()
{
    float weight;
    float value;
    printf("Are you worth your weight in platinum?\n");
    printf("Let's check it out.\n");
    printf("Please enter your weight in pounds:\n");
    scanf("%f",&weight);
    value = 1700.0 * weight * 14.5833;
    printf("Your weight in platinum is worth $%.2f.\n",value);
    printf("You are easily worth that! If platinum prices drop,\n");
    printf("eat more to maintain your value.\n");
    return 0;
}

結(jié)果:


在這里插入圖片描述

本例使用了浮點數(shù)類型(float)的變量,以便處理更大范圍的數(shù)據(jù)。float類型可以存儲帶小數(shù)的數(shù)字。

在printf()中使用%f來處理浮點值。%.2f中的.2用于精確控制輸出,指定輸出的浮點數(shù)只顯示小數(shù)點后面兩位。

scanf()函數(shù)用于讀取鍵盤的輸入。%f說明scanf()要讀取用戶從鍵盤輸入的浮點數(shù),&weight告訴scanf()把輸入的值賦給名為weight的變量。scanf()函數(shù)使用&符號表明找到weight變量的地點。

變量與常量數(shù)據(jù)

有些數(shù)據(jù)類型在程序使用之前已經(jīng)預(yù)先設(shè)定好了,在整個程序的運行過程中沒有變化,這些稱為常量(constant)。
其他數(shù)據(jù)類型在程序運行期間可能會改變或被賦值,這些稱為變量(variable)。

數(shù)據(jù):數(shù)據(jù)類型關(guān)鍵字

在C語言中,
用int關(guān)鍵字來表示基本的整數(shù)類型。后3個關(guān)鍵字(long、short和unsigned)和C90新增的signed用于提供基本整數(shù)類型的變式,例如unsigned short int和longlong int。
char關(guān)鍵字用于指定字母和其他字符(如,#、$、%和*)。另外,char類型也可以表示較小的整數(shù)。
float、double和long double表示帶小數(shù)點的數(shù)。_Bool類型表示布爾值(true或false),_Complex和_Imaginary分別表示復(fù)數(shù)和虛數(shù)。
通過這些關(guān)鍵字創(chuàng)建的類型,按計算機(jī)的存儲方式可分為兩大基本類型:整數(shù)類型和浮點數(shù)類型。

位、字節(jié)和字

位、字節(jié)和字是描述計算機(jī)數(shù)據(jù)單元或存儲單元的術(shù)語。這里主要指存儲單元。

最小的存儲單元是位(bit),可以存儲0或1(或者說,位用于設(shè)置“開”或“關(guān)”)。

字節(jié)(byte)是常用的計算機(jī)存儲單位。對于幾乎所有的機(jī)器,1字節(jié)均為8位。

既然1位可以表示0或1,那么8位字節(jié)就有256(2的8次方)種可能的0、1的組合。通過二進(jìn)制編碼(僅用0和1便可表示數(shù)字),便可表示0~255的整數(shù)或一組字符

字(word)是設(shè)計計算機(jī)時給定的自然存儲單位。對于8位的微型計算機(jī)(如,最初的蘋果機(jī)),1個字長只有8位。從那以后,個人計算機(jī)字長增至16位、32位,直到目前的64位。計算機(jī)的字長越大,其數(shù)據(jù)轉(zhuǎn)移越快,允許的內(nèi)存訪問也更多。

整數(shù)和浮點數(shù)

整數(shù)

和數(shù)學(xué)的概念一樣,在C語言中,整數(shù)是沒有小數(shù)部分的數(shù)。

浮點數(shù)

浮點數(shù)與數(shù)學(xué)中實數(shù)的概念差不多。

關(guān)鍵要理解浮點數(shù)和整數(shù)的存儲方案不同。計算機(jī)把浮點數(shù)分成小數(shù)部分和指數(shù)部分來表示,而且分開存儲這兩部分。因此,雖然7.00和7在數(shù)值上相同,但是它們的存儲方式不同。


在這里插入圖片描述

C語言基本數(shù)據(jù)類型

int類型

int類型是有符號整型,即int類型的值必須是整數(shù),可以是正整數(shù)、負(fù)整數(shù)或零。其取值范圍依計算機(jī)系統(tǒng)而異。一般而言,存儲一個int要占用一個機(jī)器字長。

早期的16位IBM PC兼容機(jī)使用16位來存儲一個int值,其取值范圍(即int值的取值范圍)是-32768~32767。目前的個人計算機(jī)一般是32位,因此用32位存儲一個int值。現(xiàn)在,個人計算機(jī)產(chǎn)業(yè)正逐步向著64位處理器發(fā)展,自然能存儲更大的整數(shù)。

聲明int變量

int a;
int b,c,d;

賦值

a=1;

初始化變量

初始化(initialize)變量就是為變量賦一個初始值。

int a=1;
int b=2,c=3;

簡而言之,聲明為變量創(chuàng)建和標(biāo)記存儲空間,并為其指定初始值


在這里插入圖片描述

int類型常量

上面示例中出現(xiàn)的整數(shù)(1、2、3)都是整型常量或整型字面量。

打印int值

可以使用printf()函數(shù)打印int類型的值。
%d指明了在一行中打印整數(shù)的位置。%d稱為轉(zhuǎn)換說明,它指定了printf()應(yīng)使用什么格式來顯示一個值。格式化字符串中的每個%d都與待打印變量列表中相應(yīng)的int值匹配。這個值可以是int類型的變量、int類型的常量或其他任何值為int類型的表達(dá)式。

#include <stdio.h>
int main()
{
    int a=1;
    printf("a=%d",a);
    return 0;
}
在這里插入圖片描述

顯示八進(jìn)制和十六進(jìn)制

八進(jìn)制顯示數(shù)字,使用%o;以十六進(jìn)制顯示數(shù)字,使用%x。另外,要顯示各進(jìn)制數(shù)的前綴0、0x和0X,必須分別使用%#o、%#x、%#X。

#include <stdio.h>
int main()
{
    int x=100;
    printf("%d;%o;%x\n",x,x,x);
    printf("%d;%#o;%#x\n",x,x,x);
}
在這里插入圖片描述

其他整數(shù)類型

  • short 占用的存儲空間可能比int類型少,常用于較小數(shù)值的場合以節(jié)省空間。

  • long int或long占用的存儲空間可能比int多,適用于較大數(shù)值的場合。與int類似,long是有符號類型。

  • long long int或long long(C99標(biāo)準(zhǔn)加入)占用的存儲空間可能比long多,適用于更大數(shù)值的場合。該類型至少占64位。與int類似,long long是有符號類型。

  • unsigned int或unsigned只用于非負(fù)值的場合。這種類型與有符號類型表示的范圍不同。例如,16位unsignedint允許的取值范圍是0~65535,而不是-32768~32767。用于表示正負(fù)號的位現(xiàn)在用于表示另一個二進(jìn)制位,所以無符號整型可以表示更大的數(shù)。

  • 在C90標(biāo)準(zhǔn)中,添加了unsigned long int或unsignedlong和unsigned short int或unsigned short類型。C99標(biāo)準(zhǔn)又添加了unsigned long long int或unsignedlong long。

聲明其他整數(shù)類型

    long int a;
    long b;
    short int c;
    short d;
    unsigned int e;
    unsigned f;
    unsigned long h;
    unsigned short y;
    long long j;

整數(shù)溢出

#include <stdio.h>
int main()
{
    int i =2147483647;
    unsigned int j=4294967295;
    printf("%d %d %d\n",i,i+1,i+2);
    printf("%u %u %u\n",j,j+1,j+2);
    return 0;
}
在這里插入圖片描述

可以把無符號整數(shù)j看作是汽車的里程表。當(dāng)達(dá)到它能表示的最大值時,會重新從起始點開始。整數(shù)i也是類似的情況。它們主要的區(qū)別是,在超過最大值時,unsigned int類型的變量j從0開始;而int類型的變量i則從?2147483648開始。注意,當(dāng)i超出(溢出)其相應(yīng)類型所能表示的最大值時,系統(tǒng)并未通知用戶。因此,在編程時必須自己注意這類問題。

打印unsigned int類型的值,使用%u轉(zhuǎn)換說明;打印long類型的值,使用%ld轉(zhuǎn)換說明。如果系統(tǒng)中int和long的大小相同,使用%d就行。

char類型

char類型用于存儲字符(如,字母或標(biāo)點符號),但是從技術(shù)層面看,char是整數(shù)類型。因為char類型實際上存儲的是整數(shù)而不是字符。計算機(jī)使用數(shù)字編碼來處理字符,即用特定的整數(shù)表示特定的字符。美國最常用的編碼是ASCII編碼,本書也使用此編碼。

聲明char類型變量

char a;
char b,c;

字符常量和初始化

char a='A';

打印字符

#include <stdio.h>
int main()
{
    char a='C';
    printf("%c\n",a);
    printf("%d",a);
}
在這里插入圖片描述

在這里插入圖片描述

_Bool類型

C99標(biāo)準(zhǔn)添加了_Bool類型,用于表示布爾值,即邏輯值true和false。因為C語言用值1表示true,值0表示false,所以_Bool類型實際上也是一種整數(shù)類型。但原則上它僅占用1位存儲空間,因為對0和1而言,1位的存儲空間足夠了。

轉(zhuǎn)義字符

在這里插入圖片描述
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容