第2章 數(shù)據(jù)類型、運(yùn)算符和表達(dá)式(加動(dòng)畫16:9)_第1頁(yè)
第2章 數(shù)據(jù)類型、運(yùn)算符和表達(dá)式(加動(dòng)畫16:9)_第2頁(yè)
第2章 數(shù)據(jù)類型、運(yùn)算符和表達(dá)式(加動(dòng)畫16:9)_第3頁(yè)
第2章 數(shù)據(jù)類型、運(yùn)算符和表達(dá)式(加動(dòng)畫16:9)_第4頁(yè)
第2章 數(shù)據(jù)類型、運(yùn)算符和表達(dá)式(加動(dòng)畫16:9)_第5頁(yè)
已閱讀5頁(yè),還剩88頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第2章程序中的數(shù)據(jù)2.3數(shù)據(jù)類型轉(zhuǎn)換及數(shù)據(jù)的溢出誤差2.4數(shù)據(jù)的輸入/輸出2.5程序案例本章小結(jié)學(xué)生自我完善練習(xí)目錄2.1數(shù)據(jù)類型、變量與常量2.2運(yùn)算符與表達(dá)式2.1數(shù)據(jù)類型、變量與常量在C語(yǔ)言中,每個(gè)數(shù)據(jù)都屬于唯一的一種數(shù)據(jù)類型,沒有無(wú)類型的數(shù)據(jù)。C語(yǔ)言的數(shù)據(jù)類型如圖2-1所示。2.1.1數(shù)據(jù)類型概述2.1數(shù)據(jù)類型、變量與常量C語(yǔ)言的基本類型有三種:字符型、整型和實(shí)型(浮點(diǎn)型)。C語(yǔ)言的基本類型修飾符有四種:signed(有符號(hào))、unsigned(無(wú)符號(hào))、long(長(zhǎng)型符)和short(短型符),這些類型修飾符可以與字符型或整型數(shù)據(jù)配合使用?;緮?shù)據(jù)類型和取值范圍如表2-1所示。2.1.1數(shù)據(jù)類型概述2.1數(shù)據(jù)類型、變量與常量表2-1C語(yǔ)言基本數(shù)據(jù)類型描述類型說明內(nèi)存單元個(gè)數(shù)取值范圍char字符型1(8位)-128~127即-27~(27-1)unsignedchar無(wú)符號(hào)字符型1(8位)0~255

即0~(28-1)signedchar有符號(hào)字符型1(8位)-128~127即-27~(27-1)int整型2(16位)-32768~32767即-215~(215-1)unsignedint無(wú)符號(hào)整型2(16位)0~65535

即0~(216-1)signedint有符號(hào)整型2(16位)-32768~32767即-215~(215-1)shortint短整型2(16位)-32768~32767即-215~(215-1)unsignedshortint無(wú)符號(hào)短整型2(16位)0~65535

即0~(216-1)signedshortint有符號(hào)短整型2(16位)-32768~32767即-215~(215-1)longint長(zhǎng)整型4(32位)-2147483648~2147483647即-231~(231-1)unsignedlongint無(wú)符號(hào)長(zhǎng)整型4(32位)0~4294967295

即0~(232-1)signedlongint有符號(hào)長(zhǎng)整型4(32位)-2147483648~2147483647即-231~(231-1)float單精度實(shí)型4(32位)-3.4E+38~3.4E+38double雙精度實(shí)型8(64位)-1.7E+308~1.7E+3082.1數(shù)據(jù)類型、變量與常量1.標(biāo)識(shí)符

所謂標(biāo)識(shí)符,是指用來(lái)標(biāo)識(shí)程序中用到的變量、函數(shù)、類型、數(shù)組、文件以及符號(hào)常量等的有效字符序列。

在C語(yǔ)言中,標(biāo)識(shí)符只能由字母、數(shù)字和下劃線組成,第一個(gè)字符必須為字母或下劃線。2.1.2標(biāo)識(shí)符2.1數(shù)據(jù)類型、變量與常量2.關(guān)鍵字關(guān)鍵字又稱保留字,是C語(yǔ)言規(guī)定的具有特定意義的標(biāo)識(shí)符,它們有特定的含義,不能做其他用途使用。C語(yǔ)言的關(guān)鍵字有32個(gè),可分為以下四類。(1)標(biāo)識(shí)數(shù)據(jù)類型的關(guān)鍵字(14個(gè)):int,long,short,char,float,double,signed,unsigned,struct,union,enum,void,volatile,const。(2)標(biāo)識(shí)存儲(chǔ)類型的關(guān)鍵字(5個(gè)):auto,static,register,extern,typedef。(3)標(biāo)識(shí)流程控制的關(guān)鍵字(12個(gè)):goto,return,break,continue,if,else,while,do,for,switch,case,default。(4)標(biāo)識(shí)運(yùn)算符的關(guān)鍵字(1個(gè)):sizeof。2.1.2標(biāo)識(shí)符2.1數(shù)據(jù)類型、變量與常量1.變量概述在程序運(yùn)行過程中,其存儲(chǔ)的值可以被改變的量稱為變量。變量定義必須放在變量使用之前,一般放在函數(shù)體的開頭部分。要區(qū)分變量名和變量值是兩個(gè)不同的概念。例如整型變量a的值為3,則變量a在內(nèi)存中的存儲(chǔ)形式如圖2-2所示。2.1.3變量的定義、賦值和初始化2.1數(shù)據(jù)類型、變量與常量2.變量的說明變量定義的一般格式如下:

數(shù)據(jù)類型

變量名1[,變量名2,變量名3,…

,變量名n];2.1.3變量的定義、賦值和初始化

其中中括號(hào)“[]”括起來(lái)的部分為可選項(xiàng),省略號(hào)為多次重復(fù)。例如:intx,y,z; /*定義三個(gè)整型變量x、y和z*/floati,j; /*定義兩個(gè)單精度浮點(diǎn)型變量i、j*/2.1數(shù)據(jù)類型、變量與常量3.變量的賦值和初始化(1)變量的賦值。定義變量后,在使用之前需要給定一個(gè)初始值。在C語(yǔ)言中,可以通過賦值運(yùn)算符“=”給變量賦值。變量賦值語(yǔ)句的一般格式如下。例如:intx;/*定義一個(gè)整型變量x,此時(shí)x的值是不確定的*/x=3; /*給變量賦初值為3*/變量名=表達(dá)式;2.1.3變量的定義、賦值和初始化2.1數(shù)據(jù)類型、變量與常量(2)變量的初始化。在定義變量的同時(shí)為其賦值,稱為變量的初始化。定義的變量可以全部初始化,也可以部分初始化。例如:intx=3,y=5,z; /*定義三個(gè)整型變量x、y和z,并為x賦初值為3,y賦初值為5*/intx=10,y=10,z=10; /*定義三個(gè)整型變量x、y和z,并都賦初值為10*/intx=y=z=10; /*錯(cuò)誤,不允許在定義時(shí)連續(xù)賦初值*/intx=10.5; /*定義整型變量x,賦初值為10而不是10.5(小數(shù)的整數(shù)部分)*/longy=99; /*定義一個(gè)長(zhǎng)整型變量y,并為變量y賦初值99*/提示:變量沒初始化時(shí)其值是多少?沒有被賦值的變量其初值取決于存儲(chǔ)類型,靜態(tài)存儲(chǔ)的變量將自動(dòng)為0,否則被隨機(jī)初始化,其值為不確定的數(shù)值。2.1.3變量的定義、賦值和初始化2.1數(shù)據(jù)類型、變量與常量

