C語言程序設(shè)計(jì)教程(一)219_第1頁
C語言程序設(shè)計(jì)教程(一)219_第2頁
C語言程序設(shè)計(jì)教程(一)219_第3頁
C語言程序設(shè)計(jì)教程(一)219_第4頁
C語言程序設(shè)計(jì)教程(一)219_第5頁
已閱讀5頁,還剩214頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

C語言程序設(shè)計(jì)教程(一)第1章C程序設(shè)計(jì)概述第2章數(shù)據(jù)類型,運(yùn)算符和表達(dá)式第3章順序結(jié)構(gòu)第4章選擇結(jié)構(gòu)第1章C語言程序設(shè)計(jì)概述C語言是目前最流行的程序設(shè)計(jì)語言之一,既具有一般高級語言特性,又具有低級語言特性。通過本章學(xué)習(xí),了解C語言開展的歷史背景,C語言的特點(diǎn),重點(diǎn)掌握C語言程序的結(jié)構(gòu)和在VisualC++集成環(huán)境下運(yùn)行C程序的步驟與方法。1.1C語言的開展及其特點(diǎn)C語言是國際上流行的、很有開展前途的計(jì)算機(jī)高級語言。既可以用來編寫系統(tǒng)軟件,也可以用來編寫應(yīng)用程序。以前操作系統(tǒng)等系統(tǒng)軟件主要采用匯編語言編寫。匯編語言依賴于計(jì)算機(jī)硬件,程序的可讀性、可移植性都比較差。為了提高可讀性和可移植性,人們希望采用高級語言編寫這些軟件,但是一般的高級語言難以實(shí)現(xiàn)匯編語言的某些操作,特別是針對硬件的一些操作〔如:內(nèi)存地址的讀寫-直接硬件、二進(jìn)制位的操作〕。人們設(shè)法尋找一種既具有一般高級語言特性,又具有低級語言特性的語言,C語言就在這種情況下應(yīng)運(yùn)而生。C語言的開展簡史:ALGOL60->CPL->BCPC->B->C->標(biāo)準(zhǔn)C->ANSIC->ISOC。1.1C語言的開展及其特點(diǎn)(續(xù))ALGOL60:是1960年出現(xiàn)的一種面向問題的高級語言。ALGOL60離硬件較遠(yuǎn),不適合用來編寫系統(tǒng)程序。CPL〔CombinedProgramminglanguage,組合編程語言):1963年英國的劍橋大學(xué)推出了CPL,CPL是在ALGOL60根底上更接近于硬件的一種語言。但CPL規(guī)模大,實(shí)現(xiàn)困難。BCPL〔BasicCombinedProgramminglanguage,根本的組合編程語言〕:1967年英國劍橋大學(xué)的MatinRichards對CPL語言做了簡化,推出了BCPL語言。B語言:1970年美國貝爾實(shí)驗(yàn)室KenThompson對BCPL進(jìn)一步簡化所得到的一種簡單而且接近硬件的B語言〔取BCPL語言的第一個(gè)字母〕。B語言精練、接近硬件,但過于簡單,數(shù)據(jù)無類型。B語言誕生后,Unix開始用B語言改寫〔原來的UNIX操作系統(tǒng)是1969年由美國的貝爾實(shí)驗(yàn)室的K.Thompson和開發(fā)成功的,是用匯編語言寫的〕。1.1C語言的開展及其特點(diǎn)(續(xù))C語言:1972年至1973年間,貝爾實(shí)驗(yàn)室的在B語言的根底上設(shè)計(jì)出了C語言(取BCPL的第二個(gè)字母)。C語言既保持了BCPL和B語言的優(yōu)點(diǎn)(精練,接近硬件),又克服了它們的缺點(diǎn)(過于簡單,數(shù)據(jù)無類型等)。C語言誕生后,Unix很快用C語言改寫,并被移植到其它計(jì)算機(jī)系統(tǒng)。為了推廣UNIX操作系統(tǒng),1977年發(fā)表了不依賴于具體機(jī)器系統(tǒng)的C語言編譯文本?可移植的C語言編譯程序?。1978年以后,C語言已先后移植到大、中、小、微型機(jī)上,成為世界上應(yīng)用最廣泛的計(jì)算機(jī)語言。標(biāo)準(zhǔn)C:以1978年發(fā)表的UNIX第7版中的C編譯程序?yàn)楦?,BrianW.Kernighan和DennisM.Ritchie(合稱K&R)合著了影響深遠(yuǎn)的名著?TheCProgrammingLanguage?,這本書中介紹的C語言成為后來廣泛使用的C語言版本的根底,它被稱為標(biāo)準(zhǔn)C。1.1C語言的開展及其特點(diǎn)(續(xù))ANSIC:1983年,美國國家標(biāo)準(zhǔn)化協(xié)會(huì)(ANSI)根據(jù)C語言問世以來各種版本對C的開展和擴(kuò)充,制定了新的標(biāo)準(zhǔn),稱為ANSIC。ANSIC比原來的標(biāo)準(zhǔn)C有了很大的開展。K&R在1988年修改了他們的經(jīng)典著作?TheCProgrammingLanguage?,按照ANSIC標(biāo)準(zhǔn)重新寫了該書。1987年,ANSI又公布了新標(biāo)準(zhǔn)——87ANSIC。ISOC:1990年,國際標(biāo)準(zhǔn)化組織ISO(InternationalStandardOrganization)接受87ANSIC為ISOC的標(biāo)準(zhǔn)(ISO9899—1990)。目前流行的C編譯系統(tǒng)都是以它為根底的。1.1C語言的開展及其特點(diǎn)(續(xù))1999年推出的C99在保存C語言特征的根底上,增加了面向?qū)ο蟮男绿卣鳎笴語言從面向過程的語言開展成為面向?qū)ο蟮恼Z言。C語言是C++的根底,掌握了C語言,再學(xué)習(xí)C++面向?qū)ο蟮恼Z言,將起到事半功倍的效果。目前在微型機(jī)上常用的有MicrosoftC、TurboC、QuickC、BORLANDC等多種版本。這些不同版本的C編譯系統(tǒng)所實(shí)現(xiàn)的語言功能和語法規(guī)那么是根本相同的,但在某些方面又略有差異,因此讀者應(yīng)了解所用的C語言編譯系統(tǒng)的特點(diǎn)(可以參閱有關(guān)手冊)。本書的表達(dá)根本上以ANSIC為根底來講授,上機(jī)環(huán)境使用在Windows操作系統(tǒng)上方便使用的VisualC++6.0可視化集成開發(fā)工具。1.1C語言的開展及其特點(diǎn)(續(xù))C語言開展迅速,且成為最受歡送的程序設(shè)計(jì)語言,主要因?yàn)樗δ軓?qiáng)大,有其顯著的特點(diǎn),這些特點(diǎn)只有通過后續(xù)的學(xué)習(xí),方可很好的理解和體會(huì)它們,在此先作歸納如下:1.C語言簡潔、緊湊,使用方便、靈活C語言只有32個(gè)關(guān)鍵字,9種控制語句,程序書寫自由,主要用小寫字母。2.運(yùn)算符豐富除了最根本的+、-、×、÷、%等運(yùn)算外,C把括號(hào)、賦值、強(qiáng)制類型轉(zhuǎn)換等都作為運(yùn)算符處理,共有34種運(yùn)算符。從而使C的運(yùn)算類型極其豐富,表達(dá)式類型多樣化。1.1C語言的開展及其特點(diǎn)(續(xù))3.?dāng)?shù)據(jù)類型豐富C語言的數(shù)據(jù)類型有整型、實(shí)型、字符型、數(shù)組類型、指針類型、結(jié)構(gòu)體類型、共用體類型等。能用來實(shí)現(xiàn)各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)(如鏈表、樹、棧等)的運(yùn)算。尤其是指針類型數(shù)據(jù),使程序效率更高。4.C語言是結(jié)構(gòu)化語言具有結(jié)構(gòu)化的流程控制語句(如if…else語句、while語句、do…while語句、switch語句、for語句)。用函數(shù)作為程序的模塊單位,便于實(shí)現(xiàn)程序的模塊化。5.語法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大一般的高級語言語法檢查比較嚴(yán),能檢查出幾乎所有的語法錯(cuò)誤。而C語言允許程序編寫者有較大的自由度,因此,放寬了語法檢查。程序員應(yīng)當(dāng)仔細(xì)檢查程序,保證其正確,而不要過分依賴C編譯程序去查錯(cuò)。一個(gè)不熟練的編程人員,編一個(gè)正確的C程序可能會(huì)比編一個(gè)其他高級語言程序難一些。也就是說,對用C語言的人,要求對程序設(shè)計(jì)更熟練一些。1.1C語言的開展及其特點(diǎn)(續(xù))6.可直接與機(jī)器硬件打交道,直接訪問內(nèi)存地址C語言允許直接訪問內(nèi)存地址,能進(jìn)行位操作,能實(shí)現(xiàn)匯編語言的大局部功能,兼有高級和低級語言的特點(diǎn)。C語言的這種雙重性,使它既是成功的系統(tǒng)描述語言〔如編寫UNIX操作系統(tǒng)〕,又是通用的程序設(shè)計(jì)語言。7.生成的目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高用C語言編寫的程序經(jīng)編譯生成的目標(biāo)代碼效率接近于匯編語言程序,只比匯編程序生成的目標(biāo)代碼效率低10%-20%。因此C語言也可用于編寫過程控制程序。8.C語言適用范圍廣,可移植性好C語言程序一個(gè)突出的優(yōu)點(diǎn)是根本上不做修改就能用于各種型號(hào)的計(jì)算機(jī)和各種操作系統(tǒng)。1.2C語言程序的根本結(jié)構(gòu)幾個(gè)簡單的C語言程序例1-1輸出一行信息的C程序。#include<stdio.h>

