第2章數(shù)據(jù)類型、運(yùn)算符和表達(dá)式_第1頁(yè)
第2章數(shù)據(jù)類型、運(yùn)算符和表達(dá)式_第2頁(yè)
第2章數(shù)據(jù)類型、運(yùn)算符和表達(dá)式_第3頁(yè)
第2章數(shù)據(jù)類型、運(yùn)算符和表達(dá)式_第4頁(yè)
第2章數(shù)據(jù)類型、運(yùn)算符和表達(dá)式_第5頁(yè)
已閱讀5頁(yè),還剩87頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 2.1.1 二進(jìn)制數(shù)、八進(jìn)制數(shù)與十六進(jìn)制數(shù)二進(jìn)制數(shù)、八進(jìn)制數(shù)與十六進(jìn)制數(shù)u十進(jìn)制數(shù)有10個(gè)數(shù)碼:09,加法運(yùn)算采用“逢十進(jìn)一”的進(jìn)位法則u二進(jìn)制數(shù)有2個(gè)數(shù)碼:0和1,加法運(yùn)算采用“逢二進(jìn)一”的進(jìn)位法則u八進(jìn)制數(shù)有8個(gè)數(shù)碼:07,加法運(yùn)算采用“逢八進(jìn)一”的進(jìn)位法則。u十六進(jìn)制數(shù)有16個(gè)數(shù)碼:09和AF,加法運(yùn)算采用“逢十六進(jìn)一”的進(jìn)位法則2.1.2 二進(jìn)制數(shù)、八進(jìn)制數(shù)、十進(jìn)制數(shù)和十六二進(jìn)制數(shù)、八進(jìn)制數(shù)、十進(jìn)制數(shù)和十六進(jìn)制數(shù)之間的換算進(jìn)制數(shù)之間的換算采用按權(quán)展開(kāi)逐個(gè)相加的方法十進(jìn)制數(shù)的整數(shù)部分采用除以二取余數(shù),直到商為零;十進(jìn)制數(shù)的小數(shù)部分采用乘以二取整(即十分位向個(gè)位的進(jìn)位),直到小數(shù)部分為零

2、(或者精確到小數(shù)點(diǎn)后規(guī)定的位數(shù))。轉(zhuǎn)換時(shí)以小數(shù)點(diǎn)為分界線,整數(shù)部分從低到高,小數(shù)部分從高到低按位數(shù)分組,每3位二進(jìn)制數(shù)對(duì)應(yīng)1位八進(jìn)制數(shù);分組時(shí)若不足3位數(shù)時(shí),整數(shù)部分要在前面補(bǔ)0、小數(shù)部分要在后面補(bǔ)0。轉(zhuǎn)換時(shí)以小數(shù)點(diǎn)為分界線,整數(shù)部分從低到高,小數(shù)部分從高到低按位數(shù)分組,每4位二進(jìn)制數(shù)對(duì)應(yīng)1位十六進(jìn)制數(shù);分組時(shí)若不足4位數(shù)時(shí),整數(shù)部分要在前面補(bǔ)0、小數(shù)部分要在后面補(bǔ)0。u 機(jī)器數(shù)和真值u 原碼、反碼與補(bǔ)碼u 定點(diǎn)數(shù)與浮點(diǎn)數(shù)u ASCII編碼2.2.1 機(jī)器數(shù)與真值機(jī)器數(shù)與真值計(jì)算機(jī)只能識(shí)別“0”和“1”兩種數(shù)碼。數(shù)的正、負(fù)符號(hào)也可以用“0”和“1”來(lái)表示,具體地,把一個(gè)數(shù)的最高位作為符號(hào)位,稱

3、為數(shù)符,用“0”表示正,“1”表示負(fù),其余位仍然表示數(shù)值。 注意:機(jī)器數(shù)表示的范圍受到字長(zhǎng)的限制,例如,如果表示一個(gè)整數(shù),字長(zhǎng)是16位,那么最大值是0111111111111111,因此16位整數(shù)的最大值是32767。如果超過(guò)32767,就要“溢出”。帶符號(hào)位的機(jī)器數(shù)對(duì)應(yīng)的數(shù)值稱為機(jī)器數(shù)的真值。寫出帶符號(hào)位的機(jī)器數(shù)(00100001)2和(10100011)2的真值。(00100001)2= +33(10100011)2= -35 當(dāng)計(jì)算機(jī)字長(zhǎng)的所有二進(jìn)位都用來(lái)表示數(shù)值時(shí),稱為無(wú)符號(hào)數(shù)。一般在不出現(xiàn)負(fù)數(shù)的情況下,可以使用無(wú)符號(hào)數(shù)。這樣可以將最大數(shù)增大一倍。例如16位無(wú)符號(hào)數(shù)的最大值是(1111

4、111111111111)2,也就是65535。2.2.2 原碼、反碼和補(bǔ)碼原碼、反碼和補(bǔ)碼整數(shù)X的原碼是指:其數(shù)符位0表示正,1表示負(fù),其數(shù)值部分是X的絕對(duì)值的二進(jìn)制表示。+1原 = 00000001+127原 = 01111111-1原 = 10000001-127原 = 11111111整數(shù)X的反碼是指:對(duì)于正數(shù),與原碼相同;對(duì)于負(fù)數(shù),數(shù)符位為1,其數(shù)值部分是X的絕對(duì)值取反,即1變0,0變1。例如:+1反 = 00000001 +127反 = 01111111-1 反 = 11111110 -127 反 = 10000000整數(shù)X的補(bǔ)碼是指:對(duì)于正數(shù),與原碼相同;對(duì)于負(fù)數(shù),數(shù)符位為 1,