在計(jì)算機(jī)內(nèi),機(jī)器數(shù)有無(wú)符號(hào)和帶符號(hào)數(shù)之分。無(wú)符號(hào)數(shù)表示正數(shù),在機(jī)器數(shù)中沒有符號(hào)位。位于無(wú)符號(hào)數(shù),若約定小數(shù)點(diǎn)的位置在機(jī)器數(shù)的最低位之后,則是純整數(shù);若約定小數(shù)點(diǎn)的位置在機(jī)器數(shù)的最高位之前,則是純小數(shù)。對(duì)于帶符號(hào)數(shù),機(jī)器數(shù)的最高位是表示正、負(fù)的符號(hào)位,其余位則表示數(shù)值。

帶符號(hào)位的機(jī)器數(shù)可采用原碼、反碼和補(bǔ)碼等不同的編碼方法,機(jī)器數(shù)的這些編碼方法稱為碼制。2.1.4數(shù)的原碼、反碼和補(bǔ)碼表示2.1數(shù)據(jù)類型、變量與常量1.原碼原碼表示法在數(shù)值前面增加了一位符號(hào)位(即最高位為符號(hào)位):正數(shù)該位為0,負(fù)數(shù)該位為1(0有兩種表示:+0和-0),其余位表示數(shù)值的大小。例如:[+45]原=00101101[-45]原=101011012.1.4數(shù)的原碼、反碼和補(bǔ)碼表示2.1數(shù)據(jù)類型、變量與常量2.反碼反碼是數(shù)值存儲(chǔ)的一種,但是由于補(bǔ)碼更能有效表現(xiàn)數(shù)字在計(jì)算機(jī)中的形式,所以多數(shù)計(jì)算機(jī)一般都不采用反碼表示數(shù)。反碼表示法規(guī)定:正數(shù)的反碼與其原碼相同;負(fù)數(shù)的反碼是對(duì)其原碼逐位取反,但符號(hào)位除外。例如:[+45]反=00101101[-45]反=110100102.1.4數(shù)的原碼、反碼和補(bǔ)碼表示2.1數(shù)據(jù)類型、變量與常量3.補(bǔ)碼在計(jì)算機(jī)系統(tǒng)中,數(shù)值一律用補(bǔ)碼來(lái)表示和存儲(chǔ)。這是因?yàn)槭褂醚a(bǔ)碼,可以將符號(hào)位和數(shù)值域統(tǒng)一處理;同時(shí),加法和減法也可以統(tǒng)一處理。此外,補(bǔ)碼與原碼相互轉(zhuǎn)換,其運(yùn)算過程是相同的,不需要額外的硬件電路。反碼表示法規(guī)定:正數(shù)的補(bǔ)碼與原碼相同,負(fù)數(shù)的補(bǔ)碼為其原碼除符號(hào)位外所有位取反(得到反碼),然后最低位加1。例如:[+45]補(bǔ)=00101101[-45]補(bǔ)=110100112.1.4變量的存儲(chǔ)形式2.1.4數(shù)的原碼、反碼和補(bǔ)碼表示2.1數(shù)據(jù)類型、變量與常量2.1.4變量的存儲(chǔ)形式2.1.4數(shù)的原碼、反碼和補(bǔ)碼表示原碼、反碼和補(bǔ)碼轉(zhuǎn)換過程如圖2-3所示。2.1數(shù)據(jù)類型、變量與常量1.整型整型數(shù)據(jù)沒有小數(shù)部分。根據(jù)整數(shù)的存儲(chǔ)長(zhǎng)度,可分為以下幾種(即變量的類型)。(1)基本整型:類型名為int。(2)短整型:類型名為shortint或short。(3)長(zhǎng)整型:類型名為longint或long。整型還可以細(xì)分為:(1)有符號(hào)整數(shù):加上修飾符singed,可以描述正整數(shù)、負(fù)數(shù)和0。(2)無(wú)符號(hào)整數(shù):加上修飾符unsinged,可以描述正整數(shù)和0。2.1.5整型及整型常量2.1數(shù)據(jù)類型、變量與常量2.整型常量整型常量又稱整數(shù),整數(shù)有3種數(shù)制來(lái)表示(不用二進(jìn)制表示整數(shù))。(1)十進(jìn)制整型常量:十進(jìn)制整常數(shù)沒有前綴,其數(shù)字為0~9,如237、-568等。(2)八進(jìn)制整型常量:以數(shù)字0開頭,由數(shù)字0~7來(lái)表示。八進(jìn)制數(shù)通常是無(wú)符號(hào)數(shù),如015、026。(3)十六進(jìn)制整型常量:以數(shù)字0和字符X或x(即0X或0x)開頭,由數(shù)字0~9和字符A~F或a~f表示,如0x2A(十進(jìn)制數(shù)為42)、0XFFFF(十進(jìn)制數(shù)為65535)。(4)整型常量的后綴:在整型數(shù)后加后綴“L”或“l(fā)”來(lái)表示長(zhǎng)整型數(shù),加后綴“U”或“u”來(lái)表示無(wú)符號(hào)整型數(shù)。2.1.5整型及整型常量2.1數(shù)據(jù)類型、變量與常量【案例2-1】十進(jìn)制、八進(jìn)制、十六進(jìn)制整數(shù)的輸出。單擊打開源程序程序運(yùn)行結(jié)果2.1.5整型及整型常量2.1數(shù)據(jù)類型、變量與常量1.實(shí)型實(shí)型也稱為浮點(diǎn)型,包括(即變量類型):(1)單精度浮點(diǎn)類型:簡(jiǎn)稱浮點(diǎn)類型,類型名為float。(2)雙精度浮點(diǎn)類型:簡(jiǎn)稱雙精度類型,類型名為double。(3)長(zhǎng)雙精度類型:類型名為longdouble。2.1.6實(shí)型及實(shí)型常量2.1數(shù)據(jù)類型、變量與常量例如:float x;/*定義單精度浮點(diǎn)型變量x*/double y;/*定義雙精度浮點(diǎn)型變量y*/x=4.72; /*為變量x賦小數(shù)4.72*/y=1.235E+5;/*為變量y賦長(zhǎng)整數(shù)1.235×105*/2.1.6實(shí)型及實(shí)型常量2.1數(shù)據(jù)類型、變量與常量【案例2-2】各種形式實(shí)數(shù)的輸出。單擊打開源程序程序運(yùn)行結(jié)果程序分析(1)%f為單精度小數(shù)的輸出格式,默認(rèn)輸出為小數(shù)點(diǎn)后6位有效數(shù)字。(2)%lf為雙精度小數(shù)。%.9lf表示輸出小數(shù)點(diǎn)后9位有效數(shù)字??梢钥吹絾尉葂的有效數(shù)字不能全部存儲(chǔ)進(jìn)去,而雙精度y的有效數(shù)字可以全部存儲(chǔ)。所以如果要存儲(chǔ)精度高的小數(shù),應(yīng)該采用雙精度浮點(diǎn)型存儲(chǔ)。2.1.6實(shí)型及實(shí)型常量2.1數(shù)據(jù)類型、變量與常量2.實(shí)型常量實(shí)型常量也稱為實(shí)數(shù)或者浮點(diǎn)數(shù)。實(shí)數(shù)只有十進(jìn)制,包括:十進(jìn)制小數(shù)形式和指數(shù)形式。(1)十進(jìn)制小數(shù)形式。小數(shù)形式是由數(shù)字0~9和小數(shù)點(diǎn)組成的(注意:必須有小數(shù)點(diǎn))。例如:6.789,.789(省略小數(shù)點(diǎn)前0),6.(省略小數(shù)點(diǎn)后0),0.0都是合法的十進(jìn)制小數(shù)。(2)指數(shù)形式。由十進(jìn)制小數(shù)加上階碼標(biāo)志字符“e”或“E”以及階碼(只能為整數(shù),可以帶符號(hào))組成。其一般形式為:aEn,其中a為十進(jìn)制數(shù),n為十進(jìn)制整數(shù),其值為a×10n。例如2.35E-3,表示2.35×10-3。2.1.6實(shí)型及實(shí)型常量2.1數(shù)據(jù)類型、變量與常量【練習(xí)2-4】以下各種小數(shù)表示哪些是合法的?哪些是非法的?2.1E5、3.7E-2、0.5E7、345、-2.8E-2、E7、-5、53.-E3、2.7E解:(1)合法的實(shí)數(shù):2.1E5(等于2.1*105),3.7E-2(等于3.7*10-2),0.5E7(等于0.5*107),-2.8E-2(等于-2.8*10-2)。(2)非法的實(shí)數(shù):345(無(wú)小數(shù)點(diǎn)),E7(階碼標(biāo)志E之前無(wú)數(shù)字),-5(無(wú)階碼標(biāo)志),53.-E3(負(fù)號(hào)位置不對(duì)),2.7E(無(wú)階碼)。2.1.6實(shí)型及實(shí)型常量2.1數(shù)據(jù)類型、變量與常量1.字符類型字符類型的數(shù)據(jù)簡(jiǎn)稱字符型,包括(即其變量類型):(1)有符號(hào)字符型,類型名稱為char,存儲(chǔ)數(shù)據(jù)取值范圍為-128~127。(2)無(wú)符號(hào)字符型,類型名稱為unsignedchar,存儲(chǔ)數(shù)據(jù)取值范圍為0~255。字符型數(shù)據(jù)在內(nèi)存中存儲(chǔ)的是其ASCII編碼值(為一個(gè)整數(shù)),所以字符數(shù)據(jù)和整型數(shù)據(jù)是在C語(yǔ)言中可以通用的,只不過字符存儲(chǔ)字節(jié)為1個(gè)字節(jié)。2.1.7字符型及字符型常量、字符串常量2.1數(shù)據(jù)類型、變量與常量2.字符常量