/*文件包含,標(biāo)準(zhǔn)輸入輸出頭文件*/voidmain()/*主函數(shù)*/{/*函數(shù)體開始*/

printf("Hello,world!\n");

/*輸出語句*/}運(yùn)行結(jié)果:Hello,world!說明:1.main是主函數(shù)的函數(shù)名,每一個(gè)C程序都必須有且僅有一個(gè)main函數(shù)。2.void是函數(shù)的返回值類型,該例無反回值,用void表示。3.{}是函數(shù)開始和結(jié)束的標(biāo)志,不可省略,{}之間為函數(shù)體部份,該例只有一行。4.printf()是C語言中的輸出函數(shù),雙引號(hào)內(nèi)的字符串原樣輸出,"\n"是換行符。5.每個(gè)C語句以分號(hào)結(jié)束。6.使用標(biāo)準(zhǔn)庫函數(shù)時(shí)應(yīng)在程序開頭一行寫:#include<stdio.h>7./*……*/表示注釋。注釋內(nèi)容只是給別人容易看懂,對編譯和運(yùn)行不起作用。所以可以用漢字或英文字符,可以出現(xiàn)在一行中的最右側(cè),也可以單獨(dú)成為一行。1.2C語言程序的根本結(jié)構(gòu)(續(xù))例1-2三個(gè)整型數(shù)4、8、10,按公式s=〔a+b〕*c計(jì)算,并輸出S的值。#include<stdio.h> /*標(biāo)準(zhǔn)輸入輸出頭文件*/voidmain(){ inta,b,c,s; /*聲明四個(gè)整型變量*/a=4;b=8;c=10;/*變量賦初值*/s=(a+b)*c;/*算術(shù)運(yùn)算并賦值*/printf("s=%d\n",s);/*輸出結(jié)果S的值*/}運(yùn)行結(jié)果:s=1201.2C語言程序的根本結(jié)構(gòu)(續(xù))例1-3包含自定義函數(shù)的C程序,輸入兩個(gè)實(shí)數(shù),求其中的較大者。#include<stdio.h>voidmain()/*主函數(shù)*/{ floatmax(floatx,floaty);/*對被調(diào)用函數(shù)max的聲明*/ floata,b,c;/*聲明實(shí)型變量a、b、c*/ printf("a,b=");/*輸出提示信息a,b=*/ scanf("%f%f",&a,&b);/*輸入變量a和b的值*/ c=max(a,b);/*調(diào)用max函數(shù),將得到的返回值賦給c*/ printf("max=%f\n",c);/*輸出c的值*/}floatmax(floatx,floaty)/*定義max函數(shù),函數(shù)值為實(shí)型,形式參數(shù)x,y為實(shí)型*/{ floatz;/*max函數(shù)中的聲明局部,聲明本函數(shù)中用到的變量z為實(shí)型*/1.2C語言程序的根本結(jié)構(gòu)(續(xù)) if(x>y) z=x;/*如果x>y,那么將x值賦給z*/ else z=y;/*否那么將y值賦給z*/ return(z);/*將z的值返回給主調(diào)用函數(shù)*/}運(yùn)行結(jié)果:a,b=5.5,10↙c=10.000000說明:本程序包括main和被調(diào)用函數(shù)max兩個(gè)函數(shù)。max函數(shù)的作用是將x和y中較大者的值賦給變量z。return語句將z的值返回給主調(diào)用函數(shù)main。Max函數(shù)是用戶自定義的函數(shù),在主函數(shù)中對被調(diào)用函數(shù)max進(jìn)行聲明〔稱為函數(shù)原型聲明〕。程序中scanf函數(shù)的作用是輸入a和b的值。&a和&b中的"&"的含義是“取地址〞,此scanf函數(shù)的作用是將兩個(gè)數(shù)值分別輸入到變量a和b的地址所標(biāo)志的單元中。1.2C語言程序的根本結(jié)構(gòu)(續(xù))通過分析以上3個(gè)例子,概括出C語言程序的結(jié)構(gòu)特點(diǎn)如下:1.C程序是由函數(shù)構(gòu)成的一個(gè)C源程序可由一個(gè)main函數(shù)和假設(shè)干個(gè)其他函數(shù)組成,其中必須有且僅有一個(gè)main函數(shù)〔主函數(shù)〕。C程序總是從main函數(shù)開始執(zhí)行的,與main函數(shù)的位置無關(guān)。其它函數(shù)可被主函數(shù)調(diào)用或相互調(diào)用。其它函數(shù)可為C函數(shù)庫中的函數(shù)〔要用時(shí)用#include文件包含〕,也可為用戶自己定義的函數(shù)。2.函數(shù)由函數(shù)首部和函數(shù)體組成函數(shù)的一般結(jié)構(gòu)如下:[函數(shù)返回值類型]函數(shù)名(函數(shù)參數(shù)表)/*函數(shù)首部*/ { 說明語句局部;/*函數(shù)體局部*/ 執(zhí)行語句局部; }1.2C語言程序的根本結(jié)構(gòu)(續(xù))函數(shù)首部包括函數(shù)返回值類型〔可缺省〕、函數(shù)名、函數(shù)的形式參數(shù)〔形參〕名、形式參數(shù)類型。函數(shù)體即函數(shù)說明局部下面的用一對大括號(hào)括起來的局部{……}。函數(shù)體包括兩局部:聲明局部:inta,b,c;可缺省。執(zhí)行局部:由假設(shè)干個(gè)語句組成。可缺省,例如:voiddump(){}這是一個(gè)空函數(shù),什么也不做,但是合法的函數(shù)1.2C語言程序的根本結(jié)構(gòu)(續(xù))3.每個(gè)語句和數(shù)據(jù)聲明的最后必須有一個(gè)分號(hào)C語言中,分號(hào)是程序語句的結(jié)束標(biāo)志,也是C語句的必要組成局部。但預(yù)處理命令、函數(shù)首部和最后一個(gè)花括號(hào)"}"之后不能有分號(hào)。4.C語言數(shù)據(jù)輸入和輸出是由庫函數(shù)實(shí)現(xiàn)的C語言本身沒有輸入輸出語句。輸入和輸出的操作是由庫函數(shù)scanf和printf等函數(shù)來完成的。C對輸入輸出實(shí)行“函數(shù)化〞。1.2C語言程序的根本結(jié)構(gòu)(續(xù))5.C語言嚴(yán)格區(qū)分大小寫字母6.C語言用/*注釋內(nèi)容*/形式進(jìn)行程序注釋在"/*"和"*/"之間的所有字符都為注釋符,C系統(tǒng)不對注釋符進(jìn)行編譯。適當(dāng)加上必要的注釋,以增加程序的可讀性,使用注釋是編程人員的良好習(xí)慣。7.C程序書寫格式自由一行內(nèi)可以寫幾個(gè)語句,一個(gè)語句可以分寫在多行上,C程序沒有行號(hào)。但需要注意,分行時(shí)不能將一個(gè)單詞分開,也不能將雙引號(hào)引起來的字符串分開。但從便于閱讀和維護(hù)的角度出發(fā),應(yīng)提倡一行一條語句的風(fēng)格,并根據(jù)語句的附屬關(guān)系,程序書寫時(shí)采用縮進(jìn)格式,使程序語句的層次結(jié)構(gòu)清晰,提高程序的可讀性。同一層次語句要左對齊,不同層次的語句要縮進(jìn)假設(shè)干個(gè)字符,這樣程序?qū)哟吻宄?,便于閱讀和理解。1.3C程序的上機(jī)步驟與方法VisualC++不僅僅是一個(gè)C++編譯器,而是一個(gè)基于Windows操作系統(tǒng)的可視化集成開發(fā)環(huán)境IDE〔IntegratedDevelopmentEnvironment〕,1993年Microsoft公司推出VisualC++1.0,新版本不斷問世,2001年推出VisualC++.NET〔即VisualC++7.0〕,它只適用于Windows2000/XP/NT4.0開發(fā)環(huán)境。VisualC++由許多組件組成,包括編輯器、編譯器、調(diào)試器以及程序向?qū)ppWizard、類向?qū)lassWizard等開發(fā)工具。這些組件通過一個(gè)名為DeveloperStudio的組件集成為一個(gè)和諧的開發(fā)環(huán)境。本節(jié)介紹利用VisualC++6.0集成環(huán)境開發(fā)C程序的方法和步驟,主要是因?yàn)槟壳按蠖嘤脩舯容^熟悉Windows操作系統(tǒng)。1.3.1C程序的相關(guān)概念有關(guān)概念程序:程序是由一組計(jì)算機(jī)可以識(shí)別和執(zhí)行的指令構(gòu)成的,每一條指令使計(jì)算機(jī)執(zhí)行特定的操作。源程序:用高級語言或匯編語言編寫的程序稱為源程序。C語言源程序文件的擴(kuò)展名為".c",在VC++環(huán)境下的C源程序文件的擴(kuò)展名為".cpp"。源程序不能直接在計(jì)算機(jī)上執(zhí)行,需要用“編譯程序〞或“解析程序〞將源程序翻譯為二進(jìn)制形式的機(jī)器代碼。1.3.1C程序的相關(guān)概念(續(xù))目標(biāo)程序:源程序經(jīng)過“編譯程序〞翻譯所得到的二進(jìn)制代碼稱為目標(biāo)程序。目標(biāo)程序文件的擴(kuò)展名為".obj"。目標(biāo)代碼盡管已經(jīng)是機(jī)器指令,但是還不能運(yùn)行,因?yàn)槟繕?biāo)程序還沒有解決函數(shù)調(diào)用問題,需要將各個(gè)目標(biāo)程序與庫函數(shù)連接,才能形成完整的可執(zhí)行的程序??蓤?zhí)行程序:目標(biāo)程序與庫函數(shù)連接,形成的完整的可在操作系統(tǒng)下獨(dú)立執(zhí)行的程序稱為可執(zhí)行程序??蓤?zhí)行程序文件的擴(kuò)展名為".exe"。1.3.2運(yùn)行C程序的一般步驟上機(jī)輸入與編輯源程序→對源程序進(jìn)行編譯→與庫函數(shù)連接→運(yùn)行目標(biāo)程序。1.編輯源程序〔1〕編輯指編輯創(chuàng)立源程序是將編寫好的C語言源程序代碼錄入到計(jì)算機(jī)中,形成源程序文件?!?〕本書用VisualC++6.0環(huán)境提供的全屏幕編輯器。在附錄3中介紹TurboC2.0的環(huán)境情況?!?〕在VC6.0環(huán)境中的源程序文件,其擴(kuò)展名為.cpp,而在TurboC2.0環(huán)境中的源程序文件的擴(kuò)展名為.c。2.編譯〔1〕編譯源程序就是由C系統(tǒng)提供的編譯器將源程序文件的源代碼轉(zhuǎn)換成目標(biāo)代碼的過程。1.3.2運(yùn)行C程序的一般步驟(續(xù))〔2〕編譯過程主要進(jìn)行詞法分析和語法分析,在分析過程中如果發(fā)現(xiàn)錯(cuò)誤,將錯(cuò)誤信息顯示在屏幕上通知用戶。經(jīng)過編譯后的目標(biāo)文件的擴(kuò)展名為.obj。3.連接〔1〕連接過程是將編譯過程中生成的目標(biāo)代碼進(jìn)行連接處理,生成可執(zhí)行程序文件的過程?!?〕在連接過程中,時(shí)常還要參加一些系統(tǒng)提供的庫文件代碼。經(jīng)過連接后生成的可執(zhí)行文件的擴(kuò)展名為.exe。4.運(yùn)行運(yùn)行可執(zhí)行文件的方法很多,可在C系統(tǒng)下執(zhí)行“運(yùn)行〞命令。也可以在操作系統(tǒng)下直接執(zhí)行可執(zhí)行文件。1.3.2運(yùn)行C程序的一般步驟(續(xù))1.3.3上機(jī)運(yùn)行C程序的方法要運(yùn)行C程序,就必須選用某一種C語言編譯系統(tǒng),目前使用的大多數(shù)C編譯系統(tǒng)都是集成環(huán)境(IDE)的,把程序的編輯、編譯、連接和運(yùn)行等操作集成于一體,使用方便、快捷。常用的有TurboC2.0、TurboC++3.0、VisualC++等。TurboC2.0:是一個(gè)基于DOS操作系統(tǒng)的集成環(huán)境的,它不支持鼠標(biāo)操作操作,并且在Windows的命令狀態(tài)下使用極不方便。TurboC++3.0:是一個(gè)集成環(huán)境,它具有方便、直觀和易用的界面,雖然它也是DOS環(huán)境下的集成環(huán)境,但支持鼠標(biāo)操作。VisualC++:它是微軟公司推出的開發(fā)Win32應(yīng)用程序〔Windows95/98/2000/XP/NT〕的、面向?qū)ο蟮目梢暬晒ぞ?,用VisualC++對C程序進(jìn)行編譯是十分方便的,但占用的資源比較大。本節(jié)主要對利用VisualC++6.0集成環(huán)境開發(fā)C程序的步驟作介紹,也有有利于今后學(xué)習(xí)C++語言打根底。1.3.4VisualC++6.0環(huán)境運(yùn)行C程序的步驟1.啟動(dòng)VisualC++6.0環(huán)境單擊“開始〞-“程序〞-“MicrosoftVisualstudio6.0〞-“MicrosoftVisualC++6.0〞命令,啟動(dòng)VisualC++,VC6主窗口如下:1.3.4VisualC++6.0環(huán)境運(yùn)行C程序的步驟(續(xù))2.新建工程和編輯C源程序文件〔1〕“文件〞-“新建〞-“工程〞-“Win32ConsoleApplication〞,選擇存盤的位置,輸入工程名,單擊確定。1.3.4VisualC++6.0環(huán)境運(yùn)行C程序的步驟(續(xù))〔2〕選擇“Anemptyproject〞,單擊完成并確定。完成了創(chuàng)立空工程的工作。1.3.4VisualC++6.0環(huán)境運(yùn)行C程序的步驟(續(xù))〔3〕選擇“文件〞-“新建〞-選“文件〞選項(xiàng)卡-選定“C++SoueceFile〞,并輸入源程序文件名:hello,并單擊確定,便進(jìn)入源程序編輯,輸入源程序。1.3.4VisualC++6.0環(huán)境運(yùn)行C程序的步驟(續(xù))〔4〕可在ClassViewd頁面中展開Globals,雙擊main〔〕,或在FileView頁面中展開hellofiles|SourceFiles,雙擊hello.cpp,都可翻開源程序文件hello.cpp,進(jìn)行編輯和修改。1.3.4VisualC++6.0環(huán)境運(yùn)行C程序的步驟(續(xù))3.編譯、連接和運(yùn)行選擇“編譯|執(zhí)行TEST.exe或CTRL+F5〞命令可一次進(jìn)行完成編譯、連接和運(yùn)行工作,會(huì)在輸出區(qū)顯示有關(guān)的信息,假設(shè)有錯(cuò)誤,那么進(jìn)行修改。程序的運(yùn)行結(jié)果如下1.3.4VisualC++6.0環(huán)境運(yùn)行C程序的步驟(續(xù))編譯、連接和運(yùn)行也可以分別執(zhí)行:編譯:編譯|編譯TEST.cpp或CTRL+F7連接:編譯|構(gòu)建TEST.exe或 F7執(zhí)行:編譯|執(zhí)行TEST.exe或 CTRL+F5或者在工具欄上按相應(yīng)的按鈕:1.3.4VisualC++6.0環(huán)境運(yùn)行C程序的步驟(續(xù))經(jīng)過以上操作,VC++在E:\sample\hello為該工程生成了許多文件。下面對主要的文件作簡要的說明,對工程背后的文件及其作用有所了解是有必要的。以以下圖示說明hello工程的主要文件:E:\sample\hello文件夾hello.dsp項(xiàng)目文件Debug文件夾hello.dsw工作區(qū)文件hello.cpp源程序文件hello.obj目標(biāo)文件hello.exe可執(zhí)行文件1.3.4VisualC++6.0環(huán)境運(yùn)行C程序的步驟(續(xù))實(shí)際上最重要的是hello.cpp源程序文件,其他文件一般是VisualC++自動(dòng)生成的。但是在VisualC++中僅有.cpp文件是不能直接編譯、連接的,系統(tǒng)必須創(chuàng)立一個(gè)工程并將.cpp的文件參加到工程中,才能執(zhí)行各種操作。習(xí)題