5、其數(shù)值部分是X的絕對(duì)值取反后最低位加1,即負(fù)數(shù)的補(bǔ)碼等于其對(duì)應(yīng)的反碼加1。例如:+1補(bǔ) = 00000001,+127補(bǔ) = 01111111-1 補(bǔ) = 11111111,-127 補(bǔ) = 100000012.2.3 定點(diǎn)數(shù)和浮點(diǎn)數(shù)定點(diǎn)數(shù)和浮點(diǎn)數(shù) 計(jì)算機(jī)處理的數(shù)多數(shù)帶有小數(shù)點(diǎn),小數(shù)點(diǎn)在計(jì)算機(jī)中不占二進(jìn)位,那么如何表示小數(shù)點(diǎn)的位置,反映數(shù)值的大小? l 第一種是約定機(jī)器數(shù)的小數(shù)點(diǎn)隱含在某一固定位置上的定點(diǎn)表示法l 第二種是小數(shù)點(diǎn)位置可以任意移動(dòng)的浮點(diǎn)表示法當(dāng)約定小數(shù)點(diǎn)位置固定在機(jī)器數(shù)的最低位之后時(shí),稱為定點(diǎn)整數(shù)。當(dāng)約定小數(shù)點(diǎn)位置固定在符號(hào)位之后,有效數(shù)值部分最高位之前時(shí),稱為定點(diǎn)小數(shù)。定點(diǎn)小數(shù)

6、在計(jì)算機(jī)中的格式表示如圖2-3所示: 任何一個(gè)二進(jìn)制的浮點(diǎn)數(shù)(也稱為實(shí)數(shù))都可以表示成如下的形式: 其中,。例如: 在計(jì)算機(jī)中規(guī)定浮點(diǎn)數(shù)的尾數(shù)采用純小數(shù)形式,上例中的0.100011和0.0100011。如果尾數(shù)的最高位為1,則稱為規(guī)格化數(shù),因此上例中的 就是規(guī)格化數(shù)。浮點(diǎn)數(shù)在計(jì)算機(jī)內(nèi)部的表示形式如下圖2-4所示。例:二進(jìn)制數(shù) 在計(jì)算機(jī)中的存儲(chǔ)方式如圖2-5所示(階符一位,階碼兩位原碼,數(shù)符一位,尾數(shù)四位原碼)。數(shù)的定點(diǎn)表示和浮點(diǎn)表示各有優(yōu)缺點(diǎn),在不同的場(chǎng)合都得到使用。當(dāng)所占用的位數(shù)相同時(shí),浮點(diǎn)數(shù)所表示的數(shù)的范圍要比定點(diǎn)數(shù)大,運(yùn)算精度一般比定點(diǎn)數(shù)要高,但浮點(diǎn)數(shù)的運(yùn)算規(guī)則比定點(diǎn)數(shù)運(yùn)算規(guī)則要復(fù)雜,

7、所以相應(yīng)的計(jì)算機(jī)運(yùn)算部件也比較復(fù)雜。 所謂(constant),是指在程序運(yùn)行過(guò)程中,其值不可改變的量。在C語(yǔ)言中常量具有整型、實(shí)型和字符型。 例如:1234、-12為整型常量,1234. ,123.4 和-123.4為實(shí)型常量,a與A都為字符型常量。 程序中,這種能夠從字面上看出數(shù)值的常量稱為,另外可以使用一個(gè)標(biāo)識(shí)符來(lái)代表一個(gè)常量,稱為。2.3.1 整型常量整型常量:如2001,-18,0。:在八進(jìn)制整數(shù)的前面加一個(gè)0。如02001表示(2001)8、-017表示-(17)8,而019則是錯(cuò)誤的,因?yàn)榘诉M(jìn)制數(shù)不可能出現(xiàn)數(shù)碼9。:在十六進(jìn)制整數(shù)的前面加一個(gè)0 x。如0 x2001表示(2001

8、)16,0 xAB12表示(AB12)16。Visual C+ 6.0中的整型常量可分為: 一個(gè)基本型常量占用 32比特的內(nèi)存單元,按補(bǔ)碼形式存儲(chǔ),取值范圍為-231231-1。一個(gè)長(zhǎng)整型常量占用32比特的內(nèi)存單元,取值范圍為-231231-1 。在書寫長(zhǎng)整型常量時(shí),要以英文字母l或L結(jié)尾,如123456L。 無(wú)符號(hào)型是指內(nèi)存單元中只存數(shù)據(jù)位而不存符號(hào)位。無(wú)符號(hào)基本型整數(shù)(unsigned int)的取值范圍與無(wú)符號(hào)長(zhǎng)整型數(shù)(unsigned long)的取值范圍相同,都為0232-1。 無(wú)符號(hào)基本整型常量要以字母u或U結(jié)尾,如123u,無(wú)符號(hào)長(zhǎng)整型常量要以字母ul或UL結(jié)尾,如123456U

