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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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

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

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

9、L。2.3.2 實型常量實型常量實型數(shù)據(jù)也稱為浮點數(shù),在C語言中的實型常量具有以下兩種表示方法:(1)。這是最普通的表示方式。要注意,一定要有小數(shù)點,例如: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,它在計算機內(nèi)部的存儲形式如圖2-7所示。 字符常量的存儲形式與整數(shù)的存儲形式類似,所以字符常量的值就是該字符的ASCII碼值,例如字符0的值是48,而不是數(shù)值0。 在實際編程時,應該記住一些常用字符的ASCII值,由

11、此可以推導出其它字符的值。 字符A的ASCII值是65 字符a的ASCII值是97 字符0的ASCII值是48 空格字符 的ASCII值為32寫出下列程序的運行結果。#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ī)定:在每一個字符串的結尾系統(tǒng)自動加上一個字符串結束標志符0,以便判斷字符串是否結束。所以字符串“China”在內(nèi)存中的存儲形式如圖2-8所示, 從圖中能看出存儲該串所需的字符數(shù)不從圖中能看出存儲該串所需的字符數(shù)不是是5而是而是6。另外,字符串。另外,字符串“a”包括了包括了兩個字符兩個字符a和和0,故,故a不同于不同于a。2.3.5 符號常量符號常量(也稱為),它是用一個標識符來代表的常量,C語言中用#define來定義一個符號常量,符號常量一般用大寫字母來表示。(有關內(nèi)容在第四章中有詳細論述)例如:通過使用以下形式定義了一個符號常量PI

13、,在預編譯程序時將代碼中所有的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、序運行過程中會發(fā)生改變的量。在程序設計中,必須通過變量名來使用變量。在給變量命名時,必須用來表示,不能把關鍵字當作變量名來使用。在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)部(關于變量與其作用域的內(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;寫出下列程序的運行結果。#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)存中按補碼形式存儲為32個1,即:當把b賦值給d時,d在內(nèi)存中的存儲也變?yōu)?2個1。(1)將包含符號位在內(nèi)的所有二進制補碼的各位數(shù)字全部取反,即1變0、0變1;(2)將上述得到的結果轉(zhuǎn)換為十進制整數(shù);(3)加上負號;(4)上述結果最后再減去1。通過上述介紹可知,由于補碼的最高位(即符號位)為1,說明了原來的十進制整數(shù)應該是負數(shù),經(jīng)過上述四步計算得到的

17、結果就是-1;,則按照二進制整數(shù)轉(zhuǎn)換為十進制整數(shù)的方法,最后得到的結果就是4294967295(即232-1)。寫出下列程序的運行結果。#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);運行結果如下運行結果如下:a=32767,b=-32768,i=65535,j=0(1)一個取值范圍為-32768, 32767的整數(shù)應被看作是short int型常量,允許給int型和long int型變量賦值;同樣,

18、一個取值范圍為2147483648, 2147483647的整數(shù),應被看作是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、一致可以用強制類型轉(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分析運行結果,可以看出系統(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、序的運行結果。#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寫出下列程序的運行結果。#include void main() int i; char c; c=0 x41; i=B; printf(%c,%dn,c,i);A,66寫出下列程序的運行結果。#include void main() char c; unsigned char d; c=255; d=255

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

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

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

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

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

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

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

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

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

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

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

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

35、定的數(shù)據(jù)格式進行輸入/輸出,則需要用到格式化輸出函數(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ī)格說明由一個“%”開頭到一個格式字符結尾,表2-8列出了常用的printf()函數(shù)格式轉(zhuǎn)化說明符。如果只輸出字符串時,則輸出值參數(shù)表可以省略,例:printf(This is a C

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

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

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

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

溫馨提示

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

最新文檔

評論

0/150

提交評論