一個(gè)C程序的執(zhí)行是從

A.從main()函數(shù)開始,直到main()函數(shù)結(jié)束

B.第一個(gè)函數(shù)開始,直到最后一個(gè)函數(shù)結(jié)束

C.第一個(gè)語句開始,直到最后一個(gè)語句結(jié)束

D.main()函數(shù)開始,直到最后一個(gè)函數(shù)結(jié)束在C程序中,main()的位置

A.必須作為第一個(gè)函數(shù)B.必須作為最后一個(gè)函數(shù)

C.可以任意D.必須放在它所調(diào)用的函數(shù)之后習(xí)題

C語言源程序的根本單位是。

A.過程B.函數(shù)C.子程序D.標(biāo)識(shí)符一個(gè)C源程序有且僅有一個(gè)函數(shù)和________個(gè)其他函數(shù)。C語言源程序的語句分隔符是________。C語言開發(fā)的四個(gè)步驟是________。習(xí)題

C語言有那些主要特點(diǎn)?簡述C編譯和運(yùn)行的根本方法。常用的集成開發(fā)工具有哪些?各有什么特點(diǎn)?編寫一個(gè)程序,在屏幕上輸出以下內(nèi)容:****************************Youarewelcome!****************************編寫一個(gè)C程序,輸入a、b、c3個(gè)值,輸出其中最大者第2章數(shù)據(jù)類型,運(yùn)算符和