9、L。2.3.2 實(shí)型常量實(shí)型常量實(shí)型數(shù)據(jù)也稱為浮點(diǎn)數(shù),在C語(yǔ)言中的實(shí)型常量具有以下兩種表示方法:(1)。這是最普通的表示方式。要注意,一定要有小數(shù)點(diǎn),例如:2002.,.2002,-3.14,0.0。 (2)。由數(shù)字部分、小寫字母e(或大寫字母E)和作為指數(shù)的整數(shù)組成。例如:要將2002.168寫成指數(shù)形式,可以有多種形式:2002.168e0,200.2168e1,20.02168e2,2.002168e3等。其中的2.002168e3稱為“規(guī)范化的指數(shù)形式”。一個(gè)實(shí)數(shù)在按指數(shù)格式輸出時(shí),是按規(guī)范化指數(shù)形式輸出的。2實(shí)型常量的分類單精度實(shí)型數(shù)的有效數(shù)字為67位,數(shù)值的范圍為10-371038

10、 。(2)雙精度實(shí)型數(shù)是另外一種類型的實(shí)數(shù)。在Visual C+ 6.0中,雙精度實(shí)型數(shù)占用內(nèi)存單元為64比特,數(shù)值范圍是10-30710308 ,有效數(shù)字是1516位。2.3.3 字符常量字符常量字符常量是一個(gè)整數(shù),寫成用一對(duì)單引號(hào)括住的單個(gè)字符的形式,例如a,A,x,$都是字符常量字符在內(nèi)存中以ASCII碼值的形式存儲(chǔ)。例如從ASCII碼表中可以查出字符a的ASCI碼值是97,它在計(jì)算機(jī)內(nèi)部的存儲(chǔ)形式如圖2-7所示。 字符常量的存儲(chǔ)形式與整數(shù)的存儲(chǔ)形式類似,所以字符常量的值就是該字符的ASCII碼值,例如字符0的值是48,而不是數(shù)值0。 在實(shí)際編程時(shí),應(yīng)該記住一些常用字符的ASCII值,由

11、此可以推導(dǎo)出其它字符的值。 字符A的ASCII值是65 字符a的ASCII值是97 字符0的ASCII值是48 空格字符 的ASCII值為32寫出下列程序的運(yùn)行結(jié)果。#include void main() int i,j; i=65; /*字符A的ASCII碼值*/ j=i+1; /*字符B的ASCII碼值*/ printf(%c,%cn,i,j);/*以字符形式輸出*/ printf(%d,%dn,i,j); /*以整數(shù)形式輸出*/A,B65,662.3.4 字符串常量字符串常量也叫字符串字面值,是用一對(duì)雙引號(hào)括住的由0個(gè)或者多個(gè)字符組成的字符序列。例如,“I am a student.”

12、、“Windows XP”和“”(空字符串)等 C語(yǔ)言規(guī)定:在每一個(gè)字符串的結(jié)尾系統(tǒng)自動(dòng)加上一個(gè)字符串結(jié)束標(biāo)志符0,以便判斷字符串是否結(jié)束。所以字符串“China”在內(nèi)存中的存儲(chǔ)形式如圖2-8所示, 從圖中能看出存儲(chǔ)該串所需的字符數(shù)不從圖中能看出存儲(chǔ)該串所需的字符數(shù)不是是5而是而是6。另外,字符串。另外,字符串“a”包括了包括了兩個(gè)字符兩個(gè)字符a和和0,故,故a不同于不同于a。2.3.5 符號(hào)常量符號(hào)常量(也稱為),它是用一個(gè)標(biāo)識(shí)符來(lái)代表的常量,C語(yǔ)言中用#define來(lái)定義一個(gè)符號(hào)常量,符號(hào)常量一般用大寫字母來(lái)表示。(有關(guān)內(nèi)容在第四章中有詳細(xì)論述)例如:通過(guò)使用以下形式定義了一個(gè)符號(hào)常量PI

13、,在預(yù)編譯程序時(shí)將代碼中所有的PI都用3.1415926來(lái)代替。下面一段程序是按華氏溫度與攝氏溫度的轉(zhuǎn)換公式: C=(5/9) (F-32) 打印出0F,10F,20F,直到100F之間的華氏溫度與攝氏溫度的對(duì)照表。#include #define LOWER 0 /*表的下限*/#define UPPER 100 /*表的上限*/#define STEP 10 /*步長(zhǎng)*/void main() int f; float c; for(f=LOWER;f=UPPER;f+=STEP) c=5.0f/9.0f*(f32); printf(%3d,%6.1fn,f,c); 簡(jiǎn)單地說(shuō),是指其值在程

