C語(yǔ)言程序設(shè)計(jì) 課件 梁偉 第1、2章 概述;數(shù)據(jù)類型、運(yùn)算符和表達(dá)式_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì) 課件 梁偉 第1、2章 概述;數(shù)據(jù)類型、運(yùn)算符和表達(dá)式_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì) 課件 梁偉 第1、2章 概述;數(shù)據(jù)類型、運(yùn)算符和表達(dá)式_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì) 課件 梁偉 第1、2章 概述;數(shù)據(jù)類型、運(yùn)算符和表達(dá)式_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì) 課件 梁偉 第1、2章 概述;數(shù)據(jù)類型、運(yùn)算符和表達(dá)式_第5頁(yè)
已閱讀5頁(yè),還剩98頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第1章概述1.1程序設(shè)計(jì)語(yǔ)言1.2C語(yǔ)言的發(fā)展歷史和特點(diǎn)1.3簡(jiǎn)單的C程序示例1.4C語(yǔ)言上機(jī)環(huán)境本章小結(jié)

1.1程序設(shè)計(jì)語(yǔ)言

1.機(jī)器語(yǔ)言

機(jī)器語(yǔ)言是計(jì)算機(jī)唯一能直接接收和執(zhí)行的語(yǔ)言,由二進(jìn)制碼組成。每一串二進(jìn)制碼稱為一條指令。一條指令規(guī)定了計(jì)算機(jī)執(zhí)行的一個(gè)動(dòng)作。機(jī)器語(yǔ)言的主要優(yōu)點(diǎn)在于執(zhí)行速度極快,因?yàn)樗恍枰魏无D(zhuǎn)換即可直接由計(jì)算機(jī)執(zhí)行;缺點(diǎn)是其采用二進(jìn)制碼表示指令,人工記憶十分困難,另外,采用機(jī)器語(yǔ)言編寫(xiě)的計(jì)算機(jī)程序具有不可移植性,即對(duì)某一種體系結(jié)構(gòu)的計(jì)算機(jī)編寫(xiě)的計(jì)算機(jī)程序,在另一種體系結(jié)構(gòu)的計(jì)算機(jī)上不能運(yùn)行。

2.匯編語(yǔ)言

機(jī)器語(yǔ)言難學(xué)、難記、難修改,僅適用于專業(yè)人員。為了簡(jiǎn)化編程,計(jì)算機(jī)科學(xué)家們將機(jī)器語(yǔ)言的每一條指令采用助記符表示,即實(shí)現(xiàn)機(jī)器語(yǔ)言符號(hào)化。

采用匯編語(yǔ)言編寫(xiě)的計(jì)算機(jī)程序必須翻譯為機(jī)器語(yǔ)言后,計(jì)算機(jī)才能識(shí)別運(yùn)行,這些助記符經(jīng)過(guò)匯編器翻譯成機(jī)器語(yǔ)言,這種翻譯程序稱為匯編程序,對(duì)應(yīng)的過(guò)程稱為匯編過(guò)程。匯編語(yǔ)言的出現(xiàn)降低了編程難度,提高了編程效率。

3.高級(jí)語(yǔ)言

機(jī)器語(yǔ)言和匯編語(yǔ)言都是面向機(jī)器的語(yǔ)言,屬于低級(jí)語(yǔ)言。高級(jí)語(yǔ)言是一種接近于自然語(yǔ)言和數(shù)學(xué)公式的程序設(shè)計(jì)語(yǔ)言。它采用了完全符號(hào)化的描述形式,用類似自然語(yǔ)言的形式描述對(duì)問(wèn)題的處理過(guò)程,用數(shù)學(xué)表達(dá)式的形式描述對(duì)數(shù)據(jù)的計(jì)算過(guò)程。高級(jí)語(yǔ)言的優(yōu)點(diǎn)是通用性強(qiáng),編程效率高。它使程序員可以不用與計(jì)算機(jī)的硬件打交道,可以不必了解機(jī)器語(yǔ)言的指令系統(tǒng),可集中精力解決問(wèn)題,這極大地提高了編程效率。高級(jí)語(yǔ)言具有可移植性及易學(xué)、易記等特點(diǎn)。

1.2C語(yǔ)言的發(fā)展歷史和特點(diǎn)

1.2.1C語(yǔ)言的發(fā)展歷史20世紀(jì)70年代初,編寫(xiě)計(jì)算機(jī)系統(tǒng)軟件時(shí)人們使用了一種符號(hào)法的自展組合編程語(yǔ)言BCPL。BCPL進(jìn)一步發(fā)展為一種系統(tǒng)軟件描述語(yǔ)言,即B語(yǔ)言。BCPL是在CPL(CombinedProgrammingLanguage)的基礎(chǔ)上開(kāi)發(fā)的,而CPL可以追溯到最早的程序設(shè)計(jì)語(yǔ)言之一—ALGOL60語(yǔ)言。

1972年,美國(guó)貝爾實(shí)驗(yàn)室的丹尼斯·里奇(DennisM.Ritchie)在B語(yǔ)言的基礎(chǔ)上設(shè)計(jì)出了C語(yǔ)言。

目前流行的C語(yǔ)言編譯系統(tǒng)大多是以89ANSIC為基礎(chǔ)進(jìn)行開(kāi)發(fā)的,但不同版本的C編譯系統(tǒng)所實(shí)現(xiàn)的語(yǔ)言功能和語(yǔ)法規(guī)則又略有差別。不同的編譯器開(kāi)發(fā)商在遵照C語(yǔ)言標(biāo)準(zhǔn)的基礎(chǔ)上,對(duì)標(biāo)準(zhǔn)新增了一些特性(如增加了圖形圖像處理能力)或增加了特定的庫(kù)函數(shù)。