表達(dá)式C語言的數(shù)據(jù)類型十分豐富,分為根本類型:整型、字符型、實(shí)型〔單精度型,雙精度型〕、枚舉類型;構(gòu)造類型:數(shù)組、結(jié)構(gòu)體、共用體;指針類型;空類型。C語言中的數(shù)據(jù)必須指定其類型,數(shù)據(jù)分為常量與變量。C語言有34種運(yùn)算符,從而構(gòu)成形式多樣的表達(dá)式,如算術(shù)表達(dá)式、關(guān)系表達(dá)式、邏輯表達(dá)式、賦值表達(dá)式等。本章通過C程序?qū)嵗治鲋?,使讀者理解C語言的根本數(shù)據(jù)類型的表示形式、存儲(chǔ)格式及相關(guān)的運(yùn)算,掌握變量聲明的方法,能夠靈活運(yùn)用各種表達(dá)式。重點(diǎn)掌握:根本的數(shù)據(jù)類型、常量和變量的使用、C語言各種運(yùn)算符和表達(dá)式的應(yīng)用。2.1C語言字符集、標(biāo)識(shí)符與關(guān)鍵字C語言字符集:字符是C語言的最根本的元素,C語言字符集由字母、數(shù)字、空白字符、下劃線、標(biāo)點(diǎn)和特殊字符組成〔在字符串常量和注釋中還可以使用漢字等其它圖形符號(hào)〕。由字符集中的字符可以構(gòu)成C語言的根本的語法單位〔如,標(biāo)識(shí)符,關(guān)鍵詞,運(yùn)算符等〕。2.1.1C語言字符集1.字母:A-Z,a-z2.?dāng)?shù)字:0-93.空白符:空格,制表符〔跳格〕,換行符〔空行〕的總稱。空白符除了在字符,字符串中有意義外,編譯系統(tǒng)忽略其它位置的空白??瞻追诔绦蛑兄皇瞧鸬介g隔作用。在程序的恰當(dāng)位置使用空白將使程序更加清晰,增強(qiáng)程序的可讀性。4.下劃線:_5.標(biāo)點(diǎn)符號(hào)、特殊字符:+-*/%++--<>=>=<===!=!||&&^~|&<<>>()[]{}\“‘?:.,;2.1.2標(biāo)識(shí)符在C程序中,用于標(biāo)識(shí)名字的有效字符序列稱為標(biāo)識(shí)符。標(biāo)識(shí)符可用來標(biāo)識(shí)變量名、符號(hào)常量名、函數(shù)名、數(shù)組名、類型名等。標(biāo)識(shí)符的命名應(yīng)當(dāng)有一定的意義,做到見名知義。如student_name,student_number。保存標(biāo)識(shí)符:是C系統(tǒng)預(yù)先聲明的標(biāo)識(shí)符,通常用于系統(tǒng)聲明和標(biāo)準(zhǔn)庫函數(shù)的名字,如平方根函數(shù)名sqrt,正弦函數(shù)名sin,用戶聲明的標(biāo)識(shí)符不能與系統(tǒng)的保存標(biāo)識(shí)符相同。2.1.2標(biāo)識(shí)符C語言標(biāo)識(shí)符聲明規(guī)那么:(1)標(biāo)識(shí)符由字母、數(shù)字和下劃線三種字符組成,且第一個(gè)字符必須為字母或下劃線。例如:合法的標(biāo)識(shí)符:Average,_total,name,x1不合法的標(biāo)識(shí)符:3ab,yes/no,$123,a>b,x-y,2.1.2標(biāo)識(shí)符(2)大小寫敏感。標(biāo)識(shí)符中的字母大小寫是有區(qū)別的,如Name與name是不同的標(biāo)識(shí)符。在C程序中,一般變量名用小寫字母,常量名用大寫字母,但也不是絕對的,如windows編程中,程序員使用的匈牙利表示法(大小寫混用,每個(gè)單詞第一個(gè)大寫,其余小寫,單詞與單詞之間沒有空格,如WinMain,GetCurrentTime)。2.1.2標(biāo)識(shí)符(3)ANSIC沒有限制標(biāo)識(shí)符長度,但各個(gè)編譯系統(tǒng)都有自己的規(guī)定和限制(如TubrboC規(guī)定為32個(gè)字符,MicrosoftC規(guī)定為8個(gè)字符)。(4)標(biāo)識(shí)符不能與“關(guān)鍵字〞同名,也不與系統(tǒng)預(yù)先聲明的“保存標(biāo)識(shí)符〞同名。2.1.3關(guān)鍵字

關(guān)鍵字〔又稱保存字〕是C語言中規(guī)定的具有特定含義的標(biāo)識(shí)符。C語言中的關(guān)鍵字都有是用小寫字母構(gòu)成的,下面是標(biāo)準(zhǔn)C語言中使用的32個(gè)關(guān)鍵字:autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile2.2C的根本數(shù)據(jù)類型數(shù)據(jù)是程序處理的對象。數(shù)據(jù)以某種特定的形式存在〔如整數(shù)、實(shí)數(shù)、字符〕。2.2.1根本數(shù)據(jù)類型概述C語言提供了十分豐富的數(shù)據(jù)類型,歸納如以下圖所示:單精度實(shí)型(float)雙精度實(shí)型(double)整型(int)字符型(char)數(shù)組類型結(jié)構(gòu)體類型(struct)共用體類型(union)枚舉類型(enum)實(shí)型(浮點(diǎn)數(shù))基本類型構(gòu)造類型指針類型空類型(void)數(shù)據(jù)類型2.2.1根本數(shù)據(jù)類型概述根本數(shù)據(jù)類型由系統(tǒng)定義,用戶可直接使用,而構(gòu)造類型是在根本類型的根底上,由用戶或系統(tǒng)定義,在本章主要介紹根本數(shù)據(jù)類型。有關(guān)說明:〔1〕C語言中的數(shù)據(jù)是有類型的。數(shù)據(jù)有變量與常量之分,它們分別屬于上述這些類型之一。2.2.1根本數(shù)據(jù)類型概述〔2〕不同的數(shù)據(jù)類型有不同的取值范圍,占用不同的存儲(chǔ)空間。如有符號(hào)整數(shù)取值范圍-32768~32767,占2個(gè)字節(jié),浮點(diǎn)數(shù)(float)的取值范圍-3.4×10-38~3.4×10-38。占4個(gè)字節(jié)。〔3〕不同的數(shù)據(jù)類型又進(jìn)行不同的操作〔運(yùn)算〕。如整型數(shù)可以取余〔%〕操作;整型、實(shí)型數(shù)據(jù)可以進(jìn)行加、減、乘、除等;不同的數(shù)據(jù)類型即使有相同的操作有時(shí)含義也不同,如指針數(shù)據(jù)自增1與整數(shù)自增1含義是不同的。2.2.1根本數(shù)據(jù)類型概述〔4〕C語言的數(shù)據(jù)類型可以構(gòu)造復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。如使用結(jié)構(gòu)體數(shù)組可以構(gòu)造線性表。使用指針類型、結(jié)構(gòu)體類型可以構(gòu)造線性鏈表〔棧、隊(duì)列〕、樹、圖等。〔5〕根本類型前面還可以加各種修飾符,用來修改根本類型的含義,以便更準(zhǔn)確地適應(yīng)各種情況的需求。修飾符signed〔帶符號(hào)〕、unsigned〔無符號(hào)〕、short〔短型〕和long〔長型〕,適用于字符型和整數(shù)兩種根本類型,而long還可用于double類型。2.2.1根本數(shù)據(jù)類型概述關(guān)鍵字VisualC++6.0環(huán)境TurboC2.0環(huán)境所占字節(jié)取值范圍所占字節(jié)取值范圍Char1-127~1271-127~127signedchar1-127~1271-127~127unsignedchar10~25510~255Int4-2147483648~21474836472-32768~32767unsigned[int]40~429496729520~65535short[int]2-32768~327672-32768~327672.2.1根本數(shù)據(jù)類型概述signed[int]4-2147483648~21474836472-32768~32767unsignedshort[int]20~6553520~65535signedshort[int]2-32768~327672-32768~32767long[int]4-2147483648~21474836474-2147483648~2147483647unsignedlong[int]40~429496729540~4294967295float4-3.4×10-38~+3.4×10384-3.4×10-38~+3.4×1038double8-1.7×10-308~+3.4×103088-1.7×10-308~+3.4×10308longdouble16-1.2×10-4932~+3.4×10493216-1.2×10-4932~+1.2×1049322.2.1根本數(shù)據(jù)類型概述不同的編譯系統(tǒng)為同類型的數(shù)據(jù)分配的字節(jié)數(shù)不一定相同的,比方對于int型數(shù)據(jù)VC++6.0那么分配4個(gè)字節(jié)而TurboC2.0只分配2個(gè)字節(jié)的存儲(chǔ)單元。要理解取值范圍,必須弄清計(jì)算機(jī)中數(shù)據(jù)的表示形式和存儲(chǔ)形式。例如TurboC2.0環(huán)境下對int型數(shù)據(jù)在計(jì)算機(jī)內(nèi)存中存儲(chǔ)分配占2個(gè)字節(jié)16位二進(jìn)制位,其中用第1位為符號(hào)位〔1-表示負(fù)號(hào),0-表示正號(hào)〕,數(shù)值部份用其余15位二進(jìn)制補(bǔ)碼形式表示有效數(shù)據(jù),故其最小值為-215,在內(nèi)存中16位二進(jìn)制補(bǔ)碼表示為:,其最大值為215-1,16位二進(jìn)制補(bǔ)碼表示為:。2.2.2常量和符號(hào)常量在程序運(yùn)行過程中,其值不能被改變的量稱為常量。常量區(qū)分為不同的類型。例如:整型常量100,125,-100,0;實(shí)型常量3.14,0.125,-3.789;字符型常量‘a(chǎn)’,‘b’,‘2’;字符串常量“a〞,“ab〞,“1232〞等。常量有兩種表示形式:1.字面常量:直接以值的形式表示的常量稱字面常量〔或直接常量〕。如上述舉例。2.2.2常量和符號(hào)常量(續(xù))2.符號(hào)常量:用標(biāo)識(shí)符命名的常量〔通常用大寫字母〕,稱為符號(hào)常量。使用符號(hào)常量一是便于理解〔含義清楚、見名知意〕,二是方便修改方便〔只改聲明處〕。在C語言中使用符號(hào)常量,要事先進(jìn)行聲明,有兩種聲明符號(hào)常量的方法:(1)用const聲明一般形式:const類型符號(hào)常量名=常量值;