14、序運(yùn)行過(guò)程中會(huì)發(fā)生改變的量。在程序設(shè)計(jì)中,必須通過(guò)變量名來(lái)使用變量。在給變量命名時(shí),必須用來(lái)表示,不能把關(guān)鍵字當(dāng)作變量名來(lái)使用。在C語(yǔ)言中,對(duì)所有的變量均要求“”,而且在定義變量名時(shí),盡量做到“見(jiàn)名知意”。 2.4.1 整型變量整型變量在C語(yǔ)言中具有以下6種整型變量:signed int:unsigned int: signed short int: unsigned short int: signed long int: unsigned long intC語(yǔ)言規(guī)定程序中使用的變量必須“先定義,后使用”,一般放在一個(gè)函數(shù)開(kāi)頭的說(shuō)明部分,它的作用域僅限于該函數(shù)內(nèi)部(關(guān)于變量與其作用域的內(nèi)容將在

15、第4章中介紹)。同一類型的變量可以任何方式分散在多個(gè)說(shuō)明中,例如:int lower,upper,step;float x,y;變量在說(shuō)明時(shí)可以同時(shí)初始化。例如:int i=0;int limit=MAXLINE+1;/*MAXLINE是符號(hào)常量*/int j,k=10;/*可以對(duì)變量的一部分初始化*/int lower=0,upper=100,step=20;*對(duì)幾個(gè)變量初始化*/char c=s;寫出下列程序的運(yùn)行結(jié)果。#include void main() int a=1; int b=-1; unsigned c,d; c=a; d=b; printf(a=%d,b=%d,c=%d,

16、c=%u,d=%d,d=%un,a,b,c,c,d,d);a=1,b=-1,c=1,c=1,d=-1,d=4294967295為什么d為作有符號(hào)數(shù)(%d)輸出時(shí)是-1,而作為無(wú)符號(hào)數(shù)(%u)輸出時(shí)卻是4294967295?這是因?yàn)閎賦值為-1,在內(nèi)存中按補(bǔ)碼形式存儲(chǔ)為32個(gè)1,即:當(dāng)把b賦值給d時(shí),d在內(nèi)存中的存儲(chǔ)也變?yōu)?2個(gè)1。(1)將包含符號(hào)位在內(nèi)的所有二進(jìn)制補(bǔ)碼的各位數(shù)字全部取反,即1變0、0變1;(2)將上述得到的結(jié)果轉(zhuǎn)換為十進(jìn)制整數(shù);(3)加上負(fù)號(hào);(4)上述結(jié)果最后再減去1。通過(guò)上述介紹可知,由于補(bǔ)碼的最高位(即符號(hào)位)為1,說(shuō)明了原來(lái)的十進(jìn)制整數(shù)應(yīng)該是負(fù)數(shù),經(jīng)過(guò)上述四步計(jì)算得到的

17、結(jié)果就是-1;,則按照二進(jìn)制整數(shù)轉(zhuǎn)換為十進(jìn)制整數(shù)的方法,最后得到的結(jié)果就是4294967295(即232-1)。寫出下列程序的運(yùn)行結(jié)果。#include void main() short int a,b; unsigned short i,j; a=32767; b=a+1;i=65535;j=i+1;printf(a=%d,b=%d,i=%u,j=%un,a,b,i,j);運(yùn)行結(jié)果如下運(yùn)行結(jié)果如下:a=32767,b=-32768,i=65535,j=0(1)一個(gè)取值范圍為-32768, 32767的整數(shù)應(yīng)被看作是short int型常量,允許給int型和long int型變量賦值;同樣,

18、一個(gè)取值范圍為2147483648, 2147483647的整數(shù),應(yīng)被看作是int型或者long型常量可以給long int型變量賦值。(2)由于int型與long int型的數(shù)據(jù)均占據(jù)相同長(zhǎng)度的內(nèi)存單位(即32比特),則int型常量同時(shí)也是long int型常量,可以賦給int型或long int型變量。(3)若要說(shuō)明某個(gè)常量是long int類型的常量,可以在該常量的后面加上尾符大寫字母L或者小寫字母l。例1234是int型常量,而1234L或者1234l則是long int型常量。(4)在函數(shù)調(diào)用中,如果形參是long int型,那么實(shí)參也必須是long int型,如果實(shí)參與形參的類型不

19、一致可以用強(qiáng)制類型轉(zhuǎn)換來(lái)表示。2.4.2 實(shí)型變量實(shí)型變量 與實(shí)型常量相一致,實(shí)型變量也分為以下三種類型:(單精度實(shí)型)(雙精度實(shí)型)(長(zhǎng)雙精度實(shí)型)#include void main() float x1,x2,x3; double y1,y2; x1=1.234567899e8f; x2=1234567.899e2f; x3=x1+1; printf(x1=%fnx2=%fnx3=%fn,x1,x2,x3); y1=1.234567899e8f; y2=y1+1; printf(y1=%fny2=%fn,y1,y2);x1=123456792.000000 x2=123456792.00

20、0000 x3=123456793.000000y1=123456792.000000y2=123456793.000000#include void main() float x1,x2,x3,x4; double y1,z1,z2,z3; x1=1234.567899f; x2=99876.54321f; x3=x1*x2; x4=1234.567899f*99876.54321f; printf(x3=%fnx4=%fn,x3,x4); y1=1234.567899*99876.54321; printf(y1=%fn,y1); z1=1234.567899; z2=99876.5432