1.2.2C語(yǔ)言的特點(diǎn)

(1)?C語(yǔ)言有豐富的運(yùn)算符。

(2)?C語(yǔ)言有豐富的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類型。

(3)?C語(yǔ)言是結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言。

(4)?C語(yǔ)言是模塊化語(yǔ)言。

(5)任何一個(gè)C程序有且僅有一個(gè)稱為主函數(shù)的main()函數(shù)。

(6)?C語(yǔ)言有豐富的預(yù)處理功能。

(7)?C語(yǔ)言是面向過(guò)程的語(yǔ)言,其函數(shù)采用面向過(guò)程的思想進(jìn)行設(shè)計(jì)。

(8)?C程序具有可移植性。不同的程序員可以在不同的平臺(tái)上設(shè)計(jì)實(shí)現(xiàn)某一大型軟件中的子功能,然后在另一平臺(tái)上進(jìn)行組裝,構(gòu)成該大型軟件。

1.3簡(jiǎn)單的C程序示例

1.3.1C程序的構(gòu)成與書(shū)寫(xiě)格式1.C程序的構(gòu)成

2.C程序的書(shū)寫(xiě)格式

在編輯C語(yǔ)言源程序時(shí),需注意以下幾點(diǎn)。

(1)?C程序既可采用塊注釋方法,也可采用行注釋方法。塊注釋的書(shū)寫(xiě)格式如下:

/*注釋部分*/

行注釋的書(shū)寫(xiě)格式如下:

//從此處開(kāi)始至行末尾,為行注釋內(nèi)容

注釋部分只為了提高程序的可讀性,不參與程序的編譯和運(yùn)行。書(shū)寫(xiě)時(shí)要注意“/”與“*”之間或“*”與“/”之間不能有空格。

(2)?C語(yǔ)言一般采用小寫(xiě)字母作為標(biāo)識(shí)符。而B(niǎo)ASIC語(yǔ)言中,一般采用大寫(xiě)字母作為標(biāo)識(shí)符。

(3)?C語(yǔ)言是區(qū)分字母大小寫(xiě)的。如“MAX”“max”和“Max”表示的是3個(gè)不同的標(biāo)識(shí)符。

(4)?C程序書(shū)寫(xiě)格式靈活,一個(gè)語(yǔ)句可連續(xù)寫(xiě)在多行上,一行也可以寫(xiě)多個(gè)語(yǔ)句。如例1-2中的max函數(shù)可以寫(xiě)成如下形式:

intmax(inta,intb){returna>b?a:b;}

(5)為了使書(shū)寫(xiě)的程序結(jié)構(gòu)清晰、層次分明,建議采用“右縮進(jìn)對(duì)齊”的格式編輯C語(yǔ)言源程序,即同一結(jié)構(gòu)層次的語(yǔ)句左對(duì)齊,結(jié)構(gòu)下的語(yǔ)句相對(duì)于結(jié)構(gòu)本身而言向右縮進(jìn)。

1.3.2良好的編程風(fēng)格

關(guān)于良好的編程風(fēng)格,有以下幾點(diǎn)建議可供初學(xué)者參考:

(1)采用一致的命名規(guī)范。

(2)采用適當(dāng)?shù)目s進(jìn)和空格。

(3)添加注釋和文檔。

(4)使代碼模塊化和函數(shù)化。

(5)避免過(guò)長(zhǎng)的函數(shù)和代碼行。

1.4C語(yǔ)言上機(jī)環(huán)境

1.4.1程序的編譯與編程環(huán)境1.程序的編譯利用C語(yǔ)言編寫(xiě)的程序稱為源程序(.c),翻譯成的機(jī)器語(yǔ)言程序稱為目標(biāo)程序(.obj),將目標(biāo)程序鏈接后生成的程序稱為可執(zhí)行程序(.exe)。可執(zhí)行程序是我們?cè)谑褂糜?jì)算機(jī)時(shí)能運(yùn)行的程序。程序的鏈接要用到系統(tǒng)的庫(kù)函數(shù)(即編譯器廠商按C語(yǔ)言標(biāo)準(zhǔn)提供的事先編譯好的函數(shù),供用戶在編程時(shí)使用)。C語(yǔ)言的很多功能也是由庫(kù)函數(shù)完成的。

2.程序的編譯環(huán)境

“工欲善其事,必先利其器”,編程環(huán)境是開(kāi)發(fā)人員用來(lái)編寫(xiě)、調(diào)試和管理源代碼的工具集合,它提供了一個(gè)集成開(kāi)發(fā)環(huán)境(IDE),以提高開(kāi)發(fā)效率。用于C語(yǔ)言程序開(kāi)發(fā)的工具軟件非常豐富,常用的有MicrosoftVisualC++(簡(jiǎn)稱VisualC++)系列軟件、Code::Blocks、QtCreator、Dev-C++、Clang等。

1.4.2C語(yǔ)言程序的開(kāi)發(fā)過(guò)程

開(kāi)發(fā)C語(yǔ)言程序的步驟如下:

(1)在編輯窗口中錄入或修改C/C++源程序,其文件擴(kuò)展名為“.c”或“.cpp”。

(2)用編譯(Compile)命令對(duì)源程序文件進(jìn)行編譯,生成與源程序文件同名的二進(jìn)制目標(biāo)程序文件,其擴(kuò)展名為“.obj”。

(3)用組建(Build)命令對(duì)工程或解決方案進(jìn)行編譯與鏈接,為每個(gè)工程生成相應(yīng)的與工程同名的可執(zhí)行程序文件,其擴(kuò)展名為“.exe”。

(4)運(yùn)行與調(diào)試。