2.2.2常量和符號(hào)常量(續(xù))例如:程序中多處用到π的值,可以聲明符號(hào)PI來表示。constfloatPI=3.1416;/*結(jié)尾處有分號(hào)*/(2)用預(yù)處理命令#define來說明一般形式:#define符號(hào)常量名常量值;例如:#definePI3.1416/*結(jié)尾處沒有分號(hào)*/2.2.2常量和符號(hào)常量(續(xù))例2-1符號(hào)常量的使用.#include<stdio.h>#definePI3.1416/*聲明符號(hào)常量PI*/voidmain(){ floatr,area;/*聲明變量r和area*/ printf("r="); scanf("%f",&r);/*用輸入函數(shù)給變量r輸入值*/ area=PI*r*r;/*計(jì)算PI*r*r并將結(jié)果賦值給變量area*/ printf("area=%f\n",area);}運(yùn)行結(jié)果:r=10↙area=314.1600002.2.2常量和符號(hào)常量(續(xù))下面對各種類型的常量作進(jìn)一步的說明:1.整型常量在C語言中,整型常量有十進(jìn)制、八進(jìn)制、十六進(jìn)制三種進(jìn)制表示方法,有正〔+〕數(shù)和負(fù)〔-〕數(shù)之分,正數(shù)的“+〞可省略?!?〕十進(jìn)制整型常量:以數(shù)字1~9開頭,其他位以數(shù)字0~9構(gòu)成。例如:100,-26等。2.2.2常量和符號(hào)常量(續(xù))〔2〕八進(jìn)制整型常量:以數(shù)字0開頭,其他位以數(shù)字0~7構(gòu)成。例如0144,-032等。其值相當(dāng)于十進(jìn)制數(shù)100,-26?!?〕十六進(jìn)制整型常量:以0X或0x開頭〔數(shù)字0和大寫或小寫字母x〕,其他位以數(shù)字0~9或字母a~f或A~F構(gòu)成。例如:0x64,-0x1a等。其值相當(dāng)于十進(jìn)制數(shù)100,-26。如果在整型常量加上后綴L或l表示該常量為長整型常量,加上后綴U或u表示無符號(hào)整型常量。2.2.2常量和符號(hào)常量(續(xù))2.實(shí)型常量實(shí)型常量又稱浮點(diǎn)數(shù)。有兩種表示方式:小數(shù)形式和指數(shù)形式。〔1〕小數(shù)形式:它是由數(shù)的符號(hào)〔+,-〕、數(shù)字和小數(shù)點(diǎn)組成〔注意:必須有小數(shù)點(diǎn)〕。如-1.25、3.0、3.3等都是合法的實(shí)型小數(shù)形式。〔2〕指數(shù)形式:它是由尾數(shù)〔整數(shù)或小數(shù)〕、階碼標(biāo)示〔E或e〕和階碼組成。尾數(shù)不可缺省〔是一整數(shù)或小數(shù)〕,階碼必須為整數(shù)。如1.25E-3、1e-5、3E2-等都是合法的指數(shù)形式。2.2.2常量和符號(hào)常量(續(xù))實(shí)型常量分為單精度、雙精度和長雙精度三種類型。實(shí)型常量如果沒有任何說明,那么表示為雙精度常量,實(shí)型常量后加上F或f那么表示單精度常量,實(shí)型常量后加上L或l那么表示長雙精度常量。3.字符型常量字符型常量是由一對單引號(hào)括起來的單個(gè)字符。它分為一般字符常量和轉(zhuǎn)義字符。一個(gè)字符常量在計(jì)算機(jī)的存儲(chǔ)中占據(jù)一個(gè)字節(jié)?!?〕一般字符常量:一般字符常量是用單引號(hào)括起來的一個(gè)普2.2.2常量和符號(hào)常量(續(xù))通字符,其值為該字符的ASCII碼值。如’a’、’A’、’0’、’?’等都是字符常量,’a’的值為97,’A’的值為65,‘0’的值為48,‘?’的值為63。由于字符數(shù)據(jù)在內(nèi)存中是以ASCII碼存儲(chǔ),它的存儲(chǔ)形式與整數(shù)的存儲(chǔ)形式類似?!?〕轉(zhuǎn)義字符:C語言允許用一種特殊形式的字符常量,它是以反斜杠〔\〕開頭的特定字符序列,表示ASCII字符集中控制字符〔如\n表示換行〕、某些用于功能聲明的字符和其他字符。2.2.2常量和符號(hào)常量(續(xù))字符形式含義\n換行\(zhòng)t橫向跳格(相當(dāng)于tab鍵)\v豎向跳格\b退格\r回車(不換行,光標(biāo)移到行首)\\反斜杠字符本身“\”\’單引號(hào)字符\”雙引號(hào)字符\f走紙換頁\0空值\ddd1-3位8進(jìn)制數(shù)對應(yīng)的ASCCII值代表的字符\xhh1-2位16進(jìn)制數(shù)對應(yīng)ASCCII值代表的字符2.2.2常量和符號(hào)常量(續(xù))4.字符串常量用雙引號(hào)括起來的字符序列稱為字符串常量也稱字符串。如“a〞、“〞〔不含任何字符的空串〕、“12345〞,“Astudent〞等都是合法的字符串常量。字符串常量在內(nèi)存中按順序逐個(gè)存儲(chǔ)字符串中的字符的ASCII碼,并在最后自動(dòng)加上一個(gè)字符’\0’〔空字符,該字符的ASCII碼值為0,也稱NULL字符〕,作為字符串結(jié)束標(biāo)志,所以字符串實(shí)際占用字節(jié)數(shù)要比字符串中字符的個(gè)數(shù)〔長度〕多1個(gè)。2.2.2常量和符號(hào)常量(續(xù))字符或字符串在內(nèi)存中存儲(chǔ)的字符形式“Astudent”Astudent\0“a”a\0‘a(chǎn)’a“”\02.2.2常量和符號(hào)常量(續(xù))例2-2有關(guān)常量的使用。#include<stdio.h>voidmain(){ inta=100,b=-1; floatf=1e-2; charc1='\\',c2='a',c3='0';printf("%d,%d,%o,%o,%x,%x\n",a,b,a,b,a,b);printf("f=%f\n",f); printf("%d,%d,%d\n",c1,c2,c3); printf("%c,\101,\x42\n",c2+3);}2.2.2常量和符號(hào)常量(續(xù))運(yùn)行結(jié)果:100,-1,144,37777777777,64,fffffffff=0.01000092,97,48d,A,B思考:請寫出-1的二進(jìn)制補(bǔ)碼。2.2.3變量變量是以某標(biāo)識(shí)符為名字(變量名),在程序運(yùn)行過程中,其值是可以改變的量。1.變量聲明C語言中,變量使用時(shí)遵循“先聲明,后使用〞的原那么。變量聲明一般形式:數(shù)據(jù)類型變量名表;例如:inta;2.2.3變量(續(xù))floatsum_total;變量所占的字節(jié)數(shù)和取值范圍由其數(shù)據(jù)類型決定,變量名必須符合標(biāo)識(shí)符的命名規(guī)那么。變量名實(shí)際上是代表一個(gè)內(nèi)存的存儲(chǔ)地址,在對程序編譯連接時(shí)由編譯系統(tǒng)給每一個(gè)變量名分配對應(yīng)的內(nèi)存地址。變量的存取操作,實(shí)際上是通過變量名找到相應(yīng)的內(nèi)存地址,從該存儲(chǔ)單元中存取數(shù)據(jù)。2.2.3變量(續(xù))有關(guān)說明:〔1〕數(shù)據(jù)類型:C語言的合法數(shù)據(jù)類型。如例中的int、short、char、float、double等。〔2〕變量名表:變量名是C語言合法的標(biāo)識(shí)符。變量名表可以包含多個(gè)變量名,彼此之間使用逗號(hào)分開,表示同時(shí)聲明假設(shè)干個(gè)具有相同數(shù)據(jù)類型的變量?!?〕變量可以在程序的三種位置聲明:函數(shù)內(nèi)部、所有函數(shù)的外部和函數(shù)的參數(shù)表聲明中。由此聲明的變量對應(yīng)地稱為局部變量、全程變量和形式參數(shù)?!?〕變量的溢出:對于整型變量超出其表示范圍時(shí)就發(fā)生“溢出〞,得到不正確的結(jié)果,但運(yùn)行時(shí)并不報(bào)錯(cuò)。2.2.3變量(續(xù))例如:對于兩個(gè)字節(jié)表示的int型變量其取值范圍:-32768~32767,超出這個(gè)范圍那么可考慮用其他類型,否那么得到不正確的結(jié)果?!?〕變量的誤差:對于實(shí)型變量也是用有限的存儲(chǔ)單元存儲(chǔ)的,因此提供的有效數(shù)字是有限的〔float有效數(shù)字是7位、double有效數(shù)字是16位、longdouble有效數(shù)字是19位)。在有效位以外的數(shù)字將被舍去,由此產(chǎn)生一些誤差。因此使用時(shí)要注意,要根據(jù)需要選擇單精度或雙精度類型,實(shí)數(shù)的比較一般不進(jìn)行精確的“相等〞比較,而是判斷接近或近似,防止直接將一個(gè)很大的實(shí)數(shù)與一個(gè)很小的實(shí)數(shù)相加或相減,否那么會(huì)“喪失〞小的數(shù)。2.2.3變量(續(xù))例2-3數(shù)據(jù)的溢出與誤差。#include<stdio.h>voidmain(){ shortinti,j;floatf,g; i=32767;/*最大值賦給a*/ j=i+3;/*a+3并不等于32770,而是-32766*/ f=123456.789e5;/*只有7位有效數(shù)字,后面的被舍去*/g=f+888;/*很大的數(shù)與一個(gè)很小的實(shí)數(shù)相加,"喪失"了小的數(shù)*/ printf("i=%d,i+3=%d\n",i,j);printf("f=%e,f+888=%e\n",f,g);/*按浮點(diǎn)數(shù)輸出f,g之值*/}2.2.3變量(續(xù))運(yùn)行結(jié)果:i=32767,i+3=-32766f=1.2345678e+010,f+888=1.2345678e+010思考:對于此題如執(zhí)行賦值j=-32768-1;結(jié)果變量j取值是多少?2.2.3變量(續(xù))2.變量的初始化及賦值變量的值可以通過初始化取得,也可以在聲明后,通過給變量賦值的方法取得。在聲明變量的同時(shí)給變量指定值稱為變量的初始化。一般形式:數(shù)據(jù)類型變量名1=表達(dá)式1,變量名2=表達(dá)式2,……;在程序中通過賦值運(yùn)算符“=〞給變量賦值。一般形式:變量名=表達(dá)式;2.2.3變量(續(xù))例2-4關(guān)于各類型數(shù)據(jù)、變量初始化及賦值。#include<stdio.h>#include<math.h>/*數(shù)學(xué)函數(shù)包含文件math.h*/voidmain(){ charc1='a';/*聲明字符變量c1并賦予字符常量值'a'*/ unsignedshortj=-1;/*聲明短整型變量j并賦初值-1*/ inta=3,b=4,c; /*聲明整型變量a,b,c并分別給a,b賦初值3,4*/ floatx=2.5;/*聲明單精度實(shí)型變量x并賦初值2.5*/2.2.3變量(續(xù)) doubles;/*聲明雙精度實(shí)型變量s*/ c=a*b;/*計(jì)算a*b,值賦給c*/ s=sqrt(x);/*計(jì)算x的平方根,值賦給s*/ printf("char:%d,short:%d,int:%d,float:%d,double:%d\n", sizeof(c1),sizeof(j),sizeof(c),sizeof(x),sizeof(s));/*輸出各變量占內(nèi)存的字節(jié)數(shù)*/printf("c=%d,j=%d,c1-32=%c,s=sqrt(x)=%f\n",c,j,c1-32,s);}2.2.3變量(續(xù))運(yùn)行結(jié)果:char:1,short:2,int:4,float:4,double:8c=12,j=65535,c1-32=A,s=sqrt(x)=1.581139思考:為什么輸出的j的值不是-1,c1-32變成了‘A’?2.3運(yùn)算符及表達(dá)式

