




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第四章 最簡(jiǎn)單的C程序設(shè)計(jì)4.1 C語句概述語句概述和其它高級(jí)語言一樣,C語言的語句用來向計(jì)算系統(tǒng)發(fā)出操作指令。一個(gè)語句經(jīng)編譯后產(chǎn)生若干條件機(jī)器指令。在C語言中只有“可執(zhí)行語句可執(zhí)行語句”,沒有“非執(zhí)行語句非執(zhí)行語句”(BASIC有可執(zhí)行語句和非執(zhí)行語句之分)。一個(gè)為實(shí)現(xiàn)特定目的的程序應(yīng)當(dāng)包含若干語句。從第一章已知,一個(gè)函數(shù)包含數(shù)據(jù)定義部分,執(zhí)行部分?jǐn)?shù)據(jù)定義部分,執(zhí)行部分即由語句組成。C程序可以用圖4.1表示。即一個(gè)C程序可以由若干個(gè)源程序文源程序文件(分別編譯的文件模塊)組成,一個(gè)源文件可以由若干個(gè)函數(shù)和預(yù)編譯命令組成(關(guān)于“預(yù)編譯命令”見第七章),一個(gè)函數(shù)一個(gè)函數(shù)由數(shù)據(jù)定義部分由數(shù)據(jù)定義部
2、分和執(zhí)行語句執(zhí)行語句組成。在第二章中已經(jīng)說明:程序應(yīng)該包括數(shù)據(jù)描述(由數(shù)據(jù)定義程序應(yīng)該包括數(shù)據(jù)描述(由數(shù)據(jù)定義部分來實(shí)現(xiàn))和數(shù)據(jù)操作(由語句來實(shí)現(xiàn))部分來實(shí)現(xiàn))和數(shù)據(jù)操作(由語句來實(shí)現(xiàn))。數(shù)據(jù)描述主要定義數(shù)據(jù)結(jié)構(gòu)(用數(shù)據(jù)類型型表示)和數(shù)據(jù)初值。數(shù)據(jù)操作的任務(wù)是對(duì)已提供的數(shù)據(jù)進(jìn)行加工。C 程序結(jié)構(gòu)源程序文件預(yù)編譯命令說明部分執(zhí)行部分(語句)函數(shù)函數(shù)n源程序文件2源程序文件n程序(變量定義、函數(shù)聲明) (操作語句)C語句可以分為以下五類:1控制語句,完成一定的控制功能,C只有9種控制語句,它們是:if( )else (條件語句)for ( ) (循環(huán)語句)while( ) (循環(huán)語句)dowhil
3、e ( ) (循環(huán)語句)continue (結(jié)束本次循環(huán)語句)break (中止執(zhí)行switch或循環(huán)語句)switch (多分支選擇語句)goto (轉(zhuǎn)向語句)return (從函數(shù)返回語句)上面9種語句中的括號(hào)()表示其中是一個(gè)條件,表示內(nèi)嵌的語句。例如:“if( )else”的具體語句可以寫成:“if(xy)z=x;else z=y;”2函數(shù)調(diào)用語句。由一次函數(shù)調(diào)用加一個(gè)分號(hào)構(gòu)成一個(gè)語句,例如: printf(”this is a C statement”); c=max(a,b);3表達(dá)式語句。由一個(gè)表達(dá)式構(gòu)成一個(gè)語句。最典型的是:由賦值表達(dá)式構(gòu)成一個(gè)賦值語句。 a=3是一個(gè)賦值表達(dá)式
4、,而 a=3; ;是一個(gè)賦值語句??梢钥吹揭粋€(gè)表達(dá)式的最后加一個(gè)分號(hào)就成了一個(gè)語句。一個(gè)語句必須在最后出現(xiàn)分號(hào),分號(hào)是語句中不可缺少的一部分(而不像PASCAL語言那樣:分號(hào)只是語句間的分隔符號(hào))。例如: i=i+1 (是表達(dá)式,不是語句) ii+l; (是語句)任何表達(dá)式都可以加上分號(hào)而成為語句,例如 i+;是一語句,作用是使i值加1。又如 x+y;也是一個(gè)語句,作用是完成xy的操作,它是合法的,但是并不把調(diào)x+y的和賦給另一變量,所以它并無實(shí)際意義。表達(dá)式能構(gòu)成語句是C語言的一個(gè)特色。其實(shí)“函數(shù)調(diào)用語句”也是屬于表達(dá)式語句,因?yàn)楹瘮?shù)調(diào)用也屬于表達(dá)式的一種,只是為了便于理解和使用,我們把“函
5、數(shù)調(diào)用語句”和“表達(dá)式語句”分開來說明。由于C程序中大多數(shù)語句是表達(dá)式語句(包括函數(shù)調(diào)用語句),所以有人把C語言稱作“表達(dá)式語言”。 4空語句。下面是一個(gè)空語句: ; ;即只有一個(gè)分號(hào)的語句,它什么也不做。有時(shí)用來作被轉(zhuǎn)向點(diǎn),或循環(huán)語句中的循環(huán)體(循環(huán)體是空語句,表示循環(huán)體什么也不做)。例如:for(i=1;i0) ;5可以用 把一些語句括起來成為復(fù)合語句復(fù)合語句,如下面是一個(gè)復(fù)合語句。 z=x+y; tz100; printf(”%f”,t); 注意:復(fù)合語句中最后一個(gè)語句中最后的分號(hào)不能忽略不寫(這是和PASCAL不同的)。C語言允許一行寫幾個(gè)語句,也允許一個(gè)語句拆開寫在幾行上,書寫格式無
6、固定要求(FORTRAN、COBOL有嚴(yán)格要求)。4.2賦值語句賦值語句是由賦值表達(dá)式加上一個(gè)分號(hào)構(gòu)成。C語言的賦值語句具有其它高級(jí)語言中賦值語句的一切特點(diǎn)和功能。但也應(yīng)當(dāng)注意到它們的不同:C語言中的賦值號(hào)“=”作為賦值運(yùn)算符;關(guān)于賦值表達(dá)式與賦值語句的概念,其它多數(shù)高級(jí)語言沒有“賦值表達(dá)式”這一概念。作為賦值表達(dá)式可以被包括在其它表達(dá)式之中,例如 if (ab)0) ta;按語法規(guī)定if后面的()內(nèi)是一個(gè)條件,例如可以是:“if(x0)”?,F(xiàn)在在x的位置上換上一個(gè)賦值表達(dá)式“a=b”,其作用是:先進(jìn)行賦值運(yùn)算(將b的值賦給a),然后判斷a是否大于,如大于是,執(zhí)行t=a。在if語句中的“a=b
7、”不是賦值語句而是賦值表達(dá)式,這樣寫是合法的。如果寫成 if(ab;)0) ta;就錯(cuò)了,在if的條件中不能包含賦值語句。由此可以看到:C把賦值語句和賦值表達(dá)式區(qū)別開來,增加了表達(dá)式的種類,使表達(dá)式的應(yīng)用幾乎“無孔不入”,能實(shí)現(xiàn)其它語言中難以實(shí)現(xiàn)的功能。4.3數(shù)據(jù)輸入輸出首先說明,C語言本身不提供輸入輸出語句,輸入和輸出輸入和輸出操作是由函數(shù)來實(shí)現(xiàn)的操作是由函數(shù)來實(shí)現(xiàn)的。在C的標(biāo)準(zhǔn)函數(shù)庫中(stdio.h)提供了一些輸入輸出函數(shù),例如,printf函數(shù)和scanf函數(shù)。在使用它們時(shí),千萬不要簡(jiǎn)單地認(rèn)為它們是C語言的“輸入輸出語句”。printf和scanf不是C語言的關(guān)鍵字。完全可以不用pri
8、ntf和scanf這兩個(gè)名字,而另外編兩個(gè)函數(shù),另用其它函數(shù)名。C提供的函數(shù)以庫的形式存放在系統(tǒng)中,它們不是C語言文本中的組成部分。因此各函數(shù)的功能和名字,在各種不同的計(jì)算機(jī)系統(tǒng)中有所不同。不過,有些通用的函數(shù)(如printf和scanf等),各種計(jì)算機(jī)系統(tǒng)都提供,成為各種計(jì)算機(jī)系統(tǒng)的標(biāo)準(zhǔn)函數(shù)(標(biāo)準(zhǔn)輸入輸出庫stdio.h的一部分)。在程序編譯連接時(shí),用戶程序與標(biāo)準(zhǔn)文件相連,所以在程序中可以直接使用printf和scanf函數(shù)。在本節(jié)中先介紹兩個(gè)最基本的輸出函數(shù),它們都以終端(即系統(tǒng)隱含指定的輸出設(shè)備)為對(duì)象.它們是字符輸出函數(shù)和格式輸出函數(shù)。4.3 數(shù)據(jù)輸入輸出的概念4.4 字符數(shù)據(jù)的輸入輸
9、出4.4. 1 putchar函數(shù)(字符輸出函數(shù)) putchar函數(shù)的作用是向終端輸出一個(gè)字符。例如 putchar(c);輸出字符變量c的值。c可以是字符型變量或整型變量。在使用標(biāo)準(zhǔn)IO庫函數(shù)時(shí),要用預(yù)編譯命令“include”將“stdio.h文件包括到用戶源文件中。即 include “stdio.h”stdio.h是standard input & output的縮寫,它包含了與標(biāo)準(zhǔn)I/O庫有關(guān)的變量定義和宏定義(有關(guān)預(yù)編譯命令見第七章)。在需要使用標(biāo)準(zhǔn)IO庫中的函數(shù)時(shí),應(yīng)在程序前使用上述預(yù)編譯命令,但在用printf和scanf函數(shù)時(shí),則可以不要(只有printf和scan
10、f例外)。 例4.1 include “stdio.h” main() char a,b,c; a=B;b=O;c=Y; putchar(a); putchar(b); putchar(c); 運(yùn)行結(jié)果: BOY也可以輸出控制字符,如putchar(n)輸出一個(gè)換行符,如果將例4.1程序最后一行改為 putchar(a); putchar(n); putchar(b); putchar(n); putchar(c); putchar(n )。則輸出結(jié)果為: B O Y也可以輸出其它轉(zhuǎn)義字符,如: putchar(101) (輸出字符A) putchar() (輸出單引號(hào)字符) putchar(
11、015) (使輸出回車,不換行)此函數(shù)的作用是從終端(或系統(tǒng)隱含指定的輸入設(shè)備)輸入一個(gè)字符, getchar函數(shù)沒有參數(shù),其一般形式為: getchar( )函數(shù)的值就是從輸入設(shè)備得到的字符。例如: 例4.8 include “stdio.h” main() char c: cgetchar(); putchar(c); 在運(yùn)行時(shí),如果從鍵盤輸入字符a;a (輸入a后,按“回車”鍵,字符才送到內(nèi)存)a (輸出變量c的值a) 請(qǐng)注意,getchar( )只能接收一個(gè)字符。 getchar函數(shù)得到的字符可以賦給一個(gè)字符變量或整型變量,也可以下賦給任何變量,作為表達(dá)式的一部分。例如,例4.8第4、
12、5行可以用下面一行代替。 putchar (getchar();因?yàn)間etchar()的值為a,因此輸出a,也可以用printf函數(shù): printf (”c”,getchar();在一個(gè)函數(shù)中要用getchar函數(shù),應(yīng)該在函數(shù)的前面(或本文件開頭)用 include “stdio.h”因?yàn)樵谑褂脴?biāo)準(zhǔn)I/O庫中的函數(shù)時(shí)需要用到”stdio.h”文件中包含的一些信息。4.5格式輸入與輸出本節(jié)介紹兩個(gè)輸入函數(shù),是以終端(或系統(tǒng)隱含指定的輸入設(shè)備)為輸入設(shè)備的。 在前面各章節(jié)中已用到printf函數(shù),它的作用是向終端(或系統(tǒng)隱含指定的輸出設(shè)備)輸出若干個(gè)任意類型的數(shù)據(jù)(putchar只能輸出字符,而且
13、只能是一個(gè)字符,而printf可以輸出多個(gè)數(shù)據(jù),且為任意類型)。一、printf函數(shù)的一般格式為 printf(格式控制,輸出表列)“格式控制”是用雙引號(hào)括起來的字符串,也稱“轉(zhuǎn)換控制字符串”,它包括兩種信息:1格式說明,由“”,和格式字符組成,如d,f等。它的作用是將輸出的數(shù)據(jù)轉(zhuǎn)換為指定的格式輸出。格式說明總是由“”字符開始的。2普通字符,即需要原樣輸出的字符。 “輸出表列”是需要輸出的一些數(shù)據(jù),可以是表達(dá)式。例如:printf (”a=d b=d”,a,b);printf (” a+b=d ,a-b=”,a+b,a-b); 格式說明 輸出表列在上面雙引號(hào)中的字符除了“d”以外,還有非格式說
14、明的普通字符,它們按原樣輸出。如果a、b值分別為3、4,則輸出為 a=3 b=4其中有下劃線的字符是printf函數(shù)中的“格式控制”字符串中的普通字符原樣輸出的結(jié)果。3和4是a和b的值(注意3和4無前導(dǎo)空格和尾隨空格),其數(shù)字位數(shù)由a,b值而定。假如a=12,b=123,則輸出結(jié)果為 a12 b=123由于printf是函數(shù),因此,“格式控制”字符串和“輸出表列”實(shí)際上都是函數(shù)的參數(shù)??梢员硎緸?printf(參數(shù)1,參數(shù)2,參數(shù)3,參數(shù)n)printf函數(shù)的功能是將參數(shù)2參數(shù)n。按參數(shù)1給定的格式輸出。二、格式字符對(duì)不同類型的數(shù)據(jù)用不同的格式字符。有以下幾種格式字符1d格式符。用來輸出十進(jìn)制
15、整數(shù)。有以下幾種用法:(1)d,按整型數(shù)據(jù)的實(shí)際長(zhǎng)度輸出(見上面)。(2)md,m為指定的輸出字段的寬度。如果數(shù)據(jù)的位數(shù)小于m,則左端補(bǔ)以空格,若大于m,則按實(shí)際位數(shù)輸出,如 printf (“4d,4d”,a,b)若a123,b=12345,則輸出結(jié)果為: 123,12345(3)ld,輸出長(zhǎng)整型數(shù)據(jù)。如 1ong a=135790; printf(”ld,a);如果用d輸出,就會(huì)發(fā)生錯(cuò)誤,對(duì)1ong型數(shù)據(jù)應(yīng)當(dāng)用ld格式輸出。對(duì)長(zhǎng)整型數(shù)據(jù)也可以指定字段寬度,如將上面printf函數(shù)中的“l(fā)d”改為“81d”則輸出為 135790 8列一個(gè)int型數(shù)據(jù)可以用d或ld格式輸出。2.o格式符,以8
16、進(jìn)制數(shù)形式輸出整數(shù)。由于是將內(nèi)存單元中的各位的值(0或1)按八進(jìn)制形式輸出,因此輸出的數(shù)值下帶符號(hào),即將符號(hào)位也一起作為八進(jìn)制數(shù)的一部分輸出。例如,-在內(nèi)存單元中(以補(bǔ)碼形式存放)如下: a=1 11 11 11 11 11 11 11 11 int a-1 printf(”d,o”,a,a);輸出為 -1,177777不會(huì)輸出帶負(fù)號(hào)的八進(jìn)制整數(shù)。對(duì)長(zhǎng)整數(shù)(1ong型)可以用“1o?!备袷捷敵觥M瑯涌梢灾付ㄗ侄螌挾?,如printf(”8o”,a)輸出數(shù)據(jù)為 177777。3. x格式符,以16進(jìn)制數(shù)形式輸出整數(shù),同樣不會(huì)出現(xiàn)負(fù)的十六進(jìn)制數(shù)。例如: int a-1; printf(”x,0,d”
17、,a,a,a);輸出結(jié)果為 ffff,177777,-1同樣可以用“l(fā)x”輸出長(zhǎng)整型數(shù),也可以指定輸出字段的寬度,如“12x”4u格式符,用來輸出unsigned型數(shù)據(jù),即無符號(hào)數(shù),以十進(jìn)制形式輸出。一個(gè)有符號(hào)整數(shù)(int型)也可以用u格式輸出;反之,一個(gè)unsigned型數(shù)據(jù)也可以用d格式輸出。按相互賦值的規(guī)則處理(見第二章2.9)。unsigned型數(shù)據(jù)也可用o或x格式輸出。例4.2unsigned int a=65535;int b=-2;printf(”a=%d,%o,%x,%un”,a,a,a,a);printf(”a=%d,%o,%x,%un”,b,b,b,b);運(yùn)行結(jié)果為: a-
18、1,177777,ffff,65535 b-2, 177776, fffe,655345c格式符,用來輸出一個(gè)字符。如: char ca; printf(”c”,c);輸出字符a,請(qǐng)注意:“c”中的c是格式符,逗號(hào)右邊的c是變量名,不要搞混。一個(gè)整數(shù),只要它的值在0255范圍內(nèi),也可以用字符形式輸出,在輸出前,將該整數(shù)轉(zhuǎn)換成相應(yīng)的ASCII字符;反之,一個(gè)字符數(shù)據(jù)也可以用整數(shù)形式輸出。例4.3 main ()char c=a; int i=97; printf(”c,dn”,c,c); printf(”c,dn”,i,i); 運(yùn)行結(jié)果為: a,97 a, 97也可以指定輸出字?jǐn)?shù)寬度,如果有pr
19、intf(”3c”,c)則輸出:” a”,即c變量輸出占3列,前2列補(bǔ)空格。6s格式符,用來輸出一個(gè)字符串。有幾種用法:(1) s, 例如 printf(”%s”,”CHINA”)輸出“CHINA”字符串(不包括雙引號(hào))。(2)ms,輸出的字符串占m列,如字符串本身長(zhǎng)度大于m,則突破m的限制,將字符串全部輸出。若串長(zhǎng)小于m,則左補(bǔ)空格。(3)-ms,如果串長(zhǎng)小于m,則在m列范圍內(nèi),字符串向左靠,右補(bǔ)空格。(4)m.ns,輸出占m列,但只取字符串中左端n個(gè)字符。這n個(gè)字符輸出在m列的右側(cè),左補(bǔ)空格。(5)-m.ns,其中m、n含義同上,n個(gè)字符輸出在m列范圍的左側(cè),右補(bǔ)空格。如果nm,則m自動(dòng)取
20、n值即保證n個(gè)字符正常輸出。 例4.4 main() p r i n t f ( ” % 3 s , % 7 . 2 s , % . 4 s , % - 5 . 3 s n ” , ” CHINA”,”CHINA”,”CHINA”,”CHINA”); 輸出如下:CHINA, CH,CHIN,CHI 其中第三個(gè)輸出項(xiàng),格式說明為“.4s”,即只指定了n,沒指定m,自動(dòng)使mn=4,故占4列。7f格式符,用來輸出實(shí)數(shù)(包括單、雙精度),以小數(shù)形式輸出,有以下幾種用法:(1)f,不指定字段寬度,由系統(tǒng)自動(dòng)指定,使整數(shù)部分全部如數(shù)輸出,并輸出6位小數(shù)。應(yīng)當(dāng)注意,并非全部數(shù)字都是有效數(shù)字.單精度實(shí)數(shù)的有效
21、位數(shù)一般為7位。 【例4.5】 main() float x,y; x111111111; y222222222; printf(”f,x十y); 運(yùn)行結(jié)果為 333333328125顯然,只有前7位數(shù)字是有效數(shù)字。千萬不要以為凡是打印出來的數(shù)字都是準(zhǔn)確的。 雙精度數(shù)也可用f格式輸出,它的有效位數(shù)一般為16位,給出小數(shù)6位。例4.6 main() double x,y; y2222222222222.22222222; printf(”f”,x十y); 輸出結(jié)果為 3333333333333.328125顯然,雙精度數(shù)也可用f格式輸出,它的有效位數(shù)一般為16位,給出小數(shù)位??梢钥吹阶詈?位小數(shù)
22、(超過16位)是無意義的。(2)m.nf指定輸出的數(shù)據(jù)共占m列,其中有n位小數(shù)。如果數(shù)值長(zhǎng)度小于m,則左端補(bǔ)空格。(3)-m.nf基本相同,只是使輸出的數(shù)值向左端靠,右端補(bǔ)空格。 例4.7main ( )floatf f=123456;p r i n t f ( ” % f , % 1 0 f , % 1 0 . 2 f , % . 2 f , % -10.2fn”,f,f,f,f,f); 輸出結(jié)果如下:123.455994, 123.455994, 123.46, 123. 46,123.46 ,f的值應(yīng)為123456,但輸出為123455994,這是由于實(shí)數(shù)在內(nèi)存中的存儲(chǔ)誤差引起的8.e格
23、式符,以指數(shù)形式輸出實(shí)數(shù)。可用以下形式:(1)e不指定輸出數(shù)據(jù)所占的寬度和數(shù)字部分小數(shù)位數(shù),由系統(tǒng)自動(dòng)指定給出6位小數(shù),指數(shù)部分占5位(如e+002,e+02),其中“e”占一位,指數(shù)符號(hào)占一位,指數(shù)占3(2)位。數(shù)值按標(biāo)準(zhǔn)化指數(shù)形式輸出(即小數(shù)點(diǎn)前必須有而且只有一位非零數(shù)字)。例如 printf(”%e”,123.456);輸出:1.234560e002,(1.23456e+02)。也就是說用e格式輸出的實(shí)數(shù)共占13(11)列寬度。 (2)m.ne和-m.ne m,n和“-”字符含義與前相同。此處n指數(shù)據(jù)的數(shù)字部分(與書上講的不同)。若f123.456,則p r i n t f ( ” %
24、e , % 1 0 e , % 1 0 . 3 e , % . 3 e , % -10.3e,”,f,f,f,f,f);輸出如下:1.23456e+02,1.23456e+02, 1.23e02,1.23e02,1.23e十02 第二個(gè)輸出項(xiàng)按10e輸出,即只指定了m=10,未指定n,凡未指定n,自動(dòng)使n=6,整個(gè)數(shù)據(jù)長(zhǎng)11列,超過給定的10列,乃突破10列的限制,按實(shí)際長(zhǎng)度輸出。第三個(gè)數(shù)據(jù)共占10列,小數(shù)部分占2列。第四個(gè)數(shù)據(jù)按字“.2e”格式輸出,只指定n2,未指定m,自動(dòng)使m等于數(shù)據(jù)應(yīng)占的長(zhǎng)度,今為8列。第五個(gè)數(shù)據(jù)應(yīng)占10列,數(shù)值只有8列,由于是“-10.2e”,數(shù)值向左靠,右補(bǔ)二個(gè)空格
25、。9g格式符,用來輸出實(shí)數(shù),它根據(jù)數(shù)值的大小,自動(dòng)選f格式或e格式(選擇輸出時(shí)占寬度較小的一種),且不輸出無意義的零。例如,若:f=123.456,則 printf(”%f,%e,%g”,f,f,f);輸出如下: 123.456001,1.23456e+02,123.456用f格式輸出占10列,用e格式輸出占11列,用g格式時(shí),自動(dòng)從上面兩種格式中選擇短者(今為f格式為短),故占7列,且按%f格式用小數(shù)形式輸出,最后三個(gè)小數(shù)位“0”為無意義的0,不輸出,g格式用得較少。以上介紹了9種格式符,歸納如表表4.1 printf格式字符格式字符 說 明d 以帶符號(hào)的十進(jìn)制形式輸出整數(shù)(正數(shù)不輸出符號(hào))
26、o 以8進(jìn)制無符號(hào)形式輸出整數(shù)(不輸出前導(dǎo)符0)。x 以16進(jìn)制無符號(hào)形式輸出整數(shù)(不輸出前導(dǎo)符0 x)。u 以無符號(hào)10進(jìn)制形式輸出整數(shù)c 以字符形式輸出,只輸出一個(gè)字符。s 輸出字符串。f 以小數(shù)形式輸出單、雙精度數(shù),隱含輸出6位小數(shù)。e 以標(biāo)準(zhǔn)指數(shù)形式輸出單、雙精度數(shù),數(shù)字部分小數(shù)位 數(shù)為6位。g 選用f或e格式中輸出寬度較短的一種格式,不輸 出無意義的0。 在格式說明中,在和上述格式字符間可以插入以下幾種附加符號(hào)。 表82附加格式說明字符 字符 說 明 l用于長(zhǎng)整型整型,可加在格式符d o x.u前面。 m(代表一個(gè)正整數(shù))數(shù)據(jù)最小寬度。 .n(代表一個(gè)正整數(shù))對(duì)實(shí)數(shù),表示輸出n位小數(shù)
27、;對(duì)字符串,表示截取的字符個(gè)數(shù)。 - 輸出的數(shù)字或字符在域內(nèi)向左靠。用printf函數(shù)輸出時(shí),應(yīng)注意數(shù)據(jù)類型應(yīng)與上述格式說明匹配,否則將會(huì)出現(xiàn)錯(cuò)誤。在使用printf函數(shù)時(shí),還有幾點(diǎn)要說明:1有些系統(tǒng)要求格式字符要用小寫字母,如d不能寫成D。2. 可以在printf函數(shù)中的“格式控制”字符串內(nèi)包含第二章中的“轉(zhuǎn)義字符”,如“n”、“t”、“b”、“r”、“f”、“377”等。3上面介紹的d,o,x,c,s,f,e,g等字符,如用在“”后面就作為格式符號(hào)。一個(gè)格式說明以“”開頭,以上述9個(gè)格式字符之一為結(jié)束,中間可以插入附加格式字符(也稱修飾符)。例如: printf(“c=%cf=%fs=%s
28、”,c,f,s);第一個(gè)格式說明為”c”而不包括其后的f,第二個(gè)格式說明為“f,不包括其后的s,第三個(gè)格式說明為s。其它的字符為原樣輸出的普通字符。 4如果想輸出字符“”,則應(yīng)該在“格式控制”字符串中用連續(xù)兩個(gè)表示,如 printf(”f”,103);輸出0.3333335不同的系統(tǒng)在實(shí)現(xiàn)格式輸出時(shí),輸出結(jié)果可能會(huì)有一些小的差別,例如用e格式符輸出實(shí)數(shù)時(shí),有些系統(tǒng)輸出的指數(shù)部分為4位(如e十02)而不是5位(e002),前面的數(shù)字部分為5位小數(shù)而不是6位等等。getchar函數(shù)只能用來輸入一個(gè)字符,用scanf函數(shù)可以用來輸入任何類型的多個(gè)數(shù)據(jù)。 一一般形式 scanf(格式控制,地址表列)“
29、格式控制”的含義同printf函數(shù),“地址表列”是由若干個(gè)地址組成的表列,可以是變量的地址,或字符串的首地址。 【例4.9main()int a,b,c;scanf(”%d%d%d”,&a,&b,&c); /*按照a,b,c在內(nèi)存的地址將a,b,c的值存進(jìn)去 */prinrf(“%d,%d,%dn”,a,b,c);運(yùn)行時(shí)按以下方式輸入a,b,c的值: 3 4 5 (輸入a,b,c的值) 3,4,5 (輸出a,b,c的值) &a,&b,&c中的“&”是地址運(yùn)算符,&a指a在內(nèi)存中的地址.用“%d%d%d”格式輸入時(shí),不能用逗號(hào)(可用
30、空格)作兩個(gè)數(shù)據(jù)間的分隔符,如下面輸入下合法: 3,4,5二、格式說明和printf函數(shù)中的格式說明相似,以開始,以一個(gè)格式字符結(jié)束,中間可以插入附加的字符。表4.3列出scanf用到的格式字符。表4.4列出scanf可以用的附加說明字符(修飾符)。 scanf格式字符 d 用來輸入十進(jìn)制整數(shù)。 o 用來輸入八進(jìn)制整數(shù)。 x 用來輸入十六進(jìn)制整數(shù)。 c 用來輸入單個(gè)字符。 s 用來輸入字符串,將字符串送到一個(gè)字符數(shù)組中,在輸入時(shí)以非空白字符開始,以第一個(gè)空白字符結(jié)束。字符串以串結(jié)束標(biāo)志“0”作為其最后一個(gè)字符。 f 用來輸入實(shí)數(shù),可以用小數(shù)形式或指數(shù)形式輸入。 e 與f作用相同,e與f可以互相
31、替換。 附加的格式說明字符 l 用于輸入長(zhǎng)整型數(shù)據(jù)(可用ld,lo,lx),以及double型數(shù)據(jù)(用lf或1e)。 h 用于輸入短整型數(shù)據(jù)(可用hd,hO,hx)。 m 域?qū)挘橐徽麛?shù))指定輸入數(shù)據(jù)所占寬度(列數(shù))。 * 表示本輸入項(xiàng)在讀人后不賦給相應(yīng)的變量。 說明: 1標(biāo)準(zhǔn)C在scanf中不使用u說明符,對(duì)unsigned型數(shù)據(jù),以d或o、x互格式輸入。2可以指定輸入數(shù)據(jù)所占列數(shù),系統(tǒng)自動(dòng)按它截取所需數(shù)據(jù)。如 scanf(”3d3d”,&a,&b); 輸入 123456系統(tǒng)自動(dòng)將123賦給a,456賦給b。也可用于字符型 scanf(”3c”,&ch);輸入3個(gè)字
32、符,把第一個(gè)字符賦給ch,例如輸入abc,ch得到字符a。3后的“*”附加說明符,用來表示跳過它相應(yīng)的數(shù)據(jù)。例如 scanf(”2d*3d2dn”,&a,&b);如果輸入如下信息: 12 345 67將12賦給a,67賦給b.第二個(gè)數(shù)據(jù)“345”被跳過不賦給任何變量。在利用現(xiàn)成的一批數(shù)據(jù)時(shí),有時(shí)不需要其中某些數(shù)據(jù),可用此法“跳過”它們。4輸入數(shù)據(jù)時(shí)不能規(guī)定精度,例如 scanf(”%7.2f”,&a);是不合法的,不能企圖輸入1234567而使a的值為12345.67。三、scanf函數(shù)的執(zhí)行中應(yīng)注意的問題1例如,如果a,b為整型變量,則scanf函數(shù)中的“格式控制”后
33、面應(yīng)當(dāng)是變量地址,而不應(yīng)是變量名 scanf(”d,d”,a,b);是不對(duì)的,應(yīng)為&a,&b。這是C語言與其它高級(jí)語言不同的。2如果在“格式控制”字符串中除了格式說明以外還有其它字符,則在輸入數(shù)據(jù)時(shí)應(yīng)輸入與這些字符相同的字符。例如 scanf(“d,d”,&a,&b);輸入時(shí)應(yīng)用如下形式: 3,4注意3后面是逗號(hào),它與scanf函數(shù)中的“格式控制”中的逗號(hào)對(duì)應(yīng)。如果輸入時(shí)不用逗號(hào)而用空格或其它字符是不對(duì)的: 3 4 (不對(duì)) 3:4 (不對(duì))如果是 scanf(”%d %d”,&a,&b);輸入時(shí)兩個(gè)數(shù)據(jù)間應(yīng)空二個(gè)或更多的空格字符。 scanf(
34、”d:d:d”,&h,&m,&s);輸入應(yīng)用以下形式: 12:23:36 scanf(”a=%d,b=%d,c=%d”,&a,&b,&c);輸入應(yīng)為以下形式: a=12,b24,c36這種形式為了使用戶輸入數(shù)據(jù)時(shí)添加必要的信息以幫助理解,不易發(fā)生輸入數(shù)據(jù)的錯(cuò)誤。 3在用”c”格式輸入字符時(shí),空格字符和“轉(zhuǎn)義字符”都作為有效字符輸入: scanf(”ccc”,&c1,c2,c3);如輸入 a b c字符a送給c1,字符 送給c2,字符b送給c3,因?yàn)閏只要求讀人一個(gè)字符,后面不需要用空格作為兩個(gè)字符的間隔,因此 作為下一個(gè)字符送給c2。4在
35、輸入數(shù)據(jù)時(shí),遇以下情況時(shí)該數(shù)據(jù)認(rèn)為結(jié)束: 遇空格,或按“回車”或“跳格”(TAB)鍵。 遇寬度結(jié)束,如“3d”,只取3列。 遇非法輸入。如 scanf(”dcf”,&a,&b,&c);若輸入: 1234al23o.26第一個(gè)數(shù)據(jù)對(duì)應(yīng)d格式輸入1234之后遇字母a,因此認(rèn)為數(shù)值1234后己沒有數(shù)字了,第一個(gè)數(shù)據(jù)到此結(jié)束,把1234送給變量a,字符a送給變量b由于c只要求輸入一個(gè)字符,因此a后面不需要空格,后面的數(shù)值應(yīng)送給變量c,如果由于疏忽把本來應(yīng)為123026錯(cuò)打成123o26,由于123后面出現(xiàn)字母o就認(rèn)為此數(shù)值結(jié)束,將123送給c.5補(bǔ)充如果有以下程序輸入:main
36、()int a,b; scanf(“%d%d”,&a,&b); printf(“a=%d,b=%dnb”,a,b);輸出:a=-1,b=3輸出:a=-1,b=-16619輸出:a=-1,b=-1(11位) 3輸出:a=-1,b=31.若想使a中存放字符串1234,b中存放字符5,則應(yīng)輸入 char a10,b;scanf(“a=%s b=%c”,a,&b); 2. main() (2003年下半年) int a; char c=10; float f=100.0;double x; a=f/=c*=(x=6.5); printf(“%d %d %3.1f %3.1fn”
37、,a,c,f,x); 輸出為 1)1 65 1 6.5 2)1 65 1.5 6.5 3)1 65 1.0 6.5 4)2 65 1.5 6.53設(shè)有如下程序段: (2003年下半年) int x=2002, y=2003; printf(%dn,(x,y); 則以下敘述中正確的是 1)輸出語句中格式說明符的個(gè)數(shù)少于輸出項(xiàng)的個(gè)數(shù),不能正確輸出 2)運(yùn)行時(shí)產(chǎn)生出錯(cuò)信息 3)輸出值為2002 4)輸出值為20034有定義語句:int x, y;,若要通過scanf(%d,%d,&x,&y);語句使變量x得到數(shù)值11,變量y得到數(shù)值12,下面四組輸入形式中,錯(cuò)誤的是 (2003年下半年)1)11 12 2)11, 12 (注意12之前有一個(gè)空格)3)11,12 4)11,125 . 數(shù)字字符0的ASCII值為48,若有
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- T-ZSA 278-2024 軌道交通.用銑磨機(jī)器人
- 2025年度高新技術(shù)企業(yè)員工離職競(jìng)業(yè)限制補(bǔ)償金合同
- 二零二五年度教育行業(yè)人才招聘定金協(xié)議
- 二零二五年度金融機(jī)構(gòu)間反洗錢合作協(xié)議
- 2025年度金融項(xiàng)目評(píng)審合同風(fēng)險(xiǎn)控制
- 二零二五商場(chǎng)合同管理操作手冊(cè)附小時(shí)計(jì)費(fèi)服務(wù)條款
- 2025年度環(huán)保產(chǎn)業(yè)合作開發(fā)合伙協(xié)議書
- 二零二五年度供用熱力合同糾紛司法解釋及執(zhí)行難點(diǎn)解析
- 二零二五年度超市促銷活動(dòng)商品陳列策劃合同
- 2025沈陽公司總經(jīng)理聘用合同全面規(guī)范管理細(xì)則
- 大樹移栽合同范本
- 柔性印刷技術(shù)探索-深度研究
- 【正版授權(quán)】 IEC 63310:2025 EN Functional performance criteria for AAL robots used in connected home environment
- 2025屆新高考政治沖刺備考復(fù)習(xí)把握高考趨勢(shì)+科學(xué)高效命題
- 最終版附件1:“跨學(xué)科主題學(xué)習(xí)”教學(xué)設(shè)計(jì)(2025年版)
- 2025年度環(huán)保咨詢與評(píng)估服務(wù)合同范本模板
- 文化差異下的教育國(guó)外的小學(xué)音樂教育方式探討
- 2025年無錫科技職業(yè)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫含答案解析
- 2024年黑龍江建筑職業(yè)技術(shù)學(xué)院高職單招語文歷年參考題庫含答案解析
- 七年級(jí)語文上冊(cè)課后習(xí)題參考答案
- 第四單元《紙的前世今生》第一課時(shí)(說課稿)-2023-2024學(xué)年五年級(jí)下冊(cè)綜合實(shí)踐活動(dòng)粵教版
評(píng)論
0/150
提交評(píng)論