字符常量是由一對(duì)單引號(hào)括起來(lái)的一個(gè)字符。字符型數(shù)據(jù)占一個(gè)字符,其書寫形式是用單引號(hào)括起來(lái)的單個(gè)字符。例如:'a','A','@','?'等。常用字符的ASCII編碼如下:(1)字符’A’~’Z’的ASCII編碼值為65~90。(2)字符’a’~’z’的ASCII編碼值為97~122。(3)字符’0’~’9’的ASCII編碼值為48~57。(4)空格字符的ASCII編碼值為32。例如,a的十進(jìn)制ASCII碼是120,b的十進(jìn)制ASCII碼是121,實(shí)際上是在內(nèi)存變量a和b分別存放120和121的二進(jìn)制數(shù)。整型常量在內(nèi)存中占2個(gè)字節(jié),字符常量在內(nèi)存中占1個(gè)字節(jié),當(dāng)整型量按字符型量處理時(shí),只有低8位字節(jié)參與處理。2.1.7字符型及字符型常量、字符串常量2.1數(shù)據(jù)類型、變量與常量【練習(xí)2-5】下面哪個(gè)是合法的字符常量?'f'、'Q'、'abc'、x、"A"、'+'、'!'解:(1)合法的字符常量為(單引號(hào)內(nèi)一個(gè)字符):'f'、'Q'、'+'、'!'。(2)非法的字符常量為:'abc'(單引號(hào)內(nèi)多個(gè)字符)、x(沒有單引號(hào))、"A"(分隔符為雙引號(hào))。2.1.7字符型及字符型常量、字符串常量2.1數(shù)據(jù)類型、變量與常量轉(zhuǎn)義字符。轉(zhuǎn)義字符主要用來(lái)表示那些用一般字符不便于表示的控制代碼,是一種特殊的字符常量。轉(zhuǎn)義字符以反斜線“\”開頭,后跟一個(gè)或幾個(gè)字符。2.1.7字符型及字符型常量、字符串常量2.1數(shù)據(jù)類型、變量與常量【練習(xí)2-6】下面哪個(gè)是合法的轉(zhuǎn)義字符?'\\'、'\abc'、'\"'、\x、'\125'、'\x24'、'\xabc'解:(1)合法的轉(zhuǎn)義字符常量:'\\'(反斜杠)、'\"'(雙引號(hào))、'\125'(八進(jìn)制ASCII為125的字符'7')、'\x24'(十六進(jìn)制ASCII為24的字符'$')。(2)非法的轉(zhuǎn)義字符常量:\x(沒有分隔符單引號(hào))、'\xabc'(x后的十六進(jìn)制數(shù)位數(shù)應(yīng)該為2位而不是3位)。2.1.7字符型及字符型常量、字符串常量2.1數(shù)據(jù)類型、變量與常量3.字符串常量字符串常量是用一對(duì)雙引號(hào)括起來(lái)的零個(gè)或多個(gè)字符序列,如"hello","","abc","123"等。字符常量與字符串常量的區(qū)別。字符串常量和字符常量是不同的量,它們之間主要有以下區(qū)別:(1)字符常量由單引號(hào)括起來(lái),字符串常量由雙引號(hào)括起來(lái)。(2)字符常量只能是單個(gè)字符,字符串常量則可以含一個(gè)或多個(gè)字符。(3)可以把一個(gè)字符常量賦予一個(gè)字符變量,但不能把一個(gè)字符串常量賦予一個(gè)字符變量。(4)字符常量占一個(gè)字節(jié)的內(nèi)存空間。字符串常量占的內(nèi)存字節(jié)數(shù)等于字符串中字節(jié)數(shù)加1,增加的一個(gè)字節(jié)中存放字符'\0'(ASCII碼為0),這是字符串結(jié)束的標(biāo)志。2.1.7字符型及字符型常量、字符串常量2.1數(shù)據(jù)類型、變量與常量例如,字符串"Hello"存儲(chǔ)情況如下:【案例2-3】字符常量、字符串常量的輸出。單擊打開源程序程序運(yùn)行結(jié)果2.1.7字符型及字符型常量、字符串常量2.1數(shù)據(jù)類型、變量與常量

在C語(yǔ)言中,也可以用一個(gè)標(biāo)識(shí)符來(lái)表示一個(gè)常量,稱之為符號(hào)常量。符號(hào)常量在使用之前必須先定義,其一般形式為:#define符號(hào)常量

值例如:#definePI3.14 /*定義一個(gè)符號(hào)常量PI,其值為3.14*/符號(hào)常量的特點(diǎn)是:

習(xí)慣上符號(hào)常量的標(biāo)識(shí)符用大寫字母,變量標(biāo)識(shí)符用小寫字母,以示區(qū)別。

符號(hào)常量與變量不同,它的值在其作用域內(nèi)不能改變,也不能再被賦值。2.1.8符號(hào)常量2.2運(yùn)算符與表達(dá)式C語(yǔ)言的運(yùn)算符非常豐富,共有13類45個(gè)運(yùn)算符,C語(yǔ)言運(yùn)算符如表2-5所示。2.1.8符號(hào)常量2.2運(yùn)算符與表達(dá)式1.算術(shù)運(yùn)算符C語(yǔ)言中算術(shù)運(yùn)算符共有5個(gè),分別為:+(加)、-(減)、*(乘)、/(除)、%(取余,或取模)。其運(yùn)算優(yōu)先級(jí)別,結(jié)合方式如表2-5所示。(1)算術(shù)運(yùn)算符為雙目(需要兩個(gè)操作數(shù))運(yùn)算符,結(jié)合方式均為從左到右。(2)求余運(yùn)算符“%”又稱取模運(yùn)算符,要求其兩側(cè)必須為整型數(shù),它的作用是取兩個(gè)整型數(shù)相除的余數(shù),余數(shù)的符號(hào)與被除數(shù)的符號(hào)相同。例如9%4結(jié)果是1;若-9%4的結(jié)果為-1;若9%-4的結(jié)果是1。(3)除法運(yùn)算符“/”。當(dāng)兩個(gè)操作數(shù)都是整數(shù)時(shí),運(yùn)算的結(jié)果是整數(shù)(舍去小數(shù)取整),即表示“整除”;如果參加運(yùn)算的兩個(gè)數(shù)中有一個(gè)是實(shí)數(shù),則結(jié)果是實(shí)數(shù)。例如9/4結(jié)果是2;若9.0%4的結(jié)果為2.25。2.2.1算術(shù)運(yùn)算符與算術(shù)表達(dá)式2.2運(yùn)算符與表達(dá)式++(自增)、--(自減)運(yùn)算符是C語(yǔ)言中使用方便且效率很高的兩個(gè)運(yùn)算符,它們都是單目運(yùn)算符。這兩個(gè)運(yùn)算符有前置和后置兩種形式。前置就是指運(yùn)算符在操作數(shù)的前面,例如++x和--x;后置就是指運(yùn)算符在操作數(shù)的后面。運(yùn)算規(guī)則如下:

若只對(duì)某變量自增(自減)而不參與其他賦值運(yùn)算,結(jié)果都是該變量本身自增(自減)1。

若某變量自增(自減)的同時(shí)還要參加其他運(yùn)算,則前綴運(yùn)算是自變量先自增(減)后再參與表達(dá)式運(yùn)算,后綴運(yùn)算是自變量先參與表達(dá)式運(yùn)算后再自增(減)。2.2.2自增、自減運(yùn)算符(++、--)2.2運(yùn)算符與表達(dá)式連續(xù)自增語(yǔ)句(以TC為例)。例如:inti=3,j;j=(++i)+(++i)+(++i);/*j的值為18,i的值為6;先將i自增3次后將3個(gè)i相加賦給j*/j=(i++)+(i++)+(i++);/*j的值為9,i的值為6;先將3個(gè)i相加賦給j,再將i自增3次*/連續(xù)自增作為printf()函數(shù)的輸出項(xiàng)問題。inti=3;printf("\n%d",(++i)+(++i)+(++i));/*輸出15。自右向左逐步自增和取值即6+5+4*/2.2.2自增、自減運(yùn)算符(++、--)2.2運(yùn)算符與表達(dá)式inti=3;printf("\n%d",(i++)+(i++)+(i++));/*輸出12。自右向左逐步取值和自增即5+4+3*/printf()函數(shù)中多輸出項(xiàng)計(jì)算問題,(TC和VC略有不同)。輸出項(xiàng)自右向左運(yùn)算后,再自左向右輸出。例如:inti=3;printf("\n%d,%d,%d",++i,++i,++i);(TC輸出6,5,4,VC下輸出6,5,4)inti=3;printf("\n%d,%d,%d",i++,i++,i++);(TC輸出5,4,3,VC下輸出3,3,3)2.2.2自增、自減運(yùn)算符(++、--)2.2運(yùn)算符與表達(dá)式【案例2-4】自增、自減表達(dá)式的各種結(jié)果(程序中注釋按TC規(guī)范)。單擊打開源程序程序運(yùn)行結(jié)果如下2.2.2自增、自減運(yùn)算符(++、--)2.2運(yùn)算符與表達(dá)式1.賦值表達(dá)式格式賦值表達(dá)式是由賦值運(yùn)算符“=”將一個(gè)變量和表達(dá)式連接起來(lái)的式子,其一般格式為:變量=表達(dá)式即將“=”右邊表達(dá)式的值賦給左邊的變量,表達(dá)式可以是符合C語(yǔ)言語(yǔ)法的各種表達(dá)式。例如:intx,y;/*定義整型變量x和y*/x=3;/*表示將常量3賦給變量x*/y=x+2;/*表示將表達(dá)式x+2的值賦給變量y*/2.2.3賦值運(yùn)算符與賦值表達(dá)式2.2運(yùn)算符與表達(dá)式2.幾點(diǎn)說明(1)如果賦值運(yùn)算兩側(cè)的類型不一致,在賦值時(shí)要將表達(dá)式的結(jié)果轉(zhuǎn)換成變量的類型,然后再賦給變量。賦值運(yùn)算方向?yàn)樽杂蚁蜃?。例如:inta,b;/*定義整型變量a和b*/a=b=12;/*從右向左進(jìn)行賦值,即先將12賦給b,再將b值賦給a*/相當(dāng)于先執(zhí)行b=12,再執(zhí)行a=b。(2)同一變量連續(xù)賦值。對(duì)同一變量連續(xù)賦值時(shí),相當(dāng)于只有最后一步有效。2.2.3賦值運(yùn)算符與賦值表達(dá)式2.2運(yùn)算符與表達(dá)式例如:inta;/*定義整型變量a*/a=5;/*為變量a賦值5*/a=10;/*為變量a賦值10(此時(shí)原來(lái)的值5已經(jīng)被覆蓋)*/則變量a的值為10,原來(lái)的值5已經(jīng)被覆蓋了。3.復(fù)和賦值運(yùn)算符賦值運(yùn)算符與算術(shù)運(yùn)算符相結(jié)合之后,變成復(fù)合賦值運(yùn)算符,如表2-5所示。例如:a+=b;相當(dāng)于a=a+b;2.2.3賦值運(yùn)算符與賦值表達(dá)式2.2運(yùn)算符與表達(dá)式1.關(guān)系運(yùn)算符關(guān)系運(yùn)算符用于比較兩個(gè)運(yùn)算對(duì)象的大小。關(guān)系運(yùn)算符有6種:<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、==(等于)、!=(不等于)。C語(yǔ)言提供的關(guān)系運(yùn)算符如表2-5所示。2.關(guān)系表達(dá)式關(guān)系表達(dá)式的一般形式為:表達(dá)式關(guān)系運(yùn)算符表達(dá)式2.2.4關(guān)系運(yùn)算符與關(guān)系表達(dá)式2.2運(yùn)算符與表達(dá)式3.幾點(diǎn)說明(1)在上述6個(gè)運(yùn)算符中,前4個(gè)運(yùn)算符的優(yōu)先級(jí)高于后2個(gè)運(yùn)算符的優(yōu)先級(jí)。(2)應(yīng)將等于關(guān)系運(yùn)算符“==”與賦值運(yùn)算符“=”相區(qū)分?!?=”是關(guān)系運(yùn)算符,用于比較運(yùn)算;而“=”是賦值運(yùn)算符,用于賦值運(yùn)算。(3)關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符而高于賦值運(yùn)算符。它們的結(jié)合方式是自左至右。2.2.4關(guān)系運(yùn)算符與關(guān)系表達(dá)式2.2運(yùn)算符與表達(dá)式

