版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
12.1數(shù)據(jù)類型2.2常量與變量2.3運(yùn)算符與表達(dá)式2.4標(biāo)準(zhǔn)輸入/輸出2.5數(shù)學(xué)函數(shù)2.6隨機(jī)數(shù)發(fā)生器函數(shù)2.7案例應(yīng)用第2章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式2數(shù)據(jù)在計(jì)算機(jī)中的存儲(chǔ)計(jì)算機(jī)內(nèi)部的信息都是用二進(jìn)制表示計(jì)算機(jī)存儲(chǔ)器是用半導(dǎo)體集成電路構(gòu)成的有兩種穩(wěn)定的工作狀態(tài):“導(dǎo)”與“截止”,即電脈沖的“有”與“無”分別用“1”和“0”表示一、數(shù)據(jù)在計(jì)算機(jī)中是以二進(jìn)制形式存儲(chǔ)的3數(shù)據(jù)在計(jì)算機(jī)中的存儲(chǔ)若相鄰的8個(gè)二極管元件中第1,3,5,7個(gè)元件處于“導(dǎo)通”狀態(tài),第2,4,6,8個(gè)元件處于“截止”狀態(tài),用“10101010”表示。導(dǎo)通截止導(dǎo)通截止導(dǎo)通截止導(dǎo)通截止101010104數(shù)據(jù)在計(jì)算機(jī)中的存儲(chǔ)十進(jìn)制數(shù)二進(jìn)制數(shù)001121031141005101十進(jìn)制數(shù)二進(jìn)制數(shù)6110711181000910011010105數(shù)據(jù)在計(jì)算機(jī)中的存儲(chǔ)位(bit),又稱“比特”。每一個(gè)二極管元件稱為一個(gè)“二進(jìn)制位”,是存儲(chǔ)信息的最小單位。它的值是“1”或“0”。字節(jié)(byte),又稱“拜特”。一般將8個(gè)“二進(jìn)制位”組織成一組,稱為“字節(jié)”。這是人們最常用的存儲(chǔ)單位。二、位、字節(jié)和地址6數(shù)據(jù)在計(jì)算機(jī)中的存儲(chǔ)二、位、字節(jié)和地址200120022003200420052006
地址:計(jì)算機(jī)的存儲(chǔ)器包含許多存儲(chǔ)單元,操作系統(tǒng)把所有存儲(chǔ)單元以字節(jié)為單位編號(hào)。345789┆71.1數(shù)據(jù)類型枚舉類型(enum)基本類型數(shù)據(jù)類型構(gòu)造類型指針類型空類型(void)整型(int)實(shí)型(浮點(diǎn)型)字符型(char)結(jié)構(gòu)體(struct)共用體(union)單精度實(shí)型(float)雙精度實(shí)型(double)數(shù)組8一、整型類型名稱類型說明符所占字節(jié)數(shù)取值范圍有符號(hào)基本整型[signed]int4-2147483648~2147483647-232-1~232-1-1有符號(hào)短整型[signed]short[int]2-32768~32767-216-1~216-1-1有符號(hào)長(zhǎng)整型[signed]long[int]4-2147483648~2147483647-232-1~232-1-1無符號(hào)基本整型unsigned[int]40~42949672950~232-1無符號(hào)短整型unsignedshort[int]20~655350~216-1-1無符號(hào)長(zhǎng)整型unsignedlong[int]40~42949672950~232-19一、整型
數(shù)據(jù)存儲(chǔ)時(shí)在內(nèi)存中所占字節(jié)數(shù)與具體的機(jī)器及系統(tǒng)有關(guān)。如int類型,在32位系統(tǒng)中VisualC++下所占4個(gè)字節(jié),但是在TurboC下int只占2個(gè)字節(jié),表示范圍就是:-32768~32767。
編程時(shí),可以用運(yùn)算符sizeof()求出所使用環(huán)境中int類型究竟占用幾個(gè)字節(jié)。1016位系統(tǒng):long是4字節(jié),int是2字節(jié)
32位系統(tǒng):long是4字節(jié),int是4字節(jié)
64位系統(tǒng):long是8字節(jié),int是4字節(jié)C語言又規(guī)定,無論什么平臺(tái),都要保證long型占用的字節(jié)數(shù)不小于int型程序的開發(fā)又不只是一個(gè)平臺(tái),在多平臺(tái)的情況是不同的,所以程序還要注重可移植性,11一、整型
整數(shù)類型是以二進(jìn)制數(shù)據(jù)形式存儲(chǔ)的,確切地說是以二進(jìn)制補(bǔ)碼形式。12一、整型整數(shù)的存儲(chǔ)方式一個(gè)十進(jìn)制整數(shù),先轉(zhuǎn)換為二進(jìn)制形式如整數(shù)15,以二進(jìn)制形式表示是1111000011110000000000001111用一個(gè)字節(jié)存放用兩字節(jié)存放負(fù)數(shù)按補(bǔ)碼形式存放請(qǐng)問:-15又是如何存儲(chǔ)的呢?符號(hào)位。0表示正符號(hào)位。0表示正13負(fù)數(shù)以其補(bǔ)碼形式存在:補(bǔ)碼=原碼取反+1
一個(gè)字節(jié)有8位可以表示的數(shù)值范圍在-128到+127
二進(jìn)制表示:10000000-01111111(注意:最高位表示符號(hào))
最高位是1的都是負(fù)數(shù)最高位是0的都是正數(shù)如-7
原碼:10000111
取反:11111000(最高位是符號(hào)不用取反)加一:11111001
即-7的二進(jìn)制數(shù)就是11111001
-10
原碼:10001010取反:11110101加一:11110110-10的二進(jìn)制數(shù)就是11110110
14二、實(shí)型C語言中實(shí)型也稱為浮點(diǎn)型,包括單精度實(shí)型和雙精度實(shí)型。實(shí)型與整型的區(qū)別在于是否包含小數(shù)部分,比如6是整數(shù)類型,6.00是實(shí)數(shù)類型。類型名稱類型說明符所占字節(jié)數(shù)有效數(shù)字取值范圍(絕對(duì)值)單精度實(shí)型float4約6~7位3.4×10-38~3.4×1038雙精度實(shí)型double8約15~16位1.7×10-308~1.7×1030815二、實(shí)型實(shí)數(shù)的存儲(chǔ)形式實(shí)型數(shù)據(jù)按指數(shù)形式存儲(chǔ),分為小數(shù)部分(尾數(shù))和指數(shù)部分(階碼)分別存放。123.456標(biāo)準(zhǔn)化指數(shù)形式為0.123456103+.12345+3數(shù)符
數(shù)值部分指數(shù)符號(hào)指數(shù)float數(shù)據(jù)機(jī)器內(nèi)是2進(jìn)制數(shù),
1位符號(hào)位;8位指數(shù)位;23位“尾數(shù)”位;共32位2進(jìn)制數(shù)。平時(shí)講有效數(shù)字是6~7位,指10進(jìn)制。
通常程序輸入的數(shù)是10進(jìn)制,進(jìn)入機(jī)器后要化成2進(jìn)制,計(jì)算完又轉(zhuǎn)十進(jìn)制輸出。
10進(jìn)制到2進(jìn)制,2進(jìn)制到10進(jìn)制轉(zhuǎn)換,有的數(shù)化不凈,有的數(shù)化得凈。
如同10進(jìn)制分?jǐn)?shù)化10進(jìn)制小數(shù),有的化得凈(例如4分之1,變0.25),有的化不凈(例如3分之1,變0.33333....)。
10進(jìn)制到2進(jìn)制,2進(jìn)制到10進(jìn)制轉(zhuǎn)換,化得凈的效數(shù)字7位,化不凈的效數(shù)字6位,因?yàn)樽詈笠晃挥猩崛胝`差。
例如:
floatx,y;
x=0.51;//化不凈
y=0.5;//化得凈
printf("x=%.8fy=%.8f",x,y);//輸出0.509999990.5000000017三、字符型類型說明符為char。字符型數(shù)據(jù)只占1個(gè)字節(jié),只能存放1個(gè)字符。為了處理字符,計(jì)算機(jī)使用一種數(shù)字編碼,用特定的整數(shù)表示特定的字符。應(yīng)用最廣泛的是編碼是ASCII碼(AmericaStandardCodeforInformationInterchange,美國(guó)信息交換標(biāo)準(zhǔn)碼)
大寫字母A的ASCII碼為65,小寫字母a的ASCII碼為97,字符‘0’為48。18三、字符型字符的存儲(chǔ)方式對(duì)于字符,按ASCII代碼存放A的ASCII代碼是65(1000001)01000001用一個(gè)字節(jié)存放
由于這種與整型數(shù)據(jù)類似的存儲(chǔ)方式,在1個(gè)字節(jié)(0~255)范圍內(nèi),字符型數(shù)據(jù)和整形數(shù)據(jù)可以通用。19四、枚舉型
如果一個(gè)數(shù)據(jù)對(duì)象只有幾種可能的取值,可以將這些值一一列舉出來,即定義為枚舉類型。定義的格式為:
enum
枚舉類型名
{枚舉常量1,枚舉常量2,...,枚舉常量n};20五、構(gòu)造數(shù)據(jù)類型C語言的基本數(shù)據(jù)類型并不能滿足實(shí)際應(yīng)用中的所有需求,用戶可以利用整型、實(shí)型、字符型這些基本數(shù)據(jù)類型構(gòu)造滿足需要的數(shù)據(jù)類型,即構(gòu)造類型。數(shù)組類型構(gòu)造類型結(jié)構(gòu)體類型共用體類型21六、其他數(shù)據(jù)類型指針類型。
指針是一種特殊的數(shù)據(jù)類型,也是很重要的一種數(shù)據(jù)類型,指針的值指的是內(nèi)存中的地址值??疹愋?/p>
C語言中空類型用void表示,一般用于描述指針以及作為不返回值的函數(shù)的返回值類型。222.2常量與變量
在程序所處理的各種數(shù)據(jù)中,有些數(shù)據(jù)的值在程序使用前可以預(yù)先設(shè)定并在程序運(yùn)行過程中不會(huì)發(fā)生變化,稱為常量。有的數(shù)據(jù)在程序運(yùn)行過程中可能會(huì)變化,稱為變量。
兩者的區(qū)別在于數(shù)據(jù)在程序運(yùn)行過程中其值是否變化。232.2.1常量在程序運(yùn)行過程中,其值不變的量稱為常量。常量區(qū)分為不同的類型:整型常量100,125,-100,0實(shí)型常量3.14,0.125,-3.789字符型常量‘a(chǎn)’,‘b’,‘2’字符串常量‘a(chǎn)’,‘a(chǎn)b’,‘1232’以上四種稱為字面常量。還有一種叫符號(hào)常量。24一、整型常量
整型常量即整常數(shù)。在C語言中,整常數(shù)可用以下三種形式表示:十進(jìn)制整數(shù):用10個(gè)數(shù)字0~9表示,如369,9652。八進(jìn)制整數(shù):以數(shù)字0開頭,用8個(gè)數(shù)字0~7表示。如:0123表示八進(jìn)制數(shù)123,等于十進(jìn)制數(shù)83,-011表示八進(jìn)制數(shù)-11,即十進(jìn)制數(shù)-9。十六進(jìn)制整數(shù):以0X或0x開頭(注意是數(shù)字0加字母X或x),用10個(gè)數(shù)字0~9和6個(gè)字母A~F(或a~f)表示。如:0x123,代表16進(jìn)制數(shù)123,等于十進(jìn)制數(shù)
291。
-0x12等于十進(jìn)制數(shù)-18。注意:正整數(shù)前面的“+”號(hào)可以省略。25一、整型常量常量的后綴表示列舉如下:常量類型
十進(jìn)制數(shù)
八進(jìn)制
十六進(jìn)制
十進(jìn)制的值長(zhǎng)整型
12L 014L0XCL 12無符號(hào)整型
15u 017u 0xfu15注意:C把大多數(shù)整數(shù)常量識(shí)別為int類型,如果整數(shù)特別大,將會(huì)有不同的處理。比如,在程序中使用254時(shí),通常會(huì)識(shí)別為int類型。當(dāng)使用的整數(shù)超出了int類型的范圍時(shí),則識(shí)別為long類型,或unsignedlong類型。26二、實(shí)型常量實(shí)型常量的表示形式:十進(jìn)制形式:由數(shù)字0~9和小數(shù)點(diǎn)組成(必須有小數(shù)點(diǎn))。
如:0.123
指數(shù)形式:由尾數(shù)、E(或e)和整數(shù)指數(shù)(階碼)組成。
如:3e-3注意:整數(shù)或小數(shù)部分的數(shù)字可以省略,但二者不能同時(shí)省略并且小數(shù)點(diǎn)不能省略。字母e(或E)之前必須有數(shù)字,可以是整數(shù)或?qū)崝?shù),且e后面的指數(shù)必須為整數(shù)。27二、實(shí)型常量在實(shí)型常量中不能有空格。默認(rèn)狀態(tài)下,實(shí)型常量被識(shí)別為雙精度(double)類型??梢允褂煤缶YF或f表示單精度(float)類型,后綴L或l表示長(zhǎng)雙精度(longdouble)類型。比如123.56是double類型,123.56f是float類型,1.2356E2L是longdouble類型。1.2、7.、.36、1e3、1.8e-3、-.1e-30、1.23、e3、2.1e3.5、.e3、e
28三、字符常量(1)用單引號(hào)括起來的一個(gè)字符是字符型常量。(2)只能包含一個(gè)字符。注意:使用字符常量時(shí)要注意數(shù)字字符和數(shù)字的區(qū)別,例如,寫法'5'表示符號(hào)5,而不是數(shù)值5,字符5的ASCII碼值是53。例‘a(chǎn)’,’A’,‘1’‘a(chǎn)bc’、“a”29三、字符常量
有些以“\”開頭的特殊字符稱為轉(zhuǎn)義字符。\n換行\(zhòng)t橫向跳格\r回車\\反斜杠\ddd
ddd表示1到3位八進(jìn)制的ASCII代碼\xhh
hh表示1到2位十六進(jìn)制的ASCII代碼例:字母A有3種表示,’A’,’\101’,’\x41’‘\0’
與‘0’是有區(qū)別的字符類型的數(shù)據(jù)也可參與四則運(yùn)算30四、字符串常量字符串常量是一對(duì)雙撇號(hào)括起來的字符序列.合法的字符串常量:
"Howdoyoudo.","CHINA","a",
"$123.45"可以輸出一個(gè)字符串,如
printf("Howdoyoudo.");注意:"a"表示的是一個(gè)字符串常量
'a'表示的是一個(gè)字符常量31四、字符串常量字符串常量與字符常量的區(qū)別:(1)字符常量是由單引號(hào)括起來,而字符串常量則是由雙引號(hào)括起來。(2)字符常量只能表示一個(gè)字符,而字符串常量則可以包含1個(gè)或多個(gè)字符。(3)可以將1個(gè)字符常量賦值給一個(gè)字符變量,但不能將1個(gè)字符串常量賦予一個(gè)字符變量。(4)字符常量在存儲(chǔ)中只占一個(gè)字節(jié),字符串常量占用的存儲(chǔ)空間的字節(jié)數(shù)等于雙引號(hào)中所包含字符個(gè)數(shù)加1(結(jié)束符‘\0’)。32四、字符串常量(5)字符串中可以有轉(zhuǎn)義字符。(6)單引號(hào)和雙引號(hào)只是字符和字符串的定界符,如果字符常量本身是單引號(hào),則要用轉(zhuǎn)義字符,如‘\’’
。空字符作為字符串常量的結(jié)束'a'是一個(gè)字符常量"a"是一個(gè)字符串常量aa\033五、符號(hào)常量
用一個(gè)標(biāo)識(shí)符來代表一個(gè)常量,稱為符號(hào)常量。符號(hào)常量在使用前必須先定義,用宏定義的形式,其一般定義格式為:
#define
標(biāo)識(shí)符常量例:
#definea20定義符號(hào)常量名時(shí)應(yīng)盡量做到“見名知意”,
#definePRICE2034五、符號(hào)常量#include<stdio.h>#definePRICE10//定義價(jià)格符號(hào)常量PRICE為10voidmain(){
int
num,total;
scanf(“%d”,&num); //輸入購買數(shù)量
total=num*PRICE; //計(jì)算總金額
printf(“total=%d”,total);}35五、符號(hào)常量符號(hào)常量的性質(zhì)和使用方法:1、#define不是C語句,該行的末尾沒有分號(hào)。它是一個(gè)“預(yù)編譯命令”。2、不要把符號(hào)常量與變量混淆,符號(hào)常量只是一個(gè)符號(hào),不占存儲(chǔ)單元。它只是簡(jiǎn)單地進(jìn)行字符置換(如把字符PRICE置換為字符10)。不論置換的字符是否有含義都進(jìn)行置換。3、習(xí)慣上,符號(hào)常量名用大寫,變量名用小寫,以示區(qū)別。4、使用符號(hào)常量的好處
含義清楚在需要改變一個(gè)常量時(shí)能做到“一改全改”。
#include<stdio.h>#definePI3.14intmain(){doubles,c,r=10;s=PI*r*r;c=2*PI*r;
printf(“s=%f“,s);
printf(“c=%f“,c);return0;}36變量是指在程序運(yùn)行過程中其值可以變化的量。C語言要求在使用變量之前必須先進(jìn)行聲明。給變量指定一個(gè)標(biāo)識(shí)符,這個(gè)標(biāo)識(shí)符稱為變量名;變量名(標(biāo)識(shí)符)的命名規(guī)則:只能由字母、數(shù)字或下劃線組成;第一個(gè)字符必須是字母或下劃線。2.2.2變量37聲明一個(gè)變量包括:指定該變量的數(shù)據(jù)類型,該類型決定了變量值的類型、表現(xiàn)形式和占用內(nèi)存空間,以及對(duì)該變量能執(zhí)行的運(yùn)算;指定變量的存儲(chǔ)類型和變量的作用域。1、變量的聲明變量聲明的一般形式:
[存儲(chǔ)類型說明符]數(shù)據(jù)類型說明符變量名1[,變量名2,變量名3,…]381、變量的聲明☆變量名必須是一個(gè)合法的標(biāo)識(shí)符,還應(yīng)考慮“見名知意”的原則?!铑愋驼f明符后聲明多個(gè)相同類型的變量,各變量之間用逗號(hào)分隔?!钭兞柯暶鞅仨毞旁谧兞渴褂弥?,即先聲明,后使用。//變量聲明示例#include<stdio.h>voidmain(){
int
a,b;
//聲明兩個(gè)整型變量a和bcharc;
//聲明一個(gè)字符變量c
floatf1,f2;
//聲明兩個(gè)浮點(diǎn)型變量f1,f2}數(shù)據(jù)類型說明符39聲明變量,只是給變量分配內(nèi)存空間,存儲(chǔ)空間中存放的值是隨機(jī)的,變量值不確定的。C語言允許在聲明變量的同時(shí)給變量賦值即初始化變量,這個(gè)值為變量的初值。2、變量的初始化在變量聲明中初始化賦值的一般格式為:
[存儲(chǔ)類型說明符]數(shù)據(jù)類型說明符變量名1=值1[,變量名2=值2,…];☆多個(gè)變量初始化賦值必須將其分別賦值,即使所賦的值相同也是如此。
inti=j=20;(錯(cuò)誤)應(yīng)寫成:
inti=20,j=20;402、變量的初始化//變量聲明及初始化#include<stdio.h>voidmain(){charc1=‘a(chǎn)’,c2=‘b’;/*聲明c1和c2為字符類型變量,
c1初始化值分別為字符'a'、'b‘*/
inti=20,j=20,k;/*聲明i,j和k為基本整型變量,
i和j初始化值為20*/ floatf1=3.6,f2;/*聲明f1和f2為單精度類型變量,
f1初始化值為3.6*/} 412、變量的初始化要注意區(qū)別變量名和變量值:
intk=26;26k3000存儲(chǔ)單元變量名變量地址變量值42(1)整型變量
有基本整型、短整型、長(zhǎng)整型、無符號(hào)基本整型、無符號(hào)短整型、無符號(hào)長(zhǎng)整型6種。3、變量的使用
☆在程序中使用變量,要考慮程序運(yùn)行的環(huán)境和變量的取值范圍,當(dāng)變量的取值超出變量類型所規(guī)定的范圍時(shí),會(huì)出現(xiàn)錯(cuò)誤的運(yùn)算結(jié)果。//整型變量的定義與使用#include<stdio.h>voidmain(){
inta=-10,b=20,c;
//聲明基本整型變量a、b、c,
//并對(duì)a,b初始化
unsignedk;
//聲明無符號(hào)基本整型變量k
scanf(“%u”,&k);
//用scanf()函數(shù)給k輸入一個(gè)值(無符號(hào)整數(shù))
c=a+b;
//將a、b的和賦值給c
printf("c=%d,k=%u\n",c,k);
//用printf()函數(shù)輸出c、k的值
} 43
☆使用整型變量時(shí)要注意它獲取的值不要超過變量的取值范圍,否則會(huì)發(fā)生“溢出”。3、變量的使用//整型數(shù)據(jù)的溢出#include<stdio.h>voidmain(){shortx=32767,y;y=x+1;
printf("x=%d,y=%d\n",x,y);}
☆因?yàn)橐粋€(gè)短整型變量所能表示數(shù)的范圍是-32768-32767,將無法表示大于32767的數(shù),這種情況叫溢出。而程序在運(yùn)行過程中并沒有報(bào)錯(cuò)。44(1)實(shí)型變量
分為單精度實(shí)型和雙精度實(shí)型,兩者的區(qū)別在于精度即有效數(shù)字位數(shù)。//實(shí)型變量的有效位數(shù)#include<stdio.h>voidmain(){
float a=33.3333333333;doubleb=12.123456789012345678;
printf("a=%21.18f\n",a);
//格式符%21.18f,輸出a時(shí)總長(zhǎng)度21位,小數(shù)位數(shù)占18位
printf("b=%21.18f\n",b);
} 3、變量的使用float類型的數(shù)據(jù)只接收7位有效數(shù)字
double類型的數(shù)據(jù)接收16位有效數(shù)字
45在使用實(shí)型變量時(shí)應(yīng)該注意以下兩種情況:①實(shí)型常量沒有加后綴F(或f)時(shí),系統(tǒng)默認(rèn)為double類型進(jìn)行處理,具有較高精度,把該實(shí)型常量賦值給一個(gè)float類型的變量時(shí),系統(tǒng)會(huì)截取相應(yīng)的有效位數(shù)進(jìn)行賦值。②應(yīng)避免將很大的數(shù)和一個(gè)很小的數(shù)進(jìn)行加減運(yùn)算,否則會(huì)丟失“較小”的數(shù)。//實(shí)型數(shù)據(jù)的舍入誤差。#include<stdio.h>voidmain(){floata=123456789.0,b;b=a+1;
printf("a=%f\n",a);printf("b=%f\n",b);}
3、變量的使用只能保證前7位是準(zhǔn)確的,后面幾位是無效數(shù)字,把1加在無效數(shù)字上,是無意義的。
46(1)字符型變量每個(gè)字符變量占一個(gè)字節(jié)的內(nèi)存空間,存放一個(gè)字符,即字符變量的取值是一個(gè)字符常量??梢园炎址蛿?shù)據(jù)作為整型數(shù)據(jù)進(jìn)行處理。允許對(duì)整型變量賦以字符值,也允許對(duì)字符變量賦以整型值。在輸出時(shí),允許把字符變量按整型形式輸出,也允許把整型數(shù)據(jù)按字符形式輸出。注意,整型為4個(gè)字節(jié),字符為1個(gè)字節(jié),當(dāng)整型按字符型量處理時(shí),只有低八位參與處理。//字符型變量示例#include<stdio.h>voidmain(){
chara,b;a='x';b='y';a=a-32;b=b-32;
printf("%c,%c\n%d,%d\n",a,b,a,b);
}
3、變量的使用472.3運(yùn)算符與表達(dá)式2.3.1運(yùn)算符2.3.2表達(dá)式2.3.3類型轉(zhuǎn)換48C語言的運(yùn)算符有以下幾類:
⑴算術(shù)運(yùn)算符(+-*/%)⑵關(guān)系運(yùn)算符(><==>=<=?。剑沁壿嬤\(yùn)算符(?。Γ|)⑷位運(yùn)算符(<<>>~|∧&)⑸賦值運(yùn)算符(=及其擴(kuò)展賦值運(yùn)算符)⑹條件運(yùn)算符(?:)⑺逗號(hào)運(yùn)算符(,)(8)指針運(yùn)算符(*和&)(9)求字節(jié)數(shù)運(yùn)算符(sizeof)(10)強(qiáng)制類型轉(zhuǎn)換運(yùn)算符((類型))(11)分量運(yùn)算符(.->)(12)下標(biāo)運(yùn)算符([])(13)其他(如函數(shù)調(diào)用運(yùn)算符())2.3.1運(yùn)算符492.3.1運(yùn)算符使用運(yùn)算符需要注意以下幾點(diǎn):
⑴運(yùn)算符的功能⑵對(duì)操作數(shù)(即運(yùn)算對(duì)象)的要求操作數(shù)的個(gè)數(shù);操作數(shù)的數(shù)據(jù)類型。⑶運(yùn)算符的優(yōu)先級(jí)別⑷運(yùn)算符的結(jié)合方向⑸運(yùn)算結(jié)果參見附錄B501、算術(shù)運(yùn)算符+
(加法運(yùn)算符,或正值運(yùn)算符。如:3+5、+3)-(減法運(yùn)算符,或負(fù)值運(yùn)算符。如:5-2、-3)*(乘法運(yùn)算符。如:3*5)/(除法運(yùn)算符。兩個(gè)整數(shù)相除的結(jié)果為整數(shù),如:5/3結(jié)果為1)%(模運(yùn)算符,或稱求余運(yùn)算符,%兩側(cè)均應(yīng)為整型數(shù)據(jù),如:7%4的值為3)。注:1、/:如果兩個(gè)整數(shù)相除,結(jié)果為整數(shù)(整除),結(jié)果“向零取整”。例:8/5=1,8/-5=-1,-8/5=-1,8.0/5=1.6。
2、%:結(jié)果的符號(hào)與被除數(shù)符號(hào)相同。例:8%5=3,-8%5=-3,8%-5=3。51//算術(shù)運(yùn)算符#include<stdio.h>intmain(){inta=3,b=5;printf("%d\n",a+b);printf("%d\n",a-b);printf("%d\n",a*b);printf("%d\n",a/b);printf("%d\n",a%b);return0;} 54不能寫為ab52(4.0/3)*x*x*x(4/3)x3sin(x)+exp(x)sinx+exsqrt(a*a+b*b)(x+y)/(x-y)3*a+4*b3a+4bC表達(dá)式數(shù)學(xué)表達(dá)式110532、自增、自減運(yùn)算符作用是使變量的值增1或減1++i,--i:在使用i之前,先使i的值加(減)1i++,i--:在使用i之后,使i的值加(減)1
注:由于自增和自減可以改變操作數(shù)自身的值,因此其運(yùn)算對(duì)象只能是一個(gè)變量。整型、實(shí)型、字符型、指針類型變量均可作為其運(yùn)算對(duì)象。變量x初值表達(dá)式運(yùn)算后x的值運(yùn)算后表達(dá)式的值2++x332x++322--x112x--12542、自增、自減運(yùn)算符//自增自減綜合應(yīng)用#include<stdio.h>voidmain(){
inti=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--);
printf("%d\n",i);}
//輸出9//輸出8//輸出8,但i的值為9//輸出9,但i的值為8//輸出-8,但i的值為9//輸出-9,相當(dāng)于-(i--)//此時(shí)輸出多少呢?55例:設(shè)inti=3,j=4;作j=(i++)+j
運(yùn)算后,j的值為▁▁▁,i的值為▁▁▁。設(shè)inti=3,j=4;作j=(++i)+j
運(yùn)算后,j的值為▁▁▁,i的值為▁▁▁。563、賦值運(yùn)算符
“=”是賦值運(yùn)算符作用是將一個(gè)數(shù)據(jù)賦給一個(gè)變量也可以將一個(gè)表達(dá)式的值賦給一個(gè)變量例:a=20;的作用是“將值20賦給變量a”。
賦值表達(dá)式一般形式為:
變量
賦值運(yùn)算符
表達(dá)式對(duì)賦值表達(dá)式求解的過程:求賦值運(yùn)算符右側(cè)的“表達(dá)式”的值賦給賦值運(yùn)算符左側(cè)的變量573、賦值運(yùn)算符賦值運(yùn)算符左側(cè)的標(biāo)識(shí)符稱為“左值”
出現(xiàn)在賦值運(yùn)算符右側(cè)的表達(dá)式稱為“右值”
注意:并不是任何對(duì)象都可以作為左值的,表達(dá)式和常變量就不能作為左值。任何左值都可做右值。賦值表達(dá)式“a=3*5”
對(duì)表達(dá)式求解后,將表達(dá)式的值15賦值給變量a“a=(b=5)”和“a=b=5”等價(jià)583、賦值運(yùn)算符注意:并不是任何對(duì)象都可以作為左值的,表達(dá)式和常變量就不能作為左值。任何左值都可做右值。(a=b)=c=5
a+b=x+b
5=a+b#definePI3.14PI=3.1415926;593、賦值運(yùn)算符兩側(cè)類型一致時(shí),直接賦值兩側(cè)類型不一致,但都是數(shù)值型或字符型,自動(dòng)將右側(cè)的類型轉(zhuǎn)換為左側(cè)類型后賦值定義變量時(shí)要防止數(shù)據(jù)溢出實(shí)型→整型:直接取整,舍棄小數(shù)部分。整型→實(shí)型:數(shù)值不變,但要補(bǔ)足相應(yīng)的有效位數(shù)。字符型→整型:將ASCII碼值賦給最低的8位。整型→字符型:只截取最低的8位賦給字符型變量。
60說明:2.賦值與數(shù)學(xué)中的“等于”完全不同。例:intx=10;x=x+1在數(shù)學(xué)里x=x+1是矛盾的
。但在C語言中則合法(常用)。3.C語言中a=b和b=a含義不同。4.當(dāng)賦值運(yùn)算符左右類型不一致時(shí),需要進(jìn)行類型轉(zhuǎn)換。通常由系統(tǒng)自動(dòng)將右側(cè)的類型轉(zhuǎn)換為左側(cè)類型后再賦值。例:inta;a=1.2;執(zhí)行后,變量x的取值為11double類型執(zhí)行后,變量a的取值為1613、賦值運(yùn)算符復(fù)合的賦值運(yùn)算符
在賦值符“=”之前加上其他運(yùn)算符,如+=,-=,*=,/=,%=等??梢詷?gòu)成復(fù)合的運(yùn)算符.
復(fù)合賦值運(yùn)算符具有右結(jié)合性。
a+=3
等價(jià)于
a=a+3復(fù)合賦值運(yùn)算符使用一般形式為:
<變量><雙目運(yùn)算符>=<表達(dá)式>等價(jià)于:
<變量>=<變量><雙目運(yùn)算符><表達(dá)式>//例如:n+=1 等價(jià)于n=n+1x*=y+1 等價(jià)于x=x*(y+1)k%=i+k 等價(jià)于k=k%(i+k)要加括號(hào)623、賦值運(yùn)算符賦值表達(dá)式也可以包含復(fù)合的賦值運(yùn)算符。
例:
a+=a-=a*a
求解步驟如下:(設(shè)置a的初值為12)①先進(jìn)行“a-=a*a”的運(yùn)算,它相當(dāng)于:
a=a-a*a,a的值為12-144=-132。②再進(jìn)行“a+=-132”的運(yùn)算,相當(dāng)于:
a=a+(-132),a的值為-132-132=-264。如果變成:
a+=a-=a*=a
結(jié)果又如何呢?634、關(guān)系運(yùn)算符關(guān)系運(yùn)算符及其優(yōu)先次序<(小于)<=(小于或等于)>(大于)>=(大于或等于)==(等于)!=(不等于)優(yōu)先級(jí)相同(6)優(yōu)先級(jí)相同(7)說明:關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符關(guān)系運(yùn)算符的優(yōu)先級(jí)高于賦值運(yùn)算符644、關(guān)系運(yùn)算符關(guān)系表達(dá)式用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式起來的式子,稱關(guān)系表達(dá)式。例:a>b,a+b>b+c,(a=3)>(b=5),’a’<‘b’,(a>b)>(b<c)關(guān)系表達(dá)式的值是一個(gè)邏輯值,即“真”或“假”。例:關(guān)系表達(dá)式”a>b”的值為“真”,表達(dá)式的值為1。C語言中沒有專用的邏輯值,1代表真,0代表假654、關(guān)系運(yùn)算符#include<stdio.h>voidmain(){
inta=1,b=2,c=3,d=4;/*聲明變量a,b,c,d并初始化*/
printf("%d\n",a+b>c+d);
printf("%d\n",a<=2*b);
printf("%d\n",'a'<'d');
printf("%d\n",a!=(c==d));} //結(jié)果為假,輸出0//結(jié)果為真,輸出1//結(jié)果為真,輸出1//結(jié)果為真,輸出1Printf(“%d\n”,a<b<c);
輸出什么?有時(shí)判斷的條件是一個(gè)復(fù)合的條件,如:是中國(guó)公民,且在18歲以上從左至右665、邏輯運(yùn)算符邏輯運(yùn)算符及其優(yōu)先次序1、&&(邏輯與)相當(dāng)于其他語言中的AND2、||(邏輯或)相當(dāng)于其他語言中的OR3、!(邏輯非)相當(dāng)于其他語言中的NOT例:a&&b
若a,b為真,則a&&b為真。
a||b
若a,b之一為真,則a||b為真。!a若a為真,則!a為假。優(yōu)先次序:!(非)->&&(與)->||(或)邏輯運(yùn)算符中的“&&”和“||”低于關(guān)系運(yùn)算符,“!”高于算術(shù)運(yùn)算符67PQP&&QP||Q!P00001010111001011110邏輯運(yùn)算真值表685、邏輯運(yùn)算符//邏輯運(yùn)算示例#include<stdio.h>voidmain(){
charch;
printf(“inputaletter:”);
scanf(“%c”,&ch); /*輸入一個(gè)字母*/
if(!(ch>=’A’&&ch<=’Z’||ch>=’a’&&ch<=’z’))
printf(“inputerror!\n”);
/*如果輸入的不是字母則提示錯(cuò)誤*/}
不能改成:’A’<=ch<=’Z’
695、邏輯運(yùn)算符邏輯表達(dá)式用邏輯運(yùn)算符將關(guān)系表達(dá)式或邏輯量連接起來的式子就是邏輯表達(dá)式邏輯表達(dá)式的值應(yīng)該是一個(gè)邏輯量“真”或“假”。例:設(shè)a=4,b=5:
!a的值為0a&&b的值為1
a||b的值為1!a||b的值為14&&0||2的值為1任何非零的數(shù)值被認(rèn)作“真”,非零即為真70判斷一個(gè)數(shù)x能否同時(shí)被2,3,7整除
x%2==0x%3==0x%7==0C表達(dá)式數(shù)學(xué)表達(dá)式(x≥5)且(y≠8)(x>=5)&&(y!=8)2<x<4或x>10
(x>2&&x<4)||(x>10)2<x<4需要同時(shí)滿足只需要滿足其中之一?進(jìn)行%運(yùn)算看余數(shù)是否為0(x%2==0)&&(x%3==0)&&(x%7==0)715、邏輯運(yùn)算符例:5>3&&8<4-!0
自左向右運(yùn)算
1&&0邏輯值為08<3邏輯值為04-1值為3!0邏輯值為15>3邏輯值為1表達(dá)式值為0725、邏輯運(yùn)算符邏輯運(yùn)算的“短路”特性:(1)a&&b&&c
只有a為真時(shí),才需要判斷b的值,只有a和b都為真時(shí),才需要判斷c的值。(2)a||b||c
只要a為真,就不必判斷b和c的值,只有a為假,才判斷b。a和b都為假才判斷c。73注意:&&和||在表達(dá)式中運(yùn)算時(shí)有著特殊規(guī)定(“短路”特性)。例:設(shè)有inta=1,b=2,c=3,d=4,m=2,n=2;執(zhí)行
(m=a>b)&&(n=c>d)后m的值為
,n的值為
。例:設(shè)intx=0,y=1,z;
執(zhí)行
z=!x||--y;后z的值為
,x的值為
,y的值為
。
不計(jì)算不計(jì)算01嚴(yán)格按照結(jié)合性從左向右計(jì)算嚴(yán)格按照結(jié)合性從左向右計(jì)算02101746、逗號(hào)運(yùn)算符逗號(hào)運(yùn)算符:將兩個(gè)表達(dá)式連接起來,又稱為“順序求值運(yùn)算符”。
如:3+5,6+8
一般形式:
表達(dá)式1,表達(dá)式2…,表達(dá)式n求解過程:先求解表達(dá)式1,再求解表達(dá)式2,依次。整個(gè)逗號(hào)表達(dá)式的值是表達(dá)式n的值。756.逗號(hào)運(yùn)算符表達(dá)式1,表達(dá)式2,…,表達(dá)式n整個(gè)逗號(hào)表達(dá)式的值從左至右依次計(jì)算每個(gè)子表達(dá)式逗號(hào)運(yùn)算符優(yōu)先級(jí)是最低的。結(jié)合方向從左至右。766、逗號(hào)運(yùn)算符例:逗號(hào)表達(dá)式x=a=2*3,a*4,a+5;
分析:賦值運(yùn)算符優(yōu)先級(jí)高于逗號(hào)運(yùn)算符,先計(jì)算子表達(dá)式x=a=2*3,a和x被賦值為6,再計(jì)算子表達(dá)式a*4,值為24,最后計(jì)算子表達(dá)式a+5,值為11,整個(gè)表達(dá)式的結(jié)果取子表達(dá)式a+5的值,即11。例:逗號(hào)表達(dá)式x=(a=2*3,a*4,a+5);
分析:先計(jì)算括號(hào)中的逗號(hào)表達(dá)式a=2*3,a*4,a+5,其中先計(jì)算子表達(dá)式a=2*3,a被賦值為6,再計(jì)算子表達(dá)式a*4,值為24,最后計(jì)算子表達(dá)式a+5,值為11,整個(gè)逗號(hào)表達(dá)式的結(jié)果取子表達(dá)式a+5的值11,再賦給x。77逗號(hào)運(yùn)算示例#include<stdio.h>intmain(){
int
x,a;x=(a=2*3,a*4,a+5);
printf(“x=%d,a=%d\n”,x,a);return0;}程序運(yùn)行結(jié)果為:x=11,a=6787、條件運(yùn)算符條件運(yùn)算符是三目運(yùn)算符,由兩個(gè)符號(hào)“?:”組成,需要3個(gè)運(yùn)算對(duì)象。
一般形式:表達(dá)式1?表達(dá)式2:表達(dá)式3求解過程:若表達(dá)式1的值為真(非0),則執(zhí)行表達(dá)式2,其結(jié)果作為整個(gè)條件表達(dá)式的值,否則執(zhí)行表達(dá)式3,其結(jié)果作為整個(gè)條件表達(dá)式的值。797、條件運(yùn)算符說明:(1).3個(gè)操作數(shù)可以是任意類型表達(dá)式。
(2).條件運(yùn)算符優(yōu)先級(jí)高于賦值運(yùn)算符,低于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符,位于第13優(yōu)先級(jí)。
(3).條件運(yùn)算符的結(jié)合方向?yàn)椤白杂抑磷蟆薄?/p>
(4).“表達(dá)式2”和“表達(dá)式3”不僅可以是數(shù)值表達(dá)式,還可以是賦值表達(dá)式或函數(shù)表達(dá)式。(5).如果表達(dá)式1為真,只計(jì)算表達(dá)式2,否則只計(jì)算表達(dá)式3。80條件運(yùn)算符舉例#include<stdio.h>intmain(){
inta=2,b=1,m=6,n=6,x;x=a>b?(m=0):(n=0);
printf("x=%d,m=%d,n=%d\n",x,m,n);return0;}817、條件運(yùn)算符//輸入兩個(gè)數(shù),求其中較大的數(shù)和較小的數(shù)。#include<stdio.h>voidmain(){int
a,b,max,min;
printf(“inputa=”);
scanf(“%d”,&a);/*輸入變量a*/
printf(“inputb=”);
scanf(“%d”,&b);/*輸入變量b*/max=a>b?a:b;min=a<b?a:b;
printf(“max=%d,min=%d\n”,max,min);
}
求a,b,c三個(gè)數(shù)的最大數(shù)m:
m=a>b?a:b>c?b:c;
()m=a>(b>c?b:c)?a:(b>c?b:c);828、位運(yùn)算符
由于C語言可直接對(duì)硬件編程,在系統(tǒng)軟件設(shè)計(jì)中要求能對(duì)位進(jìn)行運(yùn)算,因此,C語言提供了6種位運(yùn)算符,支持位運(yùn)算等匯編操作。運(yùn)算符功能運(yùn)算對(duì)象個(gè)數(shù)優(yōu)先級(jí)結(jié)合方向~按位取反單目2從右至左<<左移位雙目5從左至右>>右移位雙目5從左至右&按位與雙目8從左至右^按位異或雙目9從左至右|按位或雙目10從左至右838、位運(yùn)算符
位邏輯運(yùn)算符是以數(shù)據(jù)的二進(jìn)制數(shù)位進(jìn)行運(yùn)算,位移動(dòng)運(yùn)算是按二進(jìn)制位數(shù)進(jìn)行左移和右移。(1)位邏輯運(yùn)算ab~
a(按位取反)a&b(按位與)a|b(按位或)a^b(按位異或)110110100011011011001000848、位運(yùn)算符1)按位取反按位取反,運(yùn)算符為“~”。把該運(yùn)算對(duì)象的每個(gè)二進(jìn)制位取反。例如,~5,運(yùn)算如下(只列出了最低的8個(gè)二進(jìn)制位):~0000010111111010858、位運(yùn)算符2)按位與按位與,運(yùn)算符為“&”。常用來對(duì)某些二進(jìn)制位清0或保留某些二進(jìn)制位。在需要清0的位置上,將與它進(jìn)行與運(yùn)算的運(yùn)算對(duì)象的對(duì)應(yīng)的二進(jìn)制位置0,需要保留原值的位置,則將對(duì)應(yīng)的二進(jìn)制位置1。例如,要保留155的最低3位不變,其余置0,可用155&7來實(shí)現(xiàn),運(yùn)算如下(只列出了最低的8個(gè)二進(jìn)制位):10011011(155的二進(jìn)制形式)&00000111(7的二進(jìn)制形式)00000011(結(jié)果為3)868、位運(yùn)算符3)按位或運(yùn)算符為“|”。通常用來對(duì)某些二進(jìn)制位置1或保留某些二進(jìn)制位。在需要置1的位置上,將與它進(jìn)行或運(yùn)算的運(yùn)算對(duì)象的對(duì)應(yīng)的二進(jìn)制位置1,需要保留原值的位置,則將對(duì)應(yīng)的二進(jìn)制位置0。例如,要保留129的最低3位不變,其余置1,可用129|248來實(shí)現(xiàn),運(yùn)算如下(只列出了最低的8個(gè)二進(jìn)制位):10000001(129的二進(jìn)制形式)|11111000(248的二進(jìn)制形式)11111001(結(jié)果為249)878、位運(yùn)算符4)按位異或按位異或,運(yùn)算符為“^”。兩個(gè)運(yùn)算對(duì)象中對(duì)應(yīng)的二進(jìn)制位相同(都是1或都是0),則該位結(jié)果為0;不相同則結(jié)果為1。例如,155^129,運(yùn)算如下(只列出了最低的8個(gè)二進(jìn)制位):10011011(155的二進(jìn)制形式)^10000001(129的二進(jìn)制形式)00011010(結(jié)果為26)888、位運(yùn)算符(2)位移動(dòng)運(yùn)算語法格式:運(yùn)算數(shù)據(jù)位移動(dòng)運(yùn)算符移動(dòng)位數(shù)①左移位,運(yùn)算符為“<<”。把左邊的運(yùn)算數(shù)據(jù)的全部向左移指定的位數(shù),高位丟棄,低位補(bǔ)0。例如,a的值為5,a<<2
把a(bǔ)的二進(jìn)制位全部向左移動(dòng)2位,
即00000101左移2位后為00010100(
相當(dāng)于a乘以22。898、位運(yùn)算符(2)位移動(dòng)運(yùn)算②右移位,運(yùn)算符為“>>”。把左邊的運(yùn)算數(shù)據(jù)的全部向右移指定的位數(shù),低位丟棄,對(duì)于正數(shù),高位補(bǔ)0,負(fù)數(shù)的符號(hào)位為1,最高位補(bǔ)1還是補(bǔ)0取決于編譯器,多數(shù)情況是補(bǔ)1。例如,a的值為15,a>>2
是把a(bǔ)的二進(jìn)制位全部向右移動(dòng)2位,即15的二進(jìn)制00001111右移2位后為00000011(十進(jìn)制數(shù)為3),相當(dāng)于a除以22取整。909、其他運(yùn)算符
sizeof()運(yùn)算符,單目運(yùn)算,第2優(yōu)先級(jí),結(jié)合方向是從右至左。一般形式:
sizeof(變量名|數(shù)據(jù)類型標(biāo)識(shí)符|表達(dá)式)功能:計(jì)算該數(shù)據(jù)類型變量所占的字節(jié)數(shù)。例:
inta=5;floatx=3.2,y=6.4;
sizeof(a)
值為:4(在TURBOC中為2)
sizeof(char)
值為:1
sizeof(x+y)
值為:4
sizeof(double)
值為:8 912.3.2表達(dá)式表達(dá)式:用運(yùn)算符和括號(hào)將運(yùn)算對(duì)象(也稱操作數(shù))連接起來的、符合C語法規(guī)則的式子,稱為C表達(dá)式。運(yùn)算對(duì)象包括常量、變量、函數(shù)等。其中,單個(gè)的常量、變量、函數(shù)也稱為表達(dá)式。表達(dá)式運(yùn)算后只會(huì)產(chǎn)生一個(gè)結(jié)果,該結(jié)果是具有某種數(shù)據(jù)類型的數(shù)值。C語言中,運(yùn)算是自左向右的,運(yùn)算符執(zhí)行順序通常由運(yùn)算符的優(yōu)先級(jí)和結(jié)合方向控制。優(yōu)先級(jí)較高的運(yùn)算符先于優(yōu)先級(jí)較低的執(zhí)行,如生活中常說的先乘除后加減。結(jié)合方向則控制具有相同優(yōu)先級(jí)的多個(gè)運(yùn)算符的執(zhí)行順序。922.3.3類型轉(zhuǎn)換C語言提供了3種類型轉(zhuǎn)換方式:自動(dòng)轉(zhuǎn)換、強(qiáng)制轉(zhuǎn)換賦值轉(zhuǎn)換。93說明:這種類型轉(zhuǎn)換是由系統(tǒng)自動(dòng)進(jìn)行的。必定的轉(zhuǎn)換轉(zhuǎn)換的方向例如:3.27+201用double類型的加法運(yùn)算1、自動(dòng)轉(zhuǎn)換(也稱隱式類型轉(zhuǎn)換)94例如:
inti=1;charch=‘A’;floatx=3.5f;doubley=7.8;表達(dá)式(i*ch)+(x/y)-(y-ch)的數(shù)據(jù)類型。intdoubledoubledoubledouble952.3.3類型轉(zhuǎn)換例如,設(shè)folatx=7.5;則x%3顯然不符合要求,因?yàn)橹荒軐?duì)整型數(shù)據(jù)進(jìn)行取余運(yùn)算,所以需要用到強(qiáng)制類型轉(zhuǎn)換,(int)x%3即7%3。2、強(qiáng)制類型轉(zhuǎn)換(也稱顯式轉(zhuǎn)換)
是用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符將運(yùn)算對(duì)象轉(zhuǎn)換為需要的數(shù)據(jù)類型。
一般形式:
(目標(biāo)類型說明符)(表達(dá)式)說明:表達(dá)式應(yīng)該用括號(hào)括起來。在強(qiáng)制類型轉(zhuǎn)換時(shí),得到一個(gè)所需類型的中間變量,原來變量的類型未發(fā)生變化。962.3.3類型轉(zhuǎn)換3、賦值時(shí)的類型轉(zhuǎn)換當(dāng)左右類型不一致時(shí),需要進(jìn)行類型轉(zhuǎn)換,將右邊的類型轉(zhuǎn)換為左邊的類型,這種轉(zhuǎn)換系統(tǒng)自動(dòng)進(jìn)行。實(shí)型數(shù)據(jù)→整型:直接取整,舍棄小數(shù)部分。字符型或整型數(shù)據(jù)→實(shí)型:數(shù)值不變,補(bǔ)足相應(yīng)的有效位數(shù)。單精度實(shí)型→雙精度實(shí)型:數(shù)值不變,有效位數(shù)擴(kuò)展到16位,以8個(gè)字節(jié)存儲(chǔ);雙精度實(shí)型賦值給單精度實(shí)型時(shí),只截取前面7位有效數(shù)字,以4個(gè)字節(jié)存儲(chǔ)。字符型→整型:將ASCII碼值賦給最低的8位。整型→字符型:只截取最低的8位賦給字符型變量。972.3.3類型轉(zhuǎn)換3、賦值時(shí)的類型轉(zhuǎn)換
int或long類型數(shù)據(jù)→short類型變量:只截取最低的16位賦給short類型變量;short類型數(shù)據(jù)→
int或long類型變量:將數(shù)據(jù)直接賦給最低的16位,其余位按原short類型的最高位擴(kuò)展,全部補(bǔ)0或全部補(bǔ)1。unsigned類型數(shù)據(jù)→長(zhǎng)度相同的非unsigned類型變量時(shí),直接傳送數(shù)據(jù);非unsigned類型數(shù)據(jù)→長(zhǎng)度相同的unsigned類型變量時(shí),連符號(hào)位一起作為數(shù)值進(jìn)行數(shù)據(jù)賦值。982.4標(biāo)準(zhǔn)輸入/輸出(一)所謂輸入輸出是以計(jì)算機(jī)主機(jī)為主體而言的。輸出:從計(jì)算機(jī)向外部輸出設(shè)備(顯示器,打印機(jī))輸出數(shù)據(jù)。輸入:從輸入設(shè)備(鍵盤,鼠標(biāo),掃描儀)向計(jì)算機(jī)輸入數(shù)據(jù)。(二)C語言本身不提供輸入輸出語句,輸入和輸出操作是由C函數(shù)庫中的函數(shù)來實(shí)現(xiàn)的。(三)在使用系統(tǒng)庫函數(shù)時(shí),要用預(yù)編譯命令#include將有關(guān)的“頭文件”包括到用戶源文件中。
#include<stdio.h>或#include“stdio.h”992.4.1printf()函數(shù)
printf()函數(shù)稱為格式化輸出函數(shù),它能夠按用戶指定的格式輸出多種類型的數(shù)據(jù)。
一般格式為:
printf(“格式控制字符串”,輸出列表);
例如:printf(”i=%d,c=%c\n”,i,c);普通字符可以是常量、變量或表達(dá)式1002.4.1printf()函數(shù)printf函數(shù)的參數(shù)包括兩部分:(1)“格式控制”是用雙撇號(hào)括起來的字符串,也稱
“轉(zhuǎn)換控制字符串”。(2)“輸出表列”是需要輸出的一些數(shù)據(jù),可以是
常量、變量或表達(dá)式。1012.4.1printf()函數(shù)
(1)“格式控制”是用雙撇號(hào)括起來的字符串,也稱“轉(zhuǎn)換控制字符串”,它包括三種信息。①格式說明。格式說明由“%”和格式字符組成,如%d、%f等。它的作用是將輸出的數(shù)據(jù)轉(zhuǎn)換為指定的格式輸出。格式說明總是由“%”字符開始的。
②普通字符。普通字符即需要原樣輸出的字符。例如上面printf函數(shù)中雙撇號(hào)內(nèi)的逗號(hào)、空格。
③轉(zhuǎn)義字符:無法用單個(gè)字符描述的一些特定操作,如\n(換行)、\t(跳到下一個(gè)水平制表位)等。1022.4.1printf()函數(shù)格式字符含義d以十進(jìn)制形式輸出帶符號(hào)整數(shù)(默認(rèn)正數(shù)不輸出符號(hào))o以八進(jìn)制形式輸出無符號(hào)整數(shù)(默認(rèn)不輸出前綴0)x或X以十六進(jìn)制形式輸出無符號(hào)整數(shù)(默認(rèn)不輸出前綴0x)u以十進(jìn)制形式輸出無符號(hào)整數(shù)f以小數(shù)形式輸出單、雙精度實(shí)數(shù)e或E以指數(shù)形式輸出單、雙精度實(shí)數(shù)g或G以%f或%e中輸出寬度較短的形式輸出單、雙精度實(shí)數(shù)c輸出單個(gè)字符s輸出字符串1032.4.1printf()函數(shù)//printf()函數(shù)的使用示例。#include<stdio.h>voidmain(){charch=’a’;
printf("ch=%d,thecapital:%c\n",ch,ch-32);
}
運(yùn)行結(jié)果:ch=97,thecapital:A1042.4.1printf()函數(shù)基本的格式字符有以下幾種:⑴d格式符。按十進(jìn)制整型數(shù)據(jù)的實(shí)際長(zhǎng)度輸出。
⑵i格式符。作用與d格式符相同,按十進(jìn)制整型數(shù)據(jù)的實(shí)際長(zhǎng)度輸出。一般習(xí)慣用%d而少用%i。⑶c格式符。用來輸出一個(gè)字符。
一個(gè)值在0~255范圍內(nèi)的整數(shù),也可以用“%c”使之按字符形式輸出。
1052.4.1printf()函數(shù)⑷s格式符,用來輸出一個(gè)字符串。
例:
printf
(″%s″,″CHINA″);
輸出字符串“CHINA”(不包括雙引號(hào))⑸f格式符。用來輸出實(shí)數(shù)(包括單、雙精度),以小數(shù)形式輸出,不指定整個(gè)字段的長(zhǎng)度,由系統(tǒng)自動(dòng)指定。一般的處理方法是:整數(shù)部分全部輸出,并輸出6位小數(shù)。注意:在輸出的數(shù)字中并非全部數(shù)字都是有效數(shù)字。單精度實(shí)數(shù)的有效位數(shù)一般為6-7位,雙精度實(shí)數(shù)的有效位數(shù)一般為15-16位。1062.4.1printf()函數(shù)(6)e格式符,用格式說明%e指定以指數(shù)形式輸出實(shí)數(shù)。例:printf(″%e″,123.456);輸出如下
1.234560
e+0026列5列C編譯系統(tǒng)自動(dòng)指定給出數(shù)字部分的小數(shù)位數(shù)為6位,指數(shù)部分占5位。1072.4.1printf()函數(shù)完整的格式說明部分還可以加入一些修飾符,形式為:
%[標(biāo)志][域?qū)抅[.精度][長(zhǎng)度]格式字符(1)標(biāo)志:可使用-、+、空格、#和0共5種標(biāo)志字符
標(biāo)志字符含義-結(jié)果左對(duì)齊,數(shù)據(jù)長(zhǎng)度小于域?qū)挄r(shí)右邊補(bǔ)充空格+輸出符號(hào)(正號(hào)或負(fù)號(hào))空格輸出值為正數(shù)且沒有輸出正號(hào)時(shí)冠以空格#只對(duì)部分類型格式字符有影響;對(duì)o類,在輸出時(shí)加前綴0;對(duì)x類,在輸出時(shí)加前綴0x;對(duì)e,g,f
類當(dāng)結(jié)果有小數(shù)時(shí)才顯示出小數(shù)點(diǎn)0數(shù)據(jù)長(zhǎng)度小于域?qū)挄r(shí),不足位數(shù)用0補(bǔ)充1082.4.1printf()函數(shù)(2)域?qū)挘褐付〝?shù)據(jù)顯示在輸出設(shè)備上所占的總寬度。若數(shù)據(jù)的實(shí)際位數(shù)多于指定寬度,則按實(shí)際位數(shù)輸出;若實(shí)際位數(shù)少于指定寬度,則數(shù)據(jù)通常會(huì)在指定寬度內(nèi)右對(duì)齊,不足部分以空格補(bǔ)齊。(3)精度:以“.”開頭,其意義是:如果輸出值為整數(shù),則輸出數(shù)字的最少個(gè)數(shù),若位數(shù)少于指定精度,就在整數(shù)前面加0,補(bǔ)齊指定的最小數(shù)字個(gè)數(shù);如果輸出值為實(shí)數(shù),則表示小數(shù)的位數(shù),默認(rèn)為6位;如果輸出的是字符串,則只取字符串中左端n個(gè)字符。注意,若實(shí)際位數(shù)大于所定義的精度數(shù),則截去超過的部分,對(duì)小數(shù)部分四舍五入。(4)長(zhǎng)度:長(zhǎng)度格式符為h,l兩種,h表示按短整型輸出,l表示按長(zhǎng)整型輸出。1092.4.1printf()函數(shù)//格式輸出示例。{
inta=123;floatb=123.1234567;doublec=12345678.1234567;charch='f';
printf("a=%d,%8.5d,%08d,%o,%#x\n",a,a,a,a,a,a);printf("b=%f,%-10.3f,%e,%g\n",b,b,b,b);printf("c=%f,%8.4f,%g\n",c,c,c);
printf("ch=%c,%8c\n",ch,ch);printf("%s,%.4s\n","abcdef","abcdef");}
1102.4.1printf()函數(shù)注意:使用printf()函數(shù)時(shí)輸出順序是從左到右,但是輸出列表中的各輸出項(xiàng)的求值順序,不同的編譯器不一定相同,VisualC++是按從右到左進(jìn)行的。printf()函數(shù)還可以只有格式控制字符串而沒有輸出項(xiàng)。
//輸出項(xiàng)求值順序示例{
inta=5;printf("a=%d,a=%d\n",a=a+1,a=a+2);}
運(yùn)行結(jié)果:a=8,a=71112.4.2scanf()函數(shù)
scanf()函數(shù)稱為格式化輸入函數(shù),即按用戶指定的格式從鍵盤上把數(shù)據(jù)輸入到指定的變量中。一般格式為:
scanf(“格式控制字符串”,地址列表);
含義同printf函數(shù)可以是變量的地址,或字符串的首地址int
a,b,c;scanf(“%d%d%d”,&a,&b,&c);printf("a=%d,b=%d,c=%d\n",a,b,c);345↙a=3,b=4,c=51122.4.2scanf()函數(shù)格式字符串由%和格式字符組成,還可以加入一些可選項(xiàng)。一般形式為:
%[*][輸入數(shù)據(jù)寬度][長(zhǎng)度]格式字符(1)格式字符:指定輸入數(shù)據(jù)的類型。格式字符含義(輸入類型)d輸入十進(jìn)制整數(shù)o輸入八進(jìn)制整數(shù)(可以以0開頭,也可以不以0開頭)u輸入無符號(hào)十進(jìn)制整數(shù)x輸入十六進(jìn)制整數(shù)(可以以0x或0X開頭,也可以不以此開頭)f、e、g輸入實(shí)數(shù)(用小數(shù)形式或指數(shù)形式,符號(hào)和小數(shù)部分可選)c輸入單個(gè)字符(輸入時(shí)不加單引號(hào))s輸入字符串(輸入時(shí)不加雙引號(hào))1132.4.2scanf()函數(shù)(2)*:表示該輸入項(xiàng),讀入后不賦予相應(yīng)的變量,即跳過該輸入值。例如:scanf("%d%*d%d",&a,&b);
當(dāng)輸入為:123時(shí),把1賦予a,2被跳過,3賦予b。(3)輸入寬度:用十進(jìn)制整數(shù)指定輸入的寬度(即字符數(shù))。例如:scanf("%5d",&a);
輸入:12345678只截取前5位12345賦予變量a。又如:scanf("%4d%4d",&a,&b);
輸入:12345678將把1234賦予a,而5678賦予b。(4)長(zhǎng)度:長(zhǎng)度格式符為l和h,l表示輸入長(zhǎng)整型數(shù)據(jù)(如%ld)和雙精度實(shí)型數(shù)(如%lf)。h表示輸入短整型數(shù)據(jù)。1142.4.2scanf()函數(shù)使用scanf()函數(shù)容易與printf()函數(shù)混淆,注意
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 新版五年級(jí)英語下冊(cè)教案
- 上課遲到檢討書(合集15篇)
- 行業(yè)調(diào)研報(bào)告匯編4篇
- 中考熱點(diǎn)素材集合15篇
- 電子公司實(shí)習(xí)報(bào)告匯編7篇
- 《呼蘭河傳》讀書筆記(15篇)
- 邊城讀書筆記(15篇)
- 喹諾酮類抗菌藥物合理使用的理性思考
- 七年級(jí)地理教學(xué)工作計(jì)劃范例(20篇)
- 入伍保留勞動(dòng)關(guān)系協(xié)議書(2篇)
- 2024版帶貨主播電商平臺(tái)合作服務(wù)合同范本3篇
- 2025公司資產(chǎn)劃轉(zhuǎn)合同
- 2024-2030年中國(guó)鋁汽車緊固件行業(yè)銷售規(guī)模與盈利前景預(yù)測(cè)報(bào)告
- 廣東省清遠(yuǎn)市2023-2024學(xué)年高一上學(xué)期期末質(zhì)量檢測(cè)物理試題(解析版)
- 2024-2025學(xué)年人教版數(shù)學(xué)五年級(jí)上冊(cè)期末檢測(cè)試卷(含答案)
- 《外盤期貨常識(shí)》課件
- 【MOOC】土力學(xué)-西安交通大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 工程設(shè)計(jì)-《工程勘察設(shè)計(jì)收費(fèi)標(biāo)準(zhǔn)》(2002年修訂本)-完整版
- 2024年展覽主場(chǎng)服務(wù)合同
- 工廠銑工安全培訓(xùn)課件
- 餐飲組織架構(gòu)圖(完整版)-20210618215128
評(píng)論
0/150
提交評(píng)論