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

下載本文檔

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

文檔簡介

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

1.1程序設(shè)計語言

1.機器語言

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

2.匯編語言

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

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

3.高級語言

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

1.2C語言的發(fā)展歷史和特點

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

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

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

1.2.2C語言的特點

(1)?C語言有豐富的運算符。

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

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

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

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

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

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

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

1.3簡單的C程序示例

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

2.C程序的書寫格式

在編輯C語言源程序時,需注意以下幾點。

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

/*注釋部分*/

行注釋的書寫格式如下:

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

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

(2)?C語言一般采用小寫字母作為標識符。而BASIC語言中,一般采用大寫字母作為標識符。

(3)?C語言是區(qū)分字母大小寫的。如“MAX”“max”和“Max”表示的是3個不同的標識符。

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

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

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

1.3.2良好的編程風格

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

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

(2)采用適當?shù)目s進和空格。

(3)添加注釋和文檔。

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

(5)避免過長的函數(shù)和代碼行。

1.4C語言上機環(huán)境

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

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

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

1.4.2C語言程序的開發(fā)過程

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

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

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

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

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

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

圖1-1C語言程序的開發(fā)過程

1.4.3VisualC++2010Express上機操作

1.啟動VisualC++2010Express

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

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

2.新建Project與Solution

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

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

圖1-3VisualC++2010Express新建工程的命令選項

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

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

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

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

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

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

圖1-7為工程添加新文件的命令項

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

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

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

圖1-10在編輯窗口中錄入C語言源程序的簡單示例

4.編譯(Compile)

編譯就是把文本形式的C語言源程序文件翻譯為機器語言形式的目標程序文件的過程。

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

5.組建(Build)

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

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

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

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

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

6.運行程序

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

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

7.調(diào)試程序

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

下面介紹VisualC++2010Express查錯方法。

1)利用編譯器查找語法錯誤

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

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

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

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

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

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

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

本章小結(jié)

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

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

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

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

2.1.2變量

變量的定義格式如下:

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

例如:

inta,a5,_a;

float_a5,A5;

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

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

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

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

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

變量沒有賦初值時,變量中存放的是一隨機值。變量定義時可同時賦初值,這稱為變量的初始化,如:

inta=1,a5=10;

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

2.1.3常量

1.整型常量

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

整型常量加后綴小寫字母l或大寫字母L,表示該常量為長整型。如377L、0571L、0x179L分別表示十進制、八進制、十六進制長整型數(shù)。整型常量若沒加后綴,則默認為int類型。

2.實型常量

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

尾數(shù)E階碼

尾數(shù)e階碼

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

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

3.字符常量

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

4.字符串常量

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

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

值得注意的是:

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

②一個字符串需占用兩行時,需采用兩對雙引號界定表示,具體可參見例2-5。

2.2運算符和表達式

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

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

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

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

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

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

簡單賦值運算的一般形式為

變量=表達式

其功能是將一個表達式的值賦給變量。如:

a=b+c

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

a=a+5

看作錯誤的表達式,在C語言中這是正確的合法表達式,它是改寫存儲單元a中的內(nèi)容,因為在C語言中,運算符“=”不是等于運算符,而是賦值運算符。

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

x=y=z=1

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

x=(y=(z=1))

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

2.2.3算術(shù)運算

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

“++”“--”運算符可寫在變量的前面或變量的后面,寫在變量的前面稱為前綴(或前置)運算,寫在變量的后面稱為后綴(或后置)運算,當使用前綴運算與后綴運算時要注意以下兩點:

(1)?++a與a++單獨構(gòu)成表達式時,兩者使用時沒有區(qū)別。

(2)?++a與a++不是單獨構(gòu)成表達式時,前綴運算表示先加后用,后綴運算表示先用后加。

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

2.2.4關(guān)系運算

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

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

2.2.5邏輯運算

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

2.2.6位運算

1.位運算符

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

2.位異或運算

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

3.移位運算

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

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

2.2.7條件運算

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

a?b:c

其計算方法是:先計算a,若a非0,則選擇b作為表達式的值;若a為0,則選擇c作為表達式的值。因此,條件運算又稱為選擇運算。

2.2.8復(fù)合賦值運算

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

a/=b+c*d

相當于表達式

a=a/(b+c*d)

因為復(fù)合賦值運算符“/=”優(yōu)先級別比“+”“*”的優(yōu)先級別低。

2.2.9其他運算

1.逗號運算

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

e1,e2,e3,…,en

其功能為先計算表達式e1,然后計算表達式e2,再計算表達式e3……最后計算表達式en,其中表達式en的值為整個表達式的值。

2.sizeof運算

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

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

sizeof(類型)

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

sizeof(變量)

sizeof變量

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

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

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

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

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

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

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

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

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

如圖2-2所示。

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

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

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

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

(目標類型)表達式

其功能是將表達式類型轉(zhuǎn)換為目標類型,其轉(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ù)用戶看不到程序運算的過程和運算變量的值,而運算變量的值對用戶又有特別重要的意義。C語言為用戶提供了格式化輸出函數(shù),其功能是按用戶指定格式輸出運算結(jié)果值。格式化輸出函數(shù)的調(diào)用格式為printf("格式字符串",表達式1,表達式2,…,表達式n);

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

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

1.類型代碼(type)

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

2.寬度(width)

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

3.精度(precision)

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

4.標志(flags)

標志flags為“-”時,表示左對齊(默認為右對齊);為“+”

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論