上述步驟中,由于步驟(3)包含了步驟(2),所以一般不需要對(duì)步驟(2)進(jìn)行單獨(dú)操作。因此,用VisualC++2010Express開(kāi)發(fā)C語(yǔ)言程序時(shí),只要反復(fù)進(jìn)行步驟(1)、(3)和步驟(4)即可。C語(yǔ)言程序的開(kāi)發(fā)過(guò)程如圖1-1所示。

圖1-1C語(yǔ)言程序的開(kāi)發(fā)過(guò)程

1.4.3VisualC++2010Express上機(jī)操作

1.啟動(dòng)VisualC++2010Express

如果Windows操作系統(tǒng)中已經(jīng)安裝好VisualC++2010Express,則可在Windows桌面雙擊該軟件圖標(biāo)或在“開(kāi)始”菜單中選擇該軟件以啟動(dòng)VisualC++2010Express,也可在Windows“開(kāi)始”菜單的“運(yùn)行”命令輸入框中輸入命令“VCExpress”以啟動(dòng)VisualC++2010Express。VisualC++2010Express啟動(dòng)后的主界面如圖1-2所示。

圖1-2VisualC++2010Express的主界面

2.新建Project與Solution

在VisualC++2010Express開(kāi)發(fā)環(huán)境下,C程序按“解決方案(Solution)”→“工程(Project)”→“文件(File)”的層次結(jié)構(gòu)進(jìn)行組織。解決方案用于組織和管理一個(gè)或多個(gè)工程,每個(gè)工程由一個(gè)或多個(gè)源程序文件和頭文件所構(gòu)成。同一工程中,可以有多個(gè)源程序文件,但只能有一個(gè)main()函數(shù)。

在VisualC++2010Express起始頁(yè)(StartPage)中單擊“NewProject...”(如圖1-2所示),或在主菜單中單擊“File”→“New”→“Project...”(如圖1-3所示),打開(kāi)如圖1-4所示的新建工程(NewProject)對(duì)話框。

圖1-3VisualC++2010Express新建工程的命令選項(xiàng)

圖1-4新建工程時(shí)設(shè)置工程名、存放位置、解決方案名

在圖1-4中完成設(shè)置后,單擊“OK”→“Next”,將彈出如圖1-5所示的應(yīng)用程序設(shè)置(ApplicationSettings)對(duì)話框。將應(yīng)用程序類型(Applicationtype)設(shè)置為控制臺(tái)應(yīng)用程序(Consoleapplication),并將附加選項(xiàng)(AdditionalOptions)設(shè)置為空工程(Emptyproject)。單擊“Finish”后將彈出如圖1-6所示的界面,在界面左邊的解決方案瀏覽器(SolutionExplorer)中可查看到剛剛新建的解決方案名及工程名。

圖1-5應(yīng)用程序設(shè)置(ApplicationSettings)對(duì)話框

圖1-6在解決方案瀏覽器(SolutionExplorer)中查看新建的解決方案名及工程名

3.在Project中添加并編輯源程序

如圖1-7所示,在解決方案瀏覽器(SolutionExplorer)中,若欲為工程添加新文件(C語(yǔ)言源程序、頭文件等),可依次單擊工程名(如圖1-7中的“myProject_1”)右鍵菜單中的子菜單項(xiàng)“Add”→“NewItem...”,打開(kāi)添加C語(yǔ)言源程序等文件的設(shè)置對(duì)話框(如圖1-8所示)。在該對(duì)話框中,設(shè)置文件類型為“C++File”,文件名(Name)自定義(如圖1-8中命名為“myCode_1.c”),文件位置(Location)默認(rèn)為工程所在位置(如圖1-8中的“D:\mySolution\myProject_1\”,表示文件的存儲(chǔ)位置是之前新建的D盤根目錄下的解決方案文件夾mySolution下的工程文件夾myProject_1)。

圖1-7為工程添加新文件的命令項(xiàng)

圖1-8為工程添加C語(yǔ)言源程序的設(shè)置對(duì)話框

設(shè)置好后,單擊“Add”將出現(xiàn)如圖1-9所示的空白程序編輯窗口。接著,就可以在程序編輯窗口錄入自己編寫(xiě)的C語(yǔ)言源程序了(示例如圖1-10所示)。

圖1-9C語(yǔ)言源程序的文件名及編輯窗口

圖1-10在編輯窗口中錄入C語(yǔ)言源程序的簡(jiǎn)單示例

4.編譯(Compile)

編譯就是把文本形式的C語(yǔ)言源程序文件翻譯為機(jī)器語(yǔ)言形式的目標(biāo)程序文件的過(guò)程。

在C語(yǔ)言源程序文件(如myCode_1.c)的文件名上調(diào)出其右鍵菜單,單擊“Compile”;或在選中C語(yǔ)言源程序文件后,單擊主菜單項(xiàng)“Build”的下拉菜單項(xiàng)“Compile”;或在選中C語(yǔ)言源程序文件后,按快捷鍵“Ctrl+F7”,將生成與C語(yǔ)言源程序文件同名的目標(biāo)程序文件(擴(kuò)展名為“.obj”,默認(rèn)存放于所在工程文件夾的Debug子目錄中)。由于編譯操作是針對(duì)C語(yǔ)言源程序文件進(jìn)行的,且已經(jīng)包含在隨后介紹的組建(Build)操作中,所以編譯操作一般不必單獨(dú)使用。

5.組建(Build)

VisualC++2010Express中的組建操作,相當(dāng)于早期編譯器的編譯與鏈接的組合操作,即先將C語(yǔ)言源程序文件編譯生成目標(biāo)程序文件,然后將整個(gè)工程(或解決方案)的所有目標(biāo)程序文件和用到的相關(guān)庫(kù)函數(shù)文件進(jìn)行組裝,形成最終的可執(zhí)行程序文件。