21、1; z3=z1*z2; printf(z3=%fn,z3);:x3=123304376.000000 x4=123304376.000000y1=123304374.110152z3=123304374.110152分析運(yùn)行結(jié)果,可以看出系統(tǒng)將實(shí)型常量1 234.567 899和99 876.543 21按雙精度數(shù)據(jù)處理,這樣可以提高計(jì)算的精度。如果在實(shí)型常量后面加上f(或F),系統(tǒng)就會(huì)按單精度數(shù)據(jù)處理。2.4.3 字符型變量字符型變量 字符型變量用來(lái)存儲(chǔ)字符常量。一個(gè)字符變量在內(nèi)存中只占一個(gè)字節(jié),只能存儲(chǔ)一個(gè)字符。 下表2-5列出了Visual C+ 6.0中字符類型的取值范圍。寫出下列程

22、序的運(yùn)行結(jié)果。#include void main() char c1,c2; c1=A;/*字符A*/ c2=c1+1; /*字符B*/ printf(%c,%cn,c1,c2); /*以字符形式輸出*/ printf(%d,%dn,c1,c2); /*以整數(shù)形式輸出*/A,B65,66寫出下列程序的運(yùn)行結(jié)果。#include void main() int i; char c; c=0 x41; i=B; printf(%c,%dn,c,i);A,66寫出下列程序的運(yùn)行結(jié)果。#include void main() char c; unsigned char d; c=255; d=255

23、; printf(c=%dnd=%dn,c,d);:c=-1d=255C語(yǔ)言的運(yùn)算符非常豐富,根據(jù)運(yùn)算符的性質(zhì)可以分為算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、賦值運(yùn)算符、位運(yùn)算符、條件運(yùn)算符、自增和自減運(yùn)算符、逗號(hào)運(yùn)算符、指針運(yùn)算符、強(qiáng)制類型轉(zhuǎn)換運(yùn)算符、分量運(yùn)算符、下標(biāo)運(yùn)算符、求字節(jié)數(shù)運(yùn)算符、函數(shù)調(diào)用運(yùn)算符等。根據(jù)所需要的操作數(shù)個(gè)數(shù),運(yùn)算符又可以分成單目運(yùn)算符、雙目運(yùn)算符和三目運(yùn)算符。 2.5.1 算術(shù)運(yùn)算符與算術(shù)表達(dá)式算術(shù)運(yùn)算符與算術(shù)表達(dá)式+(加法運(yùn)算符,或正值運(yùn)算符)-(減法運(yùn)算符,或負(fù)值運(yùn)算符)*(乘法運(yùn)算符)/(除法運(yùn)算符)%(求余運(yùn)算符或模運(yùn)算符)用算術(shù)運(yùn)算符和括號(hào)將運(yùn)算對(duì)象連接起來(lái)的式

24、子稱為。運(yùn)算對(duì)象包括常量、變量和函數(shù)等。例如:x*y/z+2002.16815%(-7)+AC語(yǔ)言規(guī)定算術(shù)運(yùn)算符的優(yōu)先級(jí)為先做*,/,%;后做+,-。即“*,/,%”屬同一優(yōu)先級(jí),“+,-”屬同一優(yōu)先級(jí),而且前者優(yōu)先級(jí)高于后者。2.5.2 賦值運(yùn)算符與賦值表達(dá)式賦值運(yùn)算符與賦值表達(dá)式。它的作用是將一個(gè)表達(dá)式的值賦給一個(gè)變量,而不是數(shù)學(xué)中的等號(hào)。由賦值運(yùn)算符將一個(gè)變量和一個(gè)表達(dá)式連接起來(lái)的式子稱為“”。它的一般形式為:凡是雙目(二元)運(yùn)算符,都可以與賦值符一起組成復(fù)合賦值符。它的一般形式為:等價(jià)于: 變量名變量 雙目運(yùn)算符 表達(dá)式例如: x+=3等價(jià)于x=x+3 x%=3+a等價(jià)于x=x%(3+

25、a) 解答解答:先進(jìn)行“x-=x*(y=11)”的運(yùn)算,相當(dāng)于x=x-x*(y=11),經(jīng)計(jì)算得到x=-20再進(jìn)行x+=-20,相當(dāng)于x=x+(-20)=(-20)+(-20)=-40因此最后表達(dá)式的值為-402.5.3 強(qiáng)制類型轉(zhuǎn)換運(yùn)算符強(qiáng)制類型轉(zhuǎn)換運(yùn)算符當(dāng)兩種不同類型的數(shù)據(jù)進(jìn)行運(yùn)算時(shí), C語(yǔ)言會(huì)自動(dòng)按規(guī)則進(jìn)行類型的轉(zhuǎn)換(譬如將int類型的數(shù)據(jù)賦值給float類型的變量),此外,程序員還可以利用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符將一個(gè)表達(dá)式轉(zhuǎn)換成所需要的類型。例如:表達(dá)式(int)(x + y)表示先對(duì)x+y求和,再將和值轉(zhuǎn)換成int類型,此時(shí)就不能誤寫成(int)(x)+y。2.5.4 自加、自減運(yùn)算符自