1.邏輯運(yùn)算符邏輯運(yùn)算符用來(lái)對(duì)運(yùn)算對(duì)象進(jìn)行邏輯操作,邏輯運(yùn)算符有三種:&&(邏輯與)、||(邏輯或)和!(邏輯非)。C語(yǔ)言提供的邏輯運(yùn)算符及其功能如表2-5所示。2.2.5邏輯運(yùn)算符與邏輯表達(dá)式2.2運(yùn)算符與表達(dá)式2.邏輯表達(dá)式邏輯表達(dá)式的一般形式為:邏輯表達(dá)式的值也是邏輯值,即0或1。3.優(yōu)先級(jí)常用的C語(yǔ)言運(yùn)算符優(yōu)先級(jí)別如圖2-6所示。表達(dá)式邏輯運(yùn)算符表達(dá)式2.2.5邏輯運(yùn)算符與邏輯表達(dá)式2.2運(yùn)算符與表達(dá)式5.邏輯表達(dá)式的短路現(xiàn)象

在C語(yǔ)言邏輯表達(dá)式中,有時(shí)會(huì)出現(xiàn)計(jì)算完&&或||左側(cè)的表達(dá)式,就不用再計(jì)算右側(cè)的表達(dá)式的情況,這種情況被稱為邏輯表達(dá)式的短路現(xiàn)象。這主要是因?yàn)?&或||的運(yùn)算特點(diǎn)造成的。

若&&運(yùn)算符左邊的表達(dá)式為假(或0),則其右側(cè)表達(dá)式將不再計(jì)算,整個(gè)表達(dá)式必然為假;同理,若||運(yùn)算符左邊的表達(dá)式為真(或非0值),則其右側(cè)表達(dá)式將不再計(jì)算,整個(gè)表達(dá)式必然為真。2.2.5邏輯運(yùn)算符與邏輯表達(dá)式2.2運(yùn)算符與表達(dá)式例如:9<3&&++a因?yàn)楸磉_(dá)式9<3的值為0,因此&&右側(cè)的表達(dá)式將不再計(jì)算,a值不進(jìn)行自加,整個(gè)表達(dá)式的值為0。9>3||++a因?yàn)楸磉_(dá)式9>3的值為1,因此||右側(cè)的表達(dá)式將不再計(jì)算,a值不進(jìn)行自加,整個(gè)表達(dá)式的值為1。2.2.5邏輯運(yùn)算符與邏輯表達(dá)式2.2運(yùn)算符與表達(dá)式C語(yǔ)言中保留了低級(jí)語(yǔ)言中的二進(jìn)制位運(yùn)算符,以提高計(jì)算的靈活性與效率。位運(yùn)算分為移位運(yùn)算與按位邏輯運(yùn)算。移位運(yùn)算包括按位左移(<<)和按位右移(>>),按位邏輯運(yùn)算包括按位求反(~)、按位與(&)、按位或(|)和按位異或(^)。

位運(yùn)算符是對(duì)其操作數(shù)按二進(jìn)制形式逐步地進(jìn)行邏輯運(yùn)算或移位運(yùn)操作的,運(yùn)算對(duì)象為char、short、int等類型數(shù)據(jù),但不能是浮點(diǎn)型數(shù)據(jù)。2.2.6位運(yùn)算符優(yōu)先級(jí)運(yùn)算符名

稱運(yùn)算符類型結(jié)合方式5<<、>>左移、右移位(雙目)運(yùn)算符由左向右8&按位與位(雙目)運(yùn)算符由左向右9^按位異或位(雙目)運(yùn)算符由左向右10|按位或位(雙目)運(yùn)算符由左向右2.2運(yùn)算符與表達(dá)式【案例2-5】閱讀下面程序,分析并寫出程序運(yùn)行結(jié)果。單擊打開源程序程序運(yùn)行結(jié)果2.2.6位運(yùn)算符2.2運(yùn)算符與表達(dá)式1.條件運(yùn)算符和條件表達(dá)式

條件運(yùn)算符是由字符“?”和“:”組成的,要求有三個(gè)運(yùn)算對(duì)象,是C語(yǔ)言中唯一的三目運(yùn)算符。條件運(yùn)算符的優(yōu)先級(jí)高于賦值運(yùn)算和逗號(hào)運(yùn)算符,而低于其他運(yùn)算符,其結(jié)合方式為自右至左。

條件表達(dá)式是由條件運(yùn)算符將運(yùn)算對(duì)象連接起來(lái)的式子,其一般格式為:表達(dá)式1?

表達(dá)式2:

表達(dá)式32.2.7其他運(yùn)算符2.2運(yùn)算符與表達(dá)式

條件表達(dá)式的求解過程為:先求解表達(dá)式1,若表達(dá)式1的值為1(真),則求解表達(dá)式2,并將其作為整個(gè)表達(dá)式的值;如表達(dá)式1的值為0(假),則求解表達(dá)式3,并將其作為整個(gè)表達(dá)式的值。

求兩個(gè)數(shù)a和b中的最大值,用條件表達(dá)式表示如下:a>b?a:b2.2.7其他運(yùn)算符2.2運(yùn)算符與表達(dá)式2.逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式在C語(yǔ)言中,符號(hào)“,”除了做分隔符外,還可以作為運(yùn)算符將若干個(gè)表達(dá)式連接在一起形成逗號(hào)表達(dá)式。逗號(hào)表達(dá)式的一般格式為:逗號(hào)表達(dá)式的運(yùn)算規(guī)則是:先求解表達(dá)式1,再求解表達(dá)式2,依次求解到表達(dá)式n,最后一個(gè)表達(dá)式的值就是整個(gè)逗號(hào)表達(dá)式的值。逗號(hào)運(yùn)算符的優(yōu)先級(jí)最低,結(jié)合方式為自左至右。表達(dá)式1,表達(dá)式2,…,表達(dá)式n2.2.7其他運(yùn)算符2.2運(yùn)算符與表達(dá)式3.括號(hào)運(yùn)算符和括號(hào)表達(dá)式圓括號(hào)運(yùn)算符“()”的優(yōu)先級(jí)最高,用它將某些運(yùn)算符和運(yùn)算對(duì)象括起來(lái)以后,這些括起來(lái)的運(yùn)算符和運(yùn)算對(duì)象要優(yōu)先運(yùn)算。例如,s=(a=1,b=2,c=3,c=a*(b+c));,盡管運(yùn)算符“*”的優(yōu)先級(jí)比運(yùn)算符的“+”的優(yōu)先級(jí)高,但由于(b+c)使用了圓括號(hào)運(yùn)算符,故應(yīng)優(yōu)先運(yùn)行b+c。2.2.7其他運(yùn)算符2.2運(yùn)算符與表達(dá)式4.求字節(jié)運(yùn)算符sizeofsizeof的定義格式如下:其功能為測(cè)定某一種類型數(shù)據(jù)所占存儲(chǔ)空間長(zhǎng)度,結(jié)果是該類型在內(nèi)存中所占的字節(jié)數(shù)。括號(hào)內(nèi)可以是該數(shù)據(jù)類型名或是該類型的變量名。例如:intx;x=sizeof(int); /*求整型變量的內(nèi)存所占字節(jié)數(shù),TC中語(yǔ)句執(zhí)行的結(jié)果是x的值為2*/也可以寫為:x=sizeof(x); /*函數(shù)的返回值也是2*/sizeof(數(shù)據(jù)類型名)