在解決方案瀏覽器中,在所選的工程名(如myProject_1)上調(diào)出其右鍵菜單并單擊“Build”;或單擊主菜單項(xiàng)“Build”的下拉菜單項(xiàng)“Build”(后接工程名,如“BuildmyProject_1”),將生成與工程名同名的可執(zhí)行程序文件(擴(kuò)展名為“.exe”,默認(rèn)存放于所在解決方案文件夾的Debug子目錄中),如圖1-11所示。

圖1-11對(duì)工程進(jìn)行組建操作的命令項(xiàng)及其執(zhí)行結(jié)果

從圖1-11左邊窗口的解決方案瀏覽器中可以看出,解決方案mySolution中有兩個(gè)工程,分別是myProject_1和myProject_2。若想對(duì)解決方案中的所有工程進(jìn)行組建操作,則在解決方案瀏覽器的最頂端的解決方案名上調(diào)出其右鍵菜單,并單擊“BuildSolution”;或單擊主菜單項(xiàng)“Build”的下拉菜單項(xiàng)“BuildSolution”;或按快捷鍵“F7”,將生成與各工程名同名的可執(zhí)行程序文件(擴(kuò)展名為“.exe”,默認(rèn)存放于所在解決方案文件夾的Debug子目錄中),如圖1-12所示。

圖1-12對(duì)解決方案進(jìn)行組建操作的命令項(xiàng)及其執(zhí)行結(jié)果

6.運(yùn)行程序

如圖1-13所示,選擇“Debug”→“StartWithoutDebugging”菜單項(xiàng),或按快捷鍵“Ctrl+F5”,將運(yùn)行生成的“.exe”文件。程序運(yùn)行結(jié)果如圖1-14所示,按任意鍵即結(jié)束運(yùn)行。

圖1-13運(yùn)行程序的菜單項(xiàng)圖1-14在命令行窗口顯示的程序運(yùn)行結(jié)果

7.調(diào)試程序

調(diào)試程序是程序設(shè)計(jì)過(guò)程中一個(gè)很重要的環(huán)節(jié)。C語(yǔ)言程序的錯(cuò)誤主要包括兩大類,一類是語(yǔ)法錯(cuò)誤,另一類是邏輯設(shè)計(jì)錯(cuò)誤。語(yǔ)法錯(cuò)誤是指違背了C語(yǔ)言語(yǔ)法規(guī)則而導(dǎo)致的錯(cuò)誤。語(yǔ)法錯(cuò)誤分為一般錯(cuò)誤(error)和警告錯(cuò)誤(warning)兩種。當(dāng)程序出現(xiàn)一般錯(cuò)誤時(shí),將不會(huì)產(chǎn)生可執(zhí)行程序。當(dāng)程序出現(xiàn)警告錯(cuò)誤時(shí),通常能夠生成可執(zhí)行程序,但程序運(yùn)行時(shí)可能發(fā)生錯(cuò)誤,嚴(yán)重的錯(cuò)誤還會(huì)引起死機(jī)現(xiàn)象。所以,警告錯(cuò)誤比一般錯(cuò)誤更難修改,程序員應(yīng)該盡量消除警告錯(cuò)誤。編譯器能找出源程序的語(yǔ)法錯(cuò)誤,程序員可以根據(jù)錯(cuò)誤提示信息進(jìn)行修改。

下面介紹VisualC++2010Express查錯(cuò)方法。

1)利用編譯器查找語(yǔ)法錯(cuò)誤

如果程序沒(méi)有違背C語(yǔ)言的語(yǔ)法規(guī)則,編譯器也沒(méi)有提示出錯(cuò),而且程序能夠成功運(yùn)行,但程序執(zhí)行結(jié)果卻與原意不符,這類程序設(shè)計(jì)上的錯(cuò)誤稱為邏輯設(shè)計(jì)錯(cuò)誤或缺陷(Bug)。

如果程序有語(yǔ)法錯(cuò)誤,則在編譯(Compile或Build)時(shí),VisualC++2010Express的編譯器將在輸出窗口中給出語(yǔ)法錯(cuò)誤提示信息。錯(cuò)誤提示信息中一般指出錯(cuò)誤發(fā)生所在位置的行號(hào)。用戶可以在輸出窗口中雙擊錯(cuò)誤提示信息或按F4鍵定位到出錯(cuò)語(yǔ)句,如圖1-15所示。

圖1-15C語(yǔ)言源程序在編譯時(shí)出現(xiàn)了warning和error

2)使用調(diào)試(Debug)器查找邏輯設(shè)計(jì)錯(cuò)誤

VisualC++2010Express提供了重要的調(diào)試工具—Debug,用于查找和修改程序中的邏輯設(shè)計(jì)錯(cuò)誤。VisualC++2010Express的“Debug”主菜單項(xiàng)包含了用于調(diào)試程序的常用子菜單項(xiàng),具體如表1-1所示。

如圖1-16所示,當(dāng)單步執(zhí)行main()函數(shù)中調(diào)用add()函數(shù)的語(yǔ)句時(shí),若執(zhí)行的是“StepOver”,則該語(yǔ)句直接執(zhí)行完成,執(zhí)行流程隨后指向下一條語(yǔ)句,即printf()語(yǔ)句;若執(zhí)行的是“StepInto”,則執(zhí)行流程進(jìn)入add()函數(shù)體內(nèi)部,隨后執(zhí)行add()函數(shù)體內(nèi)部的各條語(yǔ)句。在add()函數(shù)體內(nèi)部,可隨時(shí)用“StepOut”跳出函數(shù),完成函數(shù)的執(zhí)行并返回至函數(shù)調(diào)用處。在調(diào)試過(guò)程中,通過(guò)跟蹤程序運(yùn)行過(guò)程中的狀態(tài)變化,并輔以人工分析,可以發(fā)現(xiàn)程序中的問(wèn)題所在。