26、加、自減運(yùn)算符加一運(yùn)算符用于使其運(yùn)算分量加1減一運(yùn)算符用于使其運(yùn)算分量減1+與-這兩個(gè)運(yùn)算符既可以用作前綴運(yùn)算符(即用在變量名前面,如+n),也能用作后綴運(yùn)算符(即用在變量名后面,如n+),雖然都能使n加1,但二者存在差別:如果已知int n=5,那么情況I: x=n+; 最后的結(jié)果:x=5,n=6情況II:x=+n; 最后的結(jié)果:x=6,n=62.5.5 逗號(hào)運(yùn)算符與逗號(hào)表達(dá)式逗號(hào)運(yùn)算符與逗號(hào)表達(dá)式用逗號(hào)運(yùn)算符將兩個(gè)表達(dá)式連接起來(lái)所形成的表達(dá)式稱為其格式為:逗號(hào)表達(dá)式的過(guò)程:先求解表達(dá)式1,再求解表達(dá)式2,則整個(gè)逗號(hào)表達(dá)式的值就是表達(dá)式2的值。例如,z=(x=10,10+20),z的值為30

27、,x的值為10。逗號(hào)表達(dá)式中的表達(dá)式又可以是一個(gè)逗號(hào)表達(dá)式,這樣逗號(hào)表達(dá)式的一般形式就可以擴(kuò)展成:整個(gè)逗號(hào)表達(dá)式的值就是表達(dá)式 n 的值。2.5.6 位運(yùn)算位運(yùn)算所謂,就是指對(duì)一個(gè)數(shù)的二進(jìn)制位的運(yùn)算。在匯編語(yǔ)言中有位操作的指令,不過(guò)C語(yǔ)言也提供了位運(yùn)算功能,可用于單片機(jī)的開(kāi)發(fā)領(lǐng)域,因此C語(yǔ)言既具有高級(jí)語(yǔ)言的特點(diǎn),同時(shí)又具有低級(jí)語(yǔ)言的特點(diǎn)。C語(yǔ)言提供了6個(gè)用于位操作的運(yùn)算符,這些運(yùn)算符只能作用于各種整型數(shù)據(jù)(如char 型、int 型、unsigned 型、long型)。 按位與按位與AND(二元運(yùn)算符)(二元運(yùn)算符) 按位或按位或OR(二元運(yùn)算符)(二元運(yùn)算符) 按位異或按位異或XOR(二元運(yùn)

28、算符)(二元運(yùn)算符) 按位左移(二元運(yùn)算符)按位左移(二元運(yùn)算符) 按位右移(二元運(yùn)算符)按位右移(二元運(yùn)算符) 按位取反(一元運(yùn)算符)按位取反(一元運(yùn)算符)參加運(yùn)算的兩個(gè)操作數(shù)按二進(jìn)制位進(jìn)行“與”運(yùn)算,規(guī)則如下:&運(yùn)算經(jīng)常用于屏蔽某些二進(jìn)制位。假設(shè)辦公樓有16層,每層過(guò)道里都裝了照明燈。已知第1層過(guò)道中的燈是開(kāi)著的,其它樓層里的燈有的開(kāi)有的關(guān)。為了節(jié)電的需要,現(xiàn)在要求只保留第1層過(guò)道里的燈照明,其它樓層的燈全部要熄滅,請(qǐng)問(wèn)如何實(shí)現(xiàn)?:本題可以用一個(gè)數(shù)字開(kāi)關(guān)來(lái)控制。這里定義一個(gè)short類型的變量switch,規(guī)定它的每一個(gè)二進(jìn)制位自右向左分別對(duì)應(yīng)著第1層至第16層的開(kāi)關(guān),其中若某位是0,表示

29、那一層的燈是關(guān)著的,為1則表示開(kāi)燈。此時(shí)的控制語(yǔ)句寫為:switch = switch & 0 x0001;參加運(yùn)算的兩個(gè)操作數(shù),按二進(jìn)制位進(jìn)行“或”運(yùn)算。運(yùn)算規(guī)則如下:0 | 0=0 0 | 1=11 | 0=1 1 | 1=1|運(yùn)算經(jīng)常用于設(shè)置某些位。如果想要1樓、3樓與5樓的照明燈都打開(kāi),則可以這樣運(yùn)算:switch = switch | 0 x0015;參加運(yùn)算的兩個(gè)操作數(shù),按二進(jìn)制位進(jìn)行“異或”運(yùn)算。運(yùn)算規(guī)則如下:0 0=0 0 1=1 1 0=1 1 1=0從運(yùn)算規(guī)則可以看出,與“1”異或位取反,與“0”異或位保留。按位異或還有一個(gè)特點(diǎn):在一個(gè)數(shù)據(jù)上兩次異或同一個(gè)數(shù),結(jié)果變回到原來(lái)

