




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
TurboC語言概述§1.1C語言的產(chǎn)生與發(fā)展C語言是1972年由美國的DennisRitchie設(shè)計(jì)發(fā)明的,并首次在UNIX操作系統(tǒng)的DECPDP-11計(jì)算機(jī)上使用。發(fā)展演變過程:1960年ALGOL60(面向?qū)ο蟮母呒壵Z言,離硬件較遠(yuǎn),不易編寫系統(tǒng)程序)→1963年CPL(較ALGOL接近硬件,規(guī)模較大,難以實(shí)現(xiàn))→1967年BCPL(對CPL簡化形成)
→1970年B(對CPL簡化形成,簡單且接近硬件)
→1972年C.
隨著微機(jī)的日益普及,出現(xiàn)了許多C語言版本。美國國家標(biāo)準(zhǔn)研究所(ANSI)為C語言制定了一套ANSI標(biāo)準(zhǔn),成為現(xiàn)行的C語言標(biāo)準(zhǔn)。§1.2C語言的特點(diǎn)
C語言發(fā)展如此迅速,而且成為最受歡迎的語言之一,主要因?yàn)樗哂袕?qiáng)大的功能。歸納起來C語言具有下列特點(diǎn):
C是中級語言C是結(jié)構(gòu)化語言
C語言功能強(qiáng)大
C語言可移植性好C語言使用靈活
C是中級語言
它把高級語言的基本結(jié)構(gòu)和語句與低級語言的實(shí)用性結(jié)合起來。C語言可以象匯編語言一樣對硬件端口和物理地址的位、字節(jié)和地址進(jìn)行操作,而這三者是計(jì)算機(jī)最基本的工作單元。返回
C是結(jié)構(gòu)化語言
結(jié)構(gòu)式語言的顯著特點(diǎn)是代碼及數(shù)據(jù)的分隔化,即程序的各個(gè)部分除了必要的信息交流外彼此獨(dú)立。這種結(jié)構(gòu)化方式可使程序?qū)哟吻逦?,便于使用、維護(hù)以及調(diào)試。C語言是以函數(shù)形式提供給用戶的,這些函數(shù)可方便的調(diào)用,并具有多種循環(huán)、條件語句控制程序流向,從而使程序完全結(jié)構(gòu)化。返回
C語言功能強(qiáng)大
C語言支持多達(dá)34種運(yùn)算符和多種數(shù)據(jù)類型,并引入了指針概念,可使程序的編制效率更高。另外C語言也具有強(qiáng)大的圖形功能,支持多種顯示器和驅(qū)動(dòng)器。而且計(jì)算功能、邏輯判斷功能也比較強(qiáng)大,可以實(shí)現(xiàn)決策目的。返回
C語言可移植性好
C語言還有一個(gè)突出的優(yōu)點(diǎn)就是適合于多種操作系統(tǒng),如DOS、UNIX,也適用于多種機(jī)型?;旧喜蛔魅魏涡薷木涂梢栽诟鞣N型號的計(jì)算機(jī)和操作系統(tǒng)上使用。返回
C語言使用靈活
C語言書寫簡潔、緊湊,使用靈活方便,語法的限制較其它語言寬松,程序設(shè)計(jì)時(shí)的自由度大。生成的目標(biāo)代碼質(zhì)量高執(zhí)行效率高。返回§1.3簡單的C程序概述
本節(jié)首先介紹C程序的基本組成部分;
然后分析TurboC的有關(guān)特征。通過本節(jié)的學(xué)習(xí),可以對C語言程序有一個(gè)初步認(rèn)識。1.3.1.TurboC程序的一般組成部分
TurboC2.0象其它語言一樣按其規(guī)定的格式和提供的語句由用戶編寫應(yīng)用程序。請看下面一段TurboC源程序。
【例1】
/*Exampleprogram1ofTurboC*/main()/*主函數(shù)定義*/
{/*函數(shù)體{}*/
printf(“Thisisacprogram.\n”);}
【例2】
/*Example2:thesumofNo.aaddNo.b*/main()/*主函數(shù)定義*/
{
inta,b,sum;/*定義變量*/a=123;b=456;sum=a+b;
printf(“thesumis%d”,sum);}
【例3】
/*Example3:函數(shù)調(diào)用*/main()/*主函數(shù)定義*/{inta,b,c;/*聲明部分,定義變量*/
scanf(“%d,%d”,&a,&b);c=max(a,b);/*函數(shù)調(diào)用*/
printf(“max=%d”,c);}
intmax(intx,inty)/*定義max函數(shù),值、形參x,y均為int型*/{intz;/*聲明部分,定義本函數(shù)中變量z*/if(x>y)z=x;elsez=y;return(z);/*返回調(diào)用函數(shù)據(jù)*/}TurboC源程序基本結(jié)構(gòu)組成:C源程序組成:C源程序由函數(shù)組成一個(gè)C程序可由若干個(gè)函數(shù)組成:有且只有一個(gè)主函數(shù)main函數(shù)和多個(gè)子函數(shù),每個(gè)函數(shù)完成一定功能。函數(shù)是C程序的基本單位。被調(diào)用函數(shù)可以是系統(tǒng)提供的庫函數(shù)(如:scanf,printf),也可是用戶編制的函數(shù)。C是函數(shù)式的語言,編寫C程序就是編寫一個(gè)個(gè)函數(shù)。容易實(shí)現(xiàn)程序的模塊化;函數(shù)組成:函數(shù)的首部和函數(shù)體
①函數(shù)首部:函數(shù)類型函數(shù)名函數(shù)屬性函數(shù)參數(shù)(形參)名參數(shù)類型如:max函數(shù)首部:intmax(intx,inty)
說明:函數(shù)名后必須跟一對(),形參可無。
②函數(shù)體:最外層一對{…}內(nèi)的部分。函數(shù)體包括:
聲明部分:定義所用到的變量執(zhí)行部分:由若干語句組成說明:函數(shù)可無聲明部分,或即無聲明部分又無執(zhí)行部分
如:dump(){}/*dump為空函數(shù),又稱啞函數(shù)*/C程序執(zhí)行:總是從main函數(shù)執(zhí)行,不論main函數(shù)在程序中位置如何;C程序書寫格式:一般用小寫字母書寫;語句數(shù)據(jù)定義結(jié)尾必須要用“;”作為終止符;
C語言無輸入輸出語句,輸入輸出操作由輸入輸出庫函數(shù)scanf.printg等實(shí)現(xiàn);注釋部分包含在“/*……*/”之間,在編譯時(shí)它被TurboC編譯器忽略。說明:1.TurboC的變量在使用之前必須先定義其數(shù)據(jù)類型,未經(jīng)定義的變量不能使用。2.在TurboC中,大、小寫字母是有區(qū)別的3.TurboC程序的書寫格式非常靈活,沒有嚴(yán)格限制。例如:
main(){charc;clrscr();gotoxy(12,3);puts("WelcometouseTurboC2.0!");gotoxy(15,13);
printf("<CR>--Continue");gotoxy(15,15);...}
這樣寫語法上沒有錯(cuò)誤,但閱讀起來不方便,同時(shí)也使得程序?qū)哟尾幻鞔_。建議在使用TurboC編程時(shí),一行只寫一條語句,遇到嵌套語句向后縮進(jìn),必要時(shí)對程序加上注釋行。這樣可以使程序結(jié)構(gòu)清楚、易于閱讀、維護(hù)和修改。通過以上介紹,得出TurboC源程序的一般形式為:
main(){
局部變量定義
<程序體>}
sub1(){局部變量定義
<程序體>}……
subN(){
局部變量定義
<程序體>}其中sub1(),...,subN()代表用戶定義的子函數(shù),程序體指TurboC2.0提供的任何庫函數(shù)調(diào)用語句、控制流程語句或其它用子函數(shù)調(diào)用語句等。第二章算法程序應(yīng)包括兩方面內(nèi)容:
⑴對數(shù)據(jù)的描述:指定數(shù)據(jù)的類型和數(shù)據(jù) 組織形式,即數(shù)據(jù)結(jié)構(gòu)
⑵對操作的描述:操作步驟,即算法
沃爾思提出:程序=算法+數(shù)據(jù)結(jié)構(gòu)+程序設(shè)計(jì)方法+語言工具和環(huán)境
算法:是靈魂數(shù)據(jù)結(jié)構(gòu):加工對象語言:工具算法:解決“做什么”“怎么做”程序中的操作語句是算法的實(shí)現(xiàn)§2.1算法的概念算法:為解決一個(gè)問題而采取的方法和步驟.計(jì)算機(jī)算法分類:
數(shù)值運(yùn)算法:目的是求數(shù)值解非數(shù)值運(yùn)算法:常用于事務(wù)管理領(lǐng)域§2.2簡單算法舉例例2.1求1*2*3*4*5⑴原始算法:s1:1*2;s2:2*3s3:6*4;s4:24*5結(jié)束⑵循環(huán)算法:設(shè)變量p代表被乘數(shù),i代表乘數(shù),將每一步驟的乘積放在p中.
s1:p=1;s2:i=2;
s3:p*i→p;s4:i+1→i;s5:若i≤5,返回s3→s5
若I>5,則P=5!結(jié)束
循環(huán)條件:i≤5例2.2有50個(gè)學(xué)生,要將他們之中成績在80分以上者打印出來.變量:n:學(xué)生學(xué)號ni:第i個(gè)學(xué)生學(xué)號
g:學(xué)生成績gi:第i個(gè)學(xué)生成績算法:s1:1→i;/*i控制序號*/s2:gi≥80,打印:
ni,gi;否則:不打印
s3:i+1→i;s4:i≤50,返回s2
i≥50,
結(jié)束.例2.3判斷2000-2500年中的每一年是否為閏年
閏年條件:①能被4整除,但不能被100整除如:1996
或②能被100整除,又能被400整除如:2000
算法:設(shè)Y為年份
s1:2000→y;s2:判斷:若y不能被4整除,則輸出y“不是閏年”,
轉(zhuǎn)至s6,取下一年判斷;
s3:判斷:若y能被4整除,不能被100整除則輸出y“是閏年”,轉(zhuǎn)至s6;s4:判斷:若y能被100整除,又能被400整除
則輸出y“是閏年”,否則輸出y“不是閏年”.轉(zhuǎn)至s6;s5:其他情況:輸出y“不是閏年”;
s6:y+1→ys7:當(dāng)y≤2500時(shí),轉(zhuǎn)s2繼續(xù),
當(dāng)y>2500時(shí),結(jié)束.例2.4求1-1/2+1/3-1/4+…+1/99-1/100分析:本題為求累加和.每項(xiàng)變化規(guī)律:符號正負(fù)相間,分母從1—100變量設(shè)置:sign:數(shù)值符號,sum:累加和,deno:分母,term:某一項(xiàng).S1:sign=1/*預(yù)設(shè)符號1*/
s2:sum=1/*第一項(xiàng)放入sum中*/
s3:deno=2 /*分母值預(yù)置為2*/
s4:sign=(-1)*sign /*第i+1項(xiàng)sign值*/
s5:term=sign*(1/deno) /*求級數(shù)中某項(xiàng)值*/
s6:sum=sum+term /*將本項(xiàng)加入累加器*/
s7:deno=deno+1 /*分母按規(guī)律遞減*/
s8:判斷:deno
≤100返回s4
deno>100結(jié)束.例2.5對一個(gè)大于或等于3的正數(shù),判斷它是否為素?cái)?shù)S1:輸入n值
s2:i=2 /*i為除數(shù)*/s3:n/i得余數(shù)rs4:判斷:r=0,n能被i數(shù)整除,結(jié)論:n不是素?cái)?shù),結(jié)束.
r≠0,n不能被i數(shù)整除,繼續(xù)
s5:i+1→is6:當(dāng)i≤
n-1(或i≤
n/2,
i≤
sqrt(n))時(shí),轉(zhuǎn)s3繼續(xù),
當(dāng)i=n時(shí):所有除數(shù)比較完畢:結(jié)論:n是素?cái)?shù),結(jié)束.素?cái)?shù):除1和該數(shù)本身外,不能被其他任何數(shù)整除的數(shù).n(≥3)是否素?cái)?shù):將n作被除數(shù),用2~(n-1)[或2~n/2,2~sqrt(n)]輪流除n,若都不能整除,則n是素?cái)?shù).§2.2算法的特點(diǎn)
有窮性:一個(gè)算法應(yīng)包含有限的操作步驟確定性:算法中的每一個(gè)步驟應(yīng)當(dāng)是確定的,應(yīng)當(dāng)不被解釋成不同的含義,而應(yīng)是十分明確無誤的.有零個(gè)或多個(gè)輸入輸入指執(zhí)行算法時(shí)需從外界取得的信息.有零個(gè)或多個(gè)輸出:“解”既輸出.有效性:指算法中每一步驟應(yīng)當(dāng)有效執(zhí)行,并得到確定的值.§2.4怎樣表示一個(gè)算法
常用方法:自然語言傳統(tǒng)流程圖 結(jié)構(gòu)化流程圖偽代碼PAD圖等§2.4.1用自然語言表示算法§2.4.2用流程圖表示算法
常用流程圖符號起止框
輸入輸出框 判斷框 處理框
或 流程線 連接線 注釋框用流程圖表示算法舉例例2.6求5!i+1→i結(jié)束2→
it*i→t開始1→
ti>5打印tNY例2.7將50名學(xué)生中成績在80分以上者的學(xué)號和成績打印輸出.流程圖:i+1→i輸入ni,gi1→
i開始i>50ANYi+1→igi≥80
A1→
i打印ni,gii>50結(jié)束NYNY輸入學(xué)生數(shù)據(jù)判斷并輸出結(jié)果例2.8判斷閏年算法流程圖:y不能被400整除打印y“不是閏年”y不能被4整除NY開始y不能被100整除打印y“是閏年”打印y“不是閏年”打印y“是閏年”y+1→yy>2500開始2000→
tYNNYNY例2.9求1-1/2+1/3-1/4+…+1/99-1/100算法流程圖流程圖:開始1→
sum2→
deno1→
signAA(-1)*sign→signsign*(1/deno)→termsum+term→sumdeno+1→
denodeno>100結(jié)束NY例2.10判斷素?cái)?shù)的算法流程圖流程圖:開始輸入n2→
ir=0?n/i的余數(shù)→ri+1→ii>sqrt(n)?打印n“是素?cái)?shù)”打印n“不是素?cái)?shù)”結(jié)束YNNY§2.4.3三種基本結(jié)構(gòu)⑴順序結(jié)構(gòu):⑵選擇結(jié)構(gòu)(分支結(jié)構(gòu))ABab成立不成立PABabPA成立不成立ab⑶
循環(huán)結(jié)構(gòu)當(dāng)型循環(huán)結(jié)構(gòu)直到型循環(huán)結(jié)構(gòu)P1Aab成立P1ab成立A不成立循環(huán)結(jié)構(gòu)舉例:打印5個(gè)數(shù):1,2,3,4,5當(dāng)型循環(huán)實(shí)現(xiàn)直到型循環(huán)實(shí)現(xiàn)0→x
X<5X+1→x
打印xNY0→x
X+1→x
打印xX≥5YN三種基本結(jié)構(gòu)的共同特點(diǎn):只有一個(gè)入口只有一個(gè)出口結(jié)構(gòu)內(nèi)的每一個(gè)部分都有機(jī)會(huì)被執(zhí)行到。對每一個(gè)框來說,都應(yīng)當(dāng)有一條從入口到出口的路徑通過它。結(jié)構(gòu)內(nèi)不存在“死循環(huán)”。P1A無路徑通過A框AB死循環(huán)§2.4.3用N-S流程圖表示算法N-S流程圖符號:⑴順序結(jié)構(gòu)⑵選擇結(jié)構(gòu)AB成立P不成立AB⑶當(dāng)型循環(huán)結(jié)構(gòu)直到型循環(huán)結(jié)構(gòu)當(dāng)P1成立A
A
直到P1成立說明:A、B框可以是一個(gè)簡單操作,也可以是三個(gè)基本結(jié)構(gòu)之一。N-S流程圖算法舉例求5!打印50名學(xué)生中成績高于80分的學(xué)號、成績1→t2→it*I→ti+1→i直到i>5打印t直到型循環(huán)1→
i輸入ni,gii+1→i直到>501→
i是gi≥80
否輸出ni,gii+1→I直到I>50選擇結(jié)構(gòu)直到型循環(huán)結(jié)構(gòu)直到型循環(huán)結(jié)構(gòu)N-S流程圖算法舉例判斷閏年2000→
y是
y/4的余數(shù)為0
否是
y/100的余數(shù)不為0
否
是
y/400的余數(shù)為0
否“非閏年”“是閏年”“是閏年”“非閏年”
y+1→y
直到y(tǒng)>2500直到型循環(huán)選擇選擇§2.4.5結(jié)構(gòu)化程序設(shè)計(jì)方法結(jié)構(gòu)化程序:用高級語言表示的結(jié)構(gòu)化算法,這種程序便于編寫 、閱讀、維護(hù)和修改。結(jié)構(gòu)化程序方法:自頂向下、逐步細(xì)化、模塊化設(shè)計(jì)、結(jié)構(gòu)化編程。
自頂向下、逐步細(xì)化:先進(jìn)行總體規(guī)劃、再進(jìn)行各部的設(shè)計(jì),是將問題的求解由抽象逐步具體化的過程。模塊化設(shè)計(jì)方法:根據(jù)程序模塊的功能將它劃分為若干子模塊,子模塊可以劃分為更小的模塊,這個(gè)過程采用自頂向下的方法實(shí)現(xiàn)。第三章
數(shù)據(jù)類型、變量和運(yùn)算符
§1C的數(shù)據(jù)類型
在TurboC語言中,每個(gè)變量在使用之前必須定義其數(shù)據(jù)類型。TurboC的數(shù)據(jù)類型:
基本類型:整型(int)、字符型(char)、枚舉類型、實(shí)型(浮點(diǎn)型float、double)構(gòu)造類型:數(shù)組、結(jié)構(gòu)(struct)和聯(lián)合(共用體union)指針類型(*)空類型(void)§2常量、變量和標(biāo)識符
1.標(biāo)識符
標(biāo)識符:是用于標(biāo)識變量名、符號常量名、函數(shù)名、數(shù)組名、類型名和文件名的有效字符序列。標(biāo)識符組成:由字母、數(shù)字或下劃線組成,且第一個(gè)字符只能是字母或下劃線。標(biāo)識符之間的大小寫是被區(qū)分的。長度視機(jī)型而定,一般為8位。標(biāo)識符可以分成三類:
保留的關(guān)鍵字
由C語言本身使用,共有32個(gè),代表固定意義,由小寫字母組成,且不能用作用戶標(biāo)識符如變量名、函數(shù)名等由ANSI標(biāo)準(zhǔn)定義的共32個(gè)
autodoubleintstructbreakelselongswitchcaseenumregistertypedefcharexternreturnunionconstfloatshortunsignedcontinueforsignedvoiddefaultgotosizeofvolatiledoif
whilestatic
預(yù)定義標(biāo)識符
有特殊含義,如庫函數(shù)的名字和預(yù)處理命令等。系統(tǒng)允許用戶使用,但一般不推薦
用戶標(biāo)識符
用于命名常量、變量、函數(shù)和文件等。其命名原則如下:
1.所有標(biāo)識符必須由一個(gè)字母(a~z,A~Z)或下劃線(_)開頭;2.標(biāo)識符的其它部分可以用字母、下劃線或數(shù)字(0~9)組成;3.大小寫字母表示不同意義,即代表不同的標(biāo)識符;4.標(biāo)識符只有前32個(gè)字符有效;5.標(biāo)識符不能使用TurboC2.0的關(guān)鍵字。
下面舉出幾個(gè)正確和不正確的標(biāo)識符:正確
smart_decisionkey_boardFLOAT不正確5smartbomb?Key.boardfloat
2.常量和符號常量
常量:在程序運(yùn)行過程中,其值不能改變的量。
字面常量或直接常量:從字面形式即可判斷的常量。符號常量:用一個(gè)標(biāo)識符代表一個(gè)常量,符號常量的值在其作 用域內(nèi)不能改變或再賦值。常量和符號常量也有各自的數(shù)據(jù)類型。使用符號常量的長處:⑴含義清楚:定義符號常量時(shí)應(yīng)考慮見名知意⑵便于修改
例:整形常量:12,0,-3
實(shí)型常量:4.6,-1.23
字符常量:`a`,`b`例3.1:符號常量的使用
#definePRICE30 main() {intnum,total; num=10; total=num*PRICE; printf(“total=*d”,total); }3.變量
變量:在序運(yùn)行過程中,其值能夠改變的量稱為變量。一個(gè)變量必須有一個(gè)變量名,在內(nèi)存中占據(jù)一定大小的內(nèi)存單元。
3變量名變量值存儲單元a
使用要求:
⑴“先定義,后使用”
⑵每一變量指定為確定類型:便于編譯時(shí)為其分配相應(yīng)的存儲單元以及檢查該變量所行的運(yùn)算是否法§3整型數(shù)據(jù)(int)
1.整型常量
整型常量就是整型常數(shù)或稱為直接常量。
C的整型常數(shù)有三類:
Ⅰ.十進(jìn)制常數(shù):以非0開始的數(shù),如123,-342
Ⅱ.八進(jìn)制常數(shù):以0開頭的整型常數(shù)是八進(jìn)制數(shù)。 如0123,即(123)8=1x82+2x80=(83)10-011 即(-11)8
Ⅲ.十六進(jìn)制常數(shù):以0x開頭的整型常數(shù)是十六進(jìn)制數(shù)。 如0x123,既是(123)16=1x162+2x161+3x160=(291)10
另外,可在整型常數(shù)后添加一個(gè)"L"或"l"字母表示該數(shù)為長整型數(shù),如22L,0773L,0Xae4l。2.整型變量
1.整型數(shù)據(jù)在內(nèi)存中的存放形式
數(shù)據(jù)在內(nèi)存中以二進(jìn)制補(bǔ)碼的形式存放。數(shù)據(jù)所占的內(nèi)存大小與其類型有關(guān),每一基本類型整型變量在內(nèi)存中占2個(gè)字節(jié)。如:inti;i=10;數(shù)據(jù)存放示意圖i10數(shù)據(jù)在內(nèi)存中存放情況0000000000001010i正數(shù)補(bǔ)碼:同原碼 負(fù)數(shù)補(bǔ)碼:該數(shù)絕對值的二進(jìn)制形式按位取反再加1例:求-10的補(bǔ)碼:10的原碼:0000000000001010按位取反:-10的補(bǔ)碼:1111111111110101
1111111111110110
2.整型變量的分類
整型數(shù)類型:[signed]int,
[unsigned]
int
,
[signed]short[
int],[unsigned]short[
int
],
[signed]long[
int
],[unsigned]long[
int
]
整型變量類型:基本整型int
短整型short
長整型long
修飾符:short
long
signedunsigned(隱含為signed) signed變量存儲單元中最高位為符號位 unsigned變量存儲單元中全部位存放數(shù)本身例:inta;最大值0111111111111111=32767符號位最小值1000000000000000=-32768inta;最大值0111111111111111=65535數(shù)值位最小值0000000000000000=0ANSI標(biāo)準(zhǔn)定義的整數(shù)類型類型字節(jié)比特?cái)?shù)最小取值范圍[signed]int216-215~(215-1)[unsigned]int2160~(216-1)[signed]short[
int]216-215~(215-1)[unsigned]short[
int
]2160~(216-1)[signed]long[
int
]432-231~(231-1)[unsigned]long[
int
]4320~(232-1)
某一個(gè)類型的數(shù)據(jù)一旦超出了其表示范圍,就會(huì)發(fā)生數(shù)據(jù)溢出,這種錯(cuò)誤系統(tǒng)的語法檢查不能夠發(fā)現(xiàn)3.整型變量定義
C可以用下列語句定義整型變量
inta,b;
/*a、b被定義為有符號短整型變量*/
unsignedlongc;
/*c被定義為無符號長整型變量*/
例3.2main(){inta,b,c,d;/*a,b,c,d為整型變量*/ unsignedu; /*u為無符號整型變量*/
a=12;b=-24;u=10;
c=a+u;d=b+u;
printf(“a+u=%d,b+u=%d\n”,c,d); }4.整型常量的類型
(1)一個(gè)整數(shù)如果值在int或unsinged
int范圍內(nèi),就可以認(rèn)為是int或unsinged
int型,并且可以賦值給int、long或unsinged
int、unsingedlong型變量。
(2)一個(gè)整數(shù)如果值在long或unsingedlong范圍內(nèi),就可以認(rèn)為是long或unsingedlong型,并且可以賦值給long或unsingedlong型變量。
(3)常量沒有unsinged無符號類型,但一個(gè)正整數(shù)可以賦值給unsinged類型變量?!?實(shí)型(浮點(diǎn)型float)
1.實(shí)型常量的表示方法
指帶有小數(shù)部分的數(shù),又稱實(shí)數(shù),C語言中的浮點(diǎn)數(shù)是以十進(jìn)制數(shù)表示的,采用兩種形式(1)十進(jìn)制小數(shù)形式:由數(shù)字和小數(shù)點(diǎn)組成(必須有小數(shù)點(diǎn))。
如:(2)指數(shù)形式。由一個(gè)正整數(shù)的指數(shù)和一個(gè)1~10之間小數(shù)的尾數(shù)組成。
整數(shù).小數(shù)e指數(shù)3.141593.2159E62.實(shí)型變量
實(shí)型數(shù)據(jù)在內(nèi)存中的存放形式
實(shí)型數(shù)據(jù)在內(nèi)存中占4個(gè)字節(jié),共32位. 按指數(shù)形式存放:分成小數(shù)部分和指數(shù)部分分別存放。指數(shù)部分采用規(guī)格化的指數(shù)形式.
如:3.14159:+.314591數(shù)符+小數(shù).31459指數(shù)101X3.1459其小數(shù)部分位數(shù)越多則數(shù)據(jù)的精度越高但表示的范圍越小。其位數(shù)一般由編譯系統(tǒng)指定,一般的小數(shù)部分位數(shù)為24位,指數(shù)部分位數(shù)為8位,均包括符號位。
實(shí)型變量的分類
TurboC中有以下三種類型的浮點(diǎn)數(shù):float字長為4個(gè)字節(jié)共32位二進(jìn)制數(shù),數(shù)的范圍是10-37E~10+38E。有效數(shù)字6~7位。double字長為8個(gè)字節(jié)共64位二進(jìn)制數(shù),數(shù)的范圍是10-307E~10+308E。有效數(shù)字15~16位。doublefloat
字長為16個(gè)字節(jié)共128位二進(jìn)制數(shù),數(shù)的范圍是10-4931E~10+4932E。有效數(shù)字18~19位。
舍入誤差
由于實(shí)型變量用一個(gè)有限長度的內(nèi)存單元來存儲,其有效數(shù)字的位數(shù)是有限的,因而會(huì)產(chǎn)生誤差。編程時(shí)應(yīng)該避免與一個(gè)相比較非常小的數(shù)進(jìn)行算術(shù)運(yùn)算,或采取人為的控制措施。
【例】main() { floata,b; a=123456.789e5; b=a+20;
printf(“%f%f”,a,b); }
運(yùn)行結(jié)果:a,b均為12345678848.000000a,b為float,有效位為6-7位a理論值:12345678900有效位:1234567b理論值12345678920
有效位:12345677位以后的數(shù)字無意義的.3.浮點(diǎn)型變量的定義
可以用下列語句定義浮點(diǎn)型變量:
floata,f;
/*a,f被定義為單浮點(diǎn)型變量*/doubleb;
/*b被定義為雙浮點(diǎn)型變量*/說明:1.浮點(diǎn)常數(shù)只有一種進(jìn)制(十進(jìn)制)。
2.所有浮點(diǎn)常數(shù)都被默認(rèn)為double。
3.浮點(diǎn)數(shù)均為有符號浮點(diǎn)數(shù),沒有無符號浮點(diǎn)數(shù)。
4.絕對值小于1的浮點(diǎn)數(shù),其小數(shù)點(diǎn)前面的零可以省略。如:0.22可寫為.22, -0.0015E-3可寫為-.0015E-3。
5.TurboC默認(rèn)格式輸出浮點(diǎn)數(shù)時(shí),最多只保留小數(shù)點(diǎn)后六位。§5字符型(char)1.字符常量字符常量代表ASCII碼字符集里的一個(gè)字符字符的表示方法:圖形符號和轉(zhuǎn)義字符⑴
'字符的圖形符號':如'a','9','Z','+','A'
圖形符號指可打印字符,但‘,\,不能用此方法.⑵
‘轉(zhuǎn)義字符’:可表示任何可輸出字符
①轉(zhuǎn)義序列形式:“\圖形符號”:\n,\t,\b,\r,\f“\ddd”:ddd表示1~3位八進(jìn)制數(shù)字代表的字.“\xhh”:hh表示1~3位八進(jìn)制數(shù)字代表的字符,x為前綴,不能省.
如字符A(65)可表示為:‘A’,’\101’,’\x41’②單引號’.反斜線\字符必須用轉(zhuǎn)義序列表示.
單引號:’\’’,‘\047’或‘\47’,‘\47’
反斜線:’\\’,’\134’,’\x5c’③空字符:’\0’,’\000’ ASCII碼為空的字符,不是空白字符,它強(qiáng)調(diào)字符的類型為字符.表:轉(zhuǎn)義字符及其作用字符形式含義ASCII碼\n換行10\t水平制表(到下一tab位置)9\b退格(移到前一列)8\r回車(移到本行開頭)13\f換頁12\\字符\92\’字符’39\”字符”34\ddd1到3位8進(jìn)制數(shù)代表的字符\xhh1到2位16進(jìn)制數(shù)代表的字符【例】main(){
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);}/*此程序練習(xí)轉(zhuǎn)義字符的使用*/運(yùn)行結(jié)果:5 675672.字符變量的存儲及使用
字符變量在內(nèi)存中以其存儲字符的ASCII碼的二進(jìn)制值,存儲成一個(gè)字節(jié)的整型數(shù)。有符號字符型變量取值范圍為-128~127,無符號字符型變量取值范圍是0~255。如:a1=‘a(chǎn)’,a2=‘b’在內(nèi)存中存儲形式:(97)(98)97980110000101100010a1a2字符型與整型數(shù)據(jù)的通用字符型數(shù)據(jù)也將按整型數(shù)處理,如果某個(gè)變量定義成char,則表明該變量是有符號的,即它將轉(zhuǎn)換成有符號的整型數(shù)。在程序中一個(gè)字符型變量是可以等同為一個(gè)整型變量進(jìn)行運(yùn)算的,我們可以為字符型變量賦整型值,或?qū)⒅c整型變量一起運(yùn)算。C語言允許對整型變量賦以字符值,也允許對字符變量賦以整型值。 在輸出時(shí),允許把字符變量按整型量輸出,輸出格式為%d,也允許把整型量按字符量,輸出輸出格式為%c。 整型量為二字節(jié)量,字符量為單字節(jié)量,當(dāng)整型量按字符型量處理時(shí),只有低八位字節(jié)參與處理。【例】main(){chara,b;a=120;b=121;
printf("%c,%c\n%d,%d\n",a,b,a,b);}顯示程序結(jié)果:a,b120,121;
本程序中說明a,b為字符型,但在賦值語句中賦以整型值。從結(jié)果看,a,b值的輸出形式取決于printf函數(shù)格式串中的格式符,當(dāng)格式符為"c"時(shí),對應(yīng)輸出的變量值為字符,當(dāng)格式符為"d"時(shí),對應(yīng)輸出的變量值為整數(shù)?!纠縨ain(){chara,b;a=‘x';b='y';a=a-32;b=b-32;
printf("%c,%c\n%d,%d\n",a,b,a,b);}運(yùn)行結(jié)果:X Y 88 89
C語言允許字符變量參與數(shù)值運(yùn)算,即用字符的ASCII碼參與運(yùn)算。由于大小寫字母的ASCII碼相差32,因此運(yùn)算后把小寫字母換成大寫字母。然后分別以整型和字符型輸出。4.字符串常量
字符串常量是以一對雙引號括起來的字符序列。 如:“howdoyoudo”,“¥12345”和“a”等。 但沒有對應(yīng)的字符串變量。 特別注意:“a”和‘a(chǎn)’不是同一個(gè)常量,前者是字符串常量,而后者是字符常量。兩者不同的原因在于每個(gè)字符串常量的結(jié)尾,C語言系統(tǒng)會(huì)自動(dòng)的加上一個(gè)特殊字符‘\0’作為字符串的結(jié)束標(biāo)志。因此,字符串“a”中包含有兩個(gè)字符分別是‘a(chǎn)’和‘\0’。
特別注意:不要將字符串常量賦值給字符變量,或?qū)ψ址A亢妥址A孔麝P(guān)系運(yùn)算。字符串的存儲:字符串的存儲在內(nèi)存中存儲時(shí),系統(tǒng)在串尾添加一個(gè)’\0’空字符,作為字符串結(jié)束標(biāo)志,即字符串的存儲長度比實(shí)際長度多1.
例如:字符串“china”,內(nèi)存存儲
C
h
ina\0
計(jì)算機(jī)在編譯時(shí),將留出連續(xù)6個(gè)字符的空間,前5個(gè)存儲5個(gè)字母。第6個(gè)用來存放字符串終止符“\0”,并且終止符無需人為處理。§6變量賦初值
對于程序中要求預(yù)先設(shè)置初值的變量,C語言允許在變量定義的時(shí)候同時(shí)使變量初始化。
如:
inta=3;inta,b,c=5;floatf=1.234;charI,j,k=’0234’;
對同一個(gè)類型的多個(gè)變量賦同一個(gè)值時(shí),可寫成:
inta=b=c=1;但不同類型的變量一般不能夠用這種方法:如:
inta;floatb=a=1;變量賦初值1聲明的作用為變量分配內(nèi)存單元,變量名作為內(nèi)存單元的符號地址,這件事是在程序編譯鏈接時(shí)完成的。2變量其值可以改變的量通過b可以找到相應(yīng)的存儲單元地址XXXXb變量名
————變量值存儲單元地址XXXX30.0變量賦初值3對變量的賦值賦值符號“=”<變量>=<表達(dá)式>b=30.0; //讀作將表達(dá)式的值30.0賦給變量ba=sin(b*3.14159/180); //讀作將表達(dá)式(正弦函數(shù))
//的值賦給變量a4變量賦值特點(diǎn)(1)先定義,后使用
intd,e,f; 定義三個(gè)變量為整數(shù)類型 如未定義,則在編譯時(shí)被查出,認(rèn)為非法(2)變量未被賦值前,值為0(3)對變量賦值過程是“覆蓋”過程,用新值去替換舊值(4)讀出變量的值,該變量保持不變(5)參與表達(dá)式運(yùn)算的所有變量都保持原來的值不變變量賦值過程
def
未賦值前000執(zhí)行e=d770執(zhí)行f=d+e7714執(zhí)行d=77007執(zhí)行d=d+187141§7不同類型變量間的混合運(yùn)算
整型、實(shí)型和字符型數(shù)據(jù)之間可以進(jìn)行混合運(yùn)算,運(yùn)算時(shí),不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,運(yùn)算結(jié)果的類型按照類型轉(zhuǎn)換的原則進(jìn)行。變量的數(shù)據(jù)類型是可以轉(zhuǎn)換的。自動(dòng)轉(zhuǎn)換強(qiáng)制轉(zhuǎn)換轉(zhuǎn)換的方法:1.自動(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ù)長度增加的方向進(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)算中,賦值號兩邊量的數(shù)據(jù)類型不同時(shí),賦值號右邊量的類型將轉(zhuǎn)換為左邊量的類型。如果右邊量的數(shù)據(jù)類型長度比左邊量長時(shí),將丟失一部分?jǐn)?shù)據(jù),這樣會(huì)降低精度,丟失的部分按四舍五入向前舍入。數(shù)據(jù)類型轉(zhuǎn)換規(guī)則圖:說明:①橫向向左的箭頭表示必定的轉(zhuǎn)換②縱向箭頭表示不同類型轉(zhuǎn)換方向③類型轉(zhuǎn)換由系統(tǒng)自動(dòng)進(jìn)行l(wèi)ongunsignintdoubl高低floatcharshort(級別)類型轉(zhuǎn)換及運(yùn)算次序舉例:
已知:inti;floatf;doubled;longe;則:10+‘a(chǎn)’+i*f-d/e①10+‘a(chǎn)’+i*f-d/e/*’a’
→
int,ASCII為97*/②107+i*f-d/e
/*f
→double,必定轉(zhuǎn)換*/
/*i
→double,
i*f
為double*/③107+(i*f)-d/e
/*107
→double
*/
④[107+(i*f)]-d/e
/*e
→double*/
d/e
→double
*/⑤
[107+(i*f)]-d/e
/*[107+(i*f)]
→double,
結(jié)果:double
*/【例】main(){floatPI=3.14159;
ints,r=5;s=r*r*PI;
printf("s=%d\n",s);}本例程序中,PI為實(shí)型;s,r為整型。在執(zhí)行s=r*r*PI語句時(shí),r和PI都轉(zhuǎn)換成double型計(jì)算,結(jié)果也為double型。但由于s為整型,故賦值結(jié)果仍為整型,舍去了小數(shù)部分。2.強(qiáng)制類型轉(zhuǎn)換
強(qiáng)制類型轉(zhuǎn)換是通過類型轉(zhuǎn)換運(yùn)算來實(shí)現(xiàn)的。其一般形式為:(類型說明符)(表達(dá)式)
其功能是把表達(dá)式的運(yùn)算結(jié)果強(qiáng)制轉(zhuǎn)換成類型說明符所表示的類型。例如:(float)a
把a(bǔ)轉(zhuǎn)換為實(shí)型(int)(x+y)把x+y的結(jié)果轉(zhuǎn)換為整型
在使用強(qiáng)制轉(zhuǎn)換時(shí)應(yīng)注意以下問題:類型說明符和表達(dá)式都必須加括號(單個(gè)變量可以不加括號),如把(int)(x+y)寫成(int)x+y則成了把x轉(zhuǎn)換成int型之后再與y相加了。無論是強(qiáng)制轉(zhuǎn)換或是自動(dòng)轉(zhuǎn)換,都只是為了本次運(yùn)算的需要而對變量的數(shù)據(jù)長度進(jìn)行的臨時(shí)性轉(zhuǎn)換,而不改變數(shù)據(jù)說明時(shí)對該變量定義的類型。【例】main(){floatf=5.75;
printf("(int)f=%d,f=%f\n",(int)f,f);}本例表明,f雖強(qiáng)制轉(zhuǎn)為int型,但只在運(yùn)算中起作用,是臨時(shí)的,而f本身的類型并不改變。因此,(int)f的值為5(刪去了小數(shù))而f的值仍為5.75。運(yùn)行結(jié)果:(int)f=5f=5.75§8算術(shù)運(yùn)算符與算術(shù)表達(dá)式
TurboC的運(yùn)算符非常豐富,主要分為三大類:算術(shù)運(yùn)算符,關(guān)系運(yùn)算符與邏輯運(yùn)算符,按位運(yùn)算符。除此之外,還有一些用于完成特殊任務(wù)的運(yùn)算符。下面分別進(jìn)行介紹。TurboC的算術(shù)運(yùn)算符如下:
操作符
作用
+加,一目取正-減,一目取負(fù)*乘/除%取模(取余)--減1++加11.一目和二目操作
一目操作是指對一個(gè)操作數(shù)進(jìn)行操作。例如:-a是對a進(jìn)行一目負(fù)操作。
二目操作(或多目操作)是指兩個(gè)操作數(shù)(或多個(gè)操作數(shù))進(jìn)行操作。
/與%的用法:/若兩操作數(shù)為整數(shù),則結(jié)果為整型。否則,執(zhí)行實(shí)數(shù)除,結(jié)果為double。
例:15/3=33/6=0–8/5=-115.0/3=15/3.0=15.0/3/0=5.0L%兩操作數(shù)必須為整數(shù),結(jié)果符號同左操作數(shù)。不能用于浮點(diǎn)數(shù)例:17%5=2或17%-5=2
5/10=5
-17%5=-210/2=0/與%的關(guān)系:a%b=a-a/b*b(a,b為整數(shù))
例:17%5=17-17/5*5=17-3*5=2
另外,由于TurboC中字符型數(shù)會(huì)自動(dòng)地轉(zhuǎn)換成整型數(shù),因此字符型數(shù)也可以參加二目運(yùn)算?!纠?/p>
main(){charm,n;m='c';n=m+'A'-'a';...}
/*定義字符型變量*//*給m賦小寫字母'c'*//*將c中的小寫字母變成大寫字母'B'后賦給n*/
上例中m=‘c’即m=98,字母A和a的ASCII碼值分別為65和97。這樣可以將小寫字母變成大寫字母,反之,如果要將大寫字母變成小寫字母,則用c+'a'-'A'進(jìn)行計(jì)算
2算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級C算術(shù)表達(dá)式:用算術(shù)符和括號將運(yùn)算對象(也稱操作數(shù),包括常量、變量、函數(shù)等到連接起來的,符合C語法規(guī)則的式子。如:a*b/c-(1.5+’a’)注意事項(xiàng):⑴左右括號必須配對,運(yùn)算時(shí)稱計(jì)算內(nèi)括號表達(dá)式的值,再計(jì)算外層括號內(nèi)表達(dá)式。⑵雙目運(yùn)算符兩側(cè)操作數(shù)類型必須一致,若不一致系統(tǒng)將自動(dòng)按照規(guī)則對操作數(shù)類型轉(zhuǎn)換,再進(jìn)行相應(yīng)操作。運(yùn)算符優(yōu)先級:先按運(yùn)算符優(yōu)先級別高低次序執(zhí)行(見P375附錄Ⅲ)()、-(負(fù))、*、/、%、+、-運(yùn)算結(jié)合方向:若一個(gè)運(yùn)算對象兩側(cè)運(yùn)算符的運(yùn)算符優(yōu)先級別相同,則按結(jié)合方向處理。左結(jié)合性(自左至右、左結(jié)合):運(yùn)算對象先與左面的運(yùn)算符結(jié)合。右結(jié)合性:運(yùn)算對象先與右面的運(yùn)算符結(jié)合。例:a-b*c//“*”優(yōu)先于“-”
a-b+c//“-”與“+”同級,按左結(jié)合規(guī)則2.自增、自減運(yùn)算
在TurboC中有兩個(gè)很有用的運(yùn)算符,在其它高級語言中通常沒有。這兩個(gè)運(yùn)算符就是自增"++"和自減"--"運(yùn)算符和,運(yùn)算符"++"是操作數(shù)加1,而"--"則是操作數(shù)減1
例如:x=x+1可寫成x++,或++xx=x-1可寫成x--,或--xx++(x--)與++x(--x)在上例中沒有什么區(qū)別,但x=m++和x=++m卻有很大差別。
x=m++表示將m的值賦給x后,m加1。
x=++m表示m先加1后,再將新值賦給x。
前綴式或后綴式自增運(yùn)算符自增、自減運(yùn)算符均為單目運(yùn)算,都具有右結(jié)合性?!?+”或“--”可以出現(xiàn)在操作數(shù)前面前綴式:++i,--i:先將操作數(shù)增(減)1,后取操作數(shù)的新值作為表達(dá)式的結(jié)果.后綴式:i++,i--:將操作數(shù)增(減)之前的值作為表達(dá)式的結(jié)果,操作數(shù)的增(減)1運(yùn)算是在引用表達(dá)式的值之后完成的.說明:
a.“++”和“--”只能用于變量,不能用于常量或表達(dá)式
b.“++”和“--”結(jié)合方向?yàn)椤坝医Y(jié)合”【例】main(){
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--);}
/*i的初值為8*//*i先加1后輸出:9*//*i先減1后輸出:8*//*先輸出i:8之后i再加1(為9)*//*先輸出i:9之后i再減1(為8)*//*先輸出i:-8之后i再加1(為9)*//*先輸出i:-9之后i再減1(為8)*/【例】main(){
inti=5,j=5,p,q;p=(i++)+(i++)+(i++);q=(++j)+(++j)+(++j);
printf("%d,%d,%d,%d",p,q,i,j);}對P=(i++)+(i++)+(i++)應(yīng)理解為:三個(gè)i相加,故P值為15。然后i再自增1三次相當(dāng)于加3故i的最后值為8。對q=(++j)+(++j)+(++j)應(yīng)理解為:j先自增1,再參與運(yùn)算,由于j自增1三次后值為8,三個(gè)8相加的和為24,j的最后值仍為8。語句中p=(i++)+(i++)+(i++)和p=i+++i+++i++等價(jià),q=++j+++j+++j與q=((++(j++)+j++)+j等價(jià)
main(){intx=0,y=1;
printf(“x=%d,y=%d\n”,x,y);
printf(“x++=%d\n”,x++);
printf(“y--=%d\n”,y--);
printf(“x=%d,y=%d\n”,x,y);}結(jié)果輸出:x=0,y=1 x++=0
y--=1
x=1,y=0§9賦值運(yùn)算符與賦值表達(dá)式
1.賦值運(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))
在C中凡是表達(dá)式可以出現(xiàn)的地方均可出現(xiàn)賦值表達(dá)式。例如,式子x=(a=5)+(b=8)是合法的。它的意義是把5賦予a,8賦予b,再把a(bǔ),b相加,和賦予x,故x應(yīng)等于13。在C語言中也可以組成賦值語句,按照C語言規(guī)定,任何表達(dá)式在其未尾加上分號就構(gòu)成為語句。因此如x=8;a=b=c=5;都是賦值語句,在前面各例中我們已大量使用過了。2.賦值語句中的數(shù)據(jù)類型轉(zhuǎn)換
類型轉(zhuǎn)換是指不同類型的變量混用時(shí)的類型改變。如果賦值運(yùn)算符兩邊的數(shù)據(jù)類型不相同,系統(tǒng)將自動(dòng)進(jìn)行類型轉(zhuǎn)換,即把賦值號右邊的類型換成左邊的類型。在賦值語句中,類型轉(zhuǎn)換規(guī)則是:等號右邊的值轉(zhuǎn)換為等號左邊變量所屬的類型。具體規(guī)定如下:
實(shí)型賦予整型:舍去小數(shù)部分。
整型賦予實(shí)型:數(shù)值不變,但將以浮點(diǎn)形式存放,即增加小數(shù)部分(小數(shù)部分的值為0)。
字符型賦予整型:由于字符型為一個(gè)字節(jié),而整型為二個(gè)字節(jié),故將字符的ASCII碼值放到整型量的低八位中,高八位為0。
整型賦予字符型:只把低八位賦予字符量。
總原則:按存儲單元中存儲形式直接傳送。
賦值轉(zhuǎn)換左右轉(zhuǎn)換說明例intfloat,doubl舍棄實(shí)數(shù)的小數(shù)部分inti;i=2.56;則I為2intcharint變量低8位取char數(shù)據(jù)8位;int變量高8位:若將字符處理為unsigned,高8位補(bǔ)0;若將字符處理為signed,高8位同字符最高位,即符號擴(kuò)展。intlong只long中低16位送int,inta;longb=8;a=b;11111110X=‘\376’0000000011111110i1111111111111110i000000000000000000000000000010000000000000001000左右轉(zhuǎn)換說明例float,doubleint將整型轉(zhuǎn)換為實(shí)型floatf;doubled;f=23;則為23.00000d=23;則為23.00000000000000floatdouble截取前7位有效數(shù)(但不能溢出)floatf;doubled=123.456789e100;f=d;溢出錯(cuò)誤doublefloat數(shù)據(jù)不變,有效位擴(kuò)到16位(內(nèi)存中以64bit存儲)charintshortlong取低8位inti=289;charc=‘a(chǎn)’;c=I;longintint
送long低16位,long低16位為符號擴(kuò)展longintunsignedint不需符號擴(kuò)展,高位補(bǔ)0.000000010010000100100001iC=33左右轉(zhuǎn)換說明例signedIntlongshortunsignedunsignedIntunsignedlongunsignedshort將unsigned內(nèi)容原樣賦值(若數(shù)據(jù)超過范圍,則出現(xiàn)錯(cuò)誤數(shù)據(jù))unsignedinta=65535;intb;b=a;11111111111111111111111111111111【例】voidmain(){
inta,b=322;floatx,y=8.88;charc1='k',c2;a=y;x=b;a=c1;c2=b;printf("%d,%f,%d,%c",a,x,a,c2);}
本例表明賦值運(yùn)算中類型轉(zhuǎn)換規(guī)則。實(shí)型量y值8.88后取整數(shù)8后賦予a。整型量b值322后增加小數(shù)部分后賦予x。字符型量c1轉(zhuǎn)換為為整型后賦予a;整型量b取其低八位為字符型后賦予c2;(b的低八位為01000010,即十進(jìn)制66,按ASCII碼對應(yīng)于字符B)。作除法運(yùn)算時(shí)應(yīng)特別注意數(shù)據(jù)類型轉(zhuǎn)換規(guī)則?!纠?/p>
main(){floatf;
inti=15;f=i/2;}
上面程序經(jīng)運(yùn)行后,f=7并不等于準(zhǔn)確值7.5。main(){floatf;
inti=15;f=i/2.0;}正確的為也可直接將i定義為浮點(diǎn)數(shù)。3.復(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%p4.賦值表達(dá)式賦值表達(dá)式:由賦值運(yùn)算符將一個(gè)變量和一個(gè)表達(dá)式連接起來的式子.形式:<變量><賦值運(yùn)算符><表達(dá)式>
<賦值運(yùn)算符>可為復(fù)合賦值運(yùn)算符,按照自右向左結(jié)合順序.例:a=(b=5)
/*b=5,a=5,由于“=”右結(jié)合,等價(jià)于a=b=5*/a=b=c=5/*表達(dá)式值為5*/a=5+(c=6)
/*c=6,a=11,表達(dá)式值為11*/a=(b=10)/(c=2)
/*b=10,c=2,a=5,表達(dá)式值為5*/ a+=a-=a*a
/*設(shè)a初值為12,則最后結(jié)果為-264*/
a+=a=a-a*a=12-12*12=-132a=a+a=(-132)+(-132)=-264
printf(“%d”,a=b);/*將b的賦給a,并輸出a的值*/§10
TurboC的特殊運(yùn)算符
1.“?:”條件運(yùn)算符
“?:"運(yùn)算符是一個(gè)三目運(yùn)算符,其一般形式是:<表達(dá)式1>?<表達(dá)式2>:<表達(dá)式3>;
"?:"運(yùn)算符的含義是:先求表達(dá)式1的值,如果為真,則求表達(dá)式2的值并把它作為整個(gè)表達(dá)式的值;如果表達(dá)式1的值為假,則求表達(dá)式3的值并把它作為整個(gè)表達(dá)式的值?!纠?/p>
main(){
intx,y;x=50;y=x>70?100:0;/*將條件表達(dá)式的結(jié)果賦于y*/}
本例中,y將被賦初值0。如果x>70,y將被賦值100。因此,"?"運(yùn)算符可以代替某些if-then-else形式的語句。
2."&"和"*"運(yùn)算符
"&"運(yùn)算符是一個(gè)返回操作數(shù)地址的單目操作符。
"*"運(yùn)算符是對"&"運(yùn)算符的一個(gè)補(bǔ)充,它返回位于這個(gè)地址內(nèi)的變量值,也是單目操作符?!纠縨ain(){
inti,j,*m;i=10;m=&i;j=*m;}/*將變量i的地址賦給m*//*地址m所指的單元的值賦給j*/
上面程序運(yùn)行后,i=10,m為其對應(yīng)的內(nèi)存地址,j的值也為10。3.“,”逗號運(yùn)算符和逗號表達(dá)式“,”運(yùn)算符(順序運(yùn)算符):用于將多個(gè)表達(dá)式串在一起,是所有運(yùn)算符中優(yōu)先級別最低的運(yùn)算符逗號表達(dá)式:<表達(dá)式1>,<表達(dá)式2>逗號表達(dá)式求解過程:兩個(gè)表達(dá)式按從左向右順序求值,每個(gè)表達(dá)式的求值是分開進(jìn)行的,先求<表達(dá)式1>,再求<表達(dá)式2>,逗號表達(dá)式的值是表達(dá)式2的值,對逗號運(yùn)算符不進(jìn)行類型轉(zhuǎn)換。【例】
main(){
intx,y;x=50;y=(x=x-5,x/5);/*x減5后為45賦給x,再x/5為9賦給y*/
printf(“x=%d,y=%d\n”,x,y);/*但不賦于a*/}運(yùn)行結(jié)果:x=45,y=9嵌套的逗號表達(dá)式一個(gè)逗號表達(dá)式與另一個(gè)表達(dá)式組成的一個(gè)新的表達(dá)式。其結(jié)果和類型同最后一個(gè)表達(dá)式值。例:(a=3*5,a*4),a+5/*表達(dá)式的值為20*/
①a=15②15*4
③表達(dá)式1的值為60
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 包裝回收合同范例
- 北京合伙合同范本培訓(xùn)
- 中介代辦合同范例
- 個(gè)人汽車置換合同范本
- 辦公住宿出租合同范本
- 出租鋪面合同范本
- 三方合伙范本合同范本
- 履約反擔(dān)保合同范本
- 單位職工租房合同范例
- 醫(yī)院編制合同范本
- 八段錦口令標(biāo)準(zhǔn)版合集
- JCT414-2017 硅藻土的標(biāo)準(zhǔn)
- 肌肉注射評分標(biāo)準(zhǔn)
- 鋼結(jié)構(gòu)主要技術(shù)標(biāo)準(zhǔn)和要求
- 新版藥品管理法培訓(xùn)完整版本課件
- 北師大版高中英語選擇性必修四全冊課文及翻譯(中英文Word)
- 臘八粥 第一課時(shí)自學(xué)導(dǎo)學(xué)單
- 心靈手巧織美好-精美掛件我會(huì)編 (教案)-二年級下冊勞動(dòng)浙教版
- IPO項(xiàng)目律師盡職調(diào)查查驗(yàn)計(jì)劃表模版
- 中美關(guān)系新時(shí)代52張課件
- 醫(yī)院信息系統(tǒng)HIS知識培訓(xùn)教學(xué)課件-HIS的主要內(nèi)容
評論
0/150
提交評論