圖1-16調(diào)試程序時(shí)的Watch窗口和Locals窗口

本章小結(jié)

本章先介紹了程序設(shè)計(jì)語(yǔ)言的三個(gè)發(fā)展階段,以及C語(yǔ)言的發(fā)展歷史和特點(diǎn);其次通過(guò)兩個(gè)簡(jiǎn)單的C程序示例介紹了C程序的構(gòu)成和書(shū)寫(xiě)格式,并強(qiáng)調(diào)了編程風(fēng)格的重要性,提出了良好編程習(xí)慣的一些建議;最后介紹了程序的編譯以及C語(yǔ)言常見(jiàn)的開(kāi)發(fā)環(huán)境和工具,重點(diǎn)介紹了以VisualC++2010Express為例進(jìn)行C語(yǔ)言程序開(kāi)發(fā)的過(guò)程。第2章數(shù)據(jù)類型、運(yùn)算符和表達(dá)式2.1基本數(shù)據(jù)類型、變量和常量2.2運(yùn)算符和表達(dá)式2.3輸入/輸出函數(shù)本章小結(jié)

2.1基本數(shù)據(jù)類型、變量和常量

2.1.1基本數(shù)據(jù)類型和取值范圍在計(jì)算機(jī)中,所有的數(shù)據(jù)都采用二進(jìn)制形式表示,5種基本數(shù)據(jù)類型規(guī)定了數(shù)據(jù)在內(nèi)存中占用的二進(jìn)制位數(shù)/字節(jié)數(shù),從而也規(guī)定了數(shù)據(jù)的取值范圍。與數(shù)據(jù)類型相關(guān)的是類型修飾符,整型數(shù)據(jù)類型有兩類修飾符:一類是符號(hào)修飾;另一類是長(zhǎng)度修飾。

其中符號(hào)修飾符有帶符號(hào)(signed)和不帶符號(hào)(unsigned)之分,默認(rèn)為帶符號(hào)(signed)修飾;長(zhǎng)度修飾有短型(short)和長(zhǎng)型(long)之分,這些數(shù)據(jù)長(zhǎng)度與具體機(jī)器編譯環(huán)境有關(guān)。例如在VisualC++2010Express編程環(huán)境下,int類型與long類型一樣,都是占4個(gè)字節(jié)(32位);而在TurboC2.0編程環(huán)境下,int類型與short類型一樣,都是占2個(gè)字節(jié)(16位)。本書(shū)以VisualC++2010Express作為開(kāi)發(fā)環(huán)境,其主要數(shù)據(jù)類型和取值范圍如表2-1所示。表中類型帶中括號(hào)的項(xiàng)表示可選項(xiàng)。

2.1.2變量

變量的定義格式如下:

[存儲(chǔ)類型]數(shù)據(jù)類型變量名;

例如:

inta,a5,_a;

float_a5,A5;

變量的數(shù)據(jù)類型可以是表2-1中的任何數(shù)據(jù)類型,變量名必須遵守以下C語(yǔ)言標(biāo)識(shí)符命名規(guī)則:

(1)第1個(gè)字符必須是字母或下畫(huà)線。

(2)其余字符可以是字母、下畫(huà)線和數(shù)字。

(3)字母區(qū)分大小寫(xiě)。

(4)用戶自定義的變量名不能與C語(yǔ)言的保留字或預(yù)定義標(biāo)識(shí)符同名,并應(yīng)盡量做到“見(jiàn)名知意”,以增加程序的可讀性。保留字如表2-2所示。

變量沒(méi)有賦初值時(shí),變量中存放的是一隨機(jī)值。變量定義時(shí)可同時(shí)賦初值,這稱為變量的初始化,如:

inta=1,a5=10;

定義變量包括兩個(gè)方面的含義:一是給變量分配存儲(chǔ)空間和規(guī)定變量的取值范圍,從而可以對(duì)變量進(jìn)行存儲(chǔ)操作,如上述舉例中,為整型變量a、a5、_a各分配了4個(gè)字節(jié)空間,為浮點(diǎn)型變量_a5、A5各分配了4個(gè)字節(jié)空間,變量有了存儲(chǔ)空間,也就有變量地址,如&a、&a5、&_a分別表示變量a、a5、_a的首地址(符號(hào)&是取地址運(yùn)算符);二是規(guī)定了其允許的操作,如實(shí)數(shù)可進(jìn)行加、減、乘、除運(yùn)算,但不能進(jìn)行求余運(yùn)算。

2.1.3常量

1.整型常量

C語(yǔ)言中整型常量按進(jìn)制劃分有十進(jìn)制、八進(jìn)制(前綴為數(shù)字0)、十六進(jìn)制(前綴為數(shù)字0X或0x)3種。數(shù)據(jù)377按這3種進(jìn)制的格式可分別表示為:377、0571、0x179(或0X179)。

整型常量加后綴小寫(xiě)字母l或大寫(xiě)字母L,表示該常量為長(zhǎng)整型。如377L、0571L、0x179L分別表示十進(jìn)制、八進(jìn)制、十六進(jìn)制長(zhǎng)整型數(shù)。整型常量若沒(méi)加后綴,則默認(rèn)為int類型。

2.實(shí)型常量

實(shí)型常量有兩種表示方法:一類是標(biāo)準(zhǔn)記數(shù)方法,如PI值表示為3.141?592?6;另一類是科學(xué)記數(shù)法??茖W(xué)記數(shù)法的一般形式為

尾數(shù)E階碼

尾數(shù)e階碼

如PI值可以表示為如下形式:

3.14159E03.14159e00.314159E131.4159e-1

3.字符常量

