版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C語(yǔ)言初學(xué)者入門講座我們已經(jīng)看到程序中使用的各種變量都應(yīng)預(yù)先加以說(shuō)明,即先說(shuō)明,后使用。對(duì)變量的說(shuō)明可以包括三個(gè)方面:數(shù)據(jù)類型存儲(chǔ)類型作用域在本講中,我們只介紹數(shù)據(jù)類型說(shuō)明。其它說(shuō)明在以后陸續(xù)介紹。所謂數(shù)據(jù)類型是按被說(shuō)明量的性質(zhì),表示形式,占據(jù)存儲(chǔ)空間的多少,構(gòu)造特點(diǎn)來(lái)劃分的。在C語(yǔ)言中,數(shù)據(jù)類型可分為:基本數(shù)據(jù)類型,構(gòu)造數(shù)據(jù)類型,指針類型,空類型四大類。.基本數(shù)據(jù)類型基本數(shù)據(jù)類型最主要的特點(diǎn)是,其值不可以再分解為其它類型。也就是說(shuō),基本數(shù)據(jù)類型是自我說(shuō)明的。.構(gòu)造數(shù)據(jù)類型構(gòu)造數(shù)據(jù)類型是根據(jù)已定義的一個(gè)或多個(gè)數(shù)據(jù)類型用構(gòu)造的方法來(lái)定義的。也就是說(shuō),一個(gè)構(gòu)造類型的值可以分解成若干個(gè)“成員”或“元素”。每個(gè)“成員”都是ー個(gè)基本數(shù)據(jù)類型或又是ー個(gè)構(gòu)造類型。在c語(yǔ)言中,構(gòu)造類型有以下幾種:數(shù)組類型結(jié)構(gòu)類型聯(lián)合類型.指針類型指針是ー種特殊的,同時(shí)又是具有重要作用的數(shù)據(jù)類型。其值用來(lái)表示某個(gè)量在內(nèi)存儲(chǔ)器中的地址。雖然指針變量的取值類似于整型量,但這是兩個(gè)類型完全不同的量,因此不能混為ー談。4.空類型在調(diào)用函數(shù)值時(shí),通常應(yīng)向調(diào)用者返回一個(gè)函數(shù)值。這個(gè)返回的函數(shù)值是具有一定的數(shù)據(jù)類型的,應(yīng)在函數(shù)定義及函數(shù)說(shuō)明中給以說(shuō)明,例如在例題中給出的max函數(shù)定義中,函數(shù)頭為:出111?武山1ホ畝113);其中“1而”類型說(shuō)明符即表示該函數(shù)的返回值為整型量。又如在例題中,使用了庫(kù)函數(shù)sin,由于系統(tǒng)規(guī)定其函數(shù)返回值為雙精度浮點(diǎn)型,因此在賦值語(yǔ)句s=sin(x);中,s也必須是雙精度浮點(diǎn)型,以便與sin函數(shù)的返回值一致。所以在說(shuō)明部分,把s說(shuō)明為雙精度浮點(diǎn)型。但是,也有一類函數(shù),調(diào)用后并不需要向調(diào)用者返回函數(shù)值,這種函數(shù)可以定義為‘‘空類型"。其類型說(shuō)明符為void。在本講中,我們先介紹基本數(shù)據(jù)類型中的整型、浮點(diǎn)型和字符型。其余類型在以后各講中陸續(xù)介紹。對(duì)于基本數(shù)據(jù)類型量,按其取值是否可改變又分為常量和變量?jī)煞N。在程序執(zhí)行過程中,其值不發(fā)生改變的量稱為常量,取值可變的量稱為變量。它們可與數(shù)據(jù)類型結(jié)合起來(lái)分類。例如,可分為整型常量、整型變量、浮點(diǎn)常量、浮點(diǎn)變量、字符常量、字符變量、枚舉常量、枚舉變量。在程序中,常量是可以不經(jīng)說(shuō)明而直接引用的,而變量則必須先說(shuō)明后使用。整型量整型量包括整型常量、整型變量。整型常量就是整常數(shù)。在C語(yǔ)言中,使用的整常數(shù)有ハ進(jìn)制、十六進(jìn)制和十進(jìn)制三種。整型常量.ハ進(jìn)制整常數(shù)八進(jìn)制整常數(shù)必須以〇開頭,即以〇作為ハ進(jìn)制數(shù)的前綴。數(shù)碼取值為〇?7。ハ進(jìn)制數(shù)通常是無(wú)符號(hào)數(shù)。以下各數(shù)是合法的ハ進(jìn)制數(shù):015(十進(jìn)制為13)0101(十進(jìn)制為65)0177777(十進(jìn)制為65535)以下各數(shù)不是合法的ハ進(jìn)制數(shù):256(無(wú)前綴0)03a2(包含了非ハ進(jìn)制數(shù)碼)-0127(出現(xiàn)了負(fù)號(hào)).十六進(jìn)制整常數(shù)十六進(jìn)制整常數(shù)的前綴為Ox或Ox。其數(shù)碼取值為0?9,a?f或a?f。以下各數(shù)是合法的十六進(jìn)制整常數(shù):0x2a(卜進(jìn)制為42) OxaO(十進(jìn)制為160) Oxflfff(十進(jìn)制為65535)以下各數(shù)不是合法的卜六進(jìn)制整常數(shù):5a(無(wú)前綴Ox) Ox3h(含有非十六進(jìn)制數(shù)碼).I—進(jìn)制整常數(shù)卜進(jìn)制整常數(shù)沒有前綴。其數(shù)碼為〇?9。以下各數(shù)是合法的十進(jìn)制整常數(shù):237-568655351627以下各數(shù)不是合法的卜進(jìn)制整常數(shù):023(不能有前導(dǎo)0)23d(含有非十進(jìn)制數(shù)碼)在程序中是根據(jù)前綴來(lái)區(qū)分各種進(jìn)制數(shù)的。因此在書寫常數(shù)時(shí)不耍把前綴弄錯(cuò)造成結(jié)果不正確。4.整型常數(shù)的后綴在16位字長(zhǎng)的機(jī)器上,基本整型的長(zhǎng)度也為16位,因此表示的數(shù)的范圍也是有限定的。十進(jìn)制無(wú)符號(hào)整常數(shù)的范圍為〇?65535,有符號(hào)數(shù)為ー32768?+32767。ハ進(jìn)制無(wú)符號(hào)數(shù)的表示范圍為0?0177777。十六進(jìn)制無(wú)符號(hào)數(shù)的表示范圍為Ox〇?OxffTF或Ox〇?OxfHT。如果使用的數(shù)超過了上述范圍,就必須用長(zhǎng)整型數(shù)來(lái)表示。長(zhǎng)整型數(shù)是用后綴“ド或“1”來(lái)表示的。例如:十進(jìn)制長(zhǎng)整常數(shù)1581(十進(jìn)制為158)3580001(十進(jìn)制為ー358000)ハ進(jìn)制長(zhǎng)整常數(shù)0121(十進(jìn)制為10)0771(十進(jìn)制為63)02000001(十進(jìn)制為65536)十六進(jìn)制長(zhǎng)整常數(shù)0x151(十進(jìn)制為21)Oxa51(十進(jìn)制為165)0x100001(十進(jìn)制為65536)長(zhǎng)整數(shù)1581和基本整常數(shù)158在數(shù)值上并無(wú)區(qū)別。但對(duì)1581,因?yàn)槭情L(zhǎng)整型量,c編譯系統(tǒng)將為它分配4個(gè)字節(jié)存儲(chǔ)空間。而對(duì)158,因?yàn)槭腔菊?只分配2個(gè)字節(jié)的存儲(chǔ)空間。因此在運(yùn)算和輸出格式上要予以注意,避免出錯(cuò)。無(wú)符號(hào)數(shù)也可用后綴表示,整型常數(shù)的無(wú)符號(hào)數(shù)的后綴為“u”或"u”。例如:358u,0x38au,2351u均為無(wú)符號(hào)數(shù)。前綴,后綴可同時(shí)使用以表示各種類型的數(shù)。如0xa51u表示十六進(jìn)制無(wú)符號(hào)長(zhǎng)整數(shù)a5,其十進(jìn)制為165。顯示程序運(yùn)行結(jié)果oflongx,y;inta,b,c,d;c=x+a;d=y+b;從程序中可以看到:x,y是長(zhǎng)整型變量,a,b是基本整型變量。它們之間允許進(jìn)行運(yùn)算,運(yùn)算結(jié)果為長(zhǎng)整型。但c,d被定義為基本整型,因此最后結(jié)果為基本整型。本例說(shuō)明,不同類型的量可以參與運(yùn)算并相互賦值。其中的類型轉(zhuǎn)換是山編譯系統(tǒng)自動(dòng)完成的。有關(guān)類型轉(zhuǎn)換的規(guī)則將在以后介紹。實(shí)型量實(shí)型常量實(shí)型也稱為浮點(diǎn)型。實(shí)型常量也稱為實(shí)數(shù)或者浮點(diǎn)數(shù)。在c語(yǔ)言中,實(shí)數(shù)只采用卜進(jìn)制。它有二種形式:十進(jìn)制數(shù)形式指數(shù)形式.十進(jìn)制數(shù)形式由數(shù)碼〇?9和小數(shù)點(diǎn)組成。例如:0.01.25,5.789,0.13,5.0,300.,-267.8230等均為合法的實(shí)數(shù)。.指數(shù)形式由十進(jìn)制數(shù),加階碼標(biāo)志“e”或"e”以及階碼(只能為整數(shù),可以帶符號(hào))組成。其一般形式為aen(a為十進(jìn)制數(shù),n為十進(jìn)制整數(shù))其值為a*10,n如:2.1e5(等于21?10,5),3.7e-2(等于3.7*10,)-2*)0.5e7(等于0.5*10,7),-2.8e-2(等于ー2.8*10,)-2*)以下不是合法的實(shí)數(shù)345(無(wú)小數(shù)點(diǎn))e7(階碼標(biāo)志e之前無(wú)數(shù)字)-5(無(wú)階碼標(biāo)志)53.せ3(負(fù)號(hào)位置不對(duì))2.7e(無(wú)階碼)標(biāo)準(zhǔn)c允許浮點(diǎn)數(shù)使用后綴。后綴為“f”或"f”即表示該數(shù)為浮點(diǎn)數(shù)。如356f和356.是等價(jià)的。例2.2說(shuō)明了這種情況:voidmain()printf("%f\n%f\n",356.,356f);void指明main不返回任何值利用printf顯示結(jié)果結(jié)束實(shí)型變量實(shí)型變量分為兩類:單精度型和雙精度型,其類型說(shuō)明符為float單精度說(shuō)明符,double雙精度說(shuō)明符。在turboc中單精度型占4個(gè)字節(jié)(32位)內(nèi)存空間,其數(shù)值范圍為3.4e-38?3.4e+38,只能提供七位有效數(shù)字。雙精度型占8個(gè)字節(jié)(64位)內(nèi)存空間,其數(shù)值范圍為1.7e-308~1.7e+308,可提供16位有效數(shù)字。實(shí)型變量說(shuō)明的格式和書寫規(guī)則與整型相同。例如:floatx,y;(x,y為單精度實(shí)型量)doublea,b,c;(a,b,c為雙精度實(shí)型量)實(shí)型常數(shù)不分單、雙精度,都按雙精度double型處理。voidmain(){floata;doubleb;a=33333.33333;b=33333.33333333333333;printf(,,%f\n%f\n",a,b);此程序說(shuō)明floatxdouble的不同a■■■■b■■■■■■■■a<—33333.33333b<—33333.33333333333;;顯示程序結(jié)果此程序說(shuō)明float、double的不同floata;doubleb;a=33333.33333;b=33333.33333333333333;從本例可以看出,由于a是單精度浮點(diǎn)型,有效位數(shù)只有七位。而整數(shù)已占五位,故小數(shù)二位后之后均為無(wú)效數(shù)字。b是雙精度型,有效位為十六位。但turboc規(guī)定小數(shù)后最多保留六位,其余部分四舍五入。[practice]//floatinta=32;floatb;doubled;b=12345678;d=b*100;d=d+a;d=d+58.123456;?vtablea,2,32b,4,0.0d,8,0.0ofvtable?vupdate1,322,03,02,12345678.000003,12345678003,12345678323,1234567890.123456ofvupdateofpractice[practice]//linta=543;floatb;b=123.123962+a;b=b-100;a=b;~vtablea,2,543b,4,0.0ofvtable-vupdate1,5432,0.02,123.1239622,23.1239621,23ofvupdateofpractice字符型量字符型量包括字符常量和字符變量。字符常量字符常量是用單引號(hào)括起來(lái)的一"個(gè)字符。例如?,~?''?都是合法字符常量。在c語(yǔ)言中,字符常量有以下特點(diǎn):.字符常量只能用單引號(hào)括起來(lái),不能用雙引號(hào)或其它括號(hào)。.字符常量只能是單個(gè)字符,不能是字符串。.字符可以是字符集中任意字符。但數(shù)字被定義為字符型之后就不能參與數(shù)值運(yùn)算。如~5?和5是不同的。~5ー是字符常量,不能參與運(yùn)算。轉(zhuǎn)義字符轉(zhuǎn)義字符是ー種特殊的字符常量。轉(zhuǎn)義字符以反斜線‘へ"開頭,后跟ー個(gè)或幾個(gè)字符。轉(zhuǎn)義字符具有特定的含義,不同于字符原有的意義,故稱“轉(zhuǎn)義”字符。例如,在前面各例題printf函數(shù)的格式串中用到的“\n”就是ー個(gè)轉(zhuǎn)義字符,其意義是“回車換行”。轉(zhuǎn)義字符主要用來(lái)表示那些用一般字符不便于表示的控制代碼。常用的轉(zhuǎn)義字符及其含義轉(zhuǎn)義字符的意義\n回車換行\(zhòng)t橫向跳到卜.ー制表位置豎向跳格\b回車走紙換頁(yè)反斜線符"'"單引號(hào)符\a鳴鈴\ddd1?3位ハ進(jìn)制數(shù)所代表的字符\xhh1?2位十六進(jìn)制數(shù)所代表的字符廣義地講,c語(yǔ)言字符集中的任何ー個(gè)字符均可用轉(zhuǎn)義字符來(lái)表示。表2.2中的、ddd和\xhh正是為此而提出的。ddd和hh分別為ハ進(jìn)制和十六進(jìn)制的ascii代碼。如、101表示字?quot;a",\102表示字母"b",\134表示反斜線,\xoa表示換行等。轉(zhuǎn)義字符的使用。voidmain()(inta,b,c;a=5;b=6;c=7;printf("%d\n\t%d%d\n%d%d\t\b%d\n",a,b,c,a,b,c);c調(diào)用printf顯示程序運(yùn)行結(jié)果:printf("%d\n\t%d%d\n%d%d\t\b%d\n",a,b,c,a,b,c);程序在第一列輸出a值5之后就是“\n”,故回車換行;接著又是“\t”,于是跳到下一制表位置(設(shè)制表位置間隔為8),再輸出b值6:空二格再輸出c值7后又是"'n",因此再回車換行;再空二格之后又輸出a值5;再空三格又輸出b的值6;再次后"'t"跳到下ー制表位置(與上一行的6對(duì)齊),但下ー轉(zhuǎn)義字符“'b”又使退回一格,故緊挨著6再輸出c值70字符變量字符變量的取值是字符常量,即單個(gè)字符。字符變量的類型說(shuō)明符是char。字符變量類型說(shuō)明的格式和書寫規(guī)則都與整型變量相同。例如:chara,b;每個(gè)字符變量被分配ー個(gè)字節(jié)的內(nèi)存空間,因此只能存放ー個(gè)字符。字符值是以ascii碼的形式存放在變量的內(nèi)存單元之中的。如x的十進(jìn)制ascii碼是120,y的十進(jìn)制ascii碼是!2I0對(duì)字符變量a,b賦予?x?和?y?值:a=~x?;b=~y?;實(shí)際上是在a,b兩個(gè)單元內(nèi)存放120和!21的二進(jìn)制代碼:a01111000b01111001所以也可以把它們看成是整型量。c語(yǔ)言允許對(duì)整型變量賦以字符值,也允許對(duì)字符變量賦以整型值。在輸出時(shí),允許把字符變量按整型量輸出,也允許把整型量按字符量輸出。整型量為二字節(jié)量,字符量為單字節(jié)量,當(dāng)整型量按字符型量處理時(shí),只有低八位字節(jié)參與處理。main(){chara,b;a=120;b=121;printf("%c,%c\n%d,%d\n,,,a,b,a,b);}a■b■a<-120b<—121顯示程序結(jié)果chara,b;a=120;b=121;本程序中說(shuō)明a,b為字符型,但在賦值語(yǔ)句中賦以整型值。從結(jié)果看,a,b值的輸出形式取決于printf函數(shù)格式串中的格式符,當(dāng)格式符為"c"時(shí),對(duì)應(yīng)輸出的變量值為字符,當(dāng)格式符為"d"時(shí),對(duì)應(yīng)輸出的變量值為整數(shù)。voidmain(){chara,b;a=~x?;b=^y?;a=a-32;b=b-32;printfi[H%c,%c\n%d,%d\n",a,b,a,b);a,b被說(shuō)明為字符變量并賦予字符值把小寫字母換成大寫字母以整型和字符型輸出本例中,a,b被說(shuō)明為字符變量并賦予字符值,c語(yǔ)言允許字符變量參與數(shù)值運(yùn)算,即用字符的ascii碼參與運(yùn)算。山于大小寫字母的ascii碼相差32,因此運(yùn)算后把小寫字母換成大寫字母。然后分別以整型和字符型輸出。[practice]//charinta=49;charb;chard;b=a+10;d=a+b;?vtablea,2,49b,l,隨機(jī)d,l,隨機(jī)ofvtable-vupdate1,492,隨機(jī)3,隨機(jī)2,?;?3,?1?ofvupdateofpractice[practice]//charcl,c2;c1=a~;c2-b~;c1=c1-32;c2=c2?32;?vtablec1,1,隨機(jī)c2,l,隨機(jī)ofvtable?vupdate1,隨機(jī);2,隨機(jī)1,?a?;2,?b~1,?a?;2,?b~ofvupdateofpractice字符串常量字符串常量是由一對(duì)雙引號(hào)括起的字符序列。例如:"china","cprogram:,"$12.5"等都是合法的字符串常量。字符串常量和字符常量是不同的量。它們之間主要有以ド區(qū)別:.字符常量由單引號(hào)括起來(lái),字符串常量山雙引號(hào)括起來(lái)。.字符常量只能是單個(gè)字符,字符串常量則可以含一個(gè)或多個(gè)字符。.可以把一個(gè)字符常量賦予ー個(gè)字符變量,但不能把一個(gè)字符串常量賦予ー個(gè)字符變量。在c語(yǔ)言中沒有相應(yīng)的字符串變量。這是與basic語(yǔ)言不同的。但是可以用一個(gè)字符數(shù)組來(lái)存放ー個(gè)字符串常量。在數(shù)組ー章內(nèi)予以介紹。4.字符常量占ー個(gè)字節(jié)的內(nèi)存空間。字符串常量占的內(nèi)存字節(jié)數(shù)等于字符串中字節(jié)數(shù)加1。增加的一個(gè)字節(jié)中存放字符"'0"(ascii碼為0)。這是字符串結(jié)束的標(biāo)志。例如,字符串"cprogram"在內(nèi)存中所占的字節(jié)為:cprogram、。。字符常量?a?和字符串常量"a"雖然都只有一個(gè)字符,但在內(nèi)存中的情況是不同的。?a?在內(nèi)存中占ー個(gè)字節(jié),可表示為:a"a"在內(nèi)存中占二個(gè)字節(jié),可表示為:a\0符號(hào)常量符號(hào)常量在c語(yǔ)言中,可以用一個(gè)標(biāo)識(shí)符來(lái)表示一個(gè)常量,稱之為符號(hào)常量。符號(hào)常量在使用之前必須先定義,其一般形式為:#define標(biāo)識(shí)符常量其中#deRne也是一條預(yù)處理命令(預(yù)處理命令都?quot;#"開頭),稱為宏定義命令(在第九章預(yù)處理程序中將進(jìn)ー步介紹),其功能是把該標(biāo)識(shí)符定義為其后的常量值。ー經(jīng)定義,以后在程序中所有出現(xiàn)該標(biāo)識(shí)符的地方均代之以該常量值。習(xí)慣上符號(hào)常量的標(biāo)識(shí)符用大寫字母,變量標(biāo)識(shí)符用小寫字母,以示區(qū)別。#definepi3.14159voidmain(){floats,r;r=5;s=pi*r*r;printfi(Hs=%f\n",s);顯示程序結(jié)果floats,r;r=5;s=pi*r*r;本程序在主函數(shù)之前由宏定義命令定義pi為3.14159?在程序中即以該值代替pi。s=pi*r*r等效于s=3.14159*r*i?0應(yīng)該注意的是,符號(hào)常量不是變量,它所代表的值在整個(gè)作用域內(nèi)不能再改變。也就是說(shuō),在程序中,不能再用賦值語(yǔ)句對(duì)它重新賦值。變量的初值和類型轉(zhuǎn)換變量賦初值在程序中常常需要對(duì)變量賦初值,以便使用變量。語(yǔ)言程序中可有多種方法,在定義時(shí)賦以初值的方法,這種方法稱為初始化。在變量說(shuō)明中賦初值的一般形式為:類型說(shuō)明符變量1=值1,變量2=值2,……;例如:inta=b=c=5;floatx=3.2,y=3f,z=0.75;charch1=~k?,ch2=~p?;應(yīng)注意,在說(shuō)明中不允許連續(xù)賦值,如a=b=c=5是不合法的。voidmain(){inta=3,b,c=5;b=a+c;printf("a=%d,b=%d,c=%d\n,,,a,b,c);a<—3,b<ー〇,c<—5b<—a+c顯示程序運(yùn)行結(jié)果變量類型的轉(zhuǎn)換變量的數(shù)據(jù)類型是可以轉(zhuǎn)換的。轉(zhuǎn)換的方法有兩種,ー種是自動(dòng)轉(zhuǎn)換,一?種是強(qiáng)制轉(zhuǎn)換。自動(dòng)轉(zhuǎn)換自動(dòng)轉(zhuǎn)換發(fā)生在不同數(shù)據(jù)類型的量混合運(yùn)算時(shí),由編譯系統(tǒng)自動(dòng)完成。自動(dòng)轉(zhuǎn)換遵循以下規(guī)則:.若參與運(yùn)算量的類型不同,則先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算。.轉(zhuǎn)換按數(shù)據(jù)長(zhǎng)度增加的方向進(jìn)行,以保證精度不降低。如int型和long型運(yùn)算時(shí),先把int量轉(zhuǎn)成long型后再進(jìn)行運(yùn)算。.所有的浮點(diǎn)運(yùn)算都是以雙精度進(jìn)行的,即使僅含float單精度量運(yùn)算的表達(dá)式,也要先轉(zhuǎn)換成double型,再作運(yùn)算。.char型和short型參與運(yùn)算時(shí),必須先轉(zhuǎn)換成int型。.在賦值運(yùn)算中,賦值號(hào)兩邊量的數(shù)據(jù)類型不同時(shí),賦值號(hào)右邊量的類型將轉(zhuǎn)換為左邊量的類型。如果右邊量的數(shù)據(jù)類型長(zhǎng)度左邊長(zhǎng)時(shí),將丟失一部分?jǐn)?shù)據(jù),這樣會(huì)降低精度,丟失的部分按四舍五入向前舍入。ド面程序段表示了類型自動(dòng)轉(zhuǎn)換的規(guī)則。voidmain(){floatpi=3.14159;ints,r=5;s=r*r*pi;printf(Ms=%d\n,,,s);}pi<-3.14159s<-0,r<-5顯示程序運(yùn)行結(jié)果:floatpi=3.14159;ints,r=5;s=r*r*pi;本例程序中,pi為實(shí)型;s,r為整型。在執(zhí)行s=r*r*pi語(yǔ)句時(shí),r和pi都轉(zhuǎn)換成double型計(jì)算,結(jié)果也為double型。但由于s為整型,故賦值結(jié)果仍為整型,舍去了小數(shù)部分。強(qiáng)制類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換是通過類型轉(zhuǎn)換運(yùn)算來(lái)實(shí)現(xiàn)的。其一般形式為:(類型說(shuō)明符)(表達(dá)式)其功能是把表達(dá)式的運(yùn)算結(jié)果強(qiáng)制轉(zhuǎn)換成類型說(shuō)明符所表示的類型。例如:(float)a把a(bǔ)轉(zhuǎn)換為實(shí)型(int)(x+y)把x+y的結(jié)果轉(zhuǎn)換為整型在使用強(qiáng)制轉(zhuǎn)換時(shí)應(yīng)注意以下問題:.類型說(shuō)明符和表達(dá)式都必須加括號(hào)(單個(gè)變量可以不加括號(hào)),如把(int)(x+y)寫成(int)x+y則成了把x轉(zhuǎn)換成int型之后再與y相加了。.無(wú)論是強(qiáng)制轉(zhuǎn)換或是自動(dòng)轉(zhuǎn)換,都只是為了本次運(yùn)算的需要而對(duì)變量的數(shù)據(jù)長(zhǎng)度進(jìn)行的臨時(shí)性轉(zhuǎn)換,而不改變數(shù)據(jù)說(shuō)明時(shí)對(duì)該變量定義的類型。main(){floatf=5.75;printfC(im)q%d戶長(zhǎng)ー5.75將floatf強(qiáng)制轉(zhuǎn)換成intffloat^5.75;printf("(int)f^%d,f=%f\n",(int)^f);本例表明,f雖強(qiáng)制轉(zhuǎn)為int型,但只在運(yùn)算中起作用,是臨時(shí)的,而f本身的類型并不改變。因此,(int)f的值為5(刪去了小數(shù))而f的值仍為5.75〇)、小于(=)、小于等于(<=)和不等于。=)六種。.邏輯運(yùn)算符用于邏輯運(yùn)算。包括與(&&)、或(||)、非(D三種。.位操作運(yùn)算符參與運(yùn)算的量,按二進(jìn)制位進(jìn)行運(yùn)算。包括位與(&)、位或(|)、位非。)、位異或ビ)、左移(ラ*=)三類共十一種。.條件運(yùn)算符這是ー個(gè)三目運(yùn)算符,用于條件求值(?:)。.逗號(hào)運(yùn)算符用于把若干-表達(dá)式組合成一個(gè)表達(dá)式(,)。.指針運(yùn)算符用于取內(nèi)容(*)和取地址(&)二種運(yùn)算。.求字節(jié)數(shù)運(yùn)算符用于計(jì)算數(shù)據(jù)類型所占的字節(jié)數(shù)(sizeof)。.特殊運(yùn)算符有括號(hào)0,下標(biāo)。,成員(一,.)等幾種。優(yōu)先級(jí)和結(jié)合性c語(yǔ)言中,運(yùn)算符的運(yùn)算優(yōu)先級(jí)共分為15級(jí)。1級(jí)最高,15級(jí)最低。在表達(dá)式中,優(yōu)先級(jí)較高的先于優(yōu)先級(jí)較低的進(jìn)行運(yùn)算。而在一個(gè)運(yùn)算量?jī)蓚?cè)的運(yùn)算符優(yōu)先級(jí)相同時(shí),則按運(yùn)算符的結(jié)合性所規(guī)定的結(jié)合方向處理。C語(yǔ)言中各運(yùn)算符的結(jié)合性分為兩種,即左結(jié)合性(自左至右)和右結(jié)合性(自右至左)。例如算術(shù)運(yùn)算符的結(jié)合性是自左至右,即先左后右。如有表達(dá)式x-y+z則y應(yīng)先與號(hào)結(jié)合,執(zhí)行x-y運(yùn)算,然后再執(zhí)行+z的運(yùn)算。這種自左至右的結(jié)合方向就稱為“左結(jié)合性”。而自右至左的結(jié)合方向稱為“右結(jié)合性”。最典型的右結(jié)合性運(yùn)算符是賦值運(yùn)算符。如x=y=z,由于“=”的右結(jié)合性,應(yīng)先執(zhí)行y=z再執(zhí)行x=(y=z)運(yùn)算。c語(yǔ)言運(yùn)算符中有不少為右結(jié)合性,應(yīng)注意區(qū)別,以避免理解錯(cuò)誤。算術(shù)運(yùn)算符和算術(shù)表達(dá)式基本的算術(shù)運(yùn)算符.加法運(yùn)算符“+”加法運(yùn)算符為雙目運(yùn)算符,即應(yīng)有兩個(gè)量參與加法運(yùn)算。如a+b,4+8等。具有右結(jié)合性。.減法運(yùn)算符“-”減法運(yùn)算符為雙目運(yùn)算符。但“-”也可作負(fù)值運(yùn)算符,此時(shí)為單目運(yùn)算,如ーx,-5等具有左結(jié)合性。.乘法運(yùn)算符“*”雙目運(yùn)算,具有左結(jié)合性。.除法運(yùn)算符“/”雙目運(yùn)算具有左結(jié)合性。參與運(yùn)算量均為整型時(shí),結(jié)果也為整型,舍去小數(shù)。如果運(yùn)算量中有一個(gè)是實(shí)型,則結(jié)果為雙精度實(shí)型。voidmain(){printf("\n\n%d,%d\n",20/7,-20/7);printfl["%f,%f?",20.0/7,-20.0/7);雙目運(yùn)算具有左結(jié)合性。參與運(yùn)算量均為整型時(shí),結(jié)果也為整型,舍去小數(shù)。如果運(yùn)算量中有一個(gè)是實(shí)型,則結(jié)果為雙精度實(shí)型。printf("\n\n%d,%d\n",20/7,-20/7);printf("%f;%f\n",20.0/7,-20.0/7);本例中,20/7,-20/7的結(jié)果均為整型,小數(shù)全部舍去。而20.0/7和-20.0/7由于有實(shí)數(shù)參與運(yùn)算,因此結(jié)果也為實(shí)型。.求余運(yùn)算符(模運(yùn)算符)“%”雙目運(yùn)算,具有左結(jié)合性。要求參與運(yùn)算的量均為整型。求余運(yùn)算的結(jié)果等于兩數(shù)相除后的余數(shù)。voidmain(){printグ%d\n”,100%3);雙目運(yùn)算,具有左結(jié)合性。求余運(yùn)算符%要求參與運(yùn)算的量均為整型。本例輸出100除以3所得的余數(shù)k自增1,自減1運(yùn)算符自增1運(yùn)算符記為其功能是使變量的值自增1。自減1運(yùn)算符記為“??”,其功能是使變量值自減1。自增1,自減1運(yùn)算符均為單目運(yùn)算,都具有右結(jié)合性。可有以下幾種形式:Hii自增1后再參與其它運(yùn)算。--ii自減1后再參與其它運(yùn)算。i—i參與運(yùn)算后,i的值再自增1〇i-i參與運(yùn)算后,i的值再自減1。在理解和使用上容易出錯(cuò)的是計(jì)+和i-〇特別是當(dāng)它們出在較復(fù)雜的表達(dá)式或語(yǔ)句中時(shí),常常難于弄清,因此應(yīng)仔細(xì)分析。voidmain(){inti=8;printf(M%d\nM,++i);printf(M%d\n",-i);printf(M%d\n,,,i++);printfC%d\n”,i??);printfC%d\n”,-i++);printf(M%d\n",-i-);}i<-8i<—i+li<—i+1i<-i-li<—i+li<—i-1inti=8;printf("%d\n",++i);printf("%d\n",-i);printf("%d\n",i++);printf("%d\n",i-);printf("%d\n",-i++);printf("%d\n",-i-);i的初值為8第2行i加1后輸出故為9;第3行減1后輸出故為8;第4行輸出i為8之后再加1(為9);第5行輸出i為9之后再減1(為8);第6行輸出ー8之后再加1(為9);第7行輸出ー9之后再減1(為8)voidmain(){inti=5j=5,p,q;p=(i++>Hi++)+(i++);q=(++j)+(++j)+(++j);printf("%d,%d,%d,%d",p,q,i,j);)i<-5,j<-5,p<-O,qqinti=5j=5,p,q;p=(i++)+(i++)+(i++);q=(+4毋(++j)+(++j);這個(gè)程序中,對(duì)尸(i++)+(i++)+(i++)應(yīng)理解為三個(gè)1相加,故p值為15。然后i再自增1三次相當(dāng)于加3故i的最后值為8。而對(duì)于q的值則不然,q=(++j)+(+tj)+(++j)應(yīng)理解為q先自增1,再參與運(yùn)算,由于q自增1三次后值為8,三個(gè)8相加的和為24,j的最后值仍為8。算術(shù)表達(dá)式表達(dá)式是由常量、變量、函數(shù)和運(yùn)算符組合起來(lái)的式子。一個(gè)表達(dá)式有ー個(gè)值及其類型,它們等于計(jì)算表達(dá)式所得結(jié)果的值和類型。表達(dá)式求值按運(yùn)算符的優(yōu)先級(jí)和結(jié)合性規(guī)定的順序進(jìn)行。単個(gè)的常量、變量、函數(shù)可以看作是表達(dá)式的特例。算術(shù)表達(dá)式是由算術(shù)運(yùn)算符和括號(hào)連接起來(lái)的式子,以下是算術(shù)表達(dá)式的例子:a+b(a*2)/c(x+r)*8-(a+b)/7 ++isin(x)+sin(y)(++i)-(j++)+(k-)賦值運(yùn)算符和賦值表達(dá)式簡(jiǎn)單賦值運(yùn)算符和表達(dá)式,簡(jiǎn)單賦值運(yùn)算符記為“="。由“=”連接的式子稱為賦值表達(dá)式。其一般形式為:變量=表達(dá)式例如:x=a+bw=sin(a)+sin(b)y=i+++-j賦值表達(dá)式的功能是計(jì)算表達(dá)式的值再賦予左邊的變量。賦值運(yùn)算符具有右結(jié)合性。因此:a=b=c=5可理解為a=(b=(c=5))在其它高級(jí)語(yǔ)言中,賦值構(gòu)成了一個(gè)語(yǔ)句,稱為賦值語(yǔ)句。而在c中,把“=”定義為運(yùn)算符,從而組成賦值表達(dá)式。凡是表達(dá)式可以出現(xiàn)的地方均可出現(xiàn)賦值表達(dá)式。例如,式子x=(a=5)+(b=8)是合法的。它的意義是把5賦予a,8賦予b,再把a(bǔ),b相加,和賦予x,故x應(yīng)等于13。在c語(yǔ)言中也可以組成賦值語(yǔ)句,按照c語(yǔ)言規(guī)定,任何表達(dá)式在其未尾加上分號(hào)就構(gòu)成為語(yǔ)句。因此如x=8;a=b=c=5;都是賦值語(yǔ)句,在前面各例中我們已大量使用過了。如果賦值運(yùn)算符兩邊的數(shù)據(jù)類型不相同,系統(tǒng)將自動(dòng)進(jìn)行類型轉(zhuǎn)換,即把賦值號(hào)右邊的類型換成左邊的類型。具體規(guī)定如下:.實(shí)型賦予整型,舍去小數(shù)部分。前面的例2.9已經(jīng)說(shuō)明了這種情況。.整型賦ア實(shí)型,數(shù)值不變,但將以浮點(diǎn)形式存放,即增加小數(shù)部分(小數(shù)部分的值為0)o.字符型賦予整型,由于字符型為ー個(gè)字節(jié),而整型為二個(gè)字節(jié),故將字符的ascii碼值放到整型量的低八位中,高八位為〇。.整型賦予字符型,只把低八位賦予字符量。voidmain(){inta,b=322;floatx,y=8.88;charcl=~k~,c2;a=y;x=b;a=cl;c2=b;printfi[H%d,%f>%d,%c",a,x,a,c2);}inta,b=322;floatx,y=8.88;charcl-k~,c2;pr血ff%d,%f,%d,%c”,a=y,x=b,a=cl,c2=b);本例表明了上述賦值運(yùn)算中類型轉(zhuǎn)換的規(guī)則。a為整型,賦予實(shí)型量y值888后只取整數(shù)8。x為實(shí)型,賦予整型量b值322,后增加了小數(shù)部分。字符型量c!賦予a變?yōu)檎?整型量b賦予c2后取其低八位成為字符型(b的低八位為01000010,即十進(jìn)制66,按ascii碼對(duì)應(yīng)于字符b)。復(fù)合賦值符及表達(dá)式在賦值符“=”之前加上其它二目運(yùn)算符可構(gòu)成復(fù)合賦值符。如+=,=,*=,/=,%=,=,&=,ハ=ノ=。構(gòu)成復(fù)合賦值表達(dá)式的一般形式為:變量雙目運(yùn)算符=表達(dá)式它等效于變量=變量運(yùn)算符表達(dá)式例如:a+=5等價(jià)于a=a+5x*=y+7等價(jià)于x=x*(y+7)r%=p等價(jià)于r=r%p復(fù)合賦值符這種寫法,對(duì)初學(xué)者可能不習(xí)慣,但十分有利于編譯處理,能提高編譯效率并產(chǎn)生質(zhì)量較高的目標(biāo)代碼。逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式在逗號(hào)運(yùn)算符C語(yǔ)言中逗號(hào)'‘,"也是一種運(yùn)算符,稱為逗號(hào)運(yùn)算符。其功能是把兩個(gè)表達(dá)式連接起來(lái)組成一個(gè)表達(dá)式,稱為逗號(hào)表達(dá)式。其一般形式為:表達(dá)式1,表達(dá)式2其求值過程是分別求兩個(gè)表達(dá)式的值,并以表達(dá)式2的值作為整個(gè)逗號(hào)表達(dá)式的值。voidmain(){inta=2,b=4,c=6,x,y;y=(x=a+b),(b+c);printf("尸%d,x=%d",y,x);a<—2,b<—4,c<—6,x<—0,y<—0x<—a+b,y<…b+c本例中,y等于整個(gè)逗號(hào)表達(dá)式的值,也就是表達(dá)式2的值,x是第一個(gè)表達(dá)式的值。對(duì)于逗號(hào)表達(dá)式還要說(shuō)明兩點(diǎn):.逗號(hào)表達(dá)式一般形式中的表達(dá)式1和表達(dá)式2也可以又是逗號(hào)表達(dá)式。例如:表達(dá)式1,(表達(dá)式2,表達(dá)式3)形成了嵌套情形。因此可以把逗號(hào)表達(dá)式擴(kuò)展為以下形式:表達(dá)式1,表達(dá)式2,…表達(dá)式n整個(gè)逗號(hào)表達(dá)式的值等于表達(dá)式n的值。.程序中使用逗號(hào)表達(dá)式,通常是要分別求逗號(hào)表達(dá)式內(nèi)各表達(dá)式的值,并不一定要求整個(gè)逗號(hào)表達(dá)式的值。.并不是在所有出現(xiàn)逗號(hào)的地方都組成逗號(hào)表達(dá)式,如在變量說(shuō)明中,函數(shù)參數(shù)表中逗號(hào)只是用作各變量之間的間隔符。[practice]//arithmeticinta,b,c;floatd;a=ll;b=235;c=a+b-a*b;d=(float)c/(float)a;a=c/a;~vtablea,2,0b,2,0c,2,0d,4,0.0ofvtable-vupdatel,0;2,0;3,04,0.0UI2,2353,-23394,-212.6363681,-212ofvupdateofpractice[practice]//linta,b,cl,c2;a=25;b=3243;cl=b/a;c2=b%a;?vtablea,2,0b,2,0cl,2,0c2,2,0ofvtable~vupdatel,0;2,0;3,0;4,01,252,32433,1294,18ofvupdateofpractice[practice]//linta,b,c;a=25;b=40;c=a+b,c+35;-vtablea,2,0b,2,0c,2,0ofvtable?vupdatel,0;2,0;3,01,252,403,65ofvupdateofpractice小結(jié).c的數(shù)據(jù)類型基本類型,構(gòu)造類型,指針類型,空類型.基本類型的分類及特點(diǎn)類型說(shuō)明符字節(jié)數(shù)值范圍字符型char1c字符集基本整型int■32768?32767短整型shortint■32768?32767長(zhǎng)整型!ongint-214783648?214783647無(wú)符號(hào)型unsigned〇?65535無(wú)符號(hào)長(zhǎng)整型unsignedlong〇?4294967295單精度實(shí)型float3/4e-38?3/4e+38雙精度實(shí)型doublel/7e-308-l/7e+3083.常量后綴1或1長(zhǎng)整型u或u無(wú)符號(hào)數(shù)f或f浮點(diǎn)數(shù)整數(shù),長(zhǎng)整數(shù),無(wú)符號(hào)數(shù),浮點(diǎn)數(shù),字符,字符串,符號(hào)常數(shù),轉(zhuǎn)義字符。.數(shù)據(jù)類型轉(zhuǎn)換,自動(dòng)轉(zhuǎn)換在不同類型數(shù)據(jù)的混合運(yùn)算中,由系統(tǒng)自動(dòng)實(shí)現(xiàn)轉(zhuǎn)換,由少字節(jié)類型向多字節(jié)類型轉(zhuǎn)換。不同類型的量相互賦值時(shí)也由系統(tǒng)自動(dòng)進(jìn)行轉(zhuǎn)換,把賦值號(hào)右邊的類型轉(zhuǎn)換為左邊的類型。?強(qiáng)制轉(zhuǎn)換由強(qiáng)制轉(zhuǎn)換運(yùn)算符完成轉(zhuǎn)換。.運(yùn)算符優(yōu)先級(jí)和結(jié)合性一般而言,單目運(yùn)算符優(yōu)先級(jí)較高,賦值運(yùn)算符優(yōu)先級(jí)低。算術(shù)運(yùn)算符優(yōu)先級(jí)較高,關(guān)系和邏輯運(yùn)算符優(yōu)先級(jí)較低。多數(shù)運(yùn)算符具有左結(jié)合性,單目運(yùn)算符、三目運(yùn)算符、賦值.表達(dá)式表達(dá)式是由運(yùn)算符連接常量、變量、函數(shù)所組成的式子。每個(gè)表達(dá)式都有一個(gè)值和類型。表達(dá)式求值按運(yùn)算符的優(yōu)先級(jí)和結(jié)合性所規(guī)定的順序進(jìn)行。從程序流程的角度來(lái)看,程序可以分為三種基本結(jié)構(gòu),即順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。這三種基本結(jié)構(gòu)可以組成所有的各種復(fù)雜程序。c語(yǔ)言提供了多種語(yǔ)句來(lái)實(shí)現(xiàn)這些程序結(jié)構(gòu)。本文將介紹這些基本語(yǔ)句及其應(yīng)用,使讀者對(duì)c程序有一個(gè)初步的認(rèn)識(shí),為以后的學(xué)習(xí)打下基礎(chǔ)。C程序的語(yǔ)句C程序的執(zhí)行部分是由語(yǔ)句組成的。程序的功能也是由執(zhí)行語(yǔ)句實(shí)現(xiàn)的。C語(yǔ)句可分為以下五類:.表達(dá)式語(yǔ)句.函數(shù)調(diào)用語(yǔ)句.控制語(yǔ)句.復(fù)合語(yǔ)句.空語(yǔ)句.表達(dá)式語(yǔ)句表達(dá)式語(yǔ)句由表達(dá)式加上分號(hào)“;”組成。其一般形式為:表達(dá)式;執(zhí)行表達(dá)式語(yǔ)句就是計(jì)算表達(dá)式的值。例如:x=y+z;賦值語(yǔ)句y+z;加法運(yùn)算語(yǔ)句,但計(jì)算結(jié)果不能保留,無(wú)實(shí)際意義i++;自增1語(yǔ)句,i值增1.函數(shù)調(diào)用語(yǔ)句由函數(shù)名、實(shí)際參數(shù)加上分號(hào)“;”組成。其一般形式為;函數(shù)名(實(shí)際參數(shù)表);執(zhí)行函數(shù)語(yǔ)句就是調(diào)用函數(shù)體并把實(shí)際參數(shù)賦予函數(shù)定義中的形式參數(shù),然后執(zhí)行被調(diào)函數(shù)體中的語(yǔ)句,求取函數(shù)值。(在第五章函數(shù)中再詳細(xì)介紹)例如printf("cprogram");調(diào)用庫(kù)函數(shù),輸出字符串。.控制語(yǔ)句控制語(yǔ)句用于控制程序的流程,以實(shí)現(xiàn)程序的各種結(jié)構(gòu)方式。它們由特定的語(yǔ)句定義符組成。c語(yǔ)言有九種控制語(yǔ)句。可分成以下三類:(1)條件判斷語(yǔ)句if語(yǔ)句,switch語(yǔ)句(2)循環(huán)執(zhí)行語(yǔ)句dowhile語(yǔ)句,while語(yǔ)句,fbr語(yǔ)句(3)轉(zhuǎn)向語(yǔ)句break語(yǔ)句,goto語(yǔ)句,continue語(yǔ)句,return語(yǔ)句.復(fù)合語(yǔ)句把多個(gè)語(yǔ)句用括號(hào){}括起來(lái)組成的一個(gè)語(yǔ)句稱復(fù)合語(yǔ)句。在程序中應(yīng)把復(fù)合語(yǔ)句看成是單條語(yǔ)句,而不是多條語(yǔ)句,例如a=b+c;printfif"%d%d”,x,a);}0)z=x;因?yàn)?丫+5;是語(yǔ)句,不能出現(xiàn)在表達(dá)式中。運(yùn)算符的種類、優(yōu)先級(jí)和結(jié)合性c語(yǔ)言中運(yùn)算符和表達(dá)式數(shù)量之多,在高級(jí)語(yǔ)言中是少見的。正是豐富的運(yùn)算符和表達(dá)式使c語(yǔ)言功能十分完善。這也是c語(yǔ)言的主要特點(diǎn)之一。)、小于(=)、小于等于(<=)和不等于(!=)六種。.邏輯運(yùn)算符用于邏輯運(yùn)算。包括與(&&)、或(||)、非。)三種。.位操作運(yùn)算符參與運(yùn)算的量,按二進(jìn)制位進(jìn)行運(yùn)算。包括位與(&)、位或(|)、位非(~)、位異或(八)、左移(=,?=)三類共十一種。.條件運(yùn)算符這是ー個(gè)三目運(yùn)算符,用于條件求值(?:)。.逗號(hào)運(yùn)算符用于把若干表達(dá)式組合成一個(gè)表達(dá)式(,)。.指針運(yùn)算符用于取內(nèi)容(*)和取地址(&)二種運(yùn)算。.求字節(jié)數(shù)運(yùn)算符用于計(jì)算數(shù)據(jù)類型所占的字節(jié)數(shù)(sizeof)。有括號(hào)〇,下標(biāo)口,成員(f,.)等幾種。優(yōu)先級(jí)和結(jié)合性c語(yǔ)言中,運(yùn)算符的運(yùn)算優(yōu)先級(jí)共分為15級(jí)。1級(jí)最高,15級(jí)最低。在表達(dá)式中,優(yōu)先級(jí)較高的先于優(yōu)先級(jí)較低的進(jìn)行運(yùn)算。而在一個(gè)運(yùn)算量?jī)蓚?cè)的運(yùn)算符優(yōu)先級(jí)相同時(shí),則按運(yùn)算符的結(jié)合性所規(guī)定的結(jié)合方向處理。c語(yǔ)言中各運(yùn)算符的結(jié)合性分為兩種,即左結(jié)合性(自左至右)和右結(jié)合性(自右至左)。例如算術(shù)運(yùn)算符的結(jié)合性是自左至右,即先左后右。如有表達(dá)式x-y+z則y應(yīng)先與號(hào)結(jié)合,執(zhí)行x-y運(yùn)算,然后再執(zhí)行+z的運(yùn)算。這種自左至右的結(jié)合方向就稱為“左結(jié)合性”。而自右至左的結(jié)合方向稱為“右結(jié)合性”。最典型的右結(jié)合性運(yùn)算符是賦值運(yùn)算符。如xチz,由于''=”的右結(jié)合性,應(yīng)先執(zhí)行y=z再執(zhí)行x=(y=z)運(yùn)算。c語(yǔ)言運(yùn)算符中有不少為右結(jié)合性,應(yīng)注意區(qū)別,以避免理解錯(cuò)誤。算術(shù)運(yùn)算符和算術(shù)表達(dá)式基本的算術(shù)運(yùn)算符.加法運(yùn)算符“+”加法運(yùn)算符為雙目運(yùn)算符,即應(yīng)有兩個(gè)量參與加法運(yùn)算。如a+b,4+8等。具有右結(jié)合性。.減法運(yùn)算符減法運(yùn)算符為雙目運(yùn)算符。但也可作負(fù)值運(yùn)算符,此時(shí)為單目運(yùn)算,如ーX,-5等具有左結(jié)合性。.乘法運(yùn)算符"*”雙目運(yùn)算,具有左結(jié)合性。.除法運(yùn)算符“/”雙目運(yùn)算具有左結(jié)合性。參與運(yùn)算量均為整型時(shí),結(jié)果也為整型,舍去小數(shù)。如果運(yùn)算量中有一個(gè)是實(shí)型,則結(jié)果為雙精度實(shí)型。voidmain(){printfCMi^d^dWgO。,.2?!?;printfCM%f;%f\nw,20.0/7,-20.0/7);雙目運(yùn)算具有左結(jié)合性。參與運(yùn)算量均為整型時(shí),結(jié)果也為整型,舍去小數(shù)。如果運(yùn)算量中有一個(gè)是實(shí)型,則結(jié)果為雙精度實(shí)型。printf("\n\n%d,%d\n",20/7,-20/7);printf("%f,%f\n",20.0/7,-20.0/7);本例中,20/7,-20/7的結(jié)果均為整型,小數(shù)全部舍去。而20.0/7和-20.0/7由于有實(shí)數(shù)參與運(yùn)算,因此結(jié)果也為實(shí)型。.求余運(yùn)算符(模運(yùn)算符)“%”雙目運(yùn)算,具有左結(jié)合性。要求參與運(yùn)算的量均為整型。求余運(yùn)算的結(jié)果等于兩數(shù)相除后的余數(shù)。voidmain(){printf(M%d\n,,,100%3);雙目運(yùn)算,具有左結(jié)合性。求余運(yùn)算符%要求參與運(yùn)算的量均為整型。本例輸出100除以3所得的余數(shù)!o自增1,自減1運(yùn)算符自增1運(yùn)算符記為其功能是使變量的值自增1。自減1運(yùn)算符記為“-”,其功能是使變量值自減1。自增I,自減1運(yùn)算符均為單目運(yùn)算,都具有右結(jié)合性??捎幸韵聨追N形式:++ii自增1后再參與其它運(yùn)算。-ii自減1后再參與其它運(yùn)算。i++i參與運(yùn)算后,i的值再自增1。i-i參與運(yùn)算后,i的值再自減1。在理解和使用上容易出錯(cuò)的是i++和iー。特別是當(dāng)它們出在較復(fù)雜的表達(dá)式或語(yǔ)句中時(shí),常常難于弄清,因此應(yīng)仔細(xì)分析。voidmain(){inti=8;printf(M%d\nM,++i);pr血f("%d\n”,??i);printグ%d\n”,i++);printf(M%d\n",i-);printfC%d\n”,-i++);printfi(,,%d\n,,,-i-);}i<-8i<—i+1i<-i-li<—i+1i<-i+li<—i-1inti=8;printf(M%d\n",++i);printf(M%d\n",-i);printf(n%d\n",i++);printfi(,,%d\n",i-);pHntf("%d\n”,?i++);printグ%dH■一);i的初值為8第2行i加1后輸出故為9;第3行減1后輸出故為8:第4行輸出i為8之后再加1(為9);第5行輸出i為9之后再減1(為8);第6行輸出ー8之后再加1(為9);第7行輸出ー9之后再減1(為8)voidmain(){inti=5j=5,p,q;p=(i++)+(i-H-)+(i-H-);q=(zj)+(++j)+(++j);printfl["%d,%d,%d,%d",p,q,ij);i<-5j<-5,p<--O,qqinti=5j=5,p,q;p=(i-H-)+(i++)+(i++);q=(++j)+(++j)+(++j);這個(gè)程序中,對(duì)p=(i++)+(i++)+(i++)應(yīng)理解為三個(gè)i相加,故p值為15。然后i再自增1三次相當(dāng)于加3故i的最后值為8。而對(duì)于q的值則不然,q=(++j)+(+ザ)+(++j)應(yīng)理解為q先自增1,再參與運(yùn)算,由于q自增1三次后值為8,三個(gè)8相加的和為24,j的最后值仍為8?算術(shù)表達(dá)式表達(dá)式是由常量、變量、函數(shù)和運(yùn)算符組合起來(lái)的式子。一個(gè)表達(dá)式有ー個(gè)值及其類型,它們等于計(jì)算表達(dá)式所得結(jié)果的值和類型。表達(dá)式求值按運(yùn)算符的優(yōu)先級(jí)和結(jié)合性規(guī)定的順序進(jìn)行。單個(gè)的常量、變量、函數(shù)可以看作是表達(dá)式的特例。是由算術(shù)運(yùn)算符和括號(hào)連接起來(lái)的式子,以下是算術(shù)表達(dá)式的例子:a+b(a*2)/c(x+r)*8-(a+b)/7 ++isin(x)+sin(y)(++i)-(j-H-)+(k-)賦值運(yùn)算符和賦值表達(dá)式簡(jiǎn)單賦值運(yùn)算符和表達(dá)式,簡(jiǎn)単賦值運(yùn)算符記為“="。由“=”連接的式子稱為賦值表達(dá)式。其一般形式為:變量=表達(dá)式例如:x=a+bw=sin(a)+sin(b)y=i+++-j賦值表達(dá)式的功能是計(jì)算表達(dá)式的值再賦予左邊的變量。賦值運(yùn)算符具有右結(jié)合性。因此a=b=c=5可理解為a=(b=(c=5))在其它高級(jí)語(yǔ)言中,賦值構(gòu)成了一個(gè)語(yǔ)句,稱為賦值語(yǔ)句。而在c中,把“=”定義為運(yùn)算符,從而組成賦值表達(dá)式。凡是表達(dá)式可以出現(xiàn)的地方均可出現(xiàn)賦值表達(dá)式。例如,式子x=(a=5)+(b=8)是合法的。它的意義是把5賦アa,8賦予b,再把a(bǔ),b相加,和賦予x,故x應(yīng)等于13。在c語(yǔ)言中也可以組成賦值語(yǔ)句,按照c語(yǔ)言規(guī)定,任何表達(dá)式在其未尾加上分號(hào)就構(gòu)成為語(yǔ)句。因此如x=8;a=b=c=5:都是賦值語(yǔ)句,在前面各例中我們已大量使用過了。如果賦值運(yùn)算符兩邊的數(shù)據(jù)類型不相同,系統(tǒng)將自動(dòng)進(jìn)行類型轉(zhuǎn)換,即把賦值號(hào)右邊的類型換成左邊的類型。具體規(guī)定如下:.實(shí)型賦予整型,舍去小數(shù)部分。前面的例2.9已經(jīng)說(shuō)明了這種情況。.整型賦予實(shí)型,數(shù)值不變,但將以浮點(diǎn)形式存放,即增加小數(shù)部分(小數(shù)部分的值為0),.字符型賦予整型,由于字符型為ー個(gè)字節(jié),而整型為二個(gè)字節(jié),故將字符的ascii碼值放到整型量的低八位中,高八位為〇。.整型賦予字符型,只把低八位賦予字符量。voidmain(){inta,b=322;floatx,y=8.88;charcl=~k~,c2;a=y;x=b;a=cl;c2=b;printfi(M%d,%f;%d,%c",a,x,a,c2);)inta,b=322;floatx,y=8.88;charcl=k-,c2;printfi(,,%d,%f,%d,%c,,,a=y,x=b,a=c1,c2=b);本例表明了上述賦值運(yùn)算中類型轉(zhuǎn)換的規(guī)則。a為整型,賦予實(shí)型量y值888后只取整數(shù)8。x為實(shí)型,賦予整型量b值322,后增加了小數(shù)部分。字符型量cl賦予a變?yōu)檎?,整型量b賦予c2后取其低八位成為字符型(b的低八位為01000010,即十進(jìn)制66,按ascii碼對(duì)應(yīng)于字符b)?復(fù)合賦值符及表達(dá)式在賦值符“="之前加上其它二目運(yùn)算符可構(gòu)成復(fù)合賦值符。如+=,-=,*=,/=,%=,=,&=,A=,|=O構(gòu)成復(fù)合賦值表達(dá)式的一般形式為:變量雙目運(yùn)算符=表達(dá)式它等效于變量=變量運(yùn)算符表達(dá)式例如:a+=5等價(jià)于a=a+5x*=y+7等價(jià)于x=x*(y+7)r%=p等價(jià)于r=r%p復(fù)合賦值符這種寫法,對(duì)初學(xué)者可能不習(xí)慣,但十分有利于編譯處理,能提高編譯效率并產(chǎn)生質(zhì)量較高的目標(biāo)代碼。逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式在逗號(hào)運(yùn)算符c語(yǔ)言中逗號(hào)“,”也是ー種運(yùn)算符,稱為逗號(hào)運(yùn)算符。其功能是把兩個(gè)表達(dá)式連接起來(lái)組成一個(gè)表達(dá)式,稱為逗號(hào)表達(dá)式。其一般形式為:表達(dá)式1,表達(dá)式2其求值過程是分別求兩個(gè)表達(dá)式的值,并以表達(dá)式2的值作為整個(gè)逗號(hào)表達(dá)式的值。voidmain(){inta=2,b=4,c=6,x,y;y=(x=a+b),(b+c);printf("產(chǎn)%d,x=%d",y,x);)a<-2,b<—4,c<—6,x<—0,y<—0x<—a+b,y<b+c本例中,y等于整個(gè)逗號(hào)表達(dá)式的值,也就是表達(dá)式2的值,x是第一個(gè)表達(dá)式的值。對(duì)于逗號(hào)表達(dá)式還要說(shuō)明兩點(diǎn):.逗號(hào)表達(dá)式一般形式中的表達(dá)式1和表達(dá)式2也可以又是逗號(hào)表達(dá)式。例如:表達(dá)式1,(表達(dá)式2,表達(dá)式3)形成了嵌套情形。因此可以把逗號(hào)表達(dá)式擴(kuò)展為以下形式:表達(dá)式1,表達(dá)式2,…表達(dá)式n整個(gè)逗號(hào)表達(dá)式的值等于表達(dá)式n的值。.程序中使用逗號(hào)表達(dá)式,通常是要分別求逗號(hào)表達(dá)式內(nèi)各表達(dá)式的值,并不一定要求整個(gè)逗號(hào)表達(dá)式的值。.并不是在所有出現(xiàn)逗號(hào)的地方都組成逗號(hào)表達(dá)式,如在變量說(shuō)明中,函數(shù)參數(shù)表中逗號(hào)只是用作各變量之間的間隔符。數(shù)據(jù)輸出語(yǔ)句本小節(jié)介紹的是向標(biāo)準(zhǔn)輸出設(shè)備顯示器輸出數(shù)據(jù)的語(yǔ)句。在c語(yǔ)言中,所有的數(shù)據(jù)輸入/輸出都是由庫(kù)函數(shù)完成的。因此都是函數(shù)語(yǔ)句。本小節(jié)先介紹printf函數(shù)和putchar函數(shù)。printf函數(shù)printf函數(shù)稱為格式輸出函數(shù),其關(guān)鍵字最末一個(gè)字母f即為“格式"(format)之意。其功能是按用戶指定的格式,把指定的數(shù)據(jù)顯示到顯示器屏幕上。在前面的例題中我們已多次使用過這個(gè)函數(shù)。ー、printf函數(shù)調(diào)用的一般形式printf函數(shù)是ー個(gè)標(biāo)準(zhǔn)庫(kù)函數(shù),它的函數(shù)原型在頭文件“stdio.h”中。但作為ー個(gè)特例,不要求在使用printf函數(shù)之前必須包含stdio.h文件。printf函數(shù)調(diào)用的一般形式為:printf(“格式控制字符串”,輸出表列)其中格式控制字符串用于指定輸出格式。格式控制串可由格式字符串和非格式字符串兩種組成。格式字符串是以%開頭的字符串,在%后面跟有各種格式字符,以說(shuō)明輸出數(shù)據(jù)的類型、形式、長(zhǎng)度、小數(shù)位數(shù)等。如“%d”表示按十進(jìn)制整型輸出,“%Id”表示按十進(jìn)制長(zhǎng)整型輸出,“%c”表示按字符型輸出等。后面將專門給予討論。非格式字符串在輸出時(shí)原樣照印,在顯示中起提示作用。輸出表列中給出了各個(gè)輸出項(xiàng),要求格式字符串和各輸出項(xiàng)在數(shù)量和類型上應(yīng)該ーー對(duì)應(yīng)。voidmain()(inta=88,b=89;printf("%d%d\nH,a,b);printf(M%d,%d\nM,a,b);primfV'%c,%c\n”,a,b);printf(Ma=%d,b=%dM,a,b);)a<-8,b<-89printグ%d%d\nH,a,b);printf(M%d,%d\nM,a,b);printf(,,%c,%c\n",a,b);printf("a=%d,b=%dn,a,b);本例中四次輸出了a,b的值,但由于格式控制串不同,輸出的結(jié)果也不相同。第四行的輸出語(yǔ)句格式控制串中,兩格式串%d之間加了一個(gè)空格(非格式字符),所以輸出的a,b值之間有一個(gè)空格。第五行的printf語(yǔ)句格式控制串中加入的是非格式字符逗號(hào),因此輸出的a,b值之間加了一個(gè)逗號(hào)。第六行的格式串要求按字符型輸出a,b值。第七行中為了提示輸出結(jié)果又增加了非格式字符串二、格式字符串在turboc中格式字符串的一般形式為:[標(biāo)志][輸出最小寬度兒精度][長(zhǎng)度]類型其中方括號(hào)口中的項(xiàng)為可選項(xiàng)。各項(xiàng)的意義介紹如下:1.類型類型字符用以表示輸出數(shù)據(jù)的類型,其格式符和意義下表所示:表示輸出類型的格式字符格式字符意義d以十進(jìn)制形式輸出帶符號(hào)整數(shù)(正數(shù)不輸出符號(hào))〇以八進(jìn)制形式輸出無(wú)符號(hào)整數(shù)(不輸出前綴〇)x以十六進(jìn)制形式輸出無(wú)符號(hào)整數(shù)(不輸出前綴ox)u以十進(jìn)制形式輸出無(wú)符號(hào)整數(shù)f以小數(shù)形式輸出單、雙精度實(shí)數(shù)e以指數(shù)形式輸出單、雙精度實(shí)數(shù)g以%f%e中較短的輸出寬度輸出單、雙精度實(shí)數(shù)c輸出單個(gè)字符 s輸出字符串2標(biāo)志標(biāo)志字符為ー、+、#、空格四種,其意義下表所示:標(biāo)志格式字符標(biāo)志意義ー結(jié)果左對(duì)齊,右邊填空格+輸出符號(hào)(正號(hào)或負(fù)號(hào))空格輸出值為正時(shí)冠以空格,為負(fù)時(shí)冠以負(fù)號(hào)#對(duì)c,s,d,u類無(wú)影響:對(duì)。類,在輸出時(shí)加前綴。對(duì)x類,在輸出時(shí)加前綴Ox:對(duì)e,g,f類當(dāng)結(jié)果有小數(shù)時(shí)オ給出小數(shù)點(diǎn).輸出最小寬度用十進(jìn)制整數(shù)來(lái)表示輸出的最少位數(shù)。若實(shí)際位數(shù)多于定義的寬度,則按實(shí)際位數(shù)輸出,若實(shí)際位數(shù)少于定義的寬度則補(bǔ)以空格或0。.精度精度格式符以開頭,后跟十進(jìn)制整數(shù)。本項(xiàng)的意義是:如果輸出數(shù)字,則表示小數(shù)的位數(shù);如果輸出的是字符,則表示輸出字符的個(gè)數(shù);若實(shí)際位數(shù)大于所定義的精度數(shù),則截去超過的部分。5.長(zhǎng)度長(zhǎng)度格式符為h,l兩種,h表示按短整型量輸出,1表示按長(zhǎng)整型量輸出。voidmain(){inta=15;floatb=138.3576278;double¢=35648256.3645687;chard-p~;printf(,,a=%d,%5d,%o,%x\n,,,a,a,a,a);printf(Hb=%f,%lf,%5.41f,%e\nH,b,b,b,b);printfCc=%lf,%f,%8.41f^M,c,c,c);printf(,,d=%c,%8c\nH,d,d);}a<-15b<-138.3576278¢<-35648256.3645687d<-p?main(){inta=29;floatb=1243.2341;double¢=24212345.24232;¢harc=~h~printf('la=%d,%5d,%o,%x\n",a,a,a,a);printfi[Mb=%f,%lf,%5.41f,%e\n,,,b,b,b,b);printf(k=%lf,%f,%8.41f\nbcc);printf("d=%g%8dn”,d,d);}本例第七行中以四種格式輸出整型變量a的值,其中“%5d”要求輸出寬度為5,而a值為15只有兩位故補(bǔ)三個(gè)空格。第ハ行中以四種格式輸出實(shí)型量b的值。其中“%f”和“%lf”格式的輸出相同,說(shuō)明“1”符對(duì)“f”類型無(wú)影響?!?%5.41f”指定輸岀寬度為5,精度為4,由于實(shí)際長(zhǎng)度超過5故應(yīng)該按實(shí)際位數(shù)輸出,小數(shù)位數(shù)超過4位部分被截去。第九行輸出雙精度實(shí)數(shù),''%8.41f”由于指定精度為4位故截去了超過4位的部分。第十行輸出字符量d,其中“%bc”指定輸出寬度為8故在輸出字符p之前補(bǔ)加7個(gè)空格。使用printf函數(shù)時(shí)還要注意一個(gè)問題,那就是輸出表列中的求值順序。不同的編譯系統(tǒng)不一定相同,可以從左到右,也可從右到左。turboc是按從右到左進(jìn)行的。如把例2.13改寫如下述形式;voidmain(){inti=8;printfi["%d\n%d\n%d\n%d\n%d\n%d\n",++i,-i,i-,i-H-,-i-);i<-8這個(gè)程序與例2.13相比只是把多個(gè)printf語(yǔ)句改ー個(gè)printf語(yǔ)句輸出。但從結(jié)果可以看出是不同的。為什么結(jié)果會(huì)不同呢?就是因?yàn)閜rintf函數(shù)對(duì)輸出表中各量求值的順序是自右至左進(jìn)行的。在式中,先對(duì)最后一項(xiàng)“メー”求值,結(jié)果為ー8,然后i自減1后為7。再對(duì)“-i++”項(xiàng)求值得一7,然后i自增1后為8。再對(duì)“i-”項(xiàng)求值得8,然后i再自減1后為?〇再求‘‘i++”項(xiàng)得7,然后i再自增1后為8。再求''-i”項(xiàng),i先自減1后輸出,輸出值為7。最后オ求輸出表列中的第一項(xiàng)“++i”,此時(shí)i自增1后輸出8。但是必須注意,求值順序雖是自右至左,但是輸出順序還是從左至右,因此得到的結(jié)果是上述輸出結(jié)果。字符輸出函數(shù)putchar函數(shù)putchar函數(shù)是字符輸出函數(shù),其功能是在顯示器上輸出單個(gè)字符。其一般形式為:putchar(字符變量)例如:putchar(-a-);輸出大寫字母aputchar(x);輸出字符變量x的值putchar(?\n~);換行對(duì)控制字符則執(zhí)行控制功能,不在屛幕上顯示。使用木函數(shù)前必須要用文件包含命令:#include#includevoidmain(){chara=~b~,b=~o~,c=~k~;putchar(a);putchar(b);putchar(b);putchar(c);putchar(~\t~);putchar(a);putchar(b);putchar(?\n?);putchar(b);putchar(c);數(shù)據(jù)輸入語(yǔ)句c語(yǔ)言的數(shù)據(jù)輸入也是山函數(shù)語(yǔ)句完成的。本節(jié)介紹從標(biāo)準(zhǔn)輸入設(shè)備一鍵盤上輸入數(shù)據(jù)的函數(shù)scanf和getchar。scanf函數(shù)scanf函數(shù)稱為格式輸入函數(shù),即按用戶指定的格式從鍵盤上把數(shù)據(jù)輸入到指定的變量之中。ー、scanf函數(shù)的一般形式a567a為變量名,567是變量的值,&a是變量a的地址。在賦值表達(dá)式中給變量賦值,如:a=56?在賦值號(hào)左邊是變量名,不能寫地址,而scanf函數(shù)在本質(zhì)上也是給變量賦值,但要求寫變量的地址,如&a。這兩者在形式上是不同的。&是ー個(gè)取地址運(yùn)算符,&a是ー個(gè)表達(dá)式,其功能是求變量的地址。voidmain(){inta,b,c;printfif*inputa,b,c\nM);scanf(M%d%d%dH,&a,&b,&c);printf(,*a=%d,b=%d,c=%d,,,a,b,c);)注意&的用法!在本例中,由于scanf函數(shù)本身不能顯示提示串,故先用printf語(yǔ)句在屏幕上輸出提示,請(qǐng)用戶輸入a、b、c的值。執(zhí)行scanf語(yǔ)句,則退出tc屏幕進(jìn)入用戶屏幕等待用戶輸入。用戶輸入7、8、9后按下回車鍵,此時(shí),系統(tǒng)又將返回tc屏幕。在scanf語(yǔ)句的格式串中由于沒有非格式字符在"%d%d%d”之間作輸入時(shí)的間隔,因此在輸入時(shí)要用一個(gè)以上的空格或回車鍵作為每?jī)蓚€(gè)輸入數(shù)之間的間隔。如:789或789格式字符串格式字符串的一般形式為:%[*][輸入數(shù)據(jù)寬度][長(zhǎng)度]類型其中有方括號(hào)口的項(xiàng)為任選項(xiàng)。各項(xiàng)的意義如下:.類型表示輸入數(shù)據(jù)的類型,其格式符和意義下表所示。格式字符意義 d輸入十進(jìn)制整數(shù)〇輸入ハ進(jìn)制整數(shù)x輸入十六進(jìn)制整數(shù)u輸入無(wú)符號(hào)十進(jìn)制整數(shù)f或e輸入實(shí)型數(shù)(用小數(shù)形式或指數(shù)形式)C輸入單個(gè)字符S輸入字符串.“”符用以表示該輸入項(xiàng)讀入后不賦予相應(yīng)的變量,即跳過該輸入值。如scanf("%d%*d%d",&a,&b);當(dāng)輸入為:123時(shí),把1賦予a,2被跳過,3賦予%.寬度用卜進(jìn)制整數(shù)指定輸入的寬度(即字符數(shù))。例如:scanf("%5d",&a);輸入:12345678只把12345賦予變量a,其余部分被截去。又如:scanf("%4d%4d",&a,&b);輸入:12345678將把1234賦予a,而把5678賦予b。.長(zhǎng)度長(zhǎng)度格式符為1和h,1表示輸入長(zhǎng)整型數(shù)據(jù)(如%Id)和雙精度浮點(diǎn)數(shù)(如%If)。h表示輸入短整型數(shù)據(jù)。使用scanf函數(shù)還必須注意以下幾點(diǎn):scanf函數(shù)中沒有精度控制,如:scanfi["%5.2f',&a);是非法的。不能企圖用此語(yǔ)句輸入小數(shù)為2位的實(shí)數(shù)。scanf中要求給出變量地址,如給出變量名則會(huì)出錯(cuò)。如scanf("%d",a);是非法的,應(yīng)改為scnaf("%d",&a);オ是合法的。c.在輸入多個(gè)數(shù)值數(shù)據(jù)時(shí),若格式控制串中沒有非格式字符作輸入數(shù)據(jù)之間的間隔則可用空格,tab或回車作間隔。c編譯在碰到空格,tab,回車或非法數(shù)據(jù)(如對(duì)“%d”輸入“12a”時(shí),a即為非法數(shù)據(jù))時(shí)即認(rèn)為該數(shù)據(jù)結(jié)束。d,在輸入字符數(shù)據(jù)時(shí),若格式控制串中無(wú)非格式字符,則認(rèn)為所有輸入的字符均為有效字符。例如:scanf("%c%c%c",&a,&b,&c);輸入為:def則把~d?賦予a,?f-賦予b,~e?賦予c。只有當(dāng)輸入為:defHj,才能把?dー賦于a,~e~賦予b,?賦予c。如果在格式控制中加入空格作為間隔,如scanf("%c%c%c",&a,&b,&c);則輸入時(shí)各數(shù)據(jù)之間可加空格。voidmain(){chara,b;printfif4nputcharactera,b\nH);scanff%c%c”,&a,&b);printff'%c%c\n”,a,b);scanffy14fl4%c%c”,&a,&b);printf(M%c%c\nM,a,b);由于scanf函數(shù)"%c%c”中沒有空格,輸入mn,結(jié)果輸出只有m。而輸入改為mn時(shí)則可輸出mn兩字符,見下面的輸入運(yùn)行情況:inputcharactera,bmnmnvoidmain(){chara,b;printfif"inputcharactera,b\n");scanfi("%c%c",&a,&b);printf("\n%c%c\n",a,b);}scanR"%c%c",&a,&b);本例表示scanf格式控制串“%c%c”之間有空格時(shí),輸入的數(shù)據(jù)之間可以有空格間隔。e.如果格式控制串中有非格式字符則輸入時(shí)也要輸入該非格式字符。例如:scanf(H%d,%d,%dn,&a,&b,&c);其中用非格式符“,”作間隔符,故輸入時(shí)應(yīng)為:5,6,7又如:scanfi("a=%d,b=%d,c=%d,*,&a,&b,&c);則輸入應(yīng)為a=5,b=6,c=7g,如輸入的數(shù)據(jù)與輸出的類型不一致時(shí),雖然編譯能夠通過,但結(jié)果將不正確。voidmain(){inta;printff'inputanumber\nH);scanff%d”,&a);pr血ズ%Id”,a);}由于輸入數(shù)據(jù)類型為整型,而輸出語(yǔ)句的格式串中說(shuō)明為長(zhǎng)整型,因此輸出結(jié)果和輸入數(shù)據(jù)不符。如改動(dòng)程序如下:voidmain(){longa;printf("inputalonginteger\nH);scanf(M%ldn,&a);printf(H%ld",a);}運(yùn)行結(jié)果為:inputalonginteger12345678901234567890當(dāng)輸入數(shù)據(jù)改為長(zhǎng)整型后,輸入輸出數(shù)據(jù)相等鍵盤輸入函數(shù)getchar函數(shù)getchar函數(shù)的功能是從鍵盤上輸入ー個(gè)字符。其一般形式為:getchar();通常把輸入的字符賦予ー個(gè)字符變量,構(gòu)成賦值語(yǔ)句,如:charc;c=getchar();#includevoidmain(){charc;printギinputacharacter\nM);c=getchar();putchar(c);}使用getchar函數(shù)還應(yīng)注意幾個(gè)問題:.getchar函數(shù)只能接受單個(gè)字符,輸入數(shù)字也按字符處理。輸入多于ー個(gè)字符時(shí),只接收第一個(gè)字符。.使用本函數(shù)前必須包含文件“stdio.h"。.在tc屏幕下運(yùn)行含本函數(shù)程序時(shí),將退出tc屏幕進(jìn)入用戶屏幕等待用戶輸入。輸入完畢再返回忙屏幕。voidmain(){chara,b,c;printギinputcharactera,b,c\nM);scanグ%c%c%cH,&a,&b,&c);printfC%d,%d,%d\n%c,%c,%c\n”,a,b,c,a?32,b?32,c?32);}輸入三個(gè)小寫字母輸出其ascii碼和對(duì)應(yīng)的大寫字母。voidmain(){inta;longb;floatf;doubled;charc;printf(,,%d,%d,%d,%d,%d,,,sizeof(a),sizeof(b),sizeof(f),sizeof(d),sizeof(c));}輸出各種數(shù)據(jù)類型的字節(jié)長(zhǎng)度。關(guān)系運(yùn)算符和表達(dá)式在程序中經(jīng)常需要比較兩個(gè)量的大小關(guān)系,以決定程序下ー步的工作。比較兩個(gè)量的運(yùn)算符稱為關(guān)系運(yùn)算符。在C語(yǔ)言中有以下關(guān)系運(yùn)算符:<小于=大于或等于=等于!=不等于關(guān)系運(yùn)算符都是雙目運(yùn)算符,其結(jié)合性均為左結(jié)合。關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符,高于賦值運(yùn)算符。在六個(gè)關(guān)系運(yùn)算符中,<,=的優(yōu)先級(jí)相同,髙于==和!=,==和!=的優(yōu)先級(jí)相同。關(guān)系表達(dá)式3/2,?a?+15不成立,故其值為假,即為0。voidmain(){charcdk?;inti=lj=2,k=3;floatx=3e+5,y=0.85;printf("%d,%d\n”,?a?+5=k+l);printf(H%d,%d\n",1<j<5,x-5.25<=x+y);printf(”%d,%d\n”,i+j+k=-2*j,k=j=i+5);charc=k?;inti=l,j=2,k=3;floatx=3e+5,y=0.85;printf(“%d,%d\n”,?a?+5=k+l);printf(n%d,%d\n",1<j<5,x-5.25<=x+y);printf(n%d,%d\n",i+j+k=-2*j,k=j=i+5);在本例中求出了各種關(guān)系運(yùn)算符的值。字符變量是以它對(duì)應(yīng)的ascii碼參與運(yùn)算的。對(duì)于含多個(gè)關(guān)系運(yùn)算符的表達(dá)式,如k=j=i+5,根據(jù)運(yùn)算符的左結(jié)合性,先計(jì)算k==j,該式不成立,其值為0,再計(jì)算〇==i+5,也不成立,故表達(dá)式值為〇。邏輯運(yùn)算符和表達(dá)式d)!b=c||d<a等價(jià)于((!b)=c)||(dc&&x+yc)&&((x+y)<b)邏輯運(yùn)算的值〇)的結(jié)果為假。雖然c編譯在給出邏輯運(yùn)算值時(shí),以ー”代表“真",“〇”代表"假”。但反過來(lái)在判斷ー個(gè)量是為“真”還是為“假”時(shí),以“0”代表“假”,以非“〇”的數(shù)值作為“真”。例如:由于5和3均為非“?!币虼?&&3的值為“真”,即為1。又如:5||0的值為“真”,即為1。邏輯表達(dá)式邏輯表達(dá)式的一般形式為:表達(dá)式邏輯運(yùn)算符表達(dá)式其中的表達(dá)式可以又是邏輯表達(dá)式,從而組成了嵌套的情形。例如:(a&&b)&&c根據(jù)邏輯運(yùn)算符的左結(jié)合性,上式也可寫為:a&&b&&c邏輯表達(dá)式的值是式中各種邏輯運(yùn)算的最后值,以“ビ和“〇”分別代表“真”和“假”。voidmain(){charcdk?;inti=lj=2,k=3;floatx=3e+5,y=0.85;printed,%d\nM,!x*!y,!!!x);printf(,,%d,%d\nn,x||i&&j-3,i<j&&x<y);printf(,,%d,%d\n',,i=5&&c&&0=8),x+y||i+j+k);}charcdk?;inti=lj=2,k=3;floatx=3e+5,y=0.85;printff%d,%d\n”,!x*!y,!!!x);printf(M%d,%d\n,*,x||i&&j-3,i<j&&x<y);printfC%d,%d\n\i-5&&c&&(j=8),x+y||i+j+k);本例中!x和!y分別為〇,!x*!y也為〇,故其輸出值為〇。由于x為非〇,故!!!x的邏輯值為O。對(duì)x||i&&j-3式,先計(jì)算j-3的值為非〇,再求i&&j-3的邏輯值為1,故x||i&&j-3的邏輯值為1〇對(duì)i<j&&x<y式,由于i<j的值為1,而x<y為〇故表達(dá)式的值為1,0相與,最后為0,對(duì)i==5&&c&&(j=8)式,由于i==5為假,即值為0,該表達(dá)式由兩個(gè)與運(yùn)算組成,所以整個(gè)表達(dá)式的值為〇。對(duì)于式x+y||i+j+k由于x+y的值為非0,故整個(gè)或表達(dá)式的值為1。if語(yǔ)句用if語(yǔ)句可以構(gòu)成分支結(jié)構(gòu)。它根據(jù)給定的條件進(jìn)行判斷,以決定執(zhí)行某個(gè)分支程序段。C語(yǔ)言的if語(yǔ)句有三種基本形式。.第?種形式為基本形式if(表達(dá)式)語(yǔ)句;其語(yǔ)義是:如果表達(dá)式的值為真,則執(zhí)行其后的語(yǔ)句,否則不執(zhí)行該語(yǔ)句。其過程可表示為下圖voidmain(){inta,b,max;printf("\ninputtwonumbers:**);scanff%d%d”,&a,&b);max=a;if(max<b)max=b;printf("max=%d",max);}輸入兩個(gè)整數(shù),輸出其中的大數(shù)。scanf(M%d%dM,&a,&b);max=a;if(max<b)max=b;printf(,'max=%d'(,max);本例程序中,輸入兩個(gè)數(shù)a,b。把a(bǔ)先賦予變量max,再用if語(yǔ)句判別max和b的大小,如max小于b,則把b賦予max。因此max中總是大數(shù),最后輸出max的值。.第二種形式為if-else形式if(表達(dá)式)語(yǔ)句1;else語(yǔ)句2;其語(yǔ)義是:如果表達(dá)式的值為真,則執(zhí)行語(yǔ)句1,否則執(zhí)行語(yǔ)句2〇b)printffmax=%d\n”,a);elseprintffmax=%d\n”,b);}輸入兩個(gè)整數(shù),輸出其中的大數(shù)。改用if'else語(yǔ)句判別a,b的大小,若a大,則輸出a,否則輸出bo.第三種形式為iRelse-if形式前二種形式的if語(yǔ)句一般都用于兩個(gè)分支的情況。當(dāng)有多個(gè)分支選擇時(shí),可采用if-else-if語(yǔ)句,其一般形式為:if(表達(dá)式1)語(yǔ)句1;elseif(表達(dá)式2)語(yǔ)句2;elseif(表達(dá)式3)語(yǔ)句3;elseif(表達(dá)式m)語(yǔ)句m;else語(yǔ)句n;其語(yǔ)義是:依次判斷表達(dá)式的值,當(dāng)出現(xiàn)某個(gè)值為真時(shí),則執(zhí)行其對(duì)應(yīng)的語(yǔ)句。然后跳到整個(gè)if語(yǔ)句之外繼續(xù)執(zhí)行程序。如果所有的表達(dá)式均為假,則執(zhí)行語(yǔ)句n。然后繼續(xù)執(zhí)行后續(xù)程序。if-else-if語(yǔ)句的執(zhí)行過程如圖3—3所示。#include"stdio.h"voidmain(){charc;printf("inputacharacter:*');c=getchar();ififc=一〇?&&c=~a?&&c=~a?&&c〈ンZ?)printff'thisisasmallletter\nM);elseprintff'thisisanothercharacter\nH);}ififc=~〇?&&c=?a?&&c=~a?&&c〈=~z?)printff'thisisasmallletter\nM);elseprintff'thisisanothercharacter\nn);本例要求判別鍵盤輸入字符的類別。可以根據(jù)輸入字符的ascii碼來(lái)判別類型。由ascii碼表可知ascii值小于32的為控制字符。在“0”和“9”之間的為數(shù)字,在“a”和“z”之間為大寫字母,在“a”和“z”之間為小寫字母,其余則為其它字符。這是ー個(gè)多分支選擇的問題,用if-else-if語(yǔ)句編程,判斷輸入字符ascii碼所在的范圍,分別給出不同的輸出。例如輸入為“g”,輸出顯示它為小寫字符。.在使用if語(yǔ)句中還應(yīng)注意以下問題(1)在三種形式的if語(yǔ)句中,在if關(guān)犍字之后均為表達(dá)式。該表達(dá)式通常是邏輯表達(dá)式或關(guān)系表達(dá)式,但也可以是其它表達(dá)式,
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 保險(xiǎn)合規(guī)考試試題及答案
- 大數(shù)據(jù)驅(qū)動(dòng)的職業(yè)性放射病風(fēng)險(xiǎn)預(yù)測(cè)研究-1
- 大數(shù)據(jù)賦能精準(zhǔn)醫(yī)學(xué)人才培養(yǎng)模式
- 大數(shù)據(jù)在慢病健康促進(jìn)中的應(yīng)用
- 導(dǎo)演考試題及答案
- 多維度分層在個(gè)體化手術(shù)中的應(yīng)用
- 2025年大學(xué)大二(商務(wù)策劃)方案撰寫綜合測(cè)試題及答案
- 2025年高職旅游服務(wù)與管理(導(dǎo)游詞撰寫)試題及答案
- 2025年中職(工業(yè)機(jī)器人技術(shù)應(yīng)用)機(jī)器人傳感器應(yīng)用試題及答案
- 2025年高職(環(huán)境監(jiān)測(cè)技術(shù))環(huán)境工程原理實(shí)務(wù)試題及答案
- 吳江三小英語(yǔ)題目及答案
- 2025年事業(yè)單位筆試-河北-河北藥學(xué)(醫(yī)療招聘)歷年參考題庫(kù)含答案解析(5卷套題【單選100題】)
- 集團(tuán)債權(quán)訴訟管理辦法
- 鋼結(jié)構(gòu)施工進(jìn)度計(jì)劃及措施
- 智慧健康養(yǎng)老服務(wù)與管理專業(yè)教學(xué)標(biāo)準(zhǔn)(高等職業(yè)教育??疲?025修訂
- 珠寶首飾售后服務(wù)與保修合同
- 2025年廣東省惠州市惠城區(qū)中考一模英語(yǔ)試題(含答案無(wú)聽力原文及音頻)
- 煤礦皮帶輸送機(jī)跑偏原因和處理方法
- 征兵體檢超聲診斷
- 創(chuàng)傷后應(yīng)激障礙的心理護(hù)理
- 醫(yī)療項(xiàng)目年度總結(jié)模板
評(píng)論
0/150
提交評(píng)論