sizeof(變量名)2.2.7其他運(yùn)算符2.2運(yùn)算符與表達(dá)式【案例2-6】編寫一個(gè)程序,用sizeof運(yùn)算符求字符型、短整型、基本整型、長(zhǎng)整型、單精型浮點(diǎn)型、雙精度浮點(diǎn)的內(nèi)存字節(jié)數(shù)。單擊打開源程序程序運(yùn)行結(jié)果2.2.7其他運(yùn)算符2.3數(shù)據(jù)類型轉(zhuǎn)換及數(shù)據(jù)的溢出誤差C語(yǔ)言有豐富的數(shù)據(jù)類型,各不同的數(shù)據(jù)類型的存儲(chǔ)長(zhǎng)度和存儲(chǔ)方式不同,一般不能直接混合運(yùn)算。在C語(yǔ)言中,數(shù)據(jù)類型的轉(zhuǎn)換方式有三種:自動(dòng)類型轉(zhuǎn)換、賦值類型轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換。2.3.1類型轉(zhuǎn)換概述2.3數(shù)據(jù)類型轉(zhuǎn)換及數(shù)據(jù)的溢出誤差1.不同數(shù)據(jù)類型的差異數(shù)據(jù)類型的差異體現(xiàn)在存儲(chǔ)數(shù)據(jù)的范圍和精度上,存儲(chǔ)數(shù)據(jù)的范圍越大、精度越高,該類型越“高級(jí)”。2.?dāng)?shù)據(jù)類型轉(zhuǎn)換產(chǎn)生的效果(1)數(shù)據(jù)類型級(jí)別的提升與降低:短數(shù)據(jù)轉(zhuǎn)換成長(zhǎng)數(shù)據(jù);整數(shù)轉(zhuǎn)換成實(shí)數(shù);signed型轉(zhuǎn)換成unsigned型。(2)符號(hào)位擴(kuò)展與零擴(kuò)展。為保持?jǐn)?shù)值不變,整型短數(shù)據(jù)轉(zhuǎn)換成整型長(zhǎng)數(shù)據(jù)時(shí)將產(chǎn)生符號(hào)位擴(kuò)展與零擴(kuò)展。2.3.1類型轉(zhuǎn)換概述2.3數(shù)據(jù)類型轉(zhuǎn)換及數(shù)據(jù)的溢出誤差例如:intx=’a’;字符’a’的二進(jìn)制形式和intx的二進(jìn)制形式如圖2-7所示。2.3.1類型轉(zhuǎn)換概述2.3數(shù)據(jù)類型轉(zhuǎn)換及數(shù)據(jù)的溢出誤差(3)截去高位產(chǎn)生數(shù)值的變化。通過上面學(xué)習(xí)可以得到,如果把長(zhǎng)類型的數(shù)據(jù)賦值給短類型的變量,必然將產(chǎn)生丟失高位字節(jié)的效果。(4)丟失精度。實(shí)數(shù)轉(zhuǎn)換成整數(shù)時(shí),由于截去小數(shù)將丟失精度。double型轉(zhuǎn)換成float型時(shí),有效數(shù)字減少(四舍五入),精度丟失。long型轉(zhuǎn)換成float型時(shí),由原來(lái)可達(dá)10位整數(shù)變成只有7位有效數(shù)字,精度丟失,但由于數(shù)的范圍擴(kuò)大了,數(shù)據(jù)類型從較低級(jí)提升到高級(jí)。2.3.1類型轉(zhuǎn)換概述2.3數(shù)據(jù)類型轉(zhuǎn)換及數(shù)據(jù)的溢出誤差自動(dòng)類型轉(zhuǎn)換是指在C語(yǔ)言中,不同的數(shù)據(jù)可以出現(xiàn)在同一個(gè)表達(dá)式中。在進(jìn)行運(yùn)算時(shí),C語(yǔ)言自動(dòng)進(jìn)行必要的數(shù)據(jù)類型轉(zhuǎn)換,以完成表達(dá)式的求值。2.3.2自動(dòng)類型轉(zhuǎn)換2.3數(shù)據(jù)類型轉(zhuǎn)換及數(shù)據(jù)的溢出誤差賦值運(yùn)算時(shí),如果賦值運(yùn)算符兩側(cè)的類型(指基本類型)不一致,系統(tǒng)自動(dòng)將表達(dá)式轉(zhuǎn)換成變量的類型存到變量的存儲(chǔ)單元中,轉(zhuǎn)換的情況有以下幾種。(1)整型賦給實(shí)型變量時(shí),數(shù)值上不發(fā)生任何變化。例如:floatx;x=24;(2)實(shí)型數(shù)據(jù)賦給整型變量時(shí),小數(shù)部分將舍棄。例如:intx;x=25.48;(3)短的有符號(hào)整型賦給長(zhǎng)整型變量時(shí),需要進(jìn)行符號(hào)位擴(kuò)展。(4)短的無(wú)符號(hào)整型賦給長(zhǎng)整型變量時(shí),需要進(jìn)行0擴(kuò)展。(5)長(zhǎng)整型數(shù)據(jù)賦給短整型變量時(shí),有可能溢出。例如:charx=324;溢出x值為’d’。(6)同長(zhǎng)度有符號(hào)整型數(shù)據(jù)賦給無(wú)符號(hào)整型數(shù)據(jù)時(shí),數(shù)據(jù)將失去符號(hào)位功能。(7)同長(zhǎng)度有符號(hào)整型數(shù)據(jù)賦給有符號(hào)整型數(shù)據(jù)時(shí),數(shù)據(jù)將得到符號(hào)位功能。2.3.3賦值類型轉(zhuǎn)換2.3數(shù)據(jù)類型轉(zhuǎn)換及數(shù)據(jù)的溢出誤差強(qiáng)制類型轉(zhuǎn)換的運(yùn)算格式如下:強(qiáng)制類型轉(zhuǎn)換用于不能自動(dòng)轉(zhuǎn)換的情況。例如:(int)3.14/*將3.14轉(zhuǎn)換成整型,其值為3*/(int)(3.14+4.78)/*將表達(dá)式3.14+4.78的和7.92轉(zhuǎn)換成int型,值為7*/(int)3.14+4.78 /*將3.14轉(zhuǎn)換成int型的值3,然后再加上4.78,值為7.78*/(類型)表達(dá)式