字符常量用一對(duì)單引號(hào)包圍,如'5'、'a'、'A'、''等,每個(gè)字符占一個(gè)字節(jié)。在計(jì)算機(jī)中,字符按ASCII(見(jiàn)附錄1)值存放,上述對(duì)應(yīng)的4個(gè)字符的ASCII值為53、97、65、32等,因此字符也可以參加整型運(yùn)算。由于單引號(hào)已經(jīng)用作任意字符常量的界限符,所以單引號(hào)如果要用作普通字符常量時(shí)可在字符前面加反斜杠“\”(稱為轉(zhuǎn)義字符)區(qū)分,如“\'”表示單引號(hào)。常用轉(zhuǎn)義字符如表2-3所示。

4.字符串常量

字符串常量是用一對(duì)雙引號(hào)包圍的字符數(shù)組,如"Hello,world!",它們?cè)趦?nèi)存中是按照每個(gè)字符的ASCII碼連續(xù)存放的,并在結(jié)尾處添加了一結(jié)束符'\0',對(duì)應(yīng)的ASCII值為0,這樣n個(gè)字符組成的字符串需占用n+1個(gè)字節(jié)。因此,12個(gè)字符組成字符串"Hello,world!"在內(nèi)存中占用13個(gè)字節(jié),其存儲(chǔ)形式如圖2-1所示。

圖2-1字符串"Hello,world!"的存儲(chǔ)表示

值得注意的是:

①字符串中包含有雙引號(hào)字符時(shí),字符雙引號(hào)必須用轉(zhuǎn)義字符表示,具體可參見(jiàn)例2-4。

②一個(gè)字符串需占用兩行時(shí),需采用兩對(duì)雙引號(hào)界定表示,具體可參見(jiàn)例2-5。

2.2運(yùn)算符和表達(dá)式

2.2.1優(yōu)先級(jí)與結(jié)合規(guī)則數(shù)學(xué)中表達(dá)式是這樣定義的:用運(yùn)算符(操作符)將運(yùn)算數(shù)(操作數(shù))連接起來(lái)的式子。其運(yùn)算順序是這樣規(guī)定的:先乘除后加減,從左至右依次進(jìn)行。這句話包含了兩層意思:先乘除后加減表明了乘除運(yùn)算符的優(yōu)先級(jí)別比加減運(yùn)算符優(yōu)先級(jí)別高;在同一級(jí)別運(yùn)算時(shí),按從左至右依次進(jìn)行,即說(shuō)明了結(jié)合規(guī)則。對(duì)于算術(shù)運(yùn)算的結(jié)合規(guī)則是按從左至右進(jìn)行的,即左結(jié)合性。

C語(yǔ)言中除了算術(shù)運(yùn)算符之外,還有其他一些運(yùn)算符,部分常見(jiàn)運(yùn)算符的優(yōu)先級(jí)別和結(jié)合規(guī)則如表2-4所示,從表2-4中我們可以看出加減運(yùn)算符的級(jí)別為4級(jí),比運(yùn)算級(jí)別為3級(jí)的乘除運(yùn)算符級(jí)別要低。

當(dāng)由多個(gè)不同運(yùn)算符和運(yùn)算數(shù)組成較為復(fù)雜的表達(dá)式時(shí),其運(yùn)算符計(jì)算順序按如下規(guī)則執(zhí)行:

(1)不同級(jí)別的運(yùn)算符按運(yùn)算符的優(yōu)先級(jí)別確定計(jì)算順序,優(yōu)先級(jí)別高(優(yōu)先級(jí)別數(shù)小)的運(yùn)算符先計(jì)算,優(yōu)先級(jí)別低(優(yōu)先級(jí)別數(shù)大)的運(yùn)算符后計(jì)算;

(2)相同級(jí)別的運(yùn)算符按結(jié)合規(guī)則確定計(jì)算順序。

2.2.2賦值運(yùn)算與連續(xù)賦值

簡(jiǎn)單賦值運(yùn)算的一般形式為

變量=表達(dá)式

其功能是將一個(gè)表達(dá)式的值賦給變量。如:

a=b+c

該式讀作將表達(dá)式b+c的值賦給a。其本意是改寫(xiě)變量a的值,而不是判斷b+c與a是否相等,初學(xué)者往往將C語(yǔ)言中的賦值運(yùn)算符看作數(shù)學(xué)上的關(guān)系運(yùn)算符——等于運(yùn)算符,這是錯(cuò)誤的,請(qǐng)讀者認(rèn)真理解。又如數(shù)學(xué)上將表達(dá)式

a=a+5

看作錯(cuò)誤的表達(dá)式,在C語(yǔ)言中這是正確的合法表達(dá)式,它是改寫(xiě)存儲(chǔ)單元a中的內(nèi)容,因?yàn)樵贑語(yǔ)言中,運(yùn)算符“=”不是等于運(yùn)算符,而是賦值運(yùn)算符。

在C語(yǔ)言中,賦值運(yùn)算符的優(yōu)先級(jí)別較低,為14級(jí),并滿足右結(jié)合規(guī)則。因此表達(dá)式

x=y=z=1

是連續(xù)賦值表達(dá)式,其功能相當(dāng)于如下表達(dá)式的功能:

x=(y=(z=1))

它是先執(zhí)行表達(dá)式z=1,即將1賦給z,該表達(dá)式值也為1;然后將z=1表達(dá)式的值1賦給y,即執(zhí)行y=1,該表達(dá)式值也仍為1;最后將y=1表達(dá)式的值1賦給x,即執(zhí)行x=1。

2.2.3算術(shù)運(yùn)算