30、的數(shù)。這個(gè)特點(diǎn)常常使用在動(dòng)畫程序設(shè)計(jì)中。將short 型變量x的低5位都取反(即1變0、0變1),可以這樣運(yùn)算:x=x (00000000 00011111)2 即 x=x 0 x001f運(yùn)算符是一個(gè)單目運(yùn)算符,它用來(lái)對(duì)一個(gè)二進(jìn)制數(shù)按位取反,即1變0、0變1。運(yùn)算符的優(yōu)先級(jí)比算術(shù)運(yùn)算符、關(guān)系運(yùn)算符和其他的位運(yùn)算符都要高。將short型變量x的低6位全部置為0,可以這樣運(yùn)算:x = x & 077相當(dāng)于x = x & (077)xn表示把x的每一位向左移動(dòng)n位,右邊空出的位置補(bǔ)0,同時(shí)原來(lái)的高位經(jīng)過(guò)左移之后丟棄不用。例如: 對(duì)于變量 short x=64;則x對(duì)應(yīng)的二進(jìn)制表示為00000000

31、01000000。將x 左移一位可以由語(yǔ)句x=x1;實(shí)現(xiàn),其運(yùn)算過(guò)程如下:而(00000000 10000000)2對(duì)應(yīng)的十進(jìn)制整數(shù)是128,也就是說(shuō)641相當(dāng)于642=128。在一定范圍內(nèi)的按位左移n位,相當(dāng)于原數(shù)的十進(jìn)制數(shù)乘以2n但要注意這里所說(shuō)的范圍限制,例如:(01000000 00000000)2 n表示把x的每一位向右移動(dòng)n位,移到右端的低位被丟棄。例如,無(wú)符號(hào)數(shù)15右移2位,即 152,相當(dāng)于(00000000 00001111)22,結(jié)果為(00000000 00000011)2;而對(duì)有符號(hào)數(shù)6右移2位,即(6)2,相當(dāng)于(11111111 11111010)22,結(jié)果就應(yīng)該是

32、(11111111 11111110)2此時(shí)得到的結(jié)果就仍然是有符號(hào)數(shù)。在C語(yǔ)言中,輸入/輸出操作是通過(guò)函數(shù)調(diào)用來(lái)實(shí)現(xiàn)的。用戶只要直接調(diào)用C語(yǔ)言標(biāo)準(zhǔn)函數(shù)庫(kù)中的標(biāo)準(zhǔn)輸入/輸出函數(shù),就可以完成輸入/輸出操作。由標(biāo)準(zhǔn)庫(kù)提供的輸入/輸出模型非常簡(jiǎn)單。在使用標(biāo)準(zhǔn)輸入/輸出函數(shù)時(shí),要在程序的開(kāi)頭加上文件包含命令:2.6.1 字符的輸入和輸出字符的輸入和輸出 標(biāo)準(zhǔn)庫(kù)中的getchar( )和putchar( )函數(shù)通常用于在終端設(shè)備上一次讀取/寫入一個(gè)字符。實(shí)際上在使用終端設(shè)備時(shí),系統(tǒng)會(huì)自動(dòng)打開(kāi)三個(gè)標(biāo)準(zhǔn)文件:標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出文件,而標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出可以通過(guò)重定向手段重定向到某一數(shù)據(jù)文件。

33、使用getchar( )函數(shù)時(shí),從輸入設(shè)備(即鍵盤)上讀入一個(gè)字符,并將其作為結(jié)果值返回。 使用putchar( )函數(shù)時(shí),在輸出設(shè)備(即命令提示符窗口或稱MS-DOS窗口)上顯示一個(gè)字符。下面的程序運(yùn)行時(shí),會(huì)把從鍵盤上輸入的任意字符全部顯示在屏幕上。如果鍵入組合鍵【Ctrl+Z】或者功能鍵【F6】,則運(yùn)行結(jié)束。#include void main() int c; while(c=getchar()!=EOF)putchar(c);程序分析:(1)從鍵盤上鍵入的字符在計(jì)算機(jī)內(nèi)部是按位模式存儲(chǔ)的,所以任何整數(shù)類型也可以存儲(chǔ)字符數(shù)據(jù)。(2)while循環(huán)語(yǔ)句的執(zhí)行過(guò)程:首先檢測(cè)圓括號(hào)內(nèi)的條件,如

34、果為真,則執(zhí)行循環(huán)體;然后重新檢測(cè)條件,為真,再執(zhí)行循環(huán)體,直到條件為假,循環(huán)結(jié)束。(3)EOF:為了區(qū)分文件的正常字符與文件的結(jié)束標(biāo)記。C語(yǔ)言在頭文件stdio.h中定義了一個(gè)整數(shù)EOF,此處代表文件結(jié)束符。(4)利用重定向手段將輸入指向一個(gè)文本文件,運(yùn)行程序,在屏幕上顯示該文本文件。如果不做輸入重定向,則輸入為鍵盤,運(yùn)行程序,輸入一個(gè)字符,顯示該字符,直到按【Ctrl+Z】組合鍵或功能鍵【F6】鍵結(jié)束。2.6.2 帶格式數(shù)據(jù)的輸入與輸出帶格式數(shù)據(jù)的輸入與輸出 上一節(jié)介紹的兩個(gè)函數(shù)putchar( )和getchar( )只能夠輸入/輸出一個(gè)字符,如果要求輸入/輸出任意類型的數(shù)據(jù),并且按照指