或類型(表達(dá)式)2.3.4強(qiáng)制類型轉(zhuǎn)換2.3數(shù)據(jù)類型轉(zhuǎn)換及數(shù)據(jù)的溢出誤差1.?dāng)?shù)據(jù)的溢出因?yàn)镃語(yǔ)言定義的各種數(shù)據(jù)類型長(zhǎng)度有限,所以有時(shí)為不同數(shù)據(jù)類型賦值或運(yùn)算時(shí),可能會(huì)發(fā)生數(shù)據(jù)溢出現(xiàn)象,即所得數(shù)據(jù)值超出所能存放的最大值,結(jié)果為非正確的數(shù)據(jù)。例如:charx=127;x=x+1;其二進(jìn)制變化情況如圖2-9和圖2-10所示。2.3.5數(shù)據(jù)的溢出和誤差2.3數(shù)據(jù)類型轉(zhuǎn)換及數(shù)據(jù)的溢出誤差127加1后并沒有等于128,因?yàn)閏har型的數(shù)據(jù)最大值是127,加1后溢出,變成負(fù)數(shù)-128的補(bǔ)碼了。同理,直接將128賦給字符型變量x,結(jié)果一樣,x無(wú)法存儲(chǔ)128,存儲(chǔ)的還是-128的補(bǔ)碼。2.3.5數(shù)據(jù)的溢出和誤差2.3數(shù)據(jù)類型轉(zhuǎn)換及數(shù)據(jù)的溢出誤差【案例2-7】演示各種類型數(shù)據(jù)的溢出。單擊打開源程序程序運(yùn)行結(jié)果通過上面案例可以看出,不同數(shù)據(jù)類型的數(shù)據(jù)存儲(chǔ)值都有下限和上限,所以在定義數(shù)據(jù)類型時(shí)要注意運(yùn)算的數(shù)值的大小,來(lái)決定數(shù)據(jù)類型的定義。2.3.5數(shù)據(jù)的溢出和誤差2.3數(shù)據(jù)類型轉(zhuǎn)換及數(shù)據(jù)的溢出誤差2.實(shí)數(shù)的誤差整數(shù)存儲(chǔ)除了溢出以外是沒有誤差的。然而實(shí)型數(shù)據(jù)由于是用有限的存儲(chǔ)單元存儲(chǔ)較大范圍的實(shí)數(shù),有效數(shù)字是有尾數(shù)限制的,在實(shí)際計(jì)算和引用中會(huì)有很多問題。例如,如果將一個(gè)非常大的數(shù)加上一個(gè)非常小的數(shù),小數(shù)就會(huì)被忽略?;蚴窃谟?jì)算時(shí),小數(shù)的有效位加上一個(gè)數(shù)是有效的,如果無(wú)效位上加上一個(gè)數(shù)還是無(wú)效的。2.3.5數(shù)據(jù)的溢出和誤差2.3數(shù)據(jù)類型轉(zhuǎn)換及數(shù)據(jù)的溢出誤差【案例2-8】演示實(shí)數(shù)的誤差。單擊打開源程序程序運(yùn)行結(jié)果2.3.5數(shù)據(jù)的溢出和誤差2.4數(shù)據(jù)的輸入/輸出C語(yǔ)言提供的函數(shù)以庫(kù)的形式存放在系統(tǒng)中,它們不是C語(yǔ)言文本中的組成部分。在使用函數(shù)庫(kù)時(shí),要用到預(yù)編譯命令#include將有關(guān)的“頭文件”包含到用戶源文件中。例如:#include“stdio.h”/*標(biāo)準(zhǔn)輸入、輸出頭文件包含命令*/

預(yù)編譯命令一般放在程序的開頭,使用不同類型的函數(shù)需要包含不同的“頭文件”。在C語(yǔ)言中經(jīng)常使用的輸入、輸出函數(shù)主要有格式化輸出函數(shù)(printf)、格式化輸入函數(shù)(scanf)、字符輸出函數(shù)(putchar)和字符輸入函數(shù)(getchar)。2.4數(shù)據(jù)的輸入/輸出1.printf的函數(shù)調(diào)用形式printf是系統(tǒng)標(biāo)準(zhǔn)庫(kù)函數(shù),其調(diào)用一般形式為:printf括號(hào)內(nèi)有兩項(xiàng),前一項(xiàng)是輸出數(shù)據(jù)的格式(即要輸出什么類型的數(shù)據(jù)),后一項(xiàng)是輸出數(shù)據(jù)名稱(即要輸出哪個(gè)變量)。

printf("格式控制字符串",輸出列表

);2.4.1格式化輸出函數(shù)printf2.4數(shù)據(jù)的輸入/輸出格式字符串內(nèi)部有兩個(gè)信息。(1)格式說明。它的作用是將要輸出的數(shù)據(jù)轉(zhuǎn)化為指定的格式輸出。通常默認(rèn)形式是“%”加上一個(gè)字符,如%d表示十進(jìn)制整數(shù)格式控制符,%f表示小數(shù)格式控制符等。(2)普通字符。除了格式說明符外,所有字符均按原樣輸出。例如:intx=3;printf(“x=%d”,x);輸出結(jié)果為:x=32.4.1格式化輸出函數(shù)printf2.4數(shù)據(jù)的輸入/輸出2.printf的格式說明如果要輸出復(fù)雜的格式,可以設(shè)置格式控制符,就可以按用戶的格式要求來(lái)輸出相關(guān)數(shù)據(jù)。一般是“%”加上若干個(gè)英文字母,用以說明數(shù)據(jù)輸出的類型、長(zhǎng)度、位數(shù)等。格式控制符的一般形式為:

%[標(biāo)志][輸出最小寬度][.精度][長(zhǎng)度]類型2.4.1格式化輸出函數(shù)printf2.4數(shù)據(jù)的輸入/輸出其中有方括號(hào)[]的項(xiàng)為可選項(xiàng)。各項(xiàng)的意義如下。(1)標(biāo)志:可以是-、+、0。因?yàn)閜rintf的默認(rèn)格式是右對(duì)齊,左邊輸出空格。如果想按左對(duì)齊方式輸出,則標(biāo)志寫“-”。如果想讓空白位輸出0,則標(biāo)志寫“0”。如果想讓正數(shù)前面輸出“+”號(hào),則標(biāo)志寫“+”。(2)輸出最小寬度:十進(jìn)制整數(shù)。表示按此數(shù)值作為數(shù)據(jù)寬度輸出。例如:printf(“%+5d”,21);/*輸出結(jié)果為□□+21,其中5為輸出寬度,□為空格*/printf(“%-5d”,21);/*輸出結(jié)果為21□□□,其中5為輸出寬度,□為空格*/printf(“%05d”,21);/*輸出結(jié)果為00021,5為輸出寬度,前面的0為表示占位用數(shù)字0*/2.4.1格式化輸出函數(shù)printf2.4數(shù)據(jù)的輸入/輸出(3)精度:精度格式符以“.”開頭,后跟十進(jìn)制整數(shù)。本項(xiàng)的意義是:如果輸出數(shù)字,則表示小數(shù)的位數(shù);如果輸出的是字符,則表示輸出字符的個(gè)數(shù);若實(shí)際位數(shù)大于所定義的精度數(shù),則截去超過的部分。如果輸出的是字符串,則表示輸出字符的個(gè)數(shù)。例如:printf(“%7.2f”,123.456789);/*輸出結(jié)果為□123.46,其中7為輸出總寬度,2為小數(shù)點(diǎn)后位數(shù)*/printf(“%7.5s”,”BoyAndGirl1”);/*輸出結(jié)果為□□BoyAn,其中7為輸出總寬度,5為輸出字符個(gè)數(shù),□為空格*/(4)長(zhǎng)度:可以是h、l。h表示是按短整型輸出,l表示按長(zhǎng)整型輸出。例如:longx=356;printf(“%5ld”,x);/*輸出結(jié)果為□□356,其中5為輸出寬度,長(zhǎng)整型需要加l*/(5)類型:是格式說明符中必須有的項(xiàng)。它表示輸出列表里要輸出的數(shù)據(jù)類型。常用的數(shù)據(jù)類型格式控制符如表2-7所示(所有格式字符必須小寫)。2.4.1格式化輸出函數(shù)printf2.4數(shù)據(jù)的輸入/輸出表2-7printf函數(shù)的常用類型控制字符表2.4.1格式化輸出函數(shù)printf格式字符意義d按十進(jìn)制形式輸出帶符號(hào)的整數(shù)(正數(shù)前無(wú)+號(hào))o按八進(jìn)制形式無(wú)符號(hào)輸出(無(wú)前導(dǎo)o)x按十六進(jìn)制形式無(wú)符號(hào)輸出(無(wú)前導(dǎo)ox)u按十進(jìn)制無(wú)符號(hào)形式輸出c按字符形式輸出一個(gè)字符f按十進(jìn)制形式輸出單、雙精度浮點(diǎn)數(shù)(默認(rèn)6位小數(shù))e按指數(shù)形式輸出單、雙精度浮點(diǎn)數(shù)s輸出以\o結(jié)尾的字符串2.4數(shù)據(jù)的輸入/輸出3.printf的輸出列表printf函數(shù)中的“輸出列表”部分由表達(dá)式組成,這些表達(dá)式應(yīng)與“格式控制字符串”中的格式說明符的類型一一對(duì)應(yīng),若“輸出列表”中有多個(gè)表達(dá)式,則每個(gè)表達(dá)式之間應(yīng)由逗號(hào)隔開,各輸出項(xiàng)可以是任意合法的表達(dá)式(包括常量、變量和函數(shù)調(diào)用)。因此printf函數(shù)也具有計(jì)算的功能。printf("%d\n",100); /*輸出顯示:100*/printf("%d\n",12340000+5678); /*輸出顯示:12345678*/printf("%f\n",(x=123.0)+(y=0.4567)); /*輸出顯示:123.456700*/printf("%6.2f\n",123.4567); /*輸出顯示:123.46*/printf("%.3f\n",123.4567); /*輸出顯示:123.457*/2.4.1格式化輸出函數(shù)printf提示:定義浮點(diǎn)型變量時(shí)要注意小數(shù)的精度問題浮點(diǎn)型數(shù)據(jù)在賦值的過程中,float型的變量x只能接收7位有效數(shù)字,而double型的變量y能接收15~16位有效數(shù)字。如果賦值的小數(shù)后的位數(shù)過多或過少,都會(huì)造成數(shù)據(jù)的精度丟失或不足。2.4數(shù)據(jù)的輸入/輸出【案例2-9】演示各種數(shù)據(jù)的輸出格式。單擊打開源程序程序運(yùn)行結(jié)果2.4.1格式化輸出函數(shù)printf2.4數(shù)據(jù)的輸入/輸出scanf函數(shù)的功能是從鍵盤上將數(shù)據(jù)按用戶指定的格式輸入給指定的變量。1.scanf的函數(shù)調(diào)用形式scanf函數(shù)是系統(tǒng)標(biāo)準(zhǔn)庫(kù)函數(shù),其調(diào)用一般形式為:其中格式控制字符串的定義與使用方法與printf相同,但不能顯示非格式字符。地址列表是要賦值的各變量地址。地址是由地址運(yùn)算符“&”后跟變量名組成。如&a表示變量a的地址。scanf("格式控制字符串",地址列表

);2.4.2格式化輸入函數(shù)scanf2.4數(shù)據(jù)的輸入/輸出2.scanf的格式說明如果要輸入不同類型的數(shù)據(jù),可以設(shè)置格式控制符,C語(yǔ)言允許按用戶的格式要求來(lái)輸入相關(guān)數(shù)據(jù)。一般是“%”加上若干個(gè)英文字母,用以說明數(shù)據(jù)輸入的類型、長(zhǎng)度、位數(shù)等。格式控制符的一般形式為:

%[*][寬度][長(zhǎng)度]類型2.4.2格式化輸入函數(shù)scanf其中有方括號(hào)[]的項(xiàng)為可選項(xiàng),各項(xiàng)的意義如下。(1)[*]:表示輸入的數(shù)值不賦給相應(yīng)的變量,即跳過該數(shù)據(jù)不讀。例如:scanf("%d%*d%d",&a,&b);當(dāng)輸入為:123時(shí),將1賦給a,2被跳過,3賦給b。2.4數(shù)據(jù)的輸入/輸出(2)[寬度]:十進(jìn)制整數(shù),表示輸入數(shù)據(jù)的最大寬度。例如:scanf("%5d",&a);輸入:12345678↙只把12345賦給變量a,其余部分被截去。(3)[長(zhǎng)度]:長(zhǎng)度格式符為l和h,l表示輸入長(zhǎng)整型數(shù)據(jù)(如%ld)和雙精度浮點(diǎn)數(shù)(如%lf),h表示輸入短整型數(shù)據(jù)。(4)類型:是格式說明符中必須有的項(xiàng)。它表示地址列表里要輸入的數(shù)據(jù)類型。2.4.2格式化輸入函數(shù)scanf2.4數(shù)據(jù)的輸入/輸出3.scanf的地址列表在C語(yǔ)言中,使用了地址這個(gè)概念,這是與其他語(yǔ)言不同的。應(yīng)該把變量的值和變量的地址這兩個(gè)不同的概念區(qū)別開來(lái),變量的地址是C編譯系統(tǒng)分配的,用戶不必關(guān)心具體的地址是多少。例如:inta=567;則a為變量名,567是變量的值,&a表示變量a的地址。但在賦值號(hào)左邊是變量名,不能寫地址。而scanf函數(shù)在本質(zhì)上也是給變量賦值,但要求寫變量的地址,如&a。這兩者在形式上是不同的。&是一個(gè)取地址運(yùn)算符,&a是一個(gè)表達(dá)式,其功能是求變量的地址。2.4.2格式化輸入函數(shù)scanf2.4數(shù)據(jù)的輸入/輸出4.使用scanf函數(shù)注意事項(xiàng)(1)在用scanf函數(shù)輸入數(shù)據(jù)時(shí),不能規(guī)定精度。(2)scanf中要求給出變量地址,若給出變量名則會(huì)出錯(cuò)。(3)在輸入多個(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é)束。(4)在輸入字符數(shù)據(jù)時(shí),若格式控制串中無(wú)非格式字符,則認(rèn)為所有輸入的字符(字符類型的空格也為有效字符常量)均為有效字符。2.4.2格式化輸入函數(shù)scanf2.4數(shù)據(jù)的輸入/輸出(5)如果格式控制串中有非格式字符,則輸入時(shí)也要輸入該非格式字符。例如:scanf("%d,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論