C語(yǔ)言中算術(shù)運(yùn)算符有加“+”、減“-”、乘“*”、除“/”、取余(模)“%”、自加“++”、自減“--”。其中“+”“-”運(yùn)算符優(yōu)先級(jí)別為4級(jí),“*”“/”“%”運(yùn)算符優(yōu)先級(jí)別為3級(jí),它們都滿足左結(jié)合規(guī)則,都是二元運(yùn)算符,“+”“-”“*”“/”都能對(duì)整數(shù)或?qū)崝?shù)進(jìn)行運(yùn)算。取余運(yùn)算符“%”只能對(duì)整型數(shù)據(jù)進(jìn)行運(yùn)算,如5%2的值為1,5%3值為2。

“++”“--”運(yùn)算符可寫(xiě)在變量的前面或變量的后面,寫(xiě)在變量的前面稱為前綴(或前置)運(yùn)算,寫(xiě)在變量的后面稱為后綴(或后置)運(yùn)算,當(dāng)使用前綴運(yùn)算與后綴運(yùn)算時(shí)要注意以下兩點(diǎn):

(1)?++a與a++單獨(dú)構(gòu)成表達(dá)式時(shí),兩者使用時(shí)沒(méi)有區(qū)別。

(2)?++a與a++不是單獨(dú)構(gòu)成表達(dá)式時(shí),前綴運(yùn)算表示先加后用,后綴運(yùn)算表示先用后加。

先用后加指的是先讀取a的數(shù)據(jù)進(jìn)行使用,當(dāng)表達(dá)式中比++運(yùn)算符高的運(yùn)算符都執(zhí)行完后,a再進(jìn)行自加運(yùn)算。先加后用指的是先對(duì)a進(jìn)行自加運(yùn)算,然后再讀取a進(jìn)行其他運(yùn)算。

2.2.4關(guān)系運(yùn)算

關(guān)系運(yùn)算又稱為比較大小運(yùn)算,它有6個(gè)運(yùn)算符:“>”“>=”“<”“<=”“==”“!=”,它們的結(jié)合規(guī)則都是自左向右的。其中“>”“>=”“<”“<=”4個(gè)運(yùn)算符優(yōu)先級(jí)別為6級(jí),它們比“==”“!=”兩個(gè)運(yùn)算符優(yōu)先級(jí)別為7級(jí)的級(jí)別高。關(guān)系運(yùn)算的結(jié)果為邏輯真或邏輯假,關(guān)系成立時(shí)為邏輯真(值為1),關(guān)系不成立時(shí)為邏輯假(值為0)。如表達(dá)式5>3,5>=3,5<3,5<=3,5==3,5!=3的邏輯值分別為1、1、0、0、0、1。

關(guān)系運(yùn)算的等于運(yùn)算符“==”與數(shù)學(xué)上的等于運(yùn)算符“=”具有相同的含義,與C語(yǔ)言中的賦值運(yùn)算符“=”完全不同,這一點(diǎn)初學(xué)者往往容易搞錯(cuò)。

2.2.5邏輯運(yùn)算

C語(yǔ)言中邏輯運(yùn)算符有3個(gè),分別是邏輯與“&&”(優(yōu)先級(jí)為11級(jí)、左結(jié)合)、邏輯或“||”(優(yōu)先級(jí)為12級(jí)、左結(jié)合)、邏輯非“!”(優(yōu)先級(jí)為2級(jí)、右結(jié)合)。邏輯與表達(dá)式a&&b表示a與b中只要有一個(gè)條件不滿足(值為0),其運(yùn)算結(jié)果為0。邏輯或表達(dá)式a||b表示a與b中只要有一個(gè)條件滿足(值為1),其運(yùn)算結(jié)果為1。邏輯非表達(dá)式!a表示當(dāng)a為1時(shí),結(jié)果為0;當(dāng)a為0時(shí),結(jié)果為1。邏輯運(yùn)算真值表如表2-4所示。

2.2.6位運(yùn)算

1.位運(yùn)算符

位運(yùn)算符有“&”“|”“^”“~”“>>”“<<”等6個(gè),其含義如表2-5所示。

2.位異或運(yùn)算

位異或運(yùn)算真值表如表2-6所示,即對(duì)應(yīng)位相同時(shí)結(jié)果為0,不同時(shí)結(jié)果為1。

3.移位運(yùn)算

左移位運(yùn)算a<<b表示將a左移b位,右邊空出的低位部分用0填補(bǔ),左邊移出的部分將丟棄。右移位運(yùn)算a>>b,右邊移出的部分將丟棄,左邊空出的高位部分填補(bǔ)方法則根據(jù)

a是否為帶符號(hào)數(shù)分為兩種:a為帶符號(hào)數(shù)時(shí),左邊空出的高位部分用符號(hào)位填補(bǔ);a為不帶符號(hào)數(shù)時(shí),左邊空出的高位部分用0填補(bǔ)。

2.2.7條件運(yùn)算

條件運(yùn)算符是C語(yǔ)言中唯一的三元運(yùn)算符,用符號(hào)“?:”表示,它帶有3個(gè)運(yùn)算數(shù),優(yōu)先級(jí)為13級(jí),結(jié)合規(guī)則為右結(jié)合,其書(shū)寫(xiě)一般形式為

a?b:c

其計(jì)算方法是:先計(jì)算a,若a非0,則選擇b作為表達(dá)式的值;若a為0,則選擇c作為表達(dá)式的值。因此,條件運(yùn)算又稱為選擇運(yùn)算。

2.2.8復(fù)合賦值運(yùn)算

同賦值運(yùn)算一樣,復(fù)合賦值運(yùn)算符也是二元運(yùn)算符,優(yōu)先級(jí)別為14級(jí),結(jié)合規(guī)則為右結(jié)合。復(fù)合賦值運(yùn)算符共有10個(gè),其含義如表2-7所示。復(fù)合賦值運(yùn)算與其他運(yùn)算相結(jié)合時(shí),應(yīng)特別注意其運(yùn)算優(yōu)先級(jí)與結(jié)合規(guī)則。如表達(dá)式:

a/=b+c*d

相當(dāng)于表達(dá)式

a=a/(b+c*d)

因?yàn)閺?fù)合賦值運(yùn)算符“/=”優(yōu)先級(jí)別比“+”“*”的優(yōu)先級(jí)別低。

2.2.9其他運(yùn)算

1.逗號(hào)運(yùn)算

逗號(hào)運(yùn)算符是C語(yǔ)言中優(yōu)先級(jí)別最低的運(yùn)算符,優(yōu)先級(jí)為15級(jí),結(jié)合規(guī)則為左結(jié)合。其一般形式如下:

e1,e2,e3,…,en

其功能為先計(jì)算表達(dá)式e1,然后計(jì)算表達(dá)式e2,再計(jì)算表達(dá)式e3……最后計(jì)算表達(dá)式en,其中表達(dá)式en的值為整個(gè)表達(dá)式的值。

2.sizeof運(yùn)算

“sizeof”表示計(jì)算變量或表達(dá)式所占用的存儲(chǔ)空間大小,即字節(jié)數(shù),其優(yōu)先級(jí)別為2級(jí),結(jié)合規(guī)則為右結(jié)合。

sizeof計(jì)算數(shù)據(jù)類型占用字節(jié)數(shù)的形式為

sizeof(類型)

sizeof計(jì)算變量占用字節(jié)數(shù)的形式有兩種:

sizeof(變量)

sizeof變量

2.2.10數(shù)據(jù)類型轉(zhuǎn)換及其規(guī)則

1.算術(shù)運(yùn)算類型轉(zhuǎn)換

算術(shù)運(yùn)算中,當(dāng)兩個(gè)運(yùn)算數(shù)類型相同時(shí),運(yùn)算結(jié)果類型與原類型相同,當(dāng)兩個(gè)運(yùn)算數(shù)類型不同時(shí),先將兩個(gè)運(yùn)算數(shù)轉(zhuǎn)換為相同類型,轉(zhuǎn)換方法為將級(jí)別低的數(shù)據(jù)類型轉(zhuǎn)換為級(jí)別高的數(shù)據(jù)類型,運(yùn)算結(jié)果與級(jí)別高的數(shù)據(jù)類型相同。類型級(jí)別高低按下述規(guī)則進(jìn)行:

2.賦值類型轉(zhuǎn)換

執(zhí)行賦值運(yùn)算“變量a=表達(dá)式b”時(shí),若a、b類型相同,則直接將b賦給a即可,若a、b類型不同,則需先將b的類型轉(zhuǎn)換為a的類型后再賦值,這種類型轉(zhuǎn)換,稱為賦值類型轉(zhuǎn)換。賦值類型轉(zhuǎn)換分為以下幾種情況。

(1)不帶符號(hào)整型向帶符號(hào)整型轉(zhuǎn)換。

(2)帶符號(hào)整型向不帶符號(hào)整型轉(zhuǎn)換。

(3)短整型向長(zhǎng)整型轉(zhuǎn)換。

(4)長(zhǎng)整型向短整型轉(zhuǎn)換。

如圖2-2所示。

(5)單精度浮點(diǎn)型向雙精度浮點(diǎn)型轉(zhuǎn)換。這是等值轉(zhuǎn)換。

(6)雙精度浮點(diǎn)型向單精度浮點(diǎn)型轉(zhuǎn)換。圖2-2長(zhǎng)整型賦給短整型示意圖

3.強(qiáng)制類型轉(zhuǎn)換

強(qiáng)制類型轉(zhuǎn)換的一般格式為

(目標(biāo)類型)表達(dá)式

其功能是將表達(dá)式類型轉(zhuǎn)換為目標(biāo)類型,其轉(zhuǎn)換方法同賦值類型轉(zhuǎn)換。如:

floata=3.8;

inti;

i=(int)a;

則i的值為3。

4.輸入/輸出類型轉(zhuǎn)換

輸入/輸出類型轉(zhuǎn)換將在2.3節(jié)中介紹。

2.3輸入/輸出函數(shù)

2.3.1格式化輸出函數(shù)用戶看不到程序運(yùn)算的過(guò)程和運(yùn)算變量的值,而運(yùn)算變量的值對(duì)用戶又有特別重要的意義。C語(yǔ)言為用戶提供了格式化輸出函數(shù),其功能是按用戶指定格式輸出運(yùn)算結(jié)果值。格式化輸出函數(shù)的調(diào)用格式為printf("格式字符串",表達(dá)式1,表達(dá)式2,…,表達(dá)式n);

格式說(shuō)明符以“%”開(kāi)始,以類型代碼結(jié)束,其一般格式為

%[flags][width][precision][F|N|h|l]type

1.類型代碼(type)

類型代碼(type)意義如表2-8所示。

2.寬度(width)

寬度為n是指表達(dá)式輸出時(shí)至少占用n位,實(shí)際數(shù)據(jù)輸出的寬度可以比指定的寬度大。寬度為0n時(shí),其中的數(shù)字0表示左邊空位用0填補(bǔ),n含義與前述相同。

3.精度(precision)

對(duì)于不同類型的輸出表達(dá)式,精度表示不同的含義。說(shuō)明符“%e”“%E”“%f”作用于浮點(diǎn)數(shù),精度表示小數(shù)點(diǎn)后最多顯示的位數(shù)(不是傳統(tǒng)的有效位數(shù)),如果未指定精度,精度默認(rèn)值為6。如%10.4f顯示的數(shù)據(jù)至少占10位,其中小數(shù)最多4位。

4.標(biāo)志(flags)

標(biāo)志flags為“-”時(shí),表示左對(duì)齊(默認(rèn)為右對(duì)齊);為“+”

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論