




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、C 語 言數據類型基 本數據類型導 出數據類型double(雙精度浮點型)long(長整型)char(字符類型)整 型short(短整型)int(整型)浮點型float(單精度浮點型)long double(長雙精度浮點型)void類型用戶定制類型T*(指針類型)struct(結構體類型)union(共用體類型)文件類型enum(枚舉)函數類型構造類型T(數組類型) C語言提供的基本數據類型包括char(字符)型、int(整)型、float(單精度實)型、double(雙精度實)型。并且還可以通過使用short、long、signed和unsigned修飾char和int,用long修飾dou
2、ble,形成更多的類型。 定點表示和浮點表示,是C語言基本數據類型的重要特征。為了說明什么是“定點”,什么是“浮點”,先看值的幾種表示形式: 日常的表示法 C語言中的表示形式3.14159100 3.14159e00.3141591010. 314159e+10.03141591020.0314159e+231.415910-131.4159e-13141.5910-33141.59e-33 . 1 4 1 5 9+1數值部分(尾數)指數(階碼) 內存中的數值是以補碼形式存放的,一個正數的補碼就是該數的二進制數(如10的補碼為00000000 00001010)。求一個負數的補碼的方法如下:如
3、-10的補碼可以這樣求: 先取該數的絕對值;先取10 然后以二進制形式表示;10的二進制碼為00000000 00001010 再對其取反;取反得11111111 11110101 然后加1;加1,得11111111 11110110,即-10的16位存儲形式為:11111111 11110110。 C語言對不同類型的數據分配不同寬度的存儲空間,典型的存儲空間寬度有:1個字節(8位)、2個字節(16位)、4個字節(32位)、8個字節(64位)和10個字節(80位)幾種。顯然,不同的長度,對應的數據的取值范圍是不同的。當然,同樣長度的取值范圍還與有無符號、是定點表示(整型)還是浮點表示(實型)有
4、關。另外還取決于所用的編譯系統。大多數編譯系統對一個帶符號整數的數值范圍處理為:-2n-1 2n-1-1。其中n為該整數所占的比特數。如果一個整數所占的比特數為16,則該想整數的苑圍為-32 767 32 767。也有一些編譯系統對一個帶符號整數的數值范圍處理為:-(2n-1 1) 2n-1-1。如果一個整數所占的比特數為16,則該想整數的苑圍為-32 768 32 768。數據長度(比特)取值范圍Signed (有符號)Unsigned (無符號)8-127 1270 25516-32 767 32 7670 65 53532-2 147 483 647 2 147 483 6470 4 2
5、94 967 29564-(263-1) 263-10 264-1(18 446 744 073 709 551 615)寬度(比特)數據類型機內表示(位數)取值范圍有效數字和精度階碼尾數符號32float 8231|3.4e-38| |3.4e+38|大約7位十進制有效數字,7位精度64double11521|1.7e-308| |1.7e+308|16或17位十進制有效數字,7位精度80long double由具體實現確定|1.2e-4932| |1.2e+4932|18位十進制有效數字,7位精度 C語言提供了一個測定某一種類型數據所占存儲空間長度的運算符“sizeof”它的格式為: si
6、zeof (類型標識符或數據) 當不了解所使用的編譯器中的某數據類型的寬度時,可以使用這個運算符計算之。例2.1 用sizeof運算符測定所用的C系統中各種類型數據的長度。/* 文件名:ex020101.c */* 測定數據類型長度 */#include int main(void)int i = 0;printf (char: %d bytes.n,sizeof(char);printf (short: %d bytes.n,sizeof(short);printf (i: %d bytesn,sizeof (i); /* 計算變量i的字節數*/printf (long: %d bytesn
7、,sizeof(long);printf (float: %d bytesn,sizeof(float);printf (double: %d bytesn,sizeof(double);printf (1.23456: %d bytesn,sizeof(1.23456); /* 計算常量的字節數*/printf (double: %d bytesn,sizeof(double);return 0; 2.2.1 整型常量1. 整數常量的三種進制 在C語言中,整型常量可以使用十進制數、八進制數、十六進制數等幾種形式書寫。 C語言規定,程序中凡出現以數字0開頭的數字序列,一律作為八進制數處理; 凡
8、出現以0 x開頭,后面跟若干位數字的,一律作為十六進制數處理;其它數字作為十進制數處理。 5121(十進制正整數)0111(八進制正整數,等于十進制數73)010007(八進制正整數,等于十進制數4103)0177777(八進制正整數,等于十進制65537)0XFFFF(十六進制正整數,等于十進制數65537)0 xA3(十六進制正整數,等于十進制數163)-32768(十進制負整數)09876(非十進制數,又非八進制數,因為有數字8和9)20fa(非十進制數,又非十六進制數,因為不是以0 x開頭)0 x10fg(出現了非法字符) 在C語言中整數可以進一步分為short、int、long和lo
9、ng logn等類型。那么,對于一個常數如何分辨其類型呢?一般說來,有以下原則: 1)默認原則:在沒有任何特別標志的情況下,可以按照常數所在的范圍,決定其類型。例如,在16位的機器中,當一個常整數的值在十進制-3276832767(八進制數00177777、十六制數0 x00 xFFFF),則被看作一個short int或int型整數。超出上述范圍的整常數,則被看作長整數(32位)表示。例如,234、32766、0177776、0 xFFFE等被看作是int型,而-32769、32768、0200000、0 x10000等被看作是long型。 2)后綴字母標識法: 用L或l表示long類型整數
10、。 用LL或ll表示long long類型整數。 用U或u表示unsigned類型。 例如:-12L(十進制long整數)-12LL(十進制long long整數)774545L(十進制long整數)076L(八進制long整數,等于十進制數32768)0100000L(八進制long整數,等于十進制62)0 x12l(十六進制long整數,等于十進制數18)0X8000l(十六進制long整數,等于十進制數32768)12345u(十進制unsigned int類型)12345UL(十進制unsigned long類型)在16位字長的機器中,一旦把一個常數表示成long整數,系統便將其存儲空
11、間擴充為4個字節。從值的大小上看,12L與12沒有區別,但它們占用的存儲空間不相同 1. 可打印字符 字符類型的數據在內存中以相應的ASCII代碼存放。例如,a的ASCII碼為97,則在內存中的二進制存儲形式為:01100001。例2.2/* 文件名:ex020201.c */#include int main(void)char ch;/* 定義了一個字符類型的變量ch */ch = a;printf (%d,ch);/* 使用整型格式碼 */return 0;運行結果為:97例2.3/* 文件名:ex020301.c */#include int main(void)char ch;int
12、 i;ch = A;ch = ch + 32;i = ch;printf (%d is %cn,i,ch);/* 注意格式碼 */printf(%c is %dn,ch,ch); /* 注意格式碼 */return 0;運行結果如下:97 is aa is 97例2.4/* 文件名:ex020401.c */#include int main(void)char c;c = 0362;printf (%dn, c);return 0;運行結果:-14 ASCII字符分為可打印字符和不可打印字符兩種。在C語言程序中,可打印字符常量是用一對單撇號括起來的一個字符,如a,A,?,。需要注意如下幾點:
13、 單撇號只是字符與其它部分的分隔符,或者說是字符常量的定界符,不是字符常量的一部分,當輸出一個字符常量時不輸出此撇號。 不能用雙引號代替撇號,如a不是字符常量。 撇號中的字符不能是單撇號或反斜杠,如或不是合法的字符常量。 轉義字符(反斜杠碼)是C語言提供的處理一些特殊字符(包括一些不可打印字符)方法。重要有如下一些: 用反斜杠開頭后面跟一個字母代表一個控制字符(不可打印字符); 用代表字符“”,用代表撇號字符; 用后跟1到3個八進制數代表ASCII碼為該八進制數的字符; 用x后跟1到2個十六進制數代表ASCII碼為該十六進制數的字符。轉義字符形式意 義n換行t水平制表v垂直制表b退格r回車f走
14、紙換頁a報警(如鈴聲)反斜杠?問號“雙撇號單撇號ddd13位八進制常數xhh12位十六進制常數例2.5/* 文件名:ex020501.c */*打印人民幣符號¥*/#include int main(void)printf(Yb=n);return 0; 該程序運行時先打印一個字符“Y”。這時打印頭已走到下一個位置,用控制代碼b使打印頭回退一格,即回到原先已打印好的Y位置再打印字符“=”,兩字符重迭形成人民幣符號“¥”。當然,這一輸出只能在打印機上實現,而不能在顯示器上實現。因為顯示器無此重迭顯示功能(在顯示后一字符時原在該位置上的字符消失)。 轉義字符除用來形成一個外設控制命令外,還用來輸出
15、不能直接從鍵盤上輸入或不能用字符常量書寫出的ASCII字符。這時要在反斜杠后跟一個代碼值,這個代碼值最多用三位八進制碼數(不加前綴)或兩位十六進制數(以x作前綴)表示。例2.6/* 文件名:ex020601.c */#include int main(void)char ch;ch=362;/*將八進制數362的ASCII字符賦給ch*/printf (%c,ch);return 0;上運行可在顯示屏上輸出:在C語言中,把用一對雙撇號括起來的零個或多個字符序列稱為字符串常數。如:hello, Programming in C ,A , a , 等。字符串以雙撇號為定界符,但雙撇號并不屬于字符串
16、。要在字符串中插入撇號,應借助轉義字符。例如要處理字符串I say: Goodby!時,可以把它寫為I say: Goodby!字符串中的字符數稱為該字符串的長度。字符串常數在機器內存儲時,系統自動在字符串的末尾加一個“字符串結束標志”,它是轉義字符“0”。如字符串“hello”在內存中存儲為:hello0C語言中的實型(浮點)數據常量用帶小數點和小數分量的形式表示,如12.345,也可以用科學記數法表示。C語言將實型數據分為:float、double和long double三種類型,并且默認的實型數據是double類型的。因此,對于帶小數點的常量,C語言編譯器會將之作為double類型看待。
17、如果要特別說明某帶小數點的常量是float類型或long double類型,可以使用后綴字母: 用f或F表示float類型,如123.45f 1.2345e+2F. 用l或L表示long double類型,如1234.5l 1.2345E+3L。使用科學記數法(指數形式)時,要求e的左邊必須有數值部分(有效數字),可以是整數,也可以是小數形式;指數必須是整數形式。例如,e5、2e1.23、.e5等都是不合法的。前面介紹的常量都是直接常量,從字面上即可直接看出它們的值是什么,因此又稱“字面常量”。符號常量則是在一個程序(或程序的一部分)中指定的用名字代表的常量,從字面上不能直接看出其類型和值。例
18、2.7 求圓面積和周長的兩個程序。程序1:/* 文件名:ex020701.c */* 計算圓的周長和面積 */#include double calcuArea (double r);double calcuCircumference (double r);int main(void)printf (area=%f, calcuArea (2.0);printf (tcircumference=% fn, calcuCircum (2.0);return 0;double calcuArea(double r) /* 計算圓面積 */return (3.141592654* r* r);dou
19、ble calcuCircum(double r) /* 計算圓周長 */return (2.0* 3.141592654* r):運行結果為:area = 12.566371 circumference = 12.566371程序2:/* 文件名:ex020702.c */* 計算圓的周長和面積 */#include define PI 3.141592654 /*定義符號常數*/define R 2.0double calcuArea(double r),;double calcuCircum(double r);int main(void)printf (area=%f, area (R
20、);printf (tcircumference=%fn, circumference (R);return 0; double calcuArea(double r)return (PI* r* r) double calcuCircum(double r)return (2.0* PI* r); 程序2的運行結果與程序1完全相同。程序2中PI代替3.141592654,用R代替20,使程序更容易理解,可讀性好,而且當需要修改R的值時只需要改一處即可,方便又不易出錯。定義符號常量的一種方法是使用define命令,它是一種“預編譯命令”,在編譯整個程序之前系統會先對程序中的預編譯命令進行處理。
21、上面define命令的作用是在預編譯時將程序中凡出現PI的地方全部以3.141592654代替,凡出現R的地方一律以2.0代替。 在下列情況下,C語言編譯器,可能將數據從一種類型轉換成另一種類型:(1)顯式轉換:使用轉換表達式。(2)隱式轉換,包括: 當二元運算符兩端的操作數類型不同時進行的轉換; 函數參數傳遞中的數據類型轉換; 函數返回時的數據類型轉換; 其他情形。1. 數據類型的提升與降格提升可以分為如下3類情況:(1)類型提升:由整數轉換為浮點數。(2)整數提升:由短整數類型轉換為長整數類型。(3)同一長度的整數有符號與不有符號的,屬于同一級別。例2.8 分析下面程序的執行結果。/* 文
22、件名:ex020801.c */#include int main(void)unsigned short us1 = 32767, us2 = 65535, us;signed short ss = -7; us = ss;printf(1)ss = %d, us = %dn,ss,us);ss = us1;printf(2)us1 = %d, ss = %dn,us1,ss);ss = us2;printf(3)us2 = %d, ss = %dn,us2,ss);return 0;程序執行結果如下:(1)ss = -7, us = 65529(2)us1 = 32767, ss = 32
23、767(3)us2 = 65535, ss = -1 (1)第1種情形是把一個有符號的數-7(在變量ss中),賦值給無符號類型的變量us后,存在無符號變量中的數據變成為65529了。這種變化是由于將原來的符號數中的符號變成了無符號數中的最高位而產生。如圖2.4所示,當一個-7的16位補碼被當作16位無符號數時,由于正數的原碼=補碼,所以1111 1111 1111 1001 = 65535(全1)-110=65529。1000000000000111-7原碼1111111111111001-7補碼1111111111111001無符號數類型轉換符號位變最高數據位 (2)第2種情形是將一個一般的
24、unsigned類型數據轉換成同長度的signed類型數據。在一般情況下,不會出現數據的錯誤。但是在第3種情形卻出現了錯誤。這是因為當無符號數較小,其最高位為0時,轉換成符號數后,最高位雖然被當作了符號位,但并沒有影響數據的有效值。而如果無符號數大到使最高位為1,則轉換成有符號數后,被當成了負數的補碼。于是,出現數據錯誤。 1111111111111111有符號數據補碼1111111111111111無符號數65535類型轉換1000000000000001有符號數據原碼最高位變符號位 當一個實數(浮點數)轉換為整數時,實數的小數部分全部舍去,并按整數形式存儲。例如將實數3276.85賦給一個
25、整型變量i,i的值為3276。但應注意,實數的整數部分不要超過整型數允許的最大范圍(微機上為-3276832767),否則數據出錯。 當由double型轉換為float型時,去掉多余的有效數字,但按四舍五入處理。 四舍五入會丟失一些精度,截去小數也會丟失一些精度。此外,由long型轉換成float或double型時,有可能在存儲時不能準確地表示該長整數的有效數字,精度也會受損失,因為float型只有7位精度。浮點數降格時,即double轉換為float,或double、float轉換成long int、short型。當數據值超過了目標類型的取值范圍時,所得到的結果將是不確定的(其實也是有規律的
26、,只是給出一個用戶往往難以理解的數值。例如,將實數32768.85賦給16位整型變量i,由于32768超過了16位整數最大值32767,在內存中就把32768存儲為1000000000000000形式,它代表整數-32768。如果輸出i,得-32768。若將32769.85賦給i,輸出整數i的值得-32767。這些牽涉到補碼的知識,在此不詳述)。當較長的整數轉換為較短的整數時,要將高位截去。例如long型為4個字節,short型為2個字節,將long型值賦給short類型,只將低字節內容送過去。這就會有很大誤差,得到的值是原數據值以32768為模的余數。/* 文件名:ex020901.c */
27、#include int main(void)double a = 123456.789098765;float b;long c;short i,j;b = a; c = a; i = a; j = c;printf (a = %f, b = %f, c = %d, i = %d, j = %dn,a,b,c,i,j);return 0;運行結果如下:a = 123456.789099, b = 123456.789063, c = 123456, i = -7616, j = -76161.賦值轉換2. 一般表達式轉換 (1)一元轉換 操作數類型標準C語言轉換傳統C語言轉換float(無轉
28、換)double階大于或等于int的整型數據(無轉換)(無轉換)階小于int的有符號類型數據intint階小于int的無符號類型數據,所有值可以用int類型表示intunsigned int階小于int的無符號類型數據,所有值不可用int類型表示unsigned intunsigned int(2)二元轉換按照優先級順序將各二元運算符兩端的操作數提升成同一類型。轉換按照下面的算法進行。IF(一個操作數為long double) 另一個操作數轉換為long doubleELSE IF(一個操作數為double) 另一個操作數轉換為doubleELSE IF(一個操作數為float) 另一個操作數
29、轉換為floatELSE IF(一個操作數為unsigned long) 另一個操作數轉換為unsigned longELSE IF(一個操作數為long) 另一個操作數轉換為longELSE IF(一個操作數為unsigned) 另一個操作數轉換為unsignedchar c;int i;float f;double d;int result;result = c * i + f / d - ( f + i);floatintdoubledoubledoubleintdoublefloatd o ubledoubledoubleint 例如,一個long型數在printf()中指定用%d格式
30、輸出,相當于先將long轉換為int型后再輸出。一個int型數也可按無符號方式輸出(使用%u轉換等)。 C語言提供一種“強制類型轉換”運算符,將一個類型的變量強制轉換為另一種類型。例如:(int)3.5中(int)的作用是將3.5轉換成整型。(類型標識符)表達式例如:(char) (3-3.14159 *x)(得到字符型數)k=(int)(int)x+(float)i+j)(得到整型數)(float)(x=99)(得到實型單精度數) C系統提供的數學函數中多數要求參數為double型,在調用這些函數時可以用顯示轉換方法進行類型轉換。例如:double atan (double)i)double
31、 cos (double)i)double sqrt (double)i)double log (double)i)double exp (double)i) 輸入輸出的對象是數據,而數據是以介質為載體的,因此進行輸入輸出操作就要與各種外部設備發生聯系,要指定從哪個設備(文件)讀入數據,將數據輸出到哪個設備(文件)上去。本節只討論從終端(鍵盤)輸入和輸出到終端(顯示器)的輸入輸出函數。通常也把這些函數稱為控制臺輸入輸出函數。主要是用得最廣泛的scanf函數、printf函數、getchar函數和putchar函數等。其中scanf和printf用于格式化輸入輸出。1. printf()基本格式
32、printf()函數的一般形式如下:int printf(格式控制字符串,輸出表達式1,輸出表達式2,);%修飾寬度精度長度修正 格式碼a/A,c,d,e/E,f,g/G,i,n,o,p,s,u,x/X,%l/L,h,ll,hh,j,z,t. 十進制整數十進制整數-,0,+,空格,#格式碼輸出說明舉 例輸出結果d/i帶符號十進制定點格式int a=975311;printf(“%d”,a);975310u無符號十進制定點格式int a=975311;printf(“%u”,a);975310o無符號八進制定點格式int a=975311;printf(“%o”,a);3560717x/X無符號
33、十六進制定點格式int a=975311;printf(“%x”,a);ee1cfc字符int a=68;printf(“%c”,a);Ds字符串char s=”abcde”; printf(“%s”,s);abcdef小數形式十進制double a=123.456;printf(%f,a);123.456000e/E科學記數法double a=123.456;printf(%E,a);1.234560E+002g/Gf和e中短者,不印無效0double a=123.456;printf(%G,a);123.456p輸出地址,格式由實現定義double a=123.456;printf(%p,
34、&a);0012FF74(a的地址)%printf(%);%長度修正符可修飾的格式碼參數類型ld,i,o,u,x,Xlong, lld,i,o,u,x,Xlong long int, unsigned long long inthd,i,o,u,x,Xshort, unsigned shorthhd,i,o,u,x,Xchar, unsigned charLa,A,e,E,f,g,Glong double 域寬與精度說明的格式為:m.n。其中: m為輸出域寬,用字符數表示。對實數,包括了一個小數點的位置。 n為精度,其用法有如下幾種情形: 配合格式碼f、e/E時,指定小數點后面的位數;未指定精
35、度時,默認小數點后6位。 配合格式碼g/G時,指定有效位的數目。 作用于字符串時,精度符限制最大域寬。 作用于整型數據時,指定必須顯示的最小位數,不足時左惻補先導0。/* 文件名:ex021001.c */#include int main(void) printf(“%12.5fn”,123.1234567); printf(“%12fn”,123.1234567); printf(“%12.5gn”,123.1234567); printf(“%5.10s%sn”,”abcdefghijklm”,”a”); printf(“%12.8dn”,12345); return 0;執行結果如圖2
36、.8所示。域寬12,精度5123.12346123.123457123.12abcdefghija00012345域寬12,未指定精度,默認6位精度域寬12,有效位5位最少5個字符,最大域寬10域寬12,未必須最少顯示8位,不足時左惻補0修飾符意 義-數據在輸出域中左對齊顯示0用“0”而非空格進行前填充+在有符號數前輸出前綴“+”或“-”空格對正數加前綴空格,對負數加前綴“-”#在g,f和f前,確保輸出字段中有一個小數點;在x前,確保輸出的十六進制數前有前綴0 x*做占位符號格式字段數據項表輸 出 結 果說 明%20di123456域中右對齊輸出%20 x,i1e240%20fx333.012
37、346%#20 xi0 x1e240確保加前綴0 x%-20fx333.012346域中左對齊% 20fx333.012346填充空格前導%020fx0000000000333.012346填充0前導%+20fy+333.012346確保加正負號%+20fy-555.012346%*.*f20,8,x333.01234568數據替代占位符例2.12 一個顯示美國各州面積、森林覆蓋面積和森林覆蓋率的簡單程序。/* 文件名:ex021201.c */* 美國各州面積列表 */#include int main(void)double ar ,por,perc;printf(%-12s%12s%12
38、s%12sn,State,Area,Forest,Percent);printf(-n);ar = 50750; por = 33945; perc = por/ar*100;printf(%-12s%12.0f%12.0f%10.2f%n,Alabama,ar,por, perc);ar = 591000;por = 201642; perc = por/ar*100;printf(%-12s%12.0f%12.0f%10.2f%n,Alaska,ar,por, perc);ar = 114000;por = 30287; perc = por/ar*100;printf(%-12s%12.
39、0f%12.0f%10.2f%n,Arlzona,ar,por, perc);ar = 53187;por = 26542; perc = por/ar*100;printf(%-12s%12.0f%12.0f%10.2f%n,Arkanasas,ar,por, perc);ar = 158706;por = 61532; perc = por/ar*100;printf(%-12s%12.0f%12.0f%10.2f%n,California,ar,por, perc);ar = 104000;por = 33340; perc = por/ar*100;printf(%-12s%12.0f
40、%12.0f%10.2f%n,Colorado,ar,por, perc);printf(“n”);return 0;/* 文件名:ex021301.c */#include int main(void)int a= 1, b = 2; printf( x = %d , y = %dn,+ a + b,+ b + a);return 0;程序執行結果如下:x = 5, y = 4 scanf()函數的功能是將輸入數據送入相應的存儲單元。具體地說,它是按格式參數的要求,從終端上把數據傳送到地址參數所指定的內存空間中。其原型為:int scanf (格式控制字符串,地址1,地址2,);1. 地址參
41、數 C語言允許程序員間接地使用內存地址,這個地址是通過對變量名“求地址”運算得到的。求地址的運算符為&。例如對于定義: short a; float b; &a給出的是變量a兩字節空間的首地址,&b給出的是變量b四字節空間的首地址。2. 格式說明字段 scanf()與printf()有相似之處,也有不同之處。scanf()格式控制字符串中的主要成分是格式說明字段和數據項。scanf()的格式說明字段的結構如圖2.9所示。%寬度長度修正 格式碼a/A,c,d,e/E,f,g/G,i,n,o,p,s,u,x/X,%l/L,h,ll,hh,j,z,t十進制整數格式碼長度修正符輸入數據類型說 明d無h
42、hhlllint charshortlonglong long輸入帶符號十進制整數,可選加+或-ihhhlllcharshortlonglong long輸入帶符號整數,可選加+或-以及0(八進制)、0 x(十六進制)u無unsigned輸入帶符號十進制整數ohhunsigned char輸入無符號八進制整數,可選加+或-xhlllunsigned shortunsigned longunsigned long long輸入無符號十六進制整數,可選加+或-c無char讀取字符s無字符串連續讀取字符,直到遇到文件結束符、空白或達到指定字段寬度n無hhhlllint charshortlonglo
43、ng long不讀取字符,而是而是把scanf()所處理的字符總數寫入到對應參數指定的變量中。p無地址讀取地址f, e, g,a無lLfloatdoublelong double讀取帶符號十進制實數 無字符搜索集合只能輸入定義在搜索集合中的字符,例如%abcdefgh或%a-h%無%讀取%/* 文件名:ex021401.c */#include int main(void)double a,b,c,d;scanf(%f%f,&a,&b); printf(na=%1f,b=%1fn,a,b);scanf(%lf%lf,&c,&d);printf(nc=%lf,d=%lfn,c,d);return
44、 0; scanf()是從輸入數值數據流中接收非空的字符,再轉換成格式項描述的格式,傳送到與格式項對應的地址中去。當操作者在終端上鍵入一串字符時,系統怎么知道哪幾個字符算作一個數據項呢?有以下幾種方法: (1)使用默認分隔符:空格、跳格符(t)、換行符(n)。/* 文件名:ex021501.c */#include int main(void)int a;float b,c;scanf (%d%f%f,&a,&b,&c);printf (a=%d,b=%f,c=%f,a,b,c);return 0; 一次運行情況如下:12 345 6789 87654321 a=12,b=345.000000
45、,c=6789.000000 注意,當從鍵盤上鍵入一串字符流后,只有鍵入回車時,系統才開始執行執行scanf()規定的操作。/* 文件名:ex021601.c */#include int main(void)int a;float b,c;scanf (%2d%3f%4f,&a,&b,&c);printf (a=%d,b=%f,c=%f,a,b,c);return 0;一次運行情況如下:12345678987654321 a=12,b=345.000000,c=6789.000000 (3)根據格式字符的含義從輸入流中取得數據,當輸入流中數據類型與格式字符要求不符時,就認為這一數據項結束。#
46、include int main(void)int a;char b;float c;printf (input a,b,c:n);scanf (%d%c%f,&a,&b,&c);printf (a=%d,b=%c,c=%f,a,b,c);return 0;一次執行結果為:input a b c: 1234r1234.567(帶下劃線者為輸入流)a=1234,b=r,c=1234.567017(4)格式控制字符串中的非空白字符 在scanf()中的格式控制字符串中,除了格式說明字段中的字符外,所出現的其他字符,都必須在輸入數據流時照樣輸入。例2.18/* 文件名:ex021801.c */#include int main(void) int a, b ; scanf(input:%d$%d,&a,&b); pr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 轉變思維監理師試題及答案
- 計算機三級嵌入式考試的知識點總結試題及答案
- 珠寶首飾設計及定制合作合同
- 嵌入式設備的效率優化試題及答案
- 現代農業園區租賃經營合同書
- 機械工程CAD應用技術試題
- 全面掌控的2025年行政組織理論考試試題及答案
- 行政組織環境適應性的試題及答案
- 公路工程施工工藝細節的掌握與應用試題及答案
- 附合同安全協議書范本
- 2025安徽淮北源淮實業有限公司招聘5人筆試備考試題及答案解析
- 2025年國際安全與反恐研究職業資格考試試題及答案
- GB/T 45551-2025蜜蜂生產性能測定技術規范
- 江蘇省南通市如皋市八校2025屆初三下學期教育質量調研(二模)化學試題含解析
- 2025年第二屆全國安康杯安全生產知識競賽題庫及答案(共180題)
- 課題申報書:職業教育學生核心能力培養研究
- 流體設計知識培訓課件
- 2025年度福建省職業院校技能大賽口腔修復工藝賽項高職組考試題(附答案)
- 企業數字化轉型戰略規劃書
- 天星調良國際馬術俱樂部寄養合同
- 深井接地施工方案
評論
0/150
提交評論