在C語言中除了提供一般高級語言的算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符外,還提供賦值符運(yùn)算符、位操作運(yùn)算符、自增自減運(yùn)算符等。甚至數(shù)組下標(biāo),函數(shù)調(diào)用都作為運(yùn)算符。C語言提供了13類,共34種運(yùn)算符。C語言豐富的運(yùn)算符構(gòu)成C語言豐富、靈活的表達(dá)式。2.3.1運(yùn)算符和表達(dá)式概述運(yùn)算符:運(yùn)算符是表示實(shí)現(xiàn)某種運(yùn)算的符號(hào)。表達(dá)式:是由運(yùn)算符、常量、變量、函數(shù)、圓括號(hào)等按一定的規(guī)那么組成的式子。每一個(gè)表達(dá)式也都具有一定的值。2.3.1運(yùn)算符和表達(dá)式概述(續(xù))C語言的運(yùn)算符分類歸納如下:(1)算術(shù)運(yùn)算符:+-*/%++--(2)關(guān)系運(yùn)算符:><==>=<=!=(3)邏輯運(yùn)算符:!&&‖(4)位運(yùn)算符:<<>>~|∧&(5)賦值運(yùn)算符:=及其擴(kuò)展賦值運(yùn)算符(6)條件運(yùn)算符:?:(7)逗號(hào)運(yùn)算符:,2.3.1運(yùn)算符和表達(dá)式概述(續(xù))(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ù)運(yùn)算符()2.3.1運(yùn)算符和表達(dá)式概述(續(xù))有關(guān)說明:〔1〕據(jù)運(yùn)算符的運(yùn)算對象的個(gè)數(shù),C語言的運(yùn)算符又分為單目運(yùn)算符、雙目運(yùn)算符和三目運(yùn)算符。例如單目運(yùn)算符++,雙目運(yùn)算符〔+,-,*,/等〕,三目運(yùn)算符?:。〔2〕運(yùn)算符的優(yōu)先級運(yùn)算符的優(yōu)先級是指不同的運(yùn)算符在表達(dá)式中進(jìn)行運(yùn)算的先后次序。例如,算術(shù)運(yùn)算符*、/的優(yōu)先級高于+、-的優(yōu)先級?!?〕運(yùn)算符的結(jié)合性當(dāng)一個(gè)運(yùn)算對象的兩側(cè)的運(yùn)算符的優(yōu)先級相同時(shí),運(yùn)算的結(jié)合方向稱為結(jié)合性。運(yùn)算符的結(jié)合性分為左結(jié)合和右結(jié)合兩種。在C語言中,運(yùn)算對象先與左面的運(yùn)算符結(jié)合稱左結(jié)合,如+、-、*、/的結(jié)合方向?yàn)樽宰笙蛴遥贿\(yùn)算對象先與右面的運(yùn)算符結(jié)合稱右結(jié)合,如單目運(yùn)算符++、--的結(jié)合方向是自右向左。2.3.1運(yùn)算符和表達(dá)式概述(續(xù))優(yōu)先級運(yùn)算符結(jié)合性1()、[]、->、.自左至右2!、~、++、--、-、(類型)、*、&、sizeof自右至左3*、/、%自左至右4+、-自左至右5<<、>>自左至右6<、<=、>、>=自左至右7==、!=自左至右8&自左至右9∧自左至右10|自左至右11&&自左至右12||自左至右13?:自右至左14=及其擴(kuò)展賦值運(yùn)算符自右至左15,自左至右2.3.2算術(shù)運(yùn)算符及算術(shù)表達(dá)式1.根本算術(shù)運(yùn)算符算術(shù)運(yùn)算符分根本算術(shù)運(yùn)算符和自增、自減運(yùn)算符。根本算術(shù)運(yùn)算符包括:+、-、*、/、%。+〔加法運(yùn)算符或正值運(yùn)算符。如10+3,a+b,+2〕-〔減法運(yùn)算符或負(fù)值運(yùn)算符。如10-3,a-b,-2〕*〔乘法運(yùn)算符。如10*3,a*b〕/〔除法運(yùn)算符。如10/3其值取整數(shù)3,10.0/3其值取浮點(diǎn)數(shù)3.333333〕%〔模運(yùn)算符或求余運(yùn)算符,%要求兩側(cè)均為整型數(shù)據(jù)。如10%3的值為1〕。2.3.2算術(shù)運(yùn)算符及算術(shù)表達(dá)式(續(xù))說明:〔1〕假設(shè)除法運(yùn)算符的運(yùn)算對象均為整型數(shù)據(jù),那么結(jié)果為其商的整數(shù)局部,舍去小數(shù)局部。如13/7的結(jié)果為1。假設(shè)運(yùn)算對象中有一個(gè)為負(fù)值,那么舍入的方向是不固定的。如,-13/7在有的機(jī)器上得到結(jié)果是-1,有的機(jī)器上得到結(jié)果是-2,但多數(shù)機(jī)器采取“向零取整〞方法,即13/7=1,-13/7=-1,取整后向零靠攏?!?〕求余運(yùn)算符〔%〕的運(yùn)算對象必須是整型數(shù)據(jù),運(yùn)算結(jié)果的符號(hào)與被除數(shù)的符號(hào)相同,如:-13%7運(yùn)算結(jié)果為-6,13%-7運(yùn)算結(jié)果為6,-13%-7運(yùn)算結(jié)果為-6。〔3〕如果參加+,-,*,/運(yùn)算的兩個(gè)數(shù)有一個(gè)為實(shí)數(shù)型,那么結(jié)果為double型,因?yàn)樗袑?shí)數(shù)都按double型進(jìn)行計(jì)算。2.3.2算術(shù)運(yùn)算符及算術(shù)表達(dá)式(續(xù))2.自增、自減運(yùn)算符自增(++)和自減(--)運(yùn)算符是單目運(yùn)算符,其功能是使變量的值增1或減1。它們既可以作前綴運(yùn)算符,如++i,--i;也可以作后綴運(yùn)算符,如i++,i--。作為前綴和后綴運(yùn)算符的處理方法是不同的:++i,--i在使用i之前,先使i的值加(減)1。假設(shè)i值為5,x=++i,那么x為6,i值為6。i++,i--在使用i之后,使i的值加(減)1。假設(shè)i值為5,x=i++,那么x值為5,i值為6。2.3.2算術(shù)運(yùn)算符及算術(shù)表達(dá)式(續(xù))自增或自減運(yùn)算符在使用時(shí),需要注意以下幾點(diǎn):〔1〕運(yùn)算符的操作對象,只能是變量,而不能作用于常量或表達(dá)式?!?〕運(yùn)算符的優(yōu)先級高于根本算術(shù)運(yùn)算符,結(jié)合性是“自右向左〞右結(jié)合。如:-i++,它相當(dāng)于-(i++)形式,a+++b相當(dāng)于(a++)+b形式。3.算術(shù)表達(dá)式算術(shù)表達(dá)式:用算術(shù)運(yùn)算符和括號(hào)將運(yùn)算對象連接起來的、符合C語法規(guī)那么的式子,稱為算術(shù)表達(dá)式。運(yùn)算對象可以是常量、變量、函數(shù)等。2.3.2算術(shù)運(yùn)算符及算術(shù)表達(dá)式(續(xù))

數(shù)學(xué)表達(dá)式C語言算術(shù)表達(dá)式PI*r*r(-b+sqrt(b*b-4*a*c))/(2*a)(sin(a)-cos(b))/22.3.2算術(shù)運(yùn)算符及算術(shù)表達(dá)式(續(xù))說明:(1)C語言算術(shù)表達(dá)式的乘號(hào)〔*〕不能省略。例如:數(shù)學(xué)式,相應(yīng)的C表達(dá)式應(yīng)該寫成:x*y。(2)C語言表達(dá)式中只能出現(xiàn)字符集允許的字符。例如:數(shù)學(xué)相應(yīng)的C表達(dá)式應(yīng)該寫成:PI*r*r〔其中PI是已經(jīng)聲明的符號(hào)常量〕。(3)C語言算術(shù)表達(dá)式只使用圓括號(hào)改變運(yùn)算的優(yōu)先順序〔不能用{}和[]〕??梢允褂枚鄬訄A括號(hào),此時(shí)左右括號(hào)必須配對,運(yùn)算時(shí)從內(nèi)層括號(hào)開始,由內(nèi)向外依次計(jì)算表達(dá)式的值。2.3.3關(guān)系運(yùn)算符及關(guān)系表達(dá)式

1.關(guān)系運(yùn)算符關(guān)系運(yùn)算符是對兩個(gè)數(shù)據(jù)進(jìn)行比較運(yùn)算,判定兩個(gè)數(shù)據(jù)是否符合給定的關(guān)系。假設(shè)符合給定的關(guān)系,那么關(guān)系成立,取真值〔1〕,否那么取假值〔0〕。C語言中的關(guān)系運(yùn)算符有6種,按優(yōu)先級分為兩組:優(yōu)先級6:>(大于),<(小于),>=(大于等于),<=(小于等于) 優(yōu)先級7:==〔等于〕,!=〔不等于〕2.3.3關(guān)系運(yùn)算符及關(guān)系表達(dá)式(續(xù))2.關(guān)系表達(dá)式用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起來的符合C語法規(guī)那么的式子稱為關(guān)系表達(dá)式。關(guān)系表達(dá)式的運(yùn)算結(jié)果是一個(gè)邏輯值,即“真〞或“假〞。在C語言中關(guān)系運(yùn)算結(jié)果為真,以整數(shù)1表示,結(jié)果為假,以整數(shù)0表示。例如:有inta=3,b=4;那么有:表達(dá)式表達(dá)式的值a==b0a+b>100a!=51關(guān)系運(yùn)算符的優(yōu)先級低于算術(shù)運(yùn)算符的優(yōu)先級,且等于〔==〕和不等于〔!=〕的優(yōu)先級低于另外四種運(yùn)算符的優(yōu)先級。關(guān)系運(yùn)算符的結(jié)合性是左結(jié)合性。2.3.4邏輯運(yùn)算符及邏輯表達(dá)式