35、定的數(shù)據(jù)格式進(jìn)行輸入/輸出,則需要用到格式化輸出函數(shù)printf( )和格式化輸入函數(shù)scanf( )。printf()函數(shù)是有格式的輸出函數(shù),它能夠?qū)θ我忸愋偷膬?nèi)部數(shù)值按照指定格式的字符形式顯示。printf()函數(shù)的一般格式如下:其中格式控制字符串和輸出值參數(shù)表是printf()函數(shù)的參數(shù)。例如:格式控制字符串包括兩部分:按照原樣不動(dòng)輸出的普通字符和用于控制printf()函數(shù)中形參轉(zhuǎn)換的轉(zhuǎn)換規(guī)格說(shuō)明。轉(zhuǎn)換規(guī)格說(shuō)明由一個(gè)“%”開(kāi)頭到一個(gè)格式字符結(jié)尾,表2-8列出了常用的printf()函數(shù)格式轉(zhuǎn)化說(shuō)明符。如果只輸出字符串時(shí),則輸出值參數(shù)表可以省略,例:printf(This is a C

36、program.);在字符 %和轉(zhuǎn)換字符中間可以指定輸出域?qū)捄途?。寫出下列程序的運(yùn)行結(jié)果。#include void main() short x=-1; printf( %d: %dn %u: %un %o: %on %x: %xn,x,x,x,x);運(yùn)行結(jié)果如下:%d: -1%u: 4294967295%o: 37777777777%x: ffffffff程序分析:short類型的變量x的值為-1,它在內(nèi)存中按補(bǔ)碼形式的存儲(chǔ)格式為16個(gè)1,即:1111 1111 1111 1111 1111 1111 1111 1111采用%d格式輸出時(shí),是按照十進(jìn)制int類型的整數(shù)(32位)來(lái)輸出,得

37、到的結(jié)果仍然是-1;(1)將包含符號(hào)位在內(nèi)的所有二進(jìn)制補(bǔ)碼的各位數(shù)字全部取反,即1變0、0變1;(2)將上述得到的結(jié)果轉(zhuǎn)換為十進(jìn)制整數(shù);(3)加上負(fù)號(hào);(4)上述結(jié)果最后再減去1。程序繼續(xù)分析:采用%u格式時(shí),是按照十進(jìn)制unsigned int類型(32位)來(lái)輸出,原來(lái)存儲(chǔ)時(shí)的符號(hào)位1,被當(dāng)作數(shù)值位來(lái)處理,直接把二進(jìn)制轉(zhuǎn)換為十進(jìn)制,得到的結(jié)果為4294967295 ;采用%o格式輸出時(shí),是按照八進(jìn)制int類型的整數(shù)(32位)來(lái)輸出,得到的結(jié)果為37777777777 ;采用%x格式輸出時(shí),是按照十六進(jìn)制int類型的整數(shù)(32位)來(lái)輸出,得到的結(jié)果為ffffffff;另外,此例子中格式符“ %

38、d”的輸出結(jié)果為%d,注意它與“ %d”的輸出結(jié)果不同。寫出下列程序的運(yùn)行結(jié)果,其中格式符 %s用于字符串的輸出。#include void main() printf(%c%sn,T,his is a string.);運(yùn)行結(jié)果如下:This is a string.寫出下列程序的運(yùn)行結(jié)果。#include void main() float x=12.3456789f; double y=1234567891234.123456789; printf(%fn%fn%en%gn,x,y,y,y);運(yùn)行結(jié)果如下:12.3456791234567891234.1235001.234568e+01

39、21.23457e+012%f格式符以小數(shù)形式輸出時(shí),默認(rèn)6位小數(shù);單精度的有效位數(shù)一般為7位,而雙精度的有效位數(shù)一般為15位。寫出下列程序的運(yùn)行結(jié)果。#include void main() int x=123; printf(%6dn%06dn%-6dn%2dn,x,x,x,x);運(yùn)行結(jié)果如下: 123 占6列寬,域?qū)捴荡笥趯?shí)際位數(shù)時(shí),右對(duì)齊,左補(bǔ)空格000123 有前導(dǎo)0時(shí),左補(bǔ)0123域?qū)挒樨?fù)數(shù),左對(duì)齊,右補(bǔ)空格123域?qū)捴敌∮趯?shí)際位數(shù)時(shí),按實(shí)際位數(shù)輸出本例中的%6d中的6是域?qū)捴甘?,它必須為整?shù),指定了對(duì)應(yīng)的輸出項(xiàng)所占的字符個(gè)數(shù)。寫出下列程序的運(yùn)行結(jié)果。#include void main() float x=12.345f; printf(%.2fn%.2sn,x,abcde);運(yùn)行結(jié)果如下:12.35ab程序分析:.n(n為正整數(shù)),對(duì)于浮點(diǎn)數(shù),指定輸出的小數(shù)位數(shù),對(duì)于字符串,指定從字符串左側(cè)所截取的字符串個(gè)數(shù)。(2)輸出值參數(shù)表。輸出值參數(shù)表可以是常量、變量和表達(dá)式,它們之間用逗號(hào)隔開(kāi),輸出值的數(shù)據(jù)類型和個(gè)數(shù)應(yīng)該與格式轉(zhuǎn)換符相匹配。scanf()函數(shù)是有格式的輸入函數(shù),可以按照格式字符串指定的格式讀入若干個(gè)數(shù)據(jù),并把它們

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論