




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
緒論
1.1
C語(yǔ)言概述
1.1.1
C語(yǔ)言發(fā)展史C語(yǔ)言是在B語(yǔ)言的基礎(chǔ)上發(fā)展起來(lái)的,它的根源可以追遡到ALGOL60。1960年出現(xiàn)的ALGOL60是一種面向問(wèn)題的高級(jí)語(yǔ)言,它離硬件比較遠(yuǎn),不宜用來(lái)編寫(xiě)系統(tǒng)程序。1963年英國(guó)的劍橋大學(xué)推出了CPL(combinedprogramminglanguage)語(yǔ)言。CPL語(yǔ)言在ALGOL60的基礎(chǔ)上接近硬件一些,但規(guī)模比較大,難以實(shí)現(xiàn)。1.1.1
C語(yǔ)言發(fā)展史1967年英國(guó)劍橋大學(xué)的MatinRichards對(duì)CPL語(yǔ)言做了簡(jiǎn)化,推出了BCPL(basiccombinedprogramminglanguage)語(yǔ)言。1970年美國(guó)貝爾實(shí)驗(yàn)室的KenThompson以BCPL語(yǔ)言為基礎(chǔ),又做進(jìn)一步簡(jiǎn)化,設(shè)計(jì)出了很簡(jiǎn)單的而且很接近硬件的B語(yǔ)言(取BCPL的第一個(gè)字母),并用B語(yǔ)言寫(xiě)了第一個(gè)UNIX操作系統(tǒng),在PDP-7上實(shí)現(xiàn)。1.1.1
C語(yǔ)言發(fā)展史1971年在PDP-11/20上實(shí)現(xiàn)了B語(yǔ)言,并寫(xiě)了UNIX操作系統(tǒng)。但B語(yǔ)言過(guò)于簡(jiǎn)單,功能有限。1972年至1973年間,貝爾實(shí)驗(yàn)室的D.M.Ritchie在B語(yǔ)言的基礎(chǔ)上設(shè)計(jì)出了C語(yǔ)言(取BCPL的第二個(gè)字母)。C語(yǔ)言既保持了BCPL和B語(yǔ)言的優(yōu)點(diǎn)(精練,接近硬件),又克服了它們的缺點(diǎn)(過(guò)于簡(jiǎn)單,數(shù)據(jù)無(wú)類型等)。1.1.1
C語(yǔ)言發(fā)展史1973年,K.Thompson和D.M.Ritchie兩人合作把UNIX的90%以上用C改寫(xiě),即UNIX第5版。C語(yǔ)言的演變過(guò)程如下所示:ALGOL60(1960年)→CPL(1963年)→BCPL(1967年)→B(1970年)→C(1972年)1.1.1
C語(yǔ)言發(fā)展史1983年K.Thompson和D.M.Ritchie兩人同時(shí)獲得了ACM圖靈獎(jiǎng),這是計(jì)算機(jī)科學(xué)和技術(shù)領(lǐng)域的最高榮譽(yù)獎(jiǎng),以表彰他們?cè)陂_(kāi)發(fā)UNIX系統(tǒng)和C語(yǔ)言方面所做出的杰出貢獻(xiàn)。1978年B.W.Kernighan和D.M.Ritchie合著了《TheCProgrammingLanguage》一書(shū),該書(shū)中講述的C語(yǔ)言成為后來(lái)廣泛使用的C語(yǔ)言版本的基礎(chǔ),它被稱為標(biāo)準(zhǔn)C。1.1.1
C語(yǔ)言發(fā)展史1983年美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì)(ANSI)制定了新的標(biāo)準(zhǔn),稱為ANSIC。ANSIC與標(biāo)準(zhǔn)C相比,有了很大的發(fā)展。.W.Kernighan和D.M.Ritchie在1988年對(duì)他們的經(jīng)典著作《TheCProgrammingLanguage》進(jìn)行了修改,使之符合ANSIC標(biāo)準(zhǔn)。1990年,國(guó)際標(biāo)準(zhǔn)化組織ISO(InternationalStandardOrganization)通過(guò)了C程序設(shè)計(jì)語(yǔ)言的國(guó)際標(biāo)準(zhǔn)(ISO9899-1990)它是以ANSIC為基礎(chǔ),吸收了國(guó)際上的意見(jiàn)后制定的。1.1.2
C語(yǔ)言的特點(diǎn)
。C語(yǔ)言的主要特點(diǎn)有:(1)語(yǔ)言表達(dá)能力強(qiáng)。(2)語(yǔ)言簡(jiǎn)潔,使用方便,靈活。(3)運(yùn)算符豐富。(4)數(shù)據(jù)結(jié)構(gòu)豐富,具有現(xiàn)代化語(yǔ)言的各種數(shù)據(jù)結(jié)構(gòu)。(5)C語(yǔ)言是一種結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言,特別適合于大型程序的模塊化設(shè)計(jì);C語(yǔ)言具有編寫(xiě)結(jié)構(gòu)化程序所必需的基本流程控制語(yǔ)句。1.1.2
C語(yǔ)言的特點(diǎn)(6)C語(yǔ)言為字符、字符串、集合和表的處理提供了良好的基礎(chǔ),它能夠表示和識(shí)別各種可顯示的及能起控制作用的字符,也能夠區(qū)分和處理單個(gè)字符和字符串。(7)語(yǔ)法限制不太,程序設(shè)計(jì)自由度大。(8)生成的目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高。一般只比匯編程序生成的目標(biāo)效率低10%~20%。1.1.2
C語(yǔ)言的特點(diǎn)(9)具有預(yù)處理程序和預(yù)處理語(yǔ)句,給大型程序的編寫(xiě)和高度提供了方便。(10)具有良好的移植性(與匯編語(yǔ)言比)?;旧喜蛔鲂薷木湍苡糜诟鞣N型號(hào)的計(jì)算機(jī)和各種操作系統(tǒng)。1.1.3
C程序的組成
下面用幾個(gè)簡(jiǎn)單的C程序作示例,從中分析C程序的特性。[例1.1]
程序運(yùn)行后顯示一句話:Welcomeyou!main(){printf(“Welcomeyou!\n”);}這個(gè)程序運(yùn)行以后,就輸出以下一行信息:Welcomeyou!其中main()是函數(shù)首部,它告訴系統(tǒng),這是一個(gè)函數(shù),名字為main。main函數(shù)是C語(yǔ)言中標(biāo)識(shí)主函數(shù)的專用名,每一個(gè)C程序都必須有一個(gè)main函數(shù),表示該C程序從這里開(kāi)始執(zhí)行。函數(shù)體由大括?。ㄆ饋?lái)。printf是C語(yǔ)言中標(biāo)準(zhǔn)輸出函數(shù),這里對(duì)它進(jìn)行調(diào)用。1.1.3
C程序的組成
[例1.2]計(jì)算兩個(gè)整數(shù)的和。main(){inta,b,sum;
/*定義變量*/a=135;b=246;
/*以下3行為C語(yǔ)句*/sum=a+b;printf(“sumis%d\n”,sum);}本程序的作用是求兩個(gè)整數(shù)a和b之和sum。a的值是135,b的值是246,程序運(yùn)行后,輸出結(jié)果是:sum=381/*……*/表示注釋部分,在這里用漢字表示注釋是為了方便理解1.1.3
C程序的組成
[例1.3]比較兩個(gè)數(shù)的大小,并輸出最大的數(shù)。main()/*主函數(shù)*/{inta,b,c;
/*聲明部分,定義變量*/scanf(“%d,%d”,&a,&b);
/*輸入變量a和b的值*/c=max(a,b);/*調(diào)用max函數(shù),將得到的值賦給c*/printf(“max=%d”,c);/*輸出c的值*/}intmax(intx,inty)/*定義max函數(shù),函數(shù)值為整型,形式參數(shù)x,y為整型*/{intz;
/*max函數(shù)中的聲明部分,定義本函數(shù)中用到的變量z為整型*/if(x>y)z=x;elsez=y;return(z);/*將z的值返回,通過(guò)max帶回調(diào)用處*/}本程序包括兩個(gè)函數(shù):主函數(shù)main和被調(diào)用的函數(shù)max。1.1.3
C程序的組成
通過(guò)這幾個(gè)例子,我們可以看到:(1)函數(shù)是C語(yǔ)言程序的基本單位。一個(gè)C語(yǔ)言程序是由一個(gè)或多個(gè)函數(shù)所組成。C語(yǔ)言程序中必須有一個(gè)名為main的主函數(shù),其余函數(shù)的名字由程序設(shè)計(jì)者自定。main()函數(shù)的作用,相當(dāng)于其它高級(jí)語(yǔ)言中的主程序;其它函數(shù)的作用,相當(dāng)于子程序。1.1.3
C程序的組成
(2)C語(yǔ)言程序總是從main()函數(shù)開(kāi)始執(zhí)行。一個(gè)C語(yǔ)言程序,總是從main()函數(shù)開(kāi)始執(zhí)行,而不論其在程序中的位置。當(dāng)主函數(shù)執(zhí)行完畢時(shí),亦即程序執(zhí)行完畢。習(xí)慣上,將主函數(shù)main()放在最前頭。1.1.3
C程序的組成
(3)任何函數(shù)(包括主函數(shù)main())都是由函數(shù)說(shuō)明和函數(shù)體兩部分組成。其一般結(jié)構(gòu)如下:[函數(shù)類型]函數(shù)名(函數(shù)參數(shù)表)函數(shù)說(shuō)明部分
{局部變量說(shuō)明語(yǔ)句部分;執(zhí)行語(yǔ)句部分;函數(shù)體部分
}1.1.3
C程序的組成
(4)C程序書(shū)寫(xiě)格式自由,一行內(nèi)可以寫(xiě)幾個(gè)語(yǔ)句,一個(gè)語(yǔ)句可以書(shū)寫(xiě)在多行上。C程序沒(méi)有行號(hào),也不像FORTRAN或COBOL那樣嚴(yán)格規(guī)定書(shū)寫(xiě)格式(語(yǔ)句必須從某一列開(kāi)始書(shū)寫(xiě))。(5)每個(gè)語(yǔ)句和數(shù)據(jù)定義的最后必須有一個(gè)分號(hào)。分號(hào)是C語(yǔ)句不可缺少的組成部分。如:c=a+b;分號(hào)不可少。即使是程序中最后一個(gè)語(yǔ)句也應(yīng)包含分號(hào)。1.1.3
C程序的組成
(6)C語(yǔ)言本身沒(méi)有輸入輸出語(yǔ)句。輸入和輸出的操作是由庫(kù)函數(shù)scanf和printf等函數(shù)來(lái)完成的。C對(duì)輸入輸出實(shí)行“函數(shù)化”。由于輸入輸出操作牽涉到具體的計(jì)算機(jī),把輸入輸出操作放在函數(shù)中處理,就可以使C語(yǔ)言本身的規(guī)模較小,編譯程序簡(jiǎn)單,很容易在各種機(jī)器上實(shí)現(xiàn),程序具有可移植性。1.1.3
C程序的組成
(7)C程序中的注釋是以/*開(kāi)頭、*/結(jié)束的任意字符串,用于對(duì)程序功能、算法、數(shù)據(jù)等進(jìn)行說(shuō)明,提高程序的可讀性。注釋在程序中的位置是任意的。但C程序的注釋不允許嵌套出現(xiàn)。1.2
TurboC簡(jiǎn)介
圖1-11.2.1
TurboC2.0的安裝和啟動(dòng)目前市面上存在的TurboC2.0一般情況下是不需要安裝的。TurboC2.0系統(tǒng)經(jīng)過(guò)壓縮之后只有1MB左右,如果是壓縮文件,先在硬盤上創(chuàng)造一個(gè)新目錄,可將壓縮文件直接解壓到c:\tc20新目錄下或其他路徑,如果不是壓縮文件,可直接復(fù)制到c:\tc20目錄下即可。1.2.1
TurboC2.0的安裝和啟動(dòng)啟動(dòng)TurboC2.0之后就會(huì)出現(xiàn)如圖1-2所示界面。1.2.2運(yùn)行一個(gè)C語(yǔ)言程序的一般過(guò)程
TurboC是一個(gè)集源程序編輯、編譯、連接、運(yùn)行與調(diào)試于一體的集成軟件環(huán)境。運(yùn)行一個(gè)C語(yǔ)言程序的一般過(guò)程:(1)啟動(dòng)TC,進(jìn)入TC集成環(huán)境。(2)編輯(或修改)源程序。在編輯(Edit)狀態(tài)下可以根據(jù)需要輸入或修改源程序。(3)編譯及連接源程序。選擇“Compile”菜單并在其下拉菜單中選擇“CompiletoOBJ”1.2.2運(yùn)行一個(gè)C語(yǔ)言程序的一般過(guò)程
(4)運(yùn)行程序。按“F10”鍵進(jìn)行菜單選項(xiàng)(5)退出TC集成環(huán)境,結(jié)束本次程序運(yùn)行。1.2.3
TurboC2.0主菜單的介紹
(1)File(文件)菜單按<Alt>+<F>鍵可進(jìn)入File菜單,如圖1-4所示:1.2.3
TurboC2.0主菜單的介紹
(2)Edit(編輯)菜單 按<Alt>+<E>鍵可進(jìn)入編輯菜單,再按回車鍵,則光標(biāo)出現(xiàn)在編輯窗口中,此時(shí)用戶可以進(jìn)行文件編輯。用戶可使用<F1>鍵獲取相關(guān)幫助信息。(3)Run(運(yùn)行)菜單按<Alt>+<R>鍵可進(jìn)入Run菜單。1.2.3
TurboC2.0主菜單的介紹
(4)Compile(編譯)菜單 按<Alt>+<C>鍵可進(jìn)入Compile菜單,如圖1-6所示:1.2.3
TurboC2.0主菜單的介紹
(5)Project(工程)菜單按<Alt>+<P>鍵可進(jìn)入Project菜單Projectname(工程名)擴(kuò)展名為.PRJ的文件是工程名文件,其中包括將要編譯、連接的文件名。例如有一個(gè)程序由file1.c,file2.c,file3.c組成,要將這3個(gè)文件編譯裝配成一個(gè)file.exe的執(zhí)行文件,可以先建立一個(gè)file.prj的項(xiàng)目文件,其內(nèi)容如下:
file1.cfile2.cfile3.c此時(shí)將file.prj放入Projectname項(xiàng)中,以后進(jìn)行編譯時(shí)將自動(dòng)對(duì)項(xiàng)目文件中規(guī)定的三個(gè)源文件分別進(jìn)行編譯。然后連接成file.exe文件。如果其中有些文件已經(jīng)編譯成.OBJ文件,而又沒(méi)有修改過(guò),可直接寫(xiě)上.OBJ擴(kuò)展名。此時(shí)將不再編譯而只進(jìn)行連接。1.2.3
TurboC2.0主菜單的介紹
(6)Options(選擇菜單)按<Alt>+<O>鍵可進(jìn)入Options菜單,該菜單是比較重要的菜單,讀者在使用時(shí)要謹(jǐn)慎,圖1-7所示為Options菜單:
1.2.3
TurboC2.0主菜單的介紹
(7)Debug(調(diào)試)菜單按<Alt>+<D>鍵可選擇Debug菜單,如圖1-8所示: 圖1-81.2.3
TurboC2.0主菜單的介紹
(8)Break/watch(斷點(diǎn)及監(jiān)視)菜單按<Alt>+<B>鍵可進(jìn)入Break/watch菜單,如圖1-9所示:1.3
C語(yǔ)言詞匯
在C語(yǔ)言中使用的詞匯分為六類:標(biāo)識(shí)符,關(guān)鍵字,運(yùn)算符,分隔符,常量,注釋符等。
1.標(biāo)識(shí)符
在程序中使用的變量名、函數(shù)名、標(biāo)號(hào)等統(tǒng)稱為標(biāo)識(shí)符。除庫(kù)函數(shù)的函數(shù)名由系統(tǒng)定義外,其余都由用戶自定義。C
規(guī)定,標(biāo)識(shí)符只能是字母(A~Z,a~z)、數(shù)字(0~9)、下劃線(_)組成的字符串,并且其第一個(gè)字符必須是字母或下劃線。1.3
C語(yǔ)言詞匯
2.關(guān)鍵字
關(guān)鍵字是由C語(yǔ)言規(guī)定的具有特定意義的字符串,通常也稱為保留字。用戶定義的標(biāo)識(shí)符不應(yīng)與關(guān)鍵字相同。C語(yǔ)言的關(guān)鍵字分為以下幾類:
(1)類型說(shuō)明符
用于定義、說(shuō)明變量、函數(shù)或其它數(shù)據(jù)結(jié)構(gòu)的類型。如前面例題中用到的int等。
1.3
C語(yǔ)言詞匯
(2)語(yǔ)句定義符
用于表示一個(gè)語(yǔ)句的功能。如例1.3中用到的if
else就是條件語(yǔ)句的語(yǔ)句定義符。
(3)預(yù)定義標(biāo)識(shí)符
在C語(yǔ)言中,還有一類具有特殊含義的標(biāo)識(shí)符,它們被用作庫(kù)函數(shù)名和預(yù)編譯命令,這類標(biāo)識(shí)符在C語(yǔ)言中稱為預(yù)定義標(biāo)識(shí)符。1.3
C語(yǔ)言詞匯
3.運(yùn)算符
C語(yǔ)言中含有相當(dāng)豐富的運(yùn)算符。運(yùn)算符與變量,函數(shù)一起組成表達(dá)式,表示各種運(yùn)算功能。運(yùn)算符由一個(gè)或多個(gè)字符組成。
4.分隔符
在C語(yǔ)言中采用的分隔符有逗號(hào)和空格兩種。逗號(hào)主要用在類型說(shuō)明和函數(shù)參數(shù)表中,分隔各個(gè)變量??崭穸嘤糜谡Z(yǔ)句各單詞之間,作間隔符。在關(guān)鍵字,標(biāo)識(shí)符之間必須要有一個(gè)以上的空格符作間隔,
否則將會(huì)出現(xiàn)語(yǔ)法錯(cuò)誤,例如把int
a;寫(xiě)成
inta;C編譯器會(huì)把inta當(dāng)成一個(gè)標(biāo)識(shí)符處理,其結(jié)果必然出錯(cuò)。1.3
C語(yǔ)言詞匯
5.常量
C
語(yǔ)言中使用的常量可分為數(shù)字常量、字符常量、字符串常量、符號(hào)常量、轉(zhuǎn)義字符等多種。這些將在下面章節(jié)中專門給予介紹。6.注釋符
C
語(yǔ)言的注釋符是以“/*”開(kāi)頭并以“*/”結(jié)尾的串。在“/*”和“*/”之間的即為注釋。程序編譯時(shí),不對(duì)注釋作任何處理。注釋可出現(xiàn)在程序中的任何位置。注釋用來(lái)向用戶提示或解釋程序的意義。在調(diào)試程序中對(duì)暫不使用的語(yǔ)句也可用注釋符括起來(lái),使翻譯跳過(guò)不作處理,待調(diào)試結(jié)束后再去掉注釋符。1.4小結(jié)
4.任何函數(shù)(包括主函數(shù)main())都是由函數(shù)說(shuō)明和函數(shù)體兩部分組成。5./*……*/表示注釋部分。6.TurboC是一個(gè)集成開(kāi)發(fā)環(huán)境,學(xué)會(huì)對(duì)程序的編輯、編譯、連接、運(yùn)行等操作。7.在C語(yǔ)言中使用的詞匯分為六類:標(biāo)識(shí)符,關(guān)鍵字,運(yùn)算符,分隔符,常量,注釋符等。
1.4小結(jié)
本章主要介紹了C語(yǔ)言的發(fā)展史、特點(diǎn)、組成,TURBOC簡(jiǎn)介以及C語(yǔ)言程序。1.C語(yǔ)言有語(yǔ)言表達(dá)能力強(qiáng)等十個(gè)主要特點(diǎn)。2.一個(gè)C語(yǔ)言程序是由一個(gè)或多個(gè)函數(shù)所組成。C語(yǔ)言程序中必須有一個(gè)名為main的主函數(shù)。3.C語(yǔ)言程序總是從main()函數(shù)開(kāi)始執(zhí)行。習(xí)題一
一、選擇題1.C編譯程序是_____。C程序的機(jī)器語(yǔ)言版本將C源程序編譯成目標(biāo)程序的程序一組機(jī)器語(yǔ)言指令由制造商提供的一套應(yīng)用軟件2.一個(gè)C程序執(zhí)行是從______。A.第一個(gè)函數(shù)開(kāi)始,直到最后一個(gè)函數(shù)結(jié)束。B.第一個(gè)語(yǔ)句開(kāi)始,直到最后一個(gè)語(yǔ)句結(jié)束。C.main()函數(shù)開(kāi)始,直到main()函數(shù)結(jié)束。D.main()函數(shù)開(kāi)始,直到最后一個(gè)函數(shù)結(jié)束。習(xí)題一
3.以下敘述中,錯(cuò)誤的是_____。A.一個(gè)C程序必須且只能有一個(gè)main函數(shù)B.一個(gè)C程序可以含有一個(gè)或多個(gè)函數(shù)C.C程序的基本結(jié)構(gòu)是函數(shù)D.在C程序中注釋必須放在語(yǔ)句之后4.以下敘述中,正確的是_____。A.C程序規(guī)定只有main函數(shù)可以調(diào)用其他函數(shù)B.在一個(gè)C函數(shù)中,只允許有一對(duì)花括弧C.在對(duì)程序進(jìn)行編譯過(guò)程中,可發(fā)現(xiàn)注釋中的拼寫(xiě)錯(cuò)誤D.C程序中,注釋部分應(yīng)括在“/*”和“*/”之間,“*”與“/”之間不能有任何字符和空格習(xí)題一
二、填空題1.一個(gè)C程序是由_____組成的。2.一個(gè)C函數(shù)由_____和_____兩部分組成。3.函數(shù)體的范圍是以_____開(kāi)始,以_____結(jié)束。4.C語(yǔ)言源程序文件的后綴是______,經(jīng)過(guò)編譯后生成文件的后綴是______,經(jīng)過(guò)鏈接后生成文件的后綴是______。2.1概述在本章中,我們只介紹數(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ù)類型,指針類型,空類型四大類。1基本數(shù)據(jù)類型
基本數(shù)據(jù)類型最主要的特點(diǎn)是,其值不可以再分解為其它類型。也就是說(shuō),基本數(shù)據(jù)類型是自我說(shuō)明的。2構(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)合類型3指針類型指針是一種特殊的,同時(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ō)明。例如:[例2.1]#include<stdio.h>intmax(intx,inty);voidmain(){ intx,y,z;scanf(“%d,%d”,&x,&y);z=max(x,y);printf(“themaxis:%d\n”,z);}intmax(intx,inty){ if(x>y)returnx;elsereturny;}在例2.1中給出的max函數(shù)定義中,函數(shù)頭為:intmax(intx,inty);其中“int”類型說(shuō)明符即表示該函數(shù)的返回值為整型量。又如[例2.2]#include<stdio.h>#include<math.h>voidmain(){ doubles; doublea; scanf(“%f”,&a);s=cos(a); printf(“%f\n”,s);}在例2.2中,使用了庫(kù)函數(shù)sin,由于系統(tǒng)規(guī)定其函數(shù)返回值為雙精度浮點(diǎn)型,因此在賦值語(yǔ)句s=cos(a);中,s也必須是雙精度浮點(diǎn)型,以便與sin函數(shù)的返回值一致。所以在說(shuō)明部分,把s說(shuō)明為雙精度浮點(diǎn)型。但是,也有一類函數(shù),調(diào)用后并不需要向調(diào)用者返回函數(shù)值,這種函數(shù)可以定義為“空類型”。其類型說(shuō)明符為void,例如例2.2中main()函數(shù)。在第7章函數(shù)中還要詳細(xì)介紹。在本章中,我們先介紹基本數(shù)據(jù)類型中的整型、浮點(diǎn)型和字符型。其余類型在以后各章中陸續(xù)介紹。2.2標(biāo)識(shí)符、常量和變量任何一種高級(jí)語(yǔ)言,都有自己的基本詞匯符號(hào)和語(yǔ)法規(guī)則,程序代碼都是由這些基本詞匯符號(hào)(有時(shí)也稱為標(biāo)識(shí)符)和根據(jù)該語(yǔ)言的語(yǔ)法規(guī)則編寫(xiě)而成,C語(yǔ)言也不例外。C語(yǔ)言規(guī)定了其所需的基本字符集和標(biāo)識(shí)符。滿足C語(yǔ)言要求的字符集如下:(1)英文字母a~z,A~Z(2)阿拉伯?dāng)?shù)字0~9(3)特殊符號(hào)2.2.1標(biāo)識(shí)符程序設(shè)計(jì)過(guò)程用到的各類元素的名字,叫標(biāo)識(shí)符。C語(yǔ)言的標(biāo)識(shí)符主要用來(lái)表示常量、變量、函數(shù)和類型等的名字,是只起標(biāo)識(shí)作用的一類符號(hào)。C語(yǔ)言規(guī)定標(biāo)識(shí)符只能由字母、數(shù)字、下劃線組成,并且只能由字母、下劃線開(kāi)頭。如:abc,a12,x是合法的標(biāo)識(shí)符,abc$,12a,xy不是合法的標(biāo)識(shí)符。特別需要注意的,C語(yǔ)言是對(duì)大小寫(xiě)敏感的。所謂敏感就是區(qū)分大小寫(xiě)的。例如:main和Main是不一樣的,是兩個(gè)不同的標(biāo)識(shí)符,前者是關(guān)鍵字,表示主函數(shù),后者只是C語(yǔ)言的合法標(biāo)識(shí)符。這一點(diǎn)與有些語(yǔ)言是不一樣的,例如VB就是一種不區(qū)分大小寫(xiě)的程序語(yǔ)言,在VB中,main和Main是一樣的,都是表示同一個(gè)標(biāo)識(shí)符。C語(yǔ)言規(guī)定的標(biāo)識(shí)符包括如下三類:1.關(guān)鍵字、保留字關(guān)鍵字是一些標(biāo)識(shí)符被賦于特定的含義,如main,int等,叫關(guān)鍵字。保留字是一些關(guān)鍵字,被明文規(guī)定不許挪作它用,叫保留字。C語(yǔ)言中,所有的關(guān)鍵字都是保留字,所以這兩個(gè)詞可以混用。C語(yǔ)言的保留字:auto、break、case、char、const、continue、default、do、double、else、enum、extern、float、for、goto、if、int、long、register、return、short、signed、static、struct、switch、typedef、unionun、signed、void、volatile、while、bool、imaginary、restrict、complex、inline2.預(yù)定義標(biāo)識(shí)符除了上述保留字外,還有一類具有特殊含義的標(biāo)識(shí)符,它們被用作庫(kù)函數(shù)名和預(yù)編譯命令,這類標(biāo)識(shí)符在C語(yǔ)言中稱為預(yù)定義標(biāo)識(shí)符。一般來(lái)說(shuō)不要把標(biāo)識(shí)符再定義為其它標(biāo)識(shí)符(用戶定義標(biāo)識(shí)符)使用。預(yù)定義標(biāo)識(shí)符包括預(yù)編譯程序命令和C編譯系統(tǒng)提供的庫(kù)函數(shù)名。其中預(yù)編譯程序命令有:defineundefincludeifdefifndefendifline3.用戶定義標(biāo)識(shí)符用戶定義標(biāo)識(shí)符是程序員根據(jù)自己的需要定義的一類標(biāo)識(shí)符,用于標(biāo)識(shí)變量、符號(hào)常量、用戶定義函數(shù)、類型名和文件指針等。這類標(biāo)識(shí)符主要由英文字母、數(shù)字和下劃線構(gòu)成,但開(kāi)頭字符一定是字母或下劃線。下劃線(_)起到字母的作用,它還可用于一個(gè)長(zhǎng)名字的描述。如有一個(gè)變量,名字為getfilepath,這樣識(shí)別起來(lái)就比較困難,如果合理適用下劃線,把它寫(xiě)成get_file_path,那么,標(biāo)識(shí)符的可讀性就大大增強(qiáng)。值得一提的是,一般初學(xué)者經(jīng)常會(huì)死記硬背那些標(biāo)識(shí)符、保留字等,實(shí)際上不必要這么做,隨著編程語(yǔ)法的深入學(xué)習(xí),自然就會(huì)避免將保留字定義成變量名,因此,學(xué)習(xí)編程技術(shù),關(guān)鍵在于掌握基本原理、基本方法和技能,靠記憶是不能解決問(wèn)題的。2.2.2常量在程序執(zhí)行過(guò)程中,其值不發(fā)生改變的量稱為常量。常量區(qū)分為不同的類型,如12、0、-3為整型常量,4.1、-0.23為實(shí)型常量,’a’、’d’為字符常量,還有一類是用標(biāo)識(shí)符來(lái)表示常量,稱為符號(hào)常量。符號(hào)常量將在本章的后面小節(jié)作詳細(xì)介紹。2.2.3變量在程序執(zhí)行過(guò)程中,取值可變的量稱為變量。一個(gè)變量應(yīng)該有一個(gè)名字,在內(nèi)存中占據(jù)一定的存儲(chǔ)單元。在該存儲(chǔ)單元中存放變量的值。變量的兩個(gè)要素:變量名和變量值。請(qǐng)注意區(qū)分變量名和變量值這兩個(gè)不同的概念。變量名是變量的名字。實(shí)際上是一個(gè)符號(hào)地址,在對(duì)程序編譯連接時(shí)由系統(tǒng)給每一個(gè)變量分配一個(gè)內(nèi)存地址。變量命名遵循標(biāo)識(shí)符命名規(guī)則。變量值,故名思意就是變量的取值。在程序中從變量中取值,實(shí)際上是通過(guò)變量名找到相應(yīng)的內(nèi)存地址,從其存儲(chǔ)單元中讀取數(shù)據(jù)。ANSIC標(biāo)準(zhǔn)沒(méi)有規(guī)定標(biāo)識(shí)符的長(zhǎng)度(字符個(gè)數(shù)),但各個(gè)C編譯系統(tǒng)都有自己的規(guī)定。為了程序的可移植性(即在甲機(jī)器上運(yùn)行的程序可以基本上不用修改,就能移到乙機(jī)器上運(yùn)行)以及閱讀程序的方便,建議變量名的長(zhǎng)度不要超過(guò)8個(gè)字符。在C語(yǔ)言中,要求對(duì)所有用到的變量作強(qiáng)制定義,也就是“先定義,后使用”。這樣做的目的是:(1)凡是沒(méi)有被先定義的,不作為變量名,這就能保證程序中變量名使用得正確。例如,如果在定義部分寫(xiě)了intaccount而在執(zhí)行語(yǔ)句中錯(cuò)寫(xiě)成acount。如acount=10;在編譯時(shí)檢查出acount沒(méi)有定義,不作為變量名。因此輸出“變量acount”沒(méi)有定義的信息,便于用戶發(fā)現(xiàn)錯(cuò)誤,避免變量名使用時(shí)出錯(cuò)。(2)每一個(gè)變量被指定一確定類型,在編譯時(shí)就能為其分配相應(yīng)的存儲(chǔ)單元。(3)指定每一個(gè)變量屬于一個(gè)類型,便于在編譯時(shí),檢查運(yùn)算是否合法。常量和變量可與數(shù)據(jù)類型結(jié)合起來(lái)分類。例如,可分為整型常量、整型變量、浮點(diǎn)常量、浮點(diǎn)變量、字符常量、字符變量、枚舉常量、枚舉變量、以及符號(hào)常量等等。在程序中,常量是可以不經(jīng)說(shuō)明而直接引用的,而變量則必須先說(shuō)明后使用。聲明變量后,需要對(duì)變量進(jìn)行賦值。在程序中常常需要對(duì)變量賦初值,以便使用變量。語(yǔ)言程序中可有多種方法,在定義時(shí)賦以初值的方法,這種方法稱為初始化。在變量說(shuō)明中賦初值的一般形式為:類型說(shuō)明符變量1=值1,變量2=值2,……;例如: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);}運(yùn)行結(jié)果
a=3,b=8,c=5程序中對(duì)各個(gè)變量的賦值如下:a<3,b<--0,c<5b<--a+c2.3整型數(shù)據(jù)整型量包括整型常量、整型變量。整型常量就是整常數(shù)。在C語(yǔ)言中,使用的整常數(shù)有八進(jìn)制、十六進(jìn)制和十進(jìn)制三種。1.整型常量(1)八進(jìn)制整常數(shù)八進(jìn)制整常數(shù)必須以0開(kāi)頭,即以0作為八進(jìn)制數(shù)的前綴。數(shù)碼取值為0~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))(2)十六進(jìn)制整常數(shù)十六進(jìn)制整常數(shù)的前綴為0X或0x。其數(shù)碼取值為0~9,A~F或a~f。以下各數(shù)是合法的十六進(jìn)制整常數(shù):0X2A(十進(jìn)制為42),0XA0(十進(jìn)制為160),0XFFFF(十進(jìn)制為65535)以下各數(shù)不是合法的十六進(jìn)制整常數(shù):5A(無(wú)前綴0X),0X3H(含有非十六進(jìn)制數(shù)碼)(3)十進(jìn)制整常數(shù)十進(jìn)制整常數(shù)沒(méi)有前綴。其數(shù)碼為0~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ū)寫(xiě)常數(shù)時(shí)不要把前綴弄錯(cuò)造成結(jié)果不正確。4.整型常數(shù)的后綴在16位字長(zhǎng)的機(jī)器上,基本整型的長(zhǎng)度也為16位,因此表示的數(shù)的范圍也是有限定的。十進(jìn)制無(wú)符號(hào)整常數(shù)的范圍為0~65535,有符號(hào)數(shù)為-32768~+32767。八進(jìn)制無(wú)符號(hào)數(shù)的表示范圍為0~0177777。十六進(jìn)制無(wú)符號(hào)數(shù)的表示范圍為0X0~0XFFFF或0x0~0xFFFF。如果使用的數(shù)超過(guò)了上述范圍,就必須用長(zhǎng)整型數(shù)來(lái)表示。長(zhǎng)整型數(shù)是用后綴“L”或“l(fā)”來(lái)表示的。例如:十進(jìn)制長(zhǎng)整常數(shù)158L(十進(jìn)制為158),358000L(十進(jìn)制為-358000)。八進(jìn)制長(zhǎng)整常數(shù)012L(十進(jìn)制為10),077L(十進(jìn)制為63),0200000L(十進(jìn)制為65536)十六進(jìn)制長(zhǎng)整常數(shù)0X15L(十進(jìn)制為21),0XA5L(十進(jìn)制為165),0X10000L(十進(jìn)制為65536)長(zhǎng)整數(shù)158L和基本整常數(shù)158在數(shù)值上并無(wú)區(qū)別。但對(duì)158L,因?yàn)槭情L(zhǎng)整型量,C編譯系統(tǒng)將為它分配4個(gè)字節(jié)存儲(chǔ)空間。而對(duì)158,因?yàn)槭腔菊停环峙?個(gè)字節(jié)的存儲(chǔ)空間。因此在運(yùn)算和輸出格式上要予以注意,避免出錯(cuò)。無(wú)符號(hào)數(shù)也可用后綴表示,整型常數(shù)的無(wú)符號(hào)數(shù)的后綴為“U”或“u”。例如:358u,0x38Au,235Lu均為無(wú)符號(hào)數(shù)。前綴,后綴可同時(shí)使用以表示各種類型的數(shù)。如0XA5Lu表示十六進(jìn)制無(wú)符號(hào)長(zhǎng)整數(shù)A5,其十進(jìn)制為165。2.整型變量整型變量可分為以下幾類:(1)基本型類型說(shuō)明符為int,在內(nèi)存中占2個(gè)字節(jié),其取值為基本整常數(shù)。(2)短整量類型說(shuō)明符為shortint或short。所占字節(jié)和取值范圍均與基本型相同(3)長(zhǎng)整型類型說(shuō)明符為longint或long,在內(nèi)存中占4個(gè)字節(jié),其取值為長(zhǎng)整常數(shù)。(4)無(wú)符號(hào)型類型說(shuō)明符為unsigned。無(wú)符號(hào)型又可與上述三種類型匹配而構(gòu)成:符號(hào)基本型類型說(shuō)明符為unsignedint或unsigned。無(wú)符號(hào)短整型類型說(shuō)明符為unsignedshor無(wú)符號(hào)長(zhǎng)整型類型說(shuō)明符為unsignedlong各種無(wú)符號(hào)類型量所占的內(nèi)存空間字節(jié)數(shù)與相應(yīng)的有符號(hào)類型量相同。但由于省去了符號(hào)位,故不能表示負(fù)數(shù)。3.整型變量的說(shuō)明變量說(shuō)明的一般形式為:類型說(shuō)明符變量名標(biāo)識(shí)符,變量名標(biāo)識(shí)符,……;例如:
inta,b,c;(a,b,c為整型變量)longx,y;(x,y為長(zhǎng)整型變量)unsignedp,q;(p,q為無(wú)符號(hào)整型變量)在書(shū)寫(xiě)變量說(shuō)明時(shí),應(yīng)注意以下幾點(diǎn):1.允許在一個(gè)類型說(shuō)明符后,說(shuō)明多個(gè)相同類型的變量。各變量名之間用逗號(hào)間隔。類型說(shuō)明符與變量名之間至少用一個(gè)空格間隔。2.最后一個(gè)變量名之后必須以“;”號(hào)結(jié)尾。3.變量說(shuō)明必須放在變量使用之前。一般放在函數(shù)體的開(kāi)頭部分。[例2.3]#include<stdio.h>voidmain(){ inta,b; longintx,y; intc,d; a=20000; b=30000; x=a+b; c=1; d=4; y=c*d; printf(“x=%ld,y=%ld\n”,x,y);}從程序中可以看到: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ī)則將在以后介紹。2.4浮點(diǎn)型數(shù)據(jù)1.實(shí)型常量實(shí)型也稱為浮點(diǎn)型。實(shí)型常量也稱為實(shí)數(shù)或者浮點(diǎn)數(shù)。實(shí)型常數(shù)不分單、雙精度,都按雙精度double型處理。在C語(yǔ)言中,實(shí)數(shù)只采用十進(jìn)制。它有二種形式:十進(jìn)制數(shù)形式和指數(shù)形式。(1)十進(jìn)制數(shù)形式由數(shù)碼0~9和小數(shù)點(diǎn)組成。例如:0.0,.25,5.789,0.13,5.0,300.,-267.8230等均為合法的實(shí)數(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.實(shí)型變量實(shí)型變量分為兩類:?jiǎn)尉刃秃碗p精度型,其類型說(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ō)明的格式和書(shū)寫(xiě)規(guī)則與整型相同。例如:floatx,y;(x,y為單精度實(shí)型量)doublea,b,c;(a,b,c為雙精度實(shí)型量)2.5字符型數(shù)據(jù)字符型數(shù)據(jù)包括了單個(gè)字符和字符串,其中單個(gè)字符又分字符常量和字符變量。1.字符常量字符常量是用單引號(hào)括起來(lái)的一個(gè)字符。例如'a','b','=','+','?‘都是合法字符常量。在C語(yǔ)言中,字符常量有以下特點(diǎn):(1)字符常量只能用單引號(hào)括起來(lái),不能用雙引號(hào)或其它括號(hào)。(2)2.字符常量只能是單個(gè)字符,不能是字符串。(3)3.字符可以是字符集中任意字符。但數(shù)字被定義為字符型之后就不能參與數(shù)值運(yùn)算。如‘5’和5是不同的?!?’是字符常量,不能參與運(yùn)算。2.轉(zhuǎn)義字符轉(zhuǎn)義字符是一種特殊的字符常量。轉(zhuǎn)義字符以反斜線“\”開(kāi)頭,后跟一個(gè)或幾個(gè)字符。轉(zhuǎn)義字符具有特定的含義,不同于字符原有的意義,故稱“轉(zhuǎn)義”字符。例如,在前面各例題printf函數(shù)的格式串中用到的“\n”就是一個(gè)轉(zhuǎn)義字符,其意義是“回車換行”。轉(zhuǎn)義字符主要用來(lái)表示那些用一般字符不便于表示的控制代碼。常用的轉(zhuǎn)義字符及其含義:\n回車換行\(zhòng)t橫向跳到下一制表位置
\v豎向跳格\b退格\r回車3.字符變量字符變量的取值是字符常量,即單個(gè)字符。字符變量的類型說(shuō)明符是char。字符變量類型說(shuō)明的格式和書(shū)寫(xiě)規(guī)則都與整型變量相同。例如:chara,b;每個(gè)字符變量被分配一個(gè)字節(jié)的內(nèi)存空間,因此只能存放一個(gè)字符。字符值是以ASCII碼的形式存放在變量的內(nèi)存單元之中的。如x的十進(jìn)制ASCII碼是120,y的十進(jìn)制ASCII碼是121。對(duì)字符變量a,b賦予‘x’和‘y‘值:a=‘x’;b=‘y’;實(shí)際上是在a,b兩個(gè)單元內(nèi)存放120和121的二進(jìn)制代碼:
a
01111000b
01111001所以也可以把它們看成是整型量。C語(yǔ)言允許對(duì)整型變量賦以字符值,也允許對(duì)字符變量賦以整型值。在輸出時(shí),允許把字符變量按整型量輸出,也允許把整型量按字符量輸出。整型量為二字節(jié)量,字符量為單字節(jié)量,當(dāng)整型量按字符型量處理時(shí),只有低八位字節(jié)參與處理。這是根據(jù)ASCII碼表(見(jiàn)附錄A)進(jìn)行的。4.字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式及其使用方法將一個(gè)字符常量放到一個(gè)字符變量中,實(shí)際上并不是把該字符本身放到內(nèi)存單元中去,而是將該字符相應(yīng)的ASCII代碼放到存儲(chǔ)單元中。例如字符’a’的ASCII代碼為97,’b’為98,在內(nèi)存中變量ch1,ch2的值實(shí)際上是以二進(jìn)制形式存放的。
5.字符串常量字符串常量是由一對(duì)雙引號(hào)括起的字符序列。例如:"CHINA","Cprogram:,“$12.5”等都是合法的字符串常量。字符串常量和字符常量是不同的量。它們之間主要有以下區(qū)別:(1)字符常量由單引號(hào)括起來(lái),字符串常量由雙引號(hào)括起來(lái)。(2)字符常量只能是單個(gè)字符,字符串常量則可以含一個(gè)或多個(gè)字符。(3)可以把一個(gè)字符常量賦予一個(gè)字符變量,但不能把一個(gè)字符串常量賦予一個(gè)字符變量。在C語(yǔ)言中沒(méi)有相應(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\0。字符常量‘a(chǎn)’和字符串常量“a”雖然都只有一個(gè)字符,但在內(nèi)存中的情況是不同的。'a'在內(nèi)存中占一個(gè)字節(jié),可表示為:a“a”在內(nèi)存中占二個(gè)字節(jié),而且這兩個(gè)字節(jié)是連續(xù)的,可表示為:a\0符號(hào)常量,其中第一個(gè)字節(jié)存放字符'a',第二個(gè)字節(jié)存放結(jié)束符'\0'6.符號(hào)常量在C語(yǔ)言中,可以用一個(gè)標(biāo)識(shí)符來(lái)表示一個(gè)常量,稱之為符號(hào)常量,即標(biāo)識(shí)符形式的常量。符號(hào)常量在使用之前必須先定義,其一般形式為:#define標(biāo)識(shí)符常量其中#define也是一條預(yù)處理命令(預(yù)處理命令都“#”開(kāi)頭),稱為宏定義命令(在第10章編譯預(yù)處理中將進(jìn)一步介紹),其功能是把該標(biāo)識(shí)符定義為其后的常量值。一經(jīng)定義,以后在程序中所有出現(xiàn)該標(biāo)識(shí)符的地方均代之以該常量值。習(xí)慣上符號(hào)常量的標(biāo)識(shí)符用大寫(xiě)字母,變量標(biāo)識(shí)符用小寫(xiě)字母,以示區(qū)別。2.6類型的混合運(yùn)算整型,實(shí)型可以混合運(yùn)算。字符數(shù)據(jù)可以與整型通用,前面已經(jīng)提及。因此,整型,實(shí)型,字符型數(shù)據(jù)間可以混合運(yùn)算。例如:10+’a’+1.5-8765.4321*’b’是合法的。在進(jìn)行運(yùn)算時(shí),不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同以類型,然后進(jìn)行運(yùn)算。變量的數(shù)據(jù)類型是可以轉(zhuǎn)換的。轉(zhuǎn)換的方法有兩種,一種是自動(dòng)轉(zhuǎn)換,一種是強(qiáng)制轉(zhuǎn)換。1.自動(dòng)轉(zhuǎn)換自動(dòng)轉(zhuǎn)換發(fā)生在不同數(shù)據(jù)類型的量混合運(yùn)算時(shí),由編譯系統(tǒng)自動(dòng)完成,也稱為隱式轉(zhuǎn)換。自動(dòng)轉(zhuǎn)換遵循以下規(guī)則:(1)若參與運(yùn)算量的類型不同,則先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算。(2).轉(zhuǎn)換按數(shù)據(jù)長(zhǎng)度增加的方向進(jìn)行,以保證精度不降低。如int型和long型運(yùn)算時(shí),先把int量轉(zhuǎn)成long型后再進(jìn)行運(yùn)算。(3)所有的浮點(diǎn)運(yùn)算都是以雙精度進(jìn)行的,即使僅含float單精度量運(yùn)算的表達(dá)式,也要先轉(zhuǎn)換成double型,再作運(yùn)算。(4)char型和short型參與運(yùn)算時(shí),必須先轉(zhuǎn)換成int型。(5)在賦值運(yùn)算中,賦值號(hào)兩邊量的數(shù)據(jù)類型不同時(shí),賦值號(hào)右邊量的類型將轉(zhuǎn)換為左邊量的類型。如果右邊量的數(shù)據(jù)類型長(zhǎng)度左邊長(zhǎng)時(shí),將丟失一部分?jǐn)?shù)據(jù),這樣會(huì)降低精度,丟失的部分按四舍五入向前舍入。3.1運(yùn)算符與表達(dá)式概述 TurboC的運(yùn)算符非常豐富,主要分為四大類:算術(shù)運(yùn)算符,
賦值運(yùn)算符,關(guān)系運(yùn)算符與邏輯運(yùn)算符。除此之外,還有一些用于完成特殊任務(wù)的運(yùn)算符。在C語(yǔ)言中,除控制語(yǔ)句和輸入輸出函數(shù)外,其它所有基本操作都作為運(yùn)算符處理。3.1.1運(yùn)算符的種類1.算術(shù)運(yùn)算符
用于各類數(shù)值運(yùn)算。包括加(+)、減(-)、乘(*)、除(/)、求余(或稱模運(yùn)算,%)、自增(++)、自減(--)共七種。
2.關(guān)系運(yùn)算符
用于比較運(yùn)算。包括大于(>)、小于(<)、等于(==)、
大于等于(>=)、小于等于(<=)和不等于(!=)六種。3.邏輯運(yùn)算符
用于邏輯運(yùn)算。包括與(&&)、或(||)、非(!)三種。4.位操作運(yùn)算符
與運(yùn)算的量,按二進(jìn)制位進(jìn)行運(yùn)算。包括位與(&)、位或(|)、位非(~)、位異或(^)、左移(<<)、右移(>>)六種。
5.賦值運(yùn)算符
用于賦值運(yùn)算,分為簡(jiǎn)單賦值(=)、復(fù)合算術(shù)賦值(+=,-=,*=,/=,%=)和復(fù)合位運(yùn)算賦值(&=,|=,^=,>>=,<<=)三類共十一種。
6.條件運(yùn)算符
這是一個(gè)三目運(yùn)算符,用于條件求值(?:)。
7.逗號(hào)運(yùn)算符
用于把若干表達(dá)式組合成一個(gè)表達(dá)式(,)。
8.指針運(yùn)算符
用于取內(nèi)容(*)和取地址(&)二種運(yùn)算。
9.求字節(jié)數(shù)運(yùn)算符
用于計(jì)算數(shù)據(jù)類型所占的字節(jié)數(shù)(sizeof)。
10.特殊運(yùn)算符
有括號(hào)(),下標(biāo)[],成員(→,.)等幾種。3.1.2表達(dá)式的概念所謂表達(dá)式,是指用運(yùn)算符和括號(hào)將運(yùn)算對(duì)象(常量、變量和函數(shù)等)連接起來(lái)的、符合C語(yǔ)言語(yǔ)法規(guī)則的式子。每個(gè)表達(dá)式都有一個(gè)值和類型。
表達(dá)式求值按運(yùn)算符的優(yōu)先級(jí)和結(jié)合性所規(guī)定的順序進(jìn)行。另外,單個(gè)常量、變量或函數(shù),可以看作是表達(dá)式的一種特例。我們常將單個(gè)常量、變量或函數(shù)構(gòu)成的表達(dá)式稱為簡(jiǎn)單表達(dá)式,而將其它表達(dá)式稱之為復(fù)雜表達(dá)式。3.2算術(shù)運(yùn)算符與算術(shù)表達(dá)式3.2.1五種基本的算術(shù)運(yùn)算符C語(yǔ)言中有以下五種基本的算術(shù)運(yùn)算符:+(加法運(yùn)算符,或正值運(yùn)算符。例如:2+3、+1)-(減法運(yùn)算符,或負(fù)值運(yùn)算符。例如:7–2、–1)* (乘法運(yùn)算符。例如:1*2)/ (除法運(yùn)算符。例如:6/2)%(模運(yùn)算符,或稱求余運(yùn)算符,%兩側(cè)均應(yīng)為整形數(shù)據(jù),例如:5%2的值為3)1.關(guān)于加法運(yùn)算+ 加法運(yùn)算符“+”加法運(yùn)算符為雙目運(yùn)算符,即應(yīng)有兩個(gè)量參與加法運(yùn)算。如a+b,4+8等。它具有右結(jié)合性。[例3.1]
加法運(yùn)算voidmain(){ inta,b,x; a=8; b=4; x=a+b; printf("a=%d,b=%d,x=%d\n",a,b,x);}程序運(yùn)行結(jié)果如下: a=8,b=4,x=12本例中,第3行定義3個(gè)整形變量a、b、x,第4行給a賦初值為8,第5行也是給b賦初值為4,第6行先進(jìn)行加法運(yùn)算a+b,值為12,再把12賦給x。2.關(guān)于減法運(yùn)算– 減法運(yùn)算符“–”為雙目運(yùn)算符。但“–”也可作負(fù)值運(yùn)算符,此時(shí)為單目運(yùn)算,如–x,–5等具有左結(jié)合性。[例3.2]“–”作負(fù)值運(yùn)算符voidmain(){ intx,y; x=10; y=-x; printf("x=%d,y=%d\n",x,y);}程序運(yùn)行結(jié)果如下: x=10,y=-10本例中,第3行定義2個(gè)整形變量x、y,第4行給x賦初值為10,第5行先對(duì)x進(jìn)行負(fù)值運(yùn)算-x,值為-10,再賦給y。3.關(guān)于乘法運(yùn)算* 乘法運(yùn)算符“*”是雙目運(yùn)算符,具有左結(jié)合性。
[例3.3]
乘法運(yùn)算voidmain(){ inta,b,x; a=8; b=4; x=a*b; printf("a=%d,b=%d,x=%d\n",a,b,x);}程序運(yùn)行結(jié)果如下: a=8,b=4,x=32本例中,第3行定義3個(gè)整形變量a、b、x,第4行給a賦初值為8,第5行也是給b賦初值為4,第6行先進(jìn)行乘法運(yùn)算a*b,值為32,再把32賦給x。4.關(guān)于除法運(yùn)算/C語(yǔ)言規(guī)定:兩個(gè)整數(shù)相除,其商為整數(shù),小數(shù)部分被舍棄。例如,5/2=2。除法運(yùn)算符“/”雙目運(yùn)算具有左結(jié)合性。參與運(yùn)算量均為整型時(shí),結(jié)果也為整型,舍去小數(shù)。如果運(yùn)算量中有一個(gè)是實(shí)型,則結(jié)果為雙精度實(shí)型。
[例3.4]
除法運(yùn)算voidmain(){printf("\n\n%d,%d\n",20/7,-20/7);printf("%f,%f\n",20.0/7,-20.0/7);}程序運(yùn)行結(jié)果如下:2,-22.857143,-2.8571435.關(guān)于求余數(shù)運(yùn)算% 求余運(yùn)算符(模運(yùn)算符)“%”為雙目運(yùn)算,具有左結(jié)合性。要求運(yùn)算符兩側(cè)的操作數(shù)均為整型數(shù)據(jù),否則出錯(cuò)。求余運(yùn)算的結(jié)果等于兩數(shù)相除后的余數(shù)。[例3.5]
求余運(yùn)算符voidmain(){printf("%d\n",100%3);}程序運(yùn)行結(jié)果如下: 1本例輸出100除以3所得的余數(shù)1。3.2.2算術(shù)表達(dá)式所謂算術(shù)表達(dá)式是指用算術(shù)運(yùn)算符和括號(hào)將運(yùn)算對(duì)象(也稱操作數(shù))連接起來(lái)的、符合C語(yǔ)言規(guī)則的式子。例如,3+6*9、(x+y)/2-1等,都是算術(shù)表達(dá)式。3.3賦值運(yùn)算符與賦值表達(dá)式3.3.1賦值運(yùn)算符 賦值符號(hào)“=”就是賦值運(yùn)算符,它的作用是將一個(gè)表達(dá)式的值賦給一個(gè)變量。賦值運(yùn)算符的一般形式為:
變量=賦值表達(dá)式例如:
x=5; y=(float)5/2;第一條語(yǔ)句是把常量5賦給變量x,第二語(yǔ)句是把表達(dá)式(float)5/2的值賦給變量y。3.3.2類型轉(zhuǎn)換(1)實(shí)型賦予整型,舍去小數(shù)部分。(2)整型賦予實(shí)型,數(shù)值不變,但將以浮點(diǎn)形式存放,即增加小數(shù)部分(小數(shù)部分的值為0)。(3)字符型賦予整型,由于字符型為一個(gè)字節(jié),而整型為二個(gè)字節(jié),故將字符的ASCII碼值放到整型量的低八位中,高八位為0。(4)整型賦予字符型,只把低八位賦予字符量。[例3.6]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)行結(jié)果如下: 107,322.000000,107,B復(fù)合賦值運(yùn)算符是由賦值運(yùn)算符之前再加一個(gè)雙目運(yùn)算符構(gòu)成的。復(fù)合賦值運(yùn)算的一般格式為:變量雙目運(yùn)算符=表達(dá)式
└──┬──┘
復(fù)合賦值運(yùn)算符它等價(jià)于:變量=變量雙目運(yùn)算符(表達(dá)式)。當(dāng)表達(dá)式為簡(jiǎn)單表達(dá)式時(shí),表達(dá)式K外的一對(duì)圓括號(hào)才可缺省,否則可能出錯(cuò)。3.3.4賦值表達(dá)式所謂賦值表達(dá)式是指由賦值運(yùn)算符或復(fù)合賦值運(yùn)算符,將一個(gè)變量和一個(gè)表達(dá)式連接起來(lái)的表達(dá)式。它的一般格式如下:
變量(復(fù)合)賦值運(yùn)算符表達(dá)式
賦值表達(dá)式的功能是先計(jì)算表達(dá)式的值再賦予左邊的變量。賦值運(yùn)算符具有右結(jié)合性。3.4關(guān)系運(yùn)算符與關(guān)系表達(dá)式 本節(jié)介紹的是C語(yǔ)言中的關(guān)系運(yùn)算符及關(guān)系表達(dá)式。關(guān)系運(yùn)算符是邏輯運(yùn)算中比較簡(jiǎn)單的一種。所謂“關(guān)系運(yùn)算”實(shí)際上是“比較運(yùn)算”。將兩個(gè)值進(jìn)行比較,判斷其比較的結(jié)果是否符合給定的條件。例如,x>23是一個(gè)關(guān)系表達(dá)式,大于號(hào)(>)是一個(gè)關(guān)系運(yùn)算符,如果x的值為25,則滿足給定的“x>23”條件,因此關(guān)系表達(dá)式的值為“真”(即“條件滿足”);如果a的值為20,不滿足“x>23”條件,則稱關(guān)系表達(dá)式的值為“假”。3.4.1關(guān)系運(yùn)算符在程序中經(jīng)常需要比較兩個(gè)量的大小關(guān)系,以決定程序下一步的工作。比較兩個(gè)量的運(yùn)算符稱為關(guān)系運(yùn)算符。在C語(yǔ)言中有以下關(guān)系運(yùn)算符: 比較 (==) 大于 (>) 小于 (<) 大于等于(>=) 小于等于(<=) 不等于 (?。剑╆P(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í)相同。對(duì)于>=,<=,?。?,==都是一個(gè)操作符的整體,所以中間不能有空格,而且前三個(gè)操作符的字符次序不能顛倒。例如:下面的寫(xiě)法都是不合法的。 =<,=>,=!,<=,>=,==,?。?.4.2比較運(yùn)算符比較(==)和賦值(=)是兩個(gè)不同的操作,所以用的操作符也不同。比較用于測(cè)試給定的2個(gè)操作數(shù)是否相等。例如:
if(x==8888) printf(“xis8888\n”);C語(yǔ)言中,表達(dá)式(無(wú)參函數(shù)除外)都產(chǎn)生值,賦值操作符產(chǎn)生的值正是所賦的值。而比較運(yùn)算符產(chǎn)生的值是比較的結(jié)果,可能是0或是1,即假或真。真和假是邏輯值。在C語(yǔ)言中,假意味著0,真意味著非0。所以,任意一個(gè)非0數(shù)都是真,表示為邏輯值就是1。3.4.3不等于運(yùn)算符當(dāng)要測(cè)試一些變量不真時(shí),可以使用不等于操作符。例如,如果要在一些變量是真時(shí),在屏幕上顯示一則消息,則可以用如下語(yǔ)句:
if(x!=12)
printf(“xisn’t12\n”);要注意的是,如果顛倒?。?,則意義完全不同:
if(x=!12)
printf(“xisn’t12\n”);該if條件表達(dá)式中是一個(gè)賦值語(yǔ)句,!12為非真,即0。所以該條件表達(dá)式相當(dāng)于if(x=0),于是printf語(yǔ)句永遠(yuǎn)也一會(huì)執(zhí)行。3.4.4嵌入賦值有時(shí)候,需要將一個(gè)函數(shù)值賦給一變量,然后比較該變量的值與預(yù)定值是否相等。例如:
x=func(); if(x==somevalue) /*語(yǔ)句*/
上面的語(yǔ)句與下面的代碼等價(jià):
if((x=func())==somevalue) /*語(yǔ)句*/ 因?yàn)橐ox賦值,然后確定x的值,所以先進(jìn)行賦值。而賦值表達(dá)式的值即x的值可以作為比較的操作數(shù)。這里,由于==操作比=操作優(yōu)先級(jí)高,所以需要額外加一個(gè)括號(hào)。這種賦值緊接比較的表達(dá)式稱為嵌入賦值,它經(jīng)常在程序樣例中看到。3.4.5關(guān)系表達(dá)式所謂關(guān)系表達(dá)式是指用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式(可以是算術(shù)表達(dá)式或關(guān)系表達(dá)式、邏輯表達(dá)式、賦值表達(dá)式、字符表達(dá)式)連接起來(lái)的式子。關(guān)系表達(dá)式的一般形式為: 表達(dá)式關(guān)系運(yùn)算符表達(dá)式例如:a+b>c-d,x>3/2,'a'+1<c,-i-5*j==k+1;都是合法的關(guān)系表達(dá)式。由于表達(dá)式也可以又是關(guān)系表達(dá)式。因此也允許出現(xiàn)嵌套的情況,例如:a>(b>c),a!=(c==d)等。關(guān)系表達(dá)式的值是“真”和“假”,用“1”和“0”表示[例3.7]voidmain(){ charc='k'; inti=1,j=2,k=3; floatx=3e+5,y=0.85; printf("%d,%d\n",'a'+5<c,-i-2*j>=k+1); printf("%d,%d\n",1<j<5,x-5.25<=x+y); printf("%d,%d\n",i+j+k==-2*j,k==j==i+5);}程序運(yùn)行結(jié)果如下:1,01,10,0在本例中求出了各種關(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ì)算0==i+5,也不成立,故表達(dá)式值為0。3.5邏輯運(yùn)算符與邏輯表達(dá)式 本節(jié)介紹的是C語(yǔ)言中的邏輯運(yùn)算符及邏輯表達(dá)式。關(guān)系表達(dá)式只能描述單一條件,例如“x>=0”。如果需要描述“x>=0”、同時(shí)“x<10”,就要借助于邏輯表達(dá)式了。3.5.1邏輯運(yùn)算符及其運(yùn)算規(guī)則1.C語(yǔ)言提供了三種邏輯運(yùn)算符:&& 邏輯與(相當(dāng)于“同時(shí)”)|| 邏輯或(相當(dāng)于“或者”)! 邏輯非(相當(dāng)于“否定”)例如,下面的表達(dá)式都是邏輯表達(dá)式:(x>=0)&&(x<10),(x<1)||(x>5),!(x==0), (year%4==0)&&(year%100!=0)||(year%400==0)
2.運(yùn)算規(guī)則(1)!:當(dāng)運(yùn)算量的值為時(shí),運(yùn)算結(jié)果為“假”;當(dāng)運(yùn)算量的值為“假”時(shí),運(yùn)算結(jié)果為“真”。(2)||:當(dāng)且僅當(dāng)兩個(gè)運(yùn)算量的值都為“假”時(shí),運(yùn)算結(jié)果為,否則為“真”。(3)&&:當(dāng)且僅當(dāng)兩個(gè)運(yùn)算量的值都為“真”時(shí),運(yùn)算結(jié)果為“真”,否則為“假”。例如,假定x=5,則(x>=0)&&(x<10)的值為“真”,(x<-1)||(x>5)的值為“假”。3.5.2邏輯非運(yùn)算符(?。?!改變條件表達(dá)式的真假值,即邏輯運(yùn)算的“非”。原來(lái)是0,則!0為1;原來(lái)為非0,則!操作使之變?yōu)?。例如:
if(!(x==12)) printf(“xisnot12.\n”);因?yàn)?=比!優(yōu)先級(jí)紙,所以額外的括號(hào)是需要的。包圍“x==12”的括號(hào)使比較先進(jìn)行,然后再進(jìn)行非操作。3.5.3邏輯運(yùn)算&&和||是兩個(gè)邏輯運(yùn)算符,它們的意義為求兩個(gè)條件表達(dá)式的邏輯與和邏輯或。例如: (x=0)&&(x=10) (x=1)||(x=0)本例中,第一個(gè)表達(dá)式為邏輯與表達(dá)式,其值為“假”,第二個(gè)表達(dá)式為邏輯或表達(dá)式,其值為“真”。3.5.4邏輯運(yùn)算符的運(yùn)算優(yōu)先級(jí)1.邏輯非的優(yōu)先級(jí)最高,邏輯與次之,邏輯或最低,即:
!(非)→&&(與)→||(或)2.與其它種類運(yùn)算符的優(yōu)先關(guān)系
!→算術(shù)運(yùn)算→關(guān)系運(yùn)算→&&→||→賦值運(yùn)算邏輯運(yùn)算的值也有“真”和“假”兩種,用“1”和“0”來(lái)表示。其求值規(guī)則如下:(1)與運(yùn)算&&參與運(yùn)算的兩個(gè)量都為真時(shí),結(jié)果才為真,否則為假。例如5>0&&4>2,由于5>0為真,4>2也為真,相與的結(jié)果也為真。(2)或運(yùn)算||參與運(yùn)算的兩個(gè)量只要有一個(gè)為真,結(jié)果就為真。兩個(gè)量都為假時(shí),結(jié)果為假。例如:5>0||5>8,由于5>0為真,相或的結(jié)果也就為真。(3)非運(yùn)算!參與運(yùn)算量為真時(shí),結(jié)果為假;參與運(yùn)算量為假時(shí),結(jié)果為真。例如:!(5>0)的結(jié)果為假。3.5.5邏輯表達(dá)式所謂邏輯表達(dá)式就是用邏輯運(yùn)算符將關(guān)系表達(dá)式或邏輯量連接起來(lái)的式子。邏輯表達(dá)式的一般形式為: 表達(dá)式邏輯運(yùn)算符表達(dá)式其中的表達(dá)式可以又是邏輯表達(dá)式,從而組成了嵌套的情形。例如:(a&&b)&&c根據(jù)邏輯運(yùn)算符的左結(jié)合性,上式也可寫(xiě)為:a&&b&&c邏輯表達(dá)式的值是式中各種邏輯運(yùn)算的最后值,以“1”和“0”分別代表“真”和“假”。[例3.8]voidmain(){ charc='k'; inti=1,j=2,k=3; floatx=3e+5,y=0.85; printf("%d,%d\n",!x*!y,!!!x); printf("%d,%d\n",x||i&&j-3,i<j&&x<y); printf("%d,%d\n",i==5&&c&&(j=8),x+y||i+j+k);}程序運(yùn)行結(jié)果如下:0,01,00,13.6其他運(yùn)算符 在C語(yǔ)言中,除前面四種運(yùn)算符外,還有自增(++)、自減(--)運(yùn)算符,逗號(hào)運(yùn)算符(,)和條件運(yùn)算。下面分別介紹這三種運(yùn)算符。3.6.1自增、自減運(yùn)算符自增運(yùn)算符記為“++”,其功能是使變量的值自增1。自減運(yùn)算符記為“--”,其功能是使變量值自減1。自增,自減運(yùn)算符均為單目運(yùn)算,都具有右結(jié)合性??捎幸韵聨追N形式:
++i
i自增1后再參與其它運(yùn)算。--i
i自減1后再參與其它運(yùn)算。
i++
i參與運(yùn)算后,i的值再自增1。i--
i參與運(yùn)算后,i的值再自減1。粗略地看,
++i和i++的作用相當(dāng)于i=i+1。但++i和i++不同之處在于++i是先執(zhí)行i=i+1后,再使用i的值;而i++先使用i的值后,再執(zhí)行i=i+1。說(shuō)明:1.自增、自減運(yùn)算,常用于循環(huán)語(yǔ)句中,使循環(huán)控制變量加(或減)1,以及指針變量中,使指針指向下(或上)一個(gè)地址。2.自增、自減運(yùn)算符,不能用于常量和表達(dá)式。 例如,5++、--(a+b)等都是非法的。3.在表達(dá)式中,連續(xù)使同一變量進(jìn)行自增或自減運(yùn)算時(shí),很容易出錯(cuò),所以最好避免這種用法。在理解和使用上容易出錯(cuò)的是i++和i--
。特別是當(dāng)它們出在較復(fù)雜的表達(dá)式或語(yǔ)句中時(shí),常常難于弄清,因此應(yīng)仔細(xì)分析。[例3.9]自增、自減運(yùn)算符的用法與運(yùn)算規(guī)則示例。/*程序功能:自增、自減運(yùn)算符的用法與運(yùn)算規(guī)則示例*/main(){intx=6,y;printf("x=%d\n",x); /*輸出x的初值*/y=++x; /*前置運(yùn)算*/printf("y=++x:x=%d,y=%d\n",x,y);y=x--; /*后置運(yùn)算*/printf("y=x--:x=%d,y=%d\n",x,y);}程序運(yùn)行結(jié)果如下:x=6y=++x:x=7,y=7y=x--:x=6,y=73.6.2逗號(hào)運(yùn)算(,)及其表達(dá)式C語(yǔ)言提供一種用逗號(hào)運(yùn)算符“,”連接起來(lái)的式子,稱為逗號(hào)表達(dá)式。逗號(hào)運(yùn)算符又稱順序求值運(yùn)算符。1.逗號(hào)表達(dá)式的一般形式: 表達(dá)式1,表達(dá)式2,……,表達(dá)式n2.逗號(hào)表達(dá)式的求解過(guò)程: 自左至右,依次計(jì)算各表達(dá)式的值,“表達(dá)式n”的值即為整個(gè)逗號(hào)表達(dá)式的值。[例3.10]逗號(hào)運(yùn)算符voidmain(){inta=2,b=4,c=6,x,y;y=(x=a+b),(b+c);printf("y=%d,x=%d",y,x);}程序運(yùn)行結(jié)果如下: x=6,y=6本例中,y等于整個(gè)逗號(hào)表達(dá)式的值,也就是表達(dá)式2的值,x是第一個(gè)表達(dá)式的值。3.6.3條件運(yùn)算符和條件表達(dá)式如果在條件語(yǔ)句中,只執(zhí)行單個(gè)的賦值語(yǔ)句時(shí),常可使用條件表達(dá)式來(lái)實(shí)現(xiàn)。不僅使程序簡(jiǎn)潔,也提高了運(yùn)行效率。條件運(yùn)算符為“?”和“:”,它是一個(gè)三目運(yùn)算符,即有三個(gè)參與運(yùn)算的量。由條件運(yùn)算符組成條件表達(dá)式的一般形式為: 表達(dá)式1?表達(dá)式2:表達(dá)式3其求值規(guī)則為:如果表達(dá)式1的值為真,則以表達(dá)式2的值作為條件表達(dá)式的值,否則以表達(dá)式2的值作為整個(gè)條件表達(dá)式的值。條件表達(dá)式通常用于賦值語(yǔ)句之中使用條件表達(dá)式時(shí),還應(yīng)注意以下幾點(diǎn):1.條件運(yùn)算符的運(yùn)算優(yōu)先級(jí)低于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符,但高于賦值符。因此max=(a>b)?a:b可以去掉括號(hào)而寫(xiě)為max=a>b?a:b2.條件運(yùn)算符“?”和“:”是一對(duì)運(yùn)算符,不能分開(kāi)單獨(dú)使用。3.條件運(yùn)算符的結(jié)合方向是自右至左。例如:a>b?a:c>d?c:d應(yīng)理解為a>b?a:(c>d?c:d)這也就是條件表達(dá)式嵌套的情形,即其中的表達(dá)式3又是一個(gè)條件表達(dá)式。[例3.11]
用條件表達(dá)式對(duì)上例重新編程,輸出兩個(gè)數(shù)中的大數(shù)。voidmain(){ inta,b,max; printf("Inputtwonumbers:"); scanf("%d%d",&a,&b); printf("max=%d",a>b?a:b);}程序運(yùn)行結(jié)果如下:Inputtwonumbers:34max=43.7運(yùn)算符的優(yōu)先級(jí)和結(jié)合性本節(jié)介紹的是C語(yǔ)言中的運(yùn)算符的優(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ò)誤。從程序流程的角度來(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)。本章從
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 時(shí)間序列ARIMA模型課件
- 賀卡手工課課件
- 時(shí)間像小馬車課件
- 2025版企業(yè)特殊崗位勞動(dòng)合同范本
- 2025版智能工廠承包勞務(wù)服務(wù)管理協(xié)議
- 二零二五年度地質(zhì)災(zāi)害防治土石方工程分包協(xié)議
- 二零二五版教育設(shè)施場(chǎng)地租賃合同
- 2025版股權(quán)整體轉(zhuǎn)讓合同范本:企業(yè)股權(quán)交易全流程指南
- 2025版車輛質(zhì)押借款合同:汽車質(zhì)押貸款協(xié)議
- 2025版運(yùn)輸合同履行監(jiān)督與服務(wù)協(xié)議書(shū)
- 低溫余熱鍋爐綜合利用
- 電工技能與實(shí)訓(xùn)仿真教學(xué)系
- 2020新譯林版高中英語(yǔ)全七冊(cè)單詞表(必修一~選擇性必修四)
- 離婚協(xié)議書(shū)電子版下載
- 數(shù)據(jù)治理咨詢項(xiàng)目投標(biāo)文件技術(shù)方案
- 家長(zhǎng)課堂作業(yè)及答案
- 中國(guó)石油天然氣集團(tuán)公司鉆井液技術(shù)規(guī)范樣本
- 2021年江蘇省燃?xì)庑袠I(yè)職業(yè)技能競(jìng)賽燃?xì)夤艿勒{(diào)壓工理論知識(shí)題庫(kù)
- 電氣專業(yè)求職個(gè)人簡(jiǎn)歷模板5篇
- 金融服務(wù)營(yíng)銷(第二版)
- 創(chuàng)新基礎(chǔ)(創(chuàng)新思維)PPT完整全套教學(xué)課件
評(píng)論
0/150
提交評(píng)論