1.邏輯運(yùn)算符C語言中提供三種邏輯運(yùn)算符:&&(邏輯與)、||(邏輯或)、!(邏輯非)。它們的運(yùn)算法那么見下表所示:運(yùn)算符運(yùn)算名稱運(yùn)算法則結(jié)合性&&邏輯與當(dāng)兩個(gè)操作對象都為“真”時(shí),運(yùn)算結(jié)果為“真”,其他情況運(yùn)算結(jié)果都為“假”。左結(jié)合||邏輯或只有當(dāng)兩個(gè)操作對象都為“假”,運(yùn)算結(jié)果才為“假”,其他情況運(yùn)算結(jié)果都為“真”。左結(jié)合!邏輯非當(dāng)操作對象為“真”時(shí),運(yùn)算結(jié)果為“假”;當(dāng)操作對象為“假”時(shí),運(yùn)算結(jié)果為“真”。右結(jié)合2.3.4邏輯運(yùn)算符及邏輯表達(dá)式(續(xù))2.邏輯表達(dá)式用邏輯運(yùn)算符將表達(dá)式連接起來的符合C語法規(guī)那么的式子稱為邏輯表達(dá)式。邏輯表達(dá)式的運(yùn)算結(jié)果只有兩個(gè)值1和0〔1表示“真〞,0表示和“假〞〕。邏輯表達(dá)式常用于表示一些復(fù)雜的關(guān)系。例如:x>=0&&x<=100表示x的取值在0~100時(shí)表達(dá)式結(jié)果為1,否那么為0。2.3.4邏輯運(yùn)算符及邏輯表達(dá)式(續(xù))說明:〔1〕C語言沒有邏輯類型數(shù)據(jù),進(jìn)行邏輯判斷時(shí),數(shù)據(jù)的值為非0,那么認(rèn)作邏輯真,數(shù)據(jù)的值為0,那么認(rèn)作邏輯假;而邏輯表達(dá)式的值為真,那么用整形數(shù)1表示,邏輯表達(dá)式的值為假,那么用整形數(shù)0表示。例如:當(dāng)a=5.5,b=’a’時(shí),!a,!b的值均為“假〞,即為0。a&&b的值為1,因?yàn)閍和b均為非0值?!?〕在進(jìn)行邏輯運(yùn)算時(shí),邏輯表達(dá)式運(yùn)算到其值完全確定時(shí)為止。例如:2.3.4邏輯運(yùn)算符及邏輯表達(dá)式(續(xù))運(yùn)算表達(dá)式(a=1)&&(!a)&&(a=5)時(shí),由于運(yùn)算a=1之后運(yùn)算!a的值為0,所以就不再進(jìn)行a=5的運(yùn)算了,因此a的值仍為1,而整個(gè)邏輯表達(dá)式的值為0。!(邏輯非)的優(yōu)先級別較高為2,&&(邏輯與)的優(yōu)先級為11,||(邏輯或)的優(yōu)先級為12。例如:有inta=3,b=4,c=5;那么有:表達(dá)式表達(dá)式的值a&&b<00a==b||a>01!(a+b>10)1a>b&&b>c||b!=01,也相當(dāng)于(a>b)&&(b>c)||(b!=0)表達(dá)式2.3.5條件運(yùn)算符及條件表達(dá)式

1.條件運(yùn)算符條件運(yùn)算符是“?:〞,是C語言中唯一的三目運(yùn)算符??梢源鎖f--else語句的完成簡單的條件求值。2.條件表達(dá)式用條件運(yùn)算符將兩個(gè)表達(dá)式連接起來的符合C語法規(guī)那么的式子稱為條件表達(dá)式。條件表達(dá)式的一般形式:表達(dá)式1?表達(dá)式2:表達(dá)式32.3.5條件運(yùn)算符及條件表達(dá)式(續(xù))運(yùn)算過程:先計(jì)算表達(dá)式1的值,假設(shè)為“真〞,那么計(jì)算表達(dá)式2的值,整個(gè)條件表達(dá)式的值就是表達(dá)式2的值;假設(shè)表達(dá)式1的值為“假〞,那么計(jì)算表達(dá)式3的值,整個(gè)條件表達(dá)式的值就是表達(dá)式3的值。說明:(1)條件運(yùn)算符優(yōu)先級高于賦值運(yùn)算符。如y=x>0?x:-x;相當(dāng)于y=(x>0?x:-x);功能是將x的絕對值賦給y。(2)條件運(yùn)算符結(jié)合性是右結(jié)合。如x>0?1:x<0?-1:0;相當(dāng)于x>0?1:〔x<0?-1:0〕;。2.3.6賦值運(yùn)算符及賦值表達(dá)式賦值運(yùn)算符包括簡單賦值運(yùn)算符和復(fù)合賦值運(yùn)算符。1.賦值運(yùn)算符C語言的賦值運(yùn)算符為“=〞,其作用是將賦值運(yùn)算符右側(cè)的表達(dá)式的值賦給其左側(cè)的變量。例如:x=10; /*將10賦給變量x*/y=3*x*x+5*a; /*將表達(dá)式之值賦給變量y*/2.賦值表達(dá)式由賦值運(yùn)算符將一個(gè)變量和一個(gè)表達(dá)式連接起來的式子稱作賦值表達(dá)式。它的一般形式為:變量=表達(dá)式2.3.6賦值運(yùn)算符及賦值表達(dá)式(續(xù))運(yùn)算過程:先計(jì)算賦值運(yùn)算符右側(cè)的“表達(dá)式〞的值,將賦值運(yùn)算符右側(cè)“表達(dá)式〞的值賦值給左側(cè)的變量,整個(gè)賦值表達(dá)式的值就是被賦值變量的值。賦值運(yùn)算符優(yōu)先級為14,是自右至左結(jié)合的。例如:a=b=c=8相當(dāng)于a=(b=(c=8)),先計(jì)算c=8結(jié)果為8,將8賦值給b結(jié)果也是8,將8賦值給a結(jié)果也是8,最后整治賦值表達(dá)式之值為8,而變量a,b,c值均為8。說明:(1)賦值運(yùn)算符左邊必須是變量,右邊C合法的表達(dá)式。(2)賦值符號(hào)“=〞不同于數(shù)學(xué)的等號(hào),它沒有相等的含義?!病?=〞相等〕(3)賦值運(yùn)算時(shí),當(dāng)賦值運(yùn)算符兩邊數(shù)據(jù)類型不同時(shí),將由系統(tǒng)自動(dòng)進(jìn)行類型轉(zhuǎn)換。2.3.6賦值運(yùn)算符及賦值表達(dá)式(續(xù))轉(zhuǎn)換原那么是:先將賦值號(hào)右邊表達(dá)式類型轉(zhuǎn)換為左邊變量的類型,然后賦值。進(jìn)行類型轉(zhuǎn)換時(shí)可能發(fā)生存儲(chǔ)單元的擴(kuò)展和載斷,比方不同類型的整型數(shù)據(jù)間的賦值:按照存儲(chǔ)單元的存儲(chǔ)形式直接傳送。由長型整數(shù)賦值給短型整數(shù),截?cái)嘀苯觽魉?,可能造成?shù)據(jù)損失;由短型整數(shù)賦值給長型整數(shù),低位直接傳送,高位根據(jù)低位整數(shù)的符號(hào)進(jìn)行符號(hào)擴(kuò)展,如果是負(fù)數(shù)那么高位全部補(bǔ)1,如果是正數(shù)高位那么補(bǔ)0,以保證得到的值不變。2.3.6賦值運(yùn)算符及賦值表達(dá)式(續(xù))(4)C語言的賦值符號(hào)“=〞除了表示一個(gè)賦值操作外,還是一個(gè)運(yùn)算符,也就是說賦值運(yùn)算符完成賦值操作后,整個(gè)賦值表達(dá)式還會(huì)產(chǎn)生一個(gè)所賦的值,這個(gè)值還可以利用。例如:x=10+(y=5) (整個(gè)表達(dá)式值為15,x值為15,y值為5)a=(b=10)/(c=2) (整個(gè)表達(dá)式值為5,a值為5,b值為10,c值為2)3.復(fù)合賦值運(yùn)算符及其表達(dá)式C語言允許在賦值運(yùn)算符“=〞之前加上其他運(yùn)算符,構(gòu)成復(fù)合運(yùn)算符。C語言可使用的復(fù)合賦值運(yùn)算符有10種。它們是:+=、-=、*=、/=、%= 〔與算術(shù)運(yùn)算符組合〕<<=、>>= 〔與位移運(yùn)算符組合〕&=、∧=、|= 〔與位邏輯運(yùn)算符組合〕2.3.6賦值運(yùn)算符及賦值表達(dá)式(續(xù))復(fù)合賦值表達(dá)式的一般形式為:<變量><雙目運(yùn)算符>=<表達(dá)式>它相當(dāng)于:<變量>=<變量><雙目運(yùn)算符>〔表達(dá)式〕。例如:a+=b-c等價(jià)于a=a+(b-c),a*=b-c等價(jià)于a=a*(b-c),而不是a=a*b-c。假設(shè)a的初值為12,那么a+=a-=a*a的求解過程為:(a)先進(jìn)行a-=a*a的運(yùn)算,它相當(dāng)于a=a-a*a=12-144=-132。(b)再進(jìn)行a+=-132的運(yùn)算,它相當(dāng)于a=a+(-132)=-132-132=-264。2.3.7逗號(hào)運(yùn)算符及逗號(hào)表達(dá)式

