版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
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個數(shù)碼:09,加法運(yùn)算采用“逢十進(jìn)一”的進(jìn)位法則u二進(jìn)制數(shù)有2個數(shù)碼:0和1,加法運(yùn)算采用“逢二進(jìn)一”的進(jìn)位法則u八進(jìn)制數(shù)有8個數(shù)碼:07,加法運(yùn)算采用“逢八進(jìn)一”的進(jìn)位法則。u十六進(jìn)制數(shù)有16個數(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)展開逐個相加的方法十進(jìn)制數(shù)的整數(shù)部分采用除以二取余數(shù),直到商為零;十進(jìn)制數(shù)的小數(shù)部分采用乘以二取整(即十分位向個位的進(jìn)位),直到小數(shù)部分為零
2、(或者精確到小數(shù)點(diǎn)后規(guī)定的位數(shù))。轉(zhuǎn)換時以小數(shù)點(diǎn)為分界線,整數(shù)部分從低到高,小數(shù)部分從高到低按位數(shù)分組,每3位二進(jìn)制數(shù)對應(yīng)1位八進(jìn)制數(shù);分組時若不足3位數(shù)時,整數(shù)部分要在前面補(bǔ)0、小數(shù)部分要在后面補(bǔ)0。轉(zhuǎn)換時以小數(shù)點(diǎn)為分界線,整數(shù)部分從低到高,小數(shù)部分從高到低按位數(shù)分組,每4位二進(jìn)制數(shù)對應(yīng)1位十六進(jìn)制數(shù);分組時若不足4位數(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ī)只能識別“0”和“1”兩種數(shù)碼。數(shù)的正、負(fù)符號也可以用“0”和“1”來表示,具體地,把一個數(shù)的最高位作為符號位,稱
3、為數(shù)符,用“0”表示正,“1”表示負(fù),其余位仍然表示數(shù)值。 注意:機(jī)器數(shù)表示的范圍受到字長的限制,例如,如果表示一個整數(shù),字長是16位,那么最大值是0111111111111111,因此16位整數(shù)的最大值是32767。如果超過32767,就要“溢出”。帶符號位的機(jī)器數(shù)對應(yīng)的數(shù)值稱為機(jī)器數(shù)的真值。寫出帶符號位的機(jī)器數(shù)(00100001)2和(10100011)2的真值。(00100001)2= +33(10100011)2= -35 當(dāng)計算機(jī)字長的所有二進(jìn)位都用來表示數(shù)值時,稱為無符號數(shù)。一般在不出現(xiàn)負(fù)數(shù)的情況下,可以使用無符號數(shù)。這樣可以將最大數(shù)增大一倍。例如16位無符號數(shù)的最大值是(1111
4、111111111111)2,也就是65535。2.2.2 原碼、反碼和補(bǔ)碼原碼、反碼和補(bǔ)碼整數(shù)X的原碼是指:其數(shù)符位0表示正,1表示負(fù),其數(shù)值部分是X的絕對值的二進(jìn)制表示。+1原 = 00000001+127原 = 01111111-1原 = 10000001-127原 = 11111111整數(shù)X的反碼是指:對于正數(shù),與原碼相同;對于負(fù)數(shù),數(shù)符位為1,其數(shù)值部分是X的絕對值取反,即1變0,0變1。例如:+1反 = 00000001 +127反 = 01111111-1 反 = 11111110 -127 反 = 10000000整數(shù)X的補(bǔ)碼是指:對于正數(shù),與原碼相同;對于負(fù)數(shù),數(shù)符位為 1,
5、其數(shù)值部分是X的絕對值取反后最低位加1,即負(fù)數(shù)的補(bǔ)碼等于其對應(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ī)處理的數(shù)多數(shù)帶有小數(shù)點(diǎn),小數(shù)點(diǎn)在計算機(jī)中不占二進(jìn)位,那么如何表示小數(shù)點(diǎn)的位置,反映數(shù)值的大??? l 第一種是約定機(jī)器數(shù)的小數(shù)點(diǎn)隱含在某一固定位置上的定點(diǎn)表示法l 第二種是小數(shù)點(diǎn)位置可以任意移動的浮點(diǎn)表示法當(dāng)約定小數(shù)點(diǎn)位置固定在機(jī)器數(shù)的最低位之后時,稱為定點(diǎn)整數(shù)。當(dāng)約定小數(shù)點(diǎn)位置固定在符號位之后,有效數(shù)值部分最高位之前時,稱為定點(diǎn)小數(shù)。定點(diǎn)小數(shù)
6、在計算機(jī)中的格式表示如圖2-3所示: 任何一個二進(jìn)制的浮點(diǎn)數(shù)(也稱為實數(shù))都可以表示成如下的形式: 其中,。例如: 在計算機(jī)中規(guī)定浮點(diǎn)數(shù)的尾數(shù)采用純小數(shù)形式,上例中的0.100011和0.0100011。如果尾數(shù)的最高位為1,則稱為規(guī)格化數(shù),因此上例中的 就是規(guī)格化數(shù)。浮點(diǎn)數(shù)在計算機(jī)內(nèi)部的表示形式如下圖2-4所示。例:二進(jìn)制數(shù) 在計算機(jī)中的存儲方式如圖2-5所示(階符一位,階碼兩位原碼,數(shù)符一位,尾數(shù)四位原碼)。數(shù)的定點(diǎn)表示和浮點(diǎn)表示各有優(yōu)缺點(diǎn),在不同的場合都得到使用。當(dāng)所占用的位數(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ī)運(yùn)算部件也比較復(fù)雜。 所謂(constant),是指在程序運(yùn)行過程中,其值不可改變的量。在C語言中常量具有整型、實型和字符型。 例如:1234、-12為整型常量,1234. ,123.4 和-123.4為實型常量,a與A都為字符型常量。 程序中,這種能夠從字面上看出數(shù)值的常量稱為,另外可以使用一個標(biāo)識符來代表一個常量,稱為。2.3.1 整型常量整型常量:如2001,-18,0。:在八進(jìn)制整數(shù)的前面加一個0。如02001表示(2001)8、-017表示-(17)8,而019則是錯誤的,因為八進(jìn)制數(shù)不可能出現(xiàn)數(shù)碼9。:在十六進(jìn)制整數(shù)的前面加一個0 x。如0 x2001表示(2001
8、)16,0 xAB12表示(AB12)16。Visual C+ 6.0中的整型常量可分為: 一個基本型常量占用 32比特的內(nèi)存單元,按補(bǔ)碼形式存儲,取值范圍為-231231-1。一個長整型常量占用32比特的內(nèi)存單元,取值范圍為-231231-1 。在書寫長整型常量時,要以英文字母l或L結(jié)尾,如123456L。 無符號型是指內(nèi)存單元中只存數(shù)據(jù)位而不存符號位。無符號基本型整數(shù)(unsigned int)的取值范圍與無符號長整型數(shù)(unsigned long)的取值范圍相同,都為0232-1。 無符號基本整型常量要以字母u或U結(jié)尾,如123u,無符號長整型常量要以字母ul或UL結(jié)尾,如123456U
9、L。2.3.2 實型常量實型常量實型數(shù)據(jù)也稱為浮點(diǎn)數(shù),在C語言中的實型常量具有以下兩種表示方法:(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ù)形式”。一個實數(shù)在按指數(shù)格式輸出時,是按規(guī)范化指數(shù)形式輸出的。2實型常量的分類單精度實型數(shù)的有效數(shù)字為67位,數(shù)值的范圍為10-371038
10、 。(2)雙精度實型數(shù)是另外一種類型的實數(shù)。在Visual C+ 6.0中,雙精度實型數(shù)占用內(nèi)存單元為64比特,數(shù)值范圍是10-30710308 ,有效數(shù)字是1516位。2.3.3 字符常量字符常量字符常量是一個整數(shù),寫成用一對單引號括住的單個字符的形式,例如a,A,x,$都是字符常量字符在內(nèi)存中以ASCII碼值的形式存儲。例如從ASCII碼表中可以查出字符a的ASCI碼值是97,它在計算機(jī)內(nèi)部的存儲形式如圖2-7所示。 字符常量的存儲形式與整數(shù)的存儲形式類似,所以字符常量的值就是該字符的ASCII碼值,例如字符0的值是48,而不是數(shù)值0。 在實際編程時,應(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 字符串常量字符串常量也叫字符串字面值,是用一對雙引號括住的由0個或者多個字符組成的字符序列。例如,“I am a student.”
12、、“Windows XP”和“”(空字符串)等 C語言規(guī)定:在每一個字符串的結(jié)尾系統(tǒng)自動加上一個字符串結(jié)束標(biāo)志符0,以便判斷字符串是否結(jié)束。所以字符串“China”在內(nèi)存中的存儲形式如圖2-8所示, 從圖中能看出存儲該串所需的字符數(shù)不從圖中能看出存儲該串所需的字符數(shù)不是是5而是而是6。另外,字符串。另外,字符串“a”包括了包括了兩個字符兩個字符a和和0,故,故a不同于不同于a。2.3.5 符號常量符號常量(也稱為),它是用一個標(biāo)識符來代表的常量,C語言中用#define來定義一個符號常量,符號常量一般用大寫字母來表示。(有關(guān)內(nèi)容在第四章中有詳細(xì)論述)例如:通過使用以下形式定義了一個符號常量PI
13、,在預(yù)編譯程序時將代碼中所有的PI都用3.1415926來代替。下面一段程序是按華氏溫度與攝氏溫度的轉(zhuǎn)換公式: C=(5/9) (F-32) 打印出0F,10F,20F,直到100F之間的華氏溫度與攝氏溫度的對照表。#include #define LOWER 0 /*表的下限*/#define UPPER 100 /*表的上限*/#define STEP 10 /*步長*/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); 簡單地說,是指其值在程
14、序運(yùn)行過程中會發(fā)生改變的量。在程序設(shè)計中,必須通過變量名來使用變量。在給變量命名時,必須用來表示,不能把關(guān)鍵字當(dāng)作變量名來使用。在C語言中,對所有的變量均要求“”,而且在定義變量名時,盡量做到“見名知意”。 2.4.1 整型變量整型變量在C語言中具有以下6種整型變量:signed int:unsigned int: signed short int: unsigned short int: signed long int: unsigned long intC語言規(guī)定程序中使用的變量必須“先定義,后使用”,一般放在一個函數(shù)開頭的說明部分,它的作用域僅限于該函數(shù)內(nèi)部(關(guān)于變量與其作用域的內(nèi)容將在
15、第4章中介紹)。同一類型的變量可以任何方式分散在多個說明中,例如:int lower,upper,step;float x,y;變量在說明時可以同時初始化。例如:int i=0;int limit=MAXLINE+1;/*MAXLINE是符號常量*/int j,k=10;/*可以對變量的一部分初始化*/int lower=0,upper=100,step=20;*對幾個變量初始化*/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為作有符號數(shù)(%d)輸出時是-1,而作為無符號數(shù)(%u)輸出時卻是4294967295?這是因為b賦值為-1,在內(nèi)存中按補(bǔ)碼形式存儲為32個1,即:當(dāng)把b賦值給d時,d在內(nèi)存中的存儲也變?yōu)?2個1。(1)將包含符號位在內(nèi)的所有二進(jìn)制補(bǔ)碼的各位數(shù)字全部取反,即1變0、0變1;(2)將上述得到的結(jié)果轉(zhuǎn)換為十進(jìn)制整數(shù);(3)加上負(fù)號;(4)上述結(jié)果最后再減去1。通過上述介紹可知,由于補(bǔ)碼的最高位(即符號位)為1,說明了原來的十進(jìn)制整數(shù)應(yīng)該是負(fù)數(shù),經(jīng)過上述四步計算得到的
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)一個取值范圍為-32768, 32767的整數(shù)應(yīng)被看作是short int型常量,允許給int型和long int型變量賦值;同樣,
18、一個取值范圍為2147483648, 2147483647的整數(shù),應(yīng)被看作是int型或者long型常量可以給long int型變量賦值。(2)由于int型與long int型的數(shù)據(jù)均占據(jù)相同長度的內(nèi)存單位(即32比特),則int型常量同時也是long int型常量,可以賦給int型或long int型變量。(3)若要說明某個常量是long int類型的常量,可以在該常量的后面加上尾符大寫字母L或者小寫字母l。例1234是int型常量,而1234L或者1234l則是long int型常量。(4)在函數(shù)調(diào)用中,如果形參是long int型,那么實參也必須是long int型,如果實參與形參的類型不
19、一致可以用強(qiáng)制類型轉(zhuǎn)換來表示。2.4.2 實型變量實型變量 與實型常量相一致,實型變量也分為以下三種類型:(單精度實型)(雙精度實型)(長雙精度實型)#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)將實型常量1 234.567 899和99 876.543 21按雙精度數(shù)據(jù)處理,這樣可以提高計算的精度。如果在實型常量后面加上f(或F),系統(tǒng)就會按單精度數(shù)據(jù)處理。2.4.3 字符型變量字符型變量 字符型變量用來存儲字符常量。一個字符變量在內(nèi)存中只占一個字節(jié),只能存儲一個字符。 下表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ùn)算符非常豐富,根據(jù)運(yùn)算符的性質(zhì)可以分為算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、賦值運(yùn)算符、位運(yùn)算符、條件運(yùn)算符、自增和自減運(yùn)算符、逗號運(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ù)個數(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)算符和括號將運(yùn)算對象連接起來的式
24、子稱為。運(yùn)算對象包括常量、變量和函數(shù)等。例如:x*y/z+2002.16815%(-7)+AC語言規(guī)定算術(shù)運(yùn)算符的優(yōu)先級為先做*,/,%;后做+,-。即“*,/,%”屬同一優(yōu)先級,“+,-”屬同一優(yōu)先級,而且前者優(yōu)先級高于后者。2.5.2 賦值運(yùn)算符與賦值表達(dá)式賦值運(yùn)算符與賦值表達(dá)式。它的作用是將一個表達(dá)式的值賦給一個變量,而不是數(shù)學(xué)中的等號。由賦值運(yùn)算符將一個變量和一個表達(dá)式連接起來的式子稱為“”。它的一般形式為:凡是雙目(二元)運(yùn)算符,都可以與賦值符一起組成復(fù)合賦值符。它的一般形式為:等價于: 變量名變量 雙目運(yùn)算符 表達(dá)式例如: x+=3等價于x=x+3 x%=3+a等價于x=x%(3+
25、a) 解答解答:先進(jìn)行“x-=x*(y=11)”的運(yùn)算,相當(dāng)于x=x-x*(y=11),經(jīng)計算得到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)算時, C語言會自動按規(guī)則進(jìn)行類型的轉(zhuǎn)換(譬如將int類型的數(shù)據(jù)賦值給float類型的變量),此外,程序員還可以利用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符將一個表達(dá)式轉(zhuǎn)換成所需要的類型。例如:表達(dá)式(int)(x + y)表示先對x+y求和,再將和值轉(zhuǎn)換成int類型,此時就不能誤寫成(int)(x)+y。2.5.4 自加、自減運(yùn)算符自
26、加、自減運(yùn)算符加一運(yùn)算符用于使其運(yùn)算分量加1減一運(yùn)算符用于使其運(yùn)算分量減1+與-這兩個運(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 逗號運(yùn)算符與逗號表達(dá)式逗號運(yùn)算符與逗號表達(dá)式用逗號運(yùn)算符將兩個表達(dá)式連接起來所形成的表達(dá)式稱為其格式為:逗號表達(dá)式的過程:先求解表達(dá)式1,再求解表達(dá)式2,則整個逗號表達(dá)式的值就是表達(dá)式2的值。例如,z=(x=10,10+20),z的值為30
27、,x的值為10。逗號表達(dá)式中的表達(dá)式又可以是一個逗號表達(dá)式,這樣逗號表達(dá)式的一般形式就可以擴(kuò)展成:整個逗號表達(dá)式的值就是表達(dá)式 n 的值。2.5.6 位運(yùn)算位運(yùn)算所謂,就是指對一個數(shù)的二進(jìn)制位的運(yùn)算。在匯編語言中有位操作的指令,不過C語言也提供了位運(yùn)算功能,可用于單片機(jī)的開發(fā)領(lǐng)域,因此C語言既具有高級語言的特點(diǎn),同時又具有低級語言的特點(diǎn)。C語言提供了6個用于位操作的運(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)算的兩個操作數(shù)按二進(jìn)制位進(jìn)行“與”運(yùn)算,規(guī)則如下:&運(yùn)算經(jīng)常用于屏蔽某些二進(jìn)制位。假設(shè)辦公樓有16層,每層過道里都裝了照明燈。已知第1層過道中的燈是開著的,其它樓層里的燈有的開有的關(guān)。為了節(jié)電的需要,現(xiàn)在要求只保留第1層過道里的燈照明,其它樓層的燈全部要熄滅,請問如何實現(xiàn)?:本題可以用一個數(shù)字開關(guān)來控制。這里定義一個short類型的變量switch,規(guī)定它的每一個二進(jìn)制位自右向左分別對應(yīng)著第1層至第16層的開關(guān),其中若某位是
29、0,表示那一層的燈是關(guān)著的,為1則表示開燈。此時的控制語句寫為:switch = switch & 0 x0001;參加運(yùn)算的兩個操作數(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樓的照明燈都打開,則可以這樣運(yùn)算:switch = switch | 0 x0015;參加運(yùn)算的兩個操作數(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”異或位保留。按位異或還有一個特點(diǎn):在一個數(shù)據(jù)上兩次異或同一個數(shù)
30、,結(jié)果變回到原來的數(shù)。這個特點(diǎn)常常使用在動畫程序設(shè)計中。將short 型變量x的低5位都取反(即1變0、0變1),可以這樣運(yùn)算:x=x (00000000 00011111)2 即 x=x 0 x001f運(yùn)算符是一個單目運(yùn)算符,它用來對一個二進(jìn)制數(shù)按位取反,即1變0、0變1。運(yùn)算符的優(yōu)先級比算術(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的每一位向左移動n位,右邊空出的位置補(bǔ)0,同時原來的高位經(jīng)過左移之后丟棄不用。例如: 對于變量 short x=64;則x對應(yīng)
31、的二進(jìn)制表示為00000000 01000000。將x 左移一位可以由語句x=x1;實現(xiàn),其運(yùn)算過程如下:而(00000000 10000000)2對應(yīng)的十進(jìn)制整數(shù)是128,也就是說641相當(dāng)于642=128。在一定范圍內(nèi)的按位左移n位,相當(dāng)于原數(shù)的十進(jìn)制數(shù)乘以2n但要注意這里所說的范圍限制,例如:(01000000 00000000)2 n表示把x的每一位向右移動n位,移到右端的低位被丟棄。例如,無符號數(shù)15右移2位,即 152,相當(dāng)于(00000000 00001111)22,結(jié)果為(00000000 00000011)2;而對有符號數(shù)6右移2位,即(6)2,相當(dāng)于(11111111 11
32、111010)22,結(jié)果就應(yīng)該是(11111111 11111110)2此時得到的結(jié)果就仍然是有符號數(shù)。在C語言中,輸入/輸出操作是通過函數(shù)調(diào)用來實現(xiàn)的。用戶只要直接調(diào)用C語言標(biāo)準(zhǔn)函數(shù)庫中的標(biāo)準(zhǔn)輸入/輸出函數(shù),就可以完成輸入/輸出操作。由標(biāo)準(zhǔn)庫提供的輸入/輸出模型非常簡單。在使用標(biāo)準(zhǔn)輸入/輸出函數(shù)時,要在程序的開頭加上文件包含命令:2.6.1 字符的輸入和輸出字符的輸入和輸出 標(biāo)準(zhǔn)庫中的getchar( )和putchar( )函數(shù)通常用于在終端設(shè)備上一次讀取/寫入一個字符。實際上在使用終端設(shè)備時,系統(tǒng)會自動打開三個標(biāo)準(zhǔn)文件:標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤輸出文件,而標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出可以通過重
33、定向手段重定向到某一數(shù)據(jù)文件。 使用getchar( )函數(shù)時,從輸入設(shè)備(即鍵盤)上讀入一個字符,并將其作為結(jié)果值返回。 使用putchar( )函數(shù)時,在輸出設(shè)備(即命令提示符窗口或稱MS-DOS窗口)上顯示一個字符。下面的程序運(yùn)行時,會把從鍵盤上輸入的任意字符全部顯示在屏幕上。如果鍵入組合鍵【Ctrl+Z】或者功能鍵【F6】,則運(yùn)行結(jié)束。#include void main() int c; while(c=getchar()!=EOF)putchar(c);程序分析:(1)從鍵盤上鍵入的字符在計算機(jī)內(nèi)部是按位模式存儲的,所以任何整數(shù)類型也可以存儲字符數(shù)據(jù)。(2)while循環(huán)語句的執(zhí)行
34、過程:首先檢測圓括號內(nèi)的條件,如果為真,則執(zhí)行循環(huán)體;然后重新檢測條件,為真,再執(zhí)行循環(huán)體,直到條件為假,循環(huán)結(jié)束。(3)EOF:為了區(qū)分文件的正常字符與文件的結(jié)束標(biāo)記。C語言在頭文件stdio.h中定義了一個整數(shù)EOF,此處代表文件結(jié)束符。(4)利用重定向手段將輸入指向一個文本文件,運(yùn)行程序,在屏幕上顯示該文本文件。如果不做輸入重定向,則輸入為鍵盤,運(yùn)行程序,輸入一個字符,顯示該字符,直到按【Ctrl+Z】組合鍵或功能鍵【F6】鍵結(jié)束。2.6.2 帶格式數(shù)據(jù)的輸入與輸出帶格式數(shù)據(jù)的輸入與輸出 上一節(jié)介紹的兩個函數(shù)putchar( )和getchar( )只能夠輸入/輸出一個字符,如果要求輸入
35、/輸出任意類型的數(shù)據(jù),并且按照指定的數(shù)據(jù)格式進(jìn)行輸入/輸出,則需要用到格式化輸出函數(shù)printf( )和格式化輸入函數(shù)scanf( )。printf()函數(shù)是有格式的輸出函數(shù),它能夠?qū)θ我忸愋偷膬?nèi)部數(shù)值按照指定格式的字符形式顯示。printf()函數(shù)的一般格式如下:其中格式控制字符串和輸出值參數(shù)表是printf()函數(shù)的參數(shù)。例如:格式控制字符串包括兩部分:按照原樣不動輸出的普通字符和用于控制printf()函數(shù)中形參轉(zhuǎn)換的轉(zhuǎn)換規(guī)格說明。轉(zhuǎn)換規(guī)格說明由一個“%”開頭到一個格式字符結(jié)尾,表2-8列出了常用的printf()函數(shù)格式轉(zhuǎn)化說明符。如果只輸出字符串時,則輸出值參數(shù)表可以省略,例:pri
36、ntf(This is a C 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ǔ)碼形式的存儲格式為16個1,即:1111 1111 1111 1111 1111 1111 1111 1111采用%d格式輸出時,是按照十進(jìn)制in
37、t類型的整數(shù)(32位)來輸出,得到的結(jié)果仍然是-1;(1)將包含符號位在內(nèi)的所有二進(jìn)制補(bǔ)碼的各位數(shù)字全部取反,即1變0、0變1;(2)將上述得到的結(jié)果轉(zhuǎn)換為十進(jìn)制整數(shù);(3)加上負(fù)號;(4)上述結(jié)果最后再減去1。程序繼續(xù)分析:采用%u格式時,是按照十進(jìn)制unsigned int類型(32位)來輸出,原來存儲時的符號位1,被當(dāng)作數(shù)值位來處理,直接把二進(jìn)制轉(zhuǎn)換為十進(jìn)制,得到的結(jié)果為4294967295 ;采用%o格式輸出時,是按照八進(jìn)制int類型的整數(shù)(32位)來輸出,得到的結(jié)果為37777777777 ;采用%x格式輸出時,是按照十六進(jìn)制int類型的整數(shù)(32位)來輸出,得到的結(jié)果為ffffff
38、ff;另外,此例子中格式符“ %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.12
39、35001.234568e+0121.23457e+012%f格式符以小數(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ū)捴荡笥趯嶋H位數(shù)時,右對齊,左補(bǔ)空格000123 有前導(dǎo)0時,左補(bǔ)0123域?qū)挒樨?fù)數(shù),左對齊,右補(bǔ)空格123域?qū)捴敌∮趯嶋H位數(shù)時,按實際位數(shù)輸出本例中的%6d中的6是域?qū)捴甘?,它必須為整?shù),指定了對應(yīng)的輸出項所占的字符個數(shù)。寫出下列程序的運(yùn)行結(jié)果。#include void main() float x=12.345f; printf(%.2fn%.2sn,x,abcde);運(yùn)行結(jié)果如下:12.35ab程序分析:.n(n為正整數(shù)),對于浮點(diǎn)數(shù),指定輸出的小數(shù)位數(shù),對于字符串,指定從字符串左側(cè)所截取的字符串個數(shù)。(2)輸出值參數(shù)表。輸出值參數(shù)表可以是常量、變量和表達(dá)式,它們之間用逗號隔開,輸出值的數(shù)據(jù)類型和個數(shù)應(yīng)該與格式轉(zhuǎn)換符相匹配。scanf()函數(shù)是有格式的輸入函數(shù),可以按照格式字符串指定的格式讀入若干個數(shù)據(jù),并把它們存入?yún)?shù)地址表指定的地址單元。scanf()函數(shù)的一般格式為:其中,格式控制
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度美容院員工社會保險繳納合同樣本4篇
- 課題申報參考:面向2035年高等教育布局結(jié)構(gòu)研究
- 民政局2025年離婚協(xié)議書起草與備案流程指導(dǎo)4篇
- 2025年度門頭房屋租賃合同含租賃用途及經(jīng)營方向限制4篇
- 河南省周口中英文學(xué)校高三上學(xué)期期中考試語文試題(含答案)
- 2025年度個人二手房交易反擔(dān)保合同規(guī)范2篇
- 2025年度個人汽車貨運(yùn)風(fēng)險分擔(dān)合同范本
- 2025年度門禁監(jiān)控設(shè)備生產(chǎn)與銷售合同8篇
- 2025年度水電工程合同履約監(jiān)管承包協(xié)議4篇
- 2025年度木結(jié)構(gòu)建筑綠色施工與環(huán)保驗收合同4篇
- 人口老齡化背景下居民養(yǎng)老金融資產(chǎn)配置影響因素研究
- 人教版初中英語單詞大全七八九年級(帶音標(biāo)) mp3聽力音頻下載
- 2024項目部安全管理人員安全培訓(xùn)考試題及參考答案(模擬題)
- 《習(xí)近平法治思想概論(第二版)》 課件 2. 第二章 習(xí)近平法治思想的理論意義
- 諾和關(guān)懷俱樂部對外介紹
- 玩轉(zhuǎn)數(shù)和形課件
- 保定市縣級地圖PPT可編輯矢量行政區(qū)劃(河北省)
- 新蘇教版科學(xué)六年級下冊全冊教案(含反思)
- 天然飲用山泉水項目投資規(guī)劃建設(shè)方案
- 供方注冊指南-ZTE
- 2019年重慶市中考物理試卷(a卷)及答案
評論
0/150
提交評論