1.逗號(hào)運(yùn)算符逗號(hào)運(yùn)算符是“,〞,它的優(yōu)先級低于賦值運(yùn)算符,是左結(jié)合性。2.逗號(hào)表達(dá)式用逗號(hào)運(yùn)算符將假設(shè)干個(gè)表達(dá)式連接成一個(gè)逗號(hào)表達(dá)式。一般形式如下:表達(dá)式1,表達(dá)式2,……表達(dá)式n逗號(hào)表達(dá)式的運(yùn)算過程:先計(jì)算表達(dá)式1,再計(jì)算表達(dá)式2,……,最后再計(jì)算表達(dá)式n,而逗號(hào)表達(dá)式的值為最右邊表達(dá)式n的值。2.3.7逗號(hào)運(yùn)算符及逗號(hào)表達(dá)式(續(xù))

例如:a=4.5,b=6.4,34.5-20.1,a-b該逗號(hào)運(yùn)算表達(dá)式,它由四個(gè)表達(dá)式結(jié)合而成,從左向右依次計(jì)算,逗號(hào)表達(dá)式的值為a-b的值,即-1.9。值得注意的是,逗號(hào)運(yùn)算符是C語言所有運(yùn)算符中優(yōu)先級最低。如:a=10,20;不同于a=(10,20);,前者a的值為10,表達(dá)式的值為20,后者a的值為20,表達(dá)式的值也為20。2.3.7逗號(hào)運(yùn)算符及逗號(hào)表達(dá)式(續(xù))例2-5關(guān)于運(yùn)算符和表達(dá)式的程序?qū)嵗?include<stdio.h>voidmain(){ inta=6,b=7,c,d; /*聲明變量并賦初值*/printf("a++=%d,++b=%d\n",a++,++b);/*輸出a++,b++的值*/ printf(“a=%d,b=%d,a%%b=%d\n〞,a,b,a%b);printf("c=%d\n",c=a>b?a:b);/*輸出表達(dá)式c=a>b?a:b的值*/ printf("d=%d\n",d=a>=0&&a+b>=10); d+=d*=(c,d=c,5*d); /*計(jì)算表達(dá)式d+=d*=(c,d=c,5*d)*/ printf("d=%d\n",d); /*輸出d的值*/}2.3.7逗號(hào)運(yùn)算符及逗號(hào)表達(dá)式(續(xù))運(yùn)行結(jié)果:a++=6,++b=8a=7,b=8,a%b=7c=8d=1d=640思考:分析表達(dá)式d+=d*=(c,d=c,5*d)的求值過程。2.3.8求字節(jié)運(yùn)算符C求字節(jié)運(yùn)算符是sizeof,它用于計(jì)算變量或某種類型的量在內(nèi)存中所占的字節(jié)數(shù)。用法有兩種:1.sizeof表達(dá)式功能是計(jì)算出表達(dá)式計(jì)算結(jié)果所占用內(nèi)存的字節(jié)數(shù)。如在本章例2-4中的應(yīng)用。2.sizeof〔類型名〕功能是計(jì)算出某種類型的量存儲(chǔ)時(shí)所占用內(nèi)存的字節(jié)數(shù)。如:sizeof(float)計(jì)算單精度實(shí)型數(shù)據(jù)在內(nèi)存中所占的字節(jié)數(shù),結(jié)果為4。2.3.9類型轉(zhuǎn)換

整型、單精度、雙精度及字符型數(shù)據(jù)可以進(jìn)行混合運(yùn)算。當(dāng)表達(dá)式中的數(shù)據(jù)類型不一致時(shí),首先轉(zhuǎn)換為同一類型,然后再進(jìn)行運(yùn)算。C語言有兩種方法實(shí)現(xiàn)類型轉(zhuǎn)換:一是自動(dòng)類型轉(zhuǎn)換,另一是強(qiáng)制類型轉(zhuǎn)換。1.自動(dòng)類型轉(zhuǎn)換在表達(dá)式進(jìn)行運(yùn)算時(shí),不同類型的數(shù)據(jù)要轉(zhuǎn)換為同一類型。2.3.9類型轉(zhuǎn)換(續(xù))自動(dòng)轉(zhuǎn)換的規(guī)那么見以下圖所示:char,shortfloatintunsignedlongdoublelongdouble低

2.3.9類型轉(zhuǎn)換(續(xù))說明:(1)float型數(shù)據(jù)自動(dòng)轉(zhuǎn)換成double型;(2)char與short型數(shù)據(jù)自動(dòng)轉(zhuǎn)換成int型;(3)int型與double型數(shù)據(jù)運(yùn)算,直接將int型轉(zhuǎn)換成double型;(4)int型與unsigned型數(shù)據(jù),直接將int型轉(zhuǎn)換成unsigned型;(5)int型與long型數(shù)據(jù),直接將int型轉(zhuǎn)換成long型。主要原那么是:短字節(jié)的數(shù)據(jù)向長字節(jié)數(shù)據(jù)轉(zhuǎn)換。2.3.9類型轉(zhuǎn)換(續(xù))2.強(qiáng)制類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換是指通過強(qiáng)制類型轉(zhuǎn)換運(yùn)算符,將表達(dá)式的類型強(qiáng)制轉(zhuǎn)換為所指定的類型。強(qiáng)制類型轉(zhuǎn)換的一般形式為:〔數(shù)據(jù)類型〕〔表達(dá)式〕功能是將表達(dá)式的值強(qiáng)制轉(zhuǎn)換成指定的數(shù)據(jù)類型。強(qiáng)制類型轉(zhuǎn)換運(yùn)算符優(yōu)先級為2,是自右至左結(jié)合的。2.3.9類型轉(zhuǎn)換(續(xù))例如:〔int〕(10.5*10);是將10.5*10值轉(zhuǎn)換成int型數(shù)據(jù),表達(dá)式的值為105。而〔int〕10.5*10;表達(dá)式的取值為:100。數(shù)據(jù)類型轉(zhuǎn)換是對操作數(shù)的值進(jìn)行轉(zhuǎn)換,并不改變操作數(shù)中變量本身的數(shù)據(jù)類型。例如:inti;floatx=10.5;i=int(x);/*臨時(shí)將變量x的值轉(zhuǎn)換為整型,x仍為實(shí)型*/2.3.9類型轉(zhuǎn)換(續(xù))類型轉(zhuǎn)換過程中,當(dāng)數(shù)據(jù)類型由低向高轉(zhuǎn)換時(shí),數(shù)據(jù)精度不會(huì)受到損失;而數(shù)據(jù)類型由高到低的轉(zhuǎn)換,此時(shí),數(shù)據(jù)精度會(huì)受到損失。習(xí)題

1.以下標(biāo)識(shí)符中不屬于C語言的根本數(shù)據(jù)類型的是。 A.char B.long C.bool D.float2.以下選項(xiàng)中屬于C語言的數(shù)據(jù)類型是。A.復(fù)數(shù)型 B.邏輯型 C.雙精度型 D.集合型3.以下標(biāo)識(shí)符中,合法的標(biāo)識(shí)符是。A.-abc1 B.1abc C._abc1 D.for4.在標(biāo)準(zhǔn)C語言中,不正確的int類型的常數(shù)是。A.32768 B.0 C.037 D.0xAF5.以下所列的C語言常量中,錯(cuò)誤的選項(xiàng)是。A.0xFF B.1.2e0.5 C.2L D.'\72'6.在C語言中,合法的長整型常數(shù)是。A.0L B.4962710 C.324562& D.216D7.以下不正確的語句〔設(shè)有intp,q〕是。A.p*=3;

B.p/=q;

C.p+=3;

D.p&&=q;8.以下使i的運(yùn)算結(jié)果為4的表達(dá)式是。

A.inti=0,j=0;(i=3,(j++)+i);

B.inti=1,j=0;j=i=((i=3)*2);

C.inti=0,j=1;

(j==1)?(i=1):(i=3);D.inti=1,j=1;

i+=j+=2;9.設(shè)n=10,i=4,那么賦值運(yùn)算n%=i+1執(zhí)行后,n的值是。A.0

B.3

C.2

D.110.逗號(hào)表達(dá)式(a=3*5,a*4),a+15的值為,a的值是。①A.15

B.60

C.30

D.不確定

②A.60

B.30

C.15

D.9011.如果a=1,b=2,c=3,d=4,那么條件表達(dá)式a>b?a:c>d?c:d的值為。A.1

B.2

C.3

D.412.在C語言中,不同類型數(shù)據(jù)混合運(yùn)算時(shí),要先轉(zhuǎn)換成同一類型后進(jìn)行運(yùn)算。設(shè)一表達(dá)式中包含有int,long,unsigned和char類型的變量和數(shù)據(jù),那么表達(dá)式最后的運(yùn)算結(jié)果是類型的數(shù)據(jù)。這四種類型數(shù)據(jù)的轉(zhuǎn)換規(guī)律是。①A.int

B.char

C.unsigned

D.long②A.int->unsigned->long->charB.char->int->long->unsignedC.char->int->unsigned->longD.char->unsigned->long->int13.寫出經(jīng)過以下運(yùn)算后變量a的值,設(shè)a的初值為15:(1)a+=a; (2)a-=2;(3)a*=2+3; (4)a/=a+a;(5)a%=(5%=2) (6)a+=a-=a*=a14.假定x=10,y=20,z=30;試判斷以下邏輯表達(dá)式的真(1)假(0)。(1)x<10||x>10 (2)(x<y+z)&&(x+10<=20)(3)x<10&&x>10 (4)x>y||y>x(5)!(x<y+z)||!(x+10<=20) (6)(!(x==y))&&(x!=y)&&(x<y||y<x)C有哪些根本數(shù)

溫馨提示

  • 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)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論