C語言概述設(shè)計ppt課件(完整版)_第1頁
C語言概述設(shè)計ppt課件(完整版)_第2頁
C語言概述設(shè)計ppt課件(完整版)_第3頁
C語言概述設(shè)計ppt課件(完整版)_第4頁
C語言概述設(shè)計ppt課件(完整版)_第5頁
已閱讀5頁,還剩799頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C+語言程序設(shè)計第一章 C+語言概述主要內(nèi)容C+ 的特點 C+ 程序開發(fā)過程 編寫簡單的C+程序 應(yīng)用VC+ 編譯、調(diào)試C+程序 1.1 C+ 的特點C+ 語言是目前應(yīng)用廣泛的一種計算機程序設(shè)計語言。C+ 是從C語言發(fā)展而來的,C+支持面向?qū)ο蟮某绦蛟O(shè)計方法,特別適合于中型和大型的軟件開發(fā)項目,從開發(fā)時間、費用到軟件的重用性、可擴充性、可維護性和可靠性等方面,C+ 均具有很大的優(yōu)越性。同時,C+ 又是C語言的一個超集,在基本語法特點方面,C+ 語言保持與C語言兼并,二者沒有本質(zhì)上的差別,這就使得許多C程序不經(jīng)修改就可被C+ 編譯通過。C+ 語言與C語言的主要區(qū)別是編程思想上的更新,即由面向過程

2、轉(zhuǎn)變?yōu)槊嫦驅(qū)ο?。在C+ 語言中引入了類與對象機制,從而引發(fā)出一系列包括類的定義、繼承與派生、多態(tài)性等概念。 數(shù)據(jù)封裝和隱藏是與類的定義緊密相關(guān)的現(xiàn)象,也是C+ 語言中的一大特點。數(shù)據(jù)的封裝和隱藏使重要的內(nèi)部數(shù)據(jù)得到保護。1.2 C+程序開發(fā)過程 Step1:在分析給定問題的基礎(chǔ)上,確定所用的算法(即操作步驟)和數(shù)據(jù)結(jié)構(gòu)(即數(shù)據(jù)的類型和組織形式),最后用高級語言加以實現(xiàn)。編制的程序必須送入計算機中,以文件的形式存放在磁盤上,這個過程稱為編輯。在編輯方式下建立起來的程序文件稱為源程序文件,簡稱源文件,相應(yīng)的程序叫做源程序。Step2:源程序是用高級語言編寫的,它不能直接在機器上運行。因為計算機不能

3、識別源程序, 它僅認識規(guī)定范圍內(nèi)的一系列二進制代碼所組成的指令數(shù)據(jù)(即指令動作所涉及的對象), 并按預(yù)定的含義執(zhí)行一系列動作。通常把這些計算機能識別的二進制代碼稱為目標代碼。為了把源程序變成目標代碼,就需要有個“翻譯” 做這種轉(zhuǎn)換工作。在計算機系統(tǒng)中實現(xiàn)這種轉(zhuǎn)換功能的軟件是編譯程序 。Step3:如果在編譯過程中發(fā)現(xiàn)源程序有語法錯誤,則系統(tǒng)就給出“錯誤信息”,提示用戶在哪一行中可能有什么樣的錯誤。用戶見到這類提示信息后,要重新進入編輯方式,對代碼行中的錯誤進行修改,然后對修改過的源程序重新進行編譯。經(jīng)編譯之后生成的目標程序的文件叫做目標文件。 Step4:目標程序還不能馬上在機器上運行。因為程

4、序中會用到庫函數(shù)或者其他函數(shù), 需要把它們連成一個統(tǒng)一的整體,這一步工作是連接。經(jīng)過連接就把分離的目標程序連成完整的可執(zhí)行程序,對應(yīng)的文件是可執(zhí)行文件。 程序設(shè)計算法及描述 程序設(shè)計用計算機語言編制解決問題的方法和步驟的過程。程序設(shè)計首先要解決的是算法設(shè)計。 程序設(shè)計算法就是用計算機解決問題的方法和步驟。 描述算法的方法 主要有:自然語言、流程圖、盒圖、偽代碼、程序語言等。 流程圖的基本符號 1.3 編寫簡單的C+程序 我們在C+ 語言的編輯器編輯上述源程序,將程序文件命名為hello.cpp保存。源程序經(jīng)過編譯、連接后,生成一個可執(zhí)行的應(yīng)用程序。運行該應(yīng)用程序,其運行結(jié)果為: 你好,歡迎學(xué)習(xí)

5、C+! 通過上面的例子,我們看到,一個C+源程序包括編譯預(yù)處理命令、注釋和函數(shù)體三部分:程序解析編譯預(yù)處理的作用是在對源程序編譯之前,先對這些命令進行預(yù)處理,然后將預(yù)處理的結(jié)果和源程序一起進行正常的編譯處理。C+語言中,編譯預(yù)處理命令以打頭,一行只能寫一條編譯預(yù)處理命令。程序編譯預(yù)處理命令語句 #include 中是iostream.h頭文件的文件名。頭文件一般以.h或.hpp為擴展名,主要提供數(shù)據(jù)類型聲明、類的定義、函數(shù)的說明等信息。一般來說,C+語言系統(tǒng)提供的頭文件名用括起來,如,而用戶自己定義的頭文件,則用雙引號“”把頭文件括起來。在本程序中,iostream.h是系統(tǒng)提供的頭文件,該頭

6、文件聲明了程序所需要的輸入輸出操作的有關(guān)信息。cin、cout、和等操作信息都在該文件中有聲明。(1)編譯預(yù)處理命令(2)注 釋程序中標有“/”號的語句為注釋語句。注釋是程序中的說明性文字,是程序的非執(zhí)行部分。它的作用是為程序添加說明,增加程序的可讀性。C+語言使用兩種方式對程序進行注釋:“/”符號,它表示從“/”符號開始到此行的末尾位置都作為注釋?!?* */ ” 符號,它表示從“/*”開始到“*/ ”結(jié)束的部分都作為注釋部分,可以是多行注釋。(3)函數(shù)C+語言的源程序是一系列函數(shù)的集合。函數(shù)是用特定格式描述、具有特定功能的程序模塊。函數(shù)由函數(shù)聲明和函數(shù)體兩部分組成。每個程序有且只有一個主函

7、數(shù),其函數(shù)名為main,其結(jié)構(gòu)如下:主函數(shù)main()可以位于程序中的任何位置,程序的執(zhí)行總是從main()函數(shù)開始。(4)語句語句是組成程序的基本單元。函數(shù)是由若干條語句組成的。C+語言的語句以分號表示語句結(jié)束。一般程序都是由若干條語句組成的,每一條語句都以分號結(jié)束。C+語言對字母的大小寫敏感,所以在書寫程序語句時要注意字母的大小。1.4 應(yīng)用VC+ 編譯、調(diào)試C+程序1、啟動Microsoft Visual C+ 2、建立當前工作區(qū)目錄3、建立一個空項目4、在當前項目中建立程序文件編譯編譯、鏈接運行5、編譯程序6、運行程序單擊工具欄中的運行按鈕 ,則可以看到程序運行結(jié)果 C+語言程序設(shè)計第

8、二章 C+語言基礎(chǔ)本章內(nèi)容提要輸入輸出語句數(shù)據(jù)類型表達式和運算符程序控制語句2.1 簡單的輸入輸出語句1、輸出語句cout通過輸出操作符“”將表達式1、表達式2、表達式n依次顯示到屏幕上。如果表達式是變量則將變量的值顯示出來;如果表達式是計算式,則先計算,再將計算的結(jié)果顯示出來;如果表達式是用雙引號括起來的字符串,則將雙引號括起來的內(nèi)容“原樣照印”的顯示到屏幕上。cout 表達式1 表達式2 表達式n;例2-11 #include 2using namespace std; 3 void main() 4 5 cout 我對 C+ 很著迷!; 6 cout endl; 7 包含iostream

9、頭文件,該文件定義了輸出流對象cout 定義名字空間輸出流對象cout將字符輸出到屏幕上顯示換行例2-2 在屏幕上輸出顯示一個用“*”號組成的三角形圖形。 1 #include 2 using namespace std;3 void main() 4 5cout * endl; 6cout * * * endl;7cout * * * * * endl;8cout * * * * * * * endl;9 包含iostream頭文件時,必須定義名字空間雙引號中的任何符號在輸出時都將被“原樣照印”,第一行輸出1個“*”號,第二行輸出3個“*”號,第三行輸出5個“*”號,第四行輸出7個“*”號。

10、* * * * * * * * * * * * *輸出結(jié)果:例 2-31 #include 2 using namespace std;3 void main() 4 5cout 3 + 5 = 3 + 5 ”,使用輸入流對象cin讀取由鍵盤輸入的字符和數(shù)字,并把它賦值給指定的變量。從鍵盤上輸入的數(shù)據(jù)通過cin接收,再由輸入操作符 “”將數(shù)據(jù)賦值給指定的變量。輸入操作符 “”也稱為提取運算符。同樣,輸入操作符 “”也是在iostream.h中定義的,因此,必須在程序的開頭用#include包含iostream.h。例2-4 從鍵盤上輸入兩個整數(shù),再計算出兩個數(shù)的和 1 #include 2 u

11、sing namespace std;3 void main()4 4 int a, b; 6 cout a ; 8 cout b ; 10 cout a “+” b “=” a + b endl;11 cout、cin需要頭文件iostream使用名字空間int為定義整數(shù)類型變量,這里定義的變量a、b只能接受整數(shù)cin讀取由鍵盤輸入的數(shù)字,并通過輸入操作符把它賦值給變量a按照“原樣照印”模式輸出 cin讀取由鍵盤輸入的數(shù)字,并把它賦值給變量b程序運行時,用cin接收用戶輸入的兩個整數(shù),然后計算并輸出這兩個數(shù)的和。比如用戶通過鍵盤輸入3后,按Enter鍵,然后輸入5,再按Enter鍵,其運行結(jié)

12、果如下: 用戶通過鍵盤給變量a、b賦值輸入第一個整數(shù),a = :3 輸入第二個整數(shù),b = :5 3 + 5 = 8說明:在上面運行結(jié)果中,下劃線表示的3 和5由用戶輸入,“”為Enter鍵。2.2 數(shù)據(jù)類型C+ 語言的數(shù)據(jù)類型可以分為兩大類:基本數(shù)據(jù)類型和構(gòu)造數(shù)據(jù)類型?;緮?shù)據(jù)類型是由程序設(shè)計語言系統(tǒng)所定義、不可再劃分的數(shù)據(jù)類型。基本數(shù)據(jù)類型在內(nèi)存中存入的是數(shù)據(jù)值本身。構(gòu)造數(shù)據(jù)類型在內(nèi)存中存入的是指向存放該數(shù)據(jù)的地址,不是數(shù)據(jù)本身,它是在基本數(shù)據(jù)類型的基礎(chǔ)上,由系統(tǒng)或用戶自定義的。構(gòu)造數(shù)據(jù)類型也被稱為復(fù)合數(shù)據(jù)類型。數(shù)據(jù)類型的作用有二個:其一,為數(shù)據(jù)在內(nèi)存中分配合適的存儲區(qū)域,同時也確定了數(shù)據(jù)

13、范圍;其二,規(guī)定數(shù)據(jù)所能進行的操作。 2.2.2 基本數(shù)據(jù)類型C+ 定義了多個基本數(shù)據(jù)類型:字節(jié)型,短整型,整型,長整型,無符號整型,字符型,浮點型,雙精度型,布爾型,這些類型可分為4組: 整數(shù)型:該組包括字節(jié)型(byte),短整型(short),整型(int),長整型(long),它們都是有符號整數(shù)型,還有無符號整數(shù)型,即正整數(shù)型。 浮點數(shù)型:該組包括浮點型(float),雙精度型(double),它們代表有小數(shù)精度要求的數(shù)字。 字符:這個組包括字符型(char),它代表字符集的符號,例如字母和數(shù)字。 布爾型:這個組包括布爾型(boolean),它是一種特殊的類型,表示真/假值。 類型數(shù)據(jù)類

14、型關(guān)鍵字類型長度值域范圍有符號短整數(shù)short, short int2-215215-1內(nèi)的整數(shù)有符號整數(shù)int 4-231231-1內(nèi)的整數(shù)有符號長整數(shù)long, long int, signed long int4-231231-1內(nèi)的整數(shù)無符號短整數(shù)unsigned short int20216-1內(nèi)的整數(shù)無符號整數(shù)unsigned int 40232-1內(nèi)的整數(shù)無符號長整數(shù)unsigned long int 40232-1內(nèi)的整數(shù)單精度浮點型 float 4-3.402823*10383.402823*1038內(nèi)的數(shù)雙精度浮點型double 8-1.7977*103081.7977*1

15、0308內(nèi)的數(shù)長雙精度浮點型long double8-1.7977*103081.7977*10308內(nèi)的數(shù)有符號字符char1-128+127內(nèi)的整數(shù)無符號字符unsigned char10255內(nèi)的整數(shù)邏輯bool 10和1下面對表2-1作幾點說明:1、 對于每一種整數(shù)類型和字符類型,又可分為有符號和無符號兩種類型。通常使用較多的是有符號類型,所以時常也把有符號類型簡稱為所屬類型。如把有符號整數(shù)類型簡稱為整型或int型,把有符號字符類型簡稱為字符型或char型。 2、 類型長度是指存儲該類型值域范圍內(nèi)的任一個數(shù)據(jù)所占有的存儲字節(jié)數(shù),該字節(jié)數(shù)由系統(tǒng)規(guī)定,并且對任一數(shù)據(jù)都相同。如短整型長度為2

16、,即存儲每個短整數(shù)占用2個字節(jié),對應(yīng)16個二進制位;整型長度為4,即存儲每個整數(shù)占用4個字節(jié),對應(yīng)32個二進制位;字符型長度為1,即存儲每個字符占用1個字節(jié),對應(yīng)8個二進制位。3、 類型的值域范圍是指該類型所對應(yīng)的固定大小的存儲空間按照相應(yīng)的存儲格式所能表示的值的范圍。如對于有符號短整型來說,它對應(yīng)2個字節(jié)的存儲空間,存儲格式為二進制整數(shù)補碼格式,只能夠表示(即存儲)-215215-1,即-32768+32767之間的所有整數(shù)。若一個整數(shù)小于-32768或大于32767,則它就不是該類型中的一個值,即它不是一個短整數(shù)。又如對于無符號字符類型來說,它對應(yīng)1個字節(jié)的存儲空間,存儲格式為二進制整數(shù)無

17、符號(隱含為正)格式,只能夠表示028-1,即0255之間的所有整數(shù)。若一個整數(shù)小于0或大于255,則它就不是該類型中的一個值,即它不是一個字符數(shù)據(jù)。4、 在32位的 C+ 版本中,整型(int)和長整型(long ing)具有完全相同的長度和存儲格式,所以它們是等同的。但在早期的C+版本中,由于當時的機器字長為16位,所以整型和長整型的長度是不同的,前者為2個字節(jié),后者為4個字節(jié)。無論如何,任一種C+ 語言都遵循short int型的長度小于等于int型長度,同時int型長度又小于等于long ing型長度的規(guī)定。與上述情況類似,在32位的C+ 版本中,雙精度型(double)和長雙精度型(

18、long double)也具有完全相同的長度和存儲格式,它們是等同的。在其他C+ 語言中也可能不同,但無論如何,它們都遵循float型的長度小于等于double型長度,同時double型長度又小于等于long double型長度的規(guī)定。2.2.3 數(shù)據(jù)類型轉(zhuǎn)換在C+ 中有兩種數(shù)據(jù)類型轉(zhuǎn)換:數(shù)據(jù)類型自動轉(zhuǎn)換強制類型轉(zhuǎn)換。1、數(shù)據(jù)類型自動轉(zhuǎn)換在對數(shù)據(jù)進行運算時,一般要求兩個運算操作數(shù)的類型一致,如果操作數(shù)的類型不一致,則系統(tǒng)編譯器會自動將這兩個運算操作數(shù)轉(zhuǎn)換成相同類型之后再進行運算。自動類型轉(zhuǎn)換是按從低到高的順序原則進行的。各種數(shù)據(jù)類型按下列的高低順序轉(zhuǎn)換:例如:計算10 + 2.5,先將10轉(zhuǎn)換

19、成雙精度浮點型后再相加,結(jié)果為雙精度浮點型的12.5。2、強制類型轉(zhuǎn)換強制類型轉(zhuǎn)換是在程序設(shè)計時顯式指出的類型轉(zhuǎn)換。強制類型轉(zhuǎn)換的格式如下:int a;double b = 3.14;a = (int)b;結(jié)果 a = 3,b仍然是double類型,b的值仍然是3.14。從該示例可以看到,采用強制類型轉(zhuǎn)換將高類型數(shù)據(jù)轉(zhuǎn)換成低類型數(shù)據(jù)時,可能會降低數(shù)據(jù)精度。數(shù)據(jù)類型說明(表達式)或(數(shù)據(jù)類型說明)表達式2.2.4 變量在程序中,每一個數(shù)據(jù)都有一個名字,并且在內(nèi)存中占據(jù)一定的存儲單元。在程序運行過程中,數(shù)據(jù)值不能改變的量稱為常量,其值可以改變的量稱為變量。變量在程序運行過程中可以進行賦值,從而改變

20、了原來的值。在C+ 語言中,所有常量及變量在使用前必須先聲明其值的類型,也就是“先聲明,后使用”。每一個變量都屬于一種數(shù)據(jù)類型,用來表示(即存儲)該類型中的一個值。在程序中只有存在了一種數(shù)據(jù)類型后,才能夠利用它定義出該類型的變量。根據(jù)這一原則,我們可以隨時利用C+ 語言系統(tǒng)提供的基本類型或用戶自定義的類型定義需要使用的變量。一個變量只有被定義后才能被使用,即定義后的變量才能進行存儲和讀取其值的操作。1、變量的定義變量定義是通過變量定義語句實現(xiàn)的,該語句的一般格式為:為已存在的一種數(shù)據(jù)類型,如short, int, long, char, bool, float, double等都是類型關(guān)鍵字,

21、是用戶定義的一個標識符,用來表示一個變量,該變量可以通過后面由方括號表示的可選項賦予一個值,稱為給變量賦初值,是一個數(shù)值或表達式,它的值就是賦予變量的初值。數(shù)據(jù)類型關(guān)鍵字 變量名=;2、變量定義語句示例 第一條語句定義了兩個整型變量a和b;第二條語句定義了兩個字符變量ch1和ch2,并被分別賦初值為字符a和A,一個字符變量只能存放一個字符,不能存放字符串;第三條語句定義了一個整型變量x,并賦予表達式a + 2 * b的值作為初值;第四條語句定義了三個雙精度變量,分別為d1, d2和d3,其中d2被賦予初值0.0,d3被賦予初值3.14159。3、變量定義語句執(zhí)行過程當程序執(zhí)行到一條變量定義語句

22、時,首先為所定義的每個變量在內(nèi)存中分配與類型長度相同的存儲單元,如對每個整型變量分配4個字節(jié)的存儲單元,對每個雙精度變量分配8個字節(jié)的存儲單元。定義變量時,若變量名后帶有賦值表達式,則計算出初值表達式的值,并把它保存到變量所對應(yīng)的存儲單元中,表示給變量賦初值,若變量名后不帶賦值表達式,將自動給變量賦予初值0,否則不賦予任何值,此時的變量值是不確定的,實際上是存儲單元中的原有值。在習(xí)慣上,常量名用大寫字母表示,變量用小寫字母表示,以示區(qū)別。例2-5 定義三個變量,求和值并輸出結(jié)果。 1 #include 2 using namespace std;3 void main( ) 4 5 int x

23、; 6 float y, z, sum; 7 x = 2; 8 y = 5.5; 9 z = 10.0; 10 sum = x + y + z; 11 cout sum = sum endl;12 例2-6 實型數(shù)據(jù)的舍入誤差 1 #include 2 using namespace std;3 void main( ) 4 5 float a,b; 6 a = 1234567890; 7 b = a + 20; 8 cout a = (int)a endl;9 cout b = (int)b endl; 10 a與b的輸出結(jié)果相同,較小的整數(shù)部分被“丟失”。a = 1234567936b =

24、 1234567936說明: (1)實型變量是用有限的存儲單元存儲的,因此提供的有效數(shù)字是有限的,在有效位以外的數(shù)字將被舍去,由此可能會產(chǎn)生一些誤差。(2)由于實數(shù)存在舍入誤差,使用時要注意:不要試圖用一個實數(shù)精確表示一個大整數(shù),因為浮點數(shù)是不精確的;實數(shù)一般不判斷“相等”,而是判斷接近或近似;避免直接將一個很大的實數(shù)與一個很小的實數(shù)相加、相減,否則會“丟失”小的數(shù);根據(jù)實際問題的要求選擇單精度或雙精度類型。 #includeusing namespace std;void main( ) double a,b; /將a, b定義為雙精度實數(shù)類型 a = 1234567890; b = a +

25、 20; cout a = (int)a endl; cout b = (int)b endl; 運算精度得到保證a = 1234567890b = 12345679102.2.5 常量常量有兩種形式:一種是直接常量,以字面值直接出現(xiàn)的數(shù)據(jù)量,如12、3.14、a等;另一種是符號常量。符號常量是一個標識符,對應(yīng)著一個存儲空間,該空間中保存的數(shù)據(jù)就是該符號常量的值,這個數(shù)據(jù)是在定義符號常量時賦予的,是以后不能改變的。(1)用const定義符號常量例如:const double PI = 3.14159; const 數(shù)據(jù)類型符號常量名稱初始值;(2)用#define命令定義符號常量注意,由于#d

26、efine是預(yù)處理命令,語句不能以分號結(jié)束,且定義符號常量不能帶數(shù)據(jù)類型,不能用賦值號賦值。例如:#definePI3.14159#define 符號常量名初始值例2-7 已知圓的半徑r,計算圓的面積s和周長c。 1 #include 2 #define r 5.03 const double PI = 3.14159 ;4 void main()5 6 double s, c;7 s = PI * r *r;8 c = 2 * PI * r;9 cout 圓的面積:s = s endl;10 cout 圓的周長:c = c endl;11 用#define定義符號常量r,沒有帶數(shù)據(jù)類型,沒有

27、用分號結(jié)尾用const定義符號常量PI符號常量參加運算, PI的值為3.14159,r的值為5.02、字符常量C+ 中有兩種字符常量:即一般字符常量轉(zhuǎn)義字符常量(1)一般字符常量一般字符常量簡稱為字符,它以單引號作為起止標記,中間為一個或若干個字符。如a,%,n,012,125,x4F等都是合乎規(guī)定的字符常量。每個字符常量只表示一個字符,當字符常量的一對單引號內(nèi)多于一個字符時,則將按規(guī)定解釋為一個字符。如a表示字符a,125解釋為字符U(ASCII碼值八進制的對應(yīng)字符,詳見轉(zhuǎn)義符)。 因為字符型的長度為1,值域范圍是 -128127 或 0255,而在計算機領(lǐng)域使用的ASCII字符,其ASCI

28、I碼值為 0127,正好在C+ 字符型值域內(nèi)。所以,每個 ASCII 字符均是一個字符型數(shù)據(jù),即字符型中的一個值。將一個字符常量放到一個字符變量中,實際上并不是把該字符本身放到內(nèi)存單元中,而是將該字符相應(yīng)的 ASCII 碼放到內(nèi)存單元中。 對于一個字符,當用于輸出顯示時,將顯示出字符本身或體現(xiàn)出相應(yīng)的控制功能,當出現(xiàn)在計算表達式中時,將使用它的 ASCII 碼。 (1) char ch = E;(2) int x = ch + 2;(3) cout “ x = ” x C) cout ch C endl;(5)cout 125 C比較,實際上是取出各自的值(即對應(yīng)的ASCII碼)比較,因條件成

29、立,所以執(zhí)行其后的輸出語句,將向屏幕輸出E C。第五條語句輸出大寫字母U,因為由“”后面跟3個數(shù)字(即“ddd”)組成的符號表示八進制數(shù)所代表的字符,八進制的125為十進制的85,其對應(yīng)的ASCII碼值為大寫字母U。 (2)轉(zhuǎn)義符在C+中提供了一些特殊的字符常量,這些特殊字符又稱為轉(zhuǎn)義符。通過轉(zhuǎn)義符可以在字符串中插入一些無法直接鍵入的字符,如換行符、引號等。每個轉(zhuǎn)義符都以反斜杠()為標志。例如,n代表一個換行符,這里的n不再代表字母n而作為換行符號,其 ASCII 碼為10。另外,也可以在反斜杠后面用八進制數(shù)或十六進制數(shù)表示一個字符,該值為所表示字符的ASCII碼值。例如,3表示Ctrl +

30、C,x0A表示回車換行。轉(zhuǎn)義符ASCII碼值對應(yīng)功能a0 x07響鈴b0 x08退格f0 x0c走紙換頁n0 x0a換行r0 x0d回車(不換行)t0 x09水平制表v0 x0b垂直制表0 x5c反斜杠0 x27單引號”0 x22雙引號?0 x3f問號ddd0ddd八進制數(shù)所代表的字符xhh0 xhh十六進制數(shù)所代表的字符例2-8 轉(zhuǎn)義字符的使用1 #include 2 using namespace std;3 void main()4 5 cout 學(xué)號 t 姓名 t 成績 n ;6 cout 1001 t 張大山 t 95 n ;7 cout 1002 t 李海濤 t 91 n ;8 c

31、out 1003 t 周麗君 t 82 n ;9 用于顯示表格排列,t控制寬度,n換行 程序運行結(jié)果如下:學(xué)號 姓名 成績1001 張大山 951002 李海濤 911003 周麗君 823、字符串用雙引號括起來的字符常量稱為字符串。 字符串常量實際上是一個字符數(shù)組,組成數(shù)組的字符除顯式給出的外,還包括隱含在字符結(jié)尾處標識字符串結(jié)束的符號0。所以字符串“book”實際上包含了5個字符:b、o、o、k及0。 字符串與字符比較有如下區(qū)別:(1)字符是由單引號括起來的單個字符。而字符串是由雙引號括起來的,且可以是零個或多個字符。例如:abc是不合法的?!啊笔呛戏ǖ?,表示空字符串。(2)字符在內(nèi)存中占

32、一個字節(jié)的空間位置,字符串在內(nèi)存中的字節(jié)數(shù)等于字符串的字符個數(shù)加1。C+ 系統(tǒng)會自動在字符串結(jié)尾處添加0作為結(jié)束標記。例如: a在內(nèi)存中占一個字節(jié)的空間,而“a”在內(nèi)存中占二個字節(jié)的空間,分別存放a和0。2.3 表達式與運算符表達式是由運算符、操作數(shù)和方法調(diào)用按照語言的語法構(gòu)造而成的符號序列。表達式可用于計算一個公式,為變量賦值以及幫助控制程序執(zhí)行流程。C+ 提供了豐富的運算符,一個運算符可以利用運算對象來完成一次運算。只有一個運算對象的運算符稱為一元運算符。例如 +a 是一個一元運算符,它是對運算對象a自增加1。 需要兩個運算對象的運算符號稱為二元運算符。比如賦值號( = )就是一個二元運算

33、符,它將右邊的運算對象賦給左邊的運算對象。 可以將運算符分成以下幾類:算術(shù)運算符;關(guān)系和條件運算符;移位和邏輯運算符;賦值運算符;其他的運算符。2.3.2 算術(shù)運算符C+ 語言支持所有的浮點型和整型數(shù)進行各種算術(shù)運算。這些運算符為+(加)、-(減)、*(乘)、/(除)以及%(取模)。例2-9 運算符示例 1 #include 2 using namespace std;3 void main()4 6 int a = 41; /定義幾個變量并賦值 7 int b = 21;8 double x = 6.4;9 double y = 3.22;10 cout 變量數(shù)值: endl;11 cout

34、a= a t b= b t x= x t y= y endl;13 cout 加: endl;14 cout a + b = a + b t x + y = x + y endl;16 cout 減: endl;17 cout a b = a - b t x y = x - y endl;19 cout 乘: endl;20 cout a * b = a * b t x * y = x * y endl;22 cout 除: endl;23 cout a / b = a / b t x / y = x / y endl;25 cout 計算余數(shù): endl;26 cout a % b = a

35、% b endl;28 cout 混合類型: endl;29 cout b + y = b + y t a * x = a * x 大于x1 x2x1大于x2=不小于x1 = x2x1 大于或等于x2小于x1 x2x1小于 x2=不大于x1 右移x n將x各位右移n位,左邊按符號補0或補111110101左移x 邏輯右移x n將x右移n位(無符號的) ,左邊補000110101&與x & y將x,y按位與操作01010000|或x | y將x,y按位或操作11011111異或x y將x,y按位異或操作10001111位反 x將x各比特位按位取反001010012.3.5 常用的標準函數(shù)在C+語

36、言中,有二種函數(shù):一種是由C+ 系統(tǒng)提供的函數(shù),另一種是自定義函數(shù)。自定義函數(shù)在后面第3章詳細介紹。這里簡單介紹由C+ 系統(tǒng)提供的函數(shù)的用法。由C+ 系統(tǒng)提供的函數(shù)稱為標準函數(shù)(又稱為庫函數(shù))。C+ 語言提供了豐富的標準函數(shù),設(shè)計程序時可以直接調(diào)用它們。下面介紹幾個常用的標準函數(shù),見表2-7。函數(shù)原型功能頭文件int abs(int x)求整數(shù)的絕對值函數(shù)cstdlibdouble sqrt(double x)求x的平方根函數(shù)cmathdouble log(double x)求x的自然對數(shù)函數(shù)lnxcmathdouble exp(double x)求歐拉常數(shù)e的x次方函數(shù)excmathdoub

37、le pow(double x, double y)求x的y次方函數(shù)xy,x、y為整數(shù)或?qū)崝?shù)cmathdouble sin(double x)正弦函數(shù)cmathdouble cos(double x)余弦函數(shù)cmathdouble tan(double x)正切函數(shù)cmathsizeof(x)求數(shù)據(jù)類型或表達式x所占用內(nèi)存的字節(jié)數(shù)iostream2.4 程序控制語句語句組成了一個執(zhí)行程序的基本單元,它類似于自然語言的句子。一條語句由一個分號結(jié)束。C+語句可以分為以下3類:表達式語句復(fù)合語句控制語句(1)表達式語句例如: x = 3; y = 5; sum = x + y;一個表達式的最后加上一

38、個分號就構(gòu)成了一個語句,分號是語句不可缺少的部分。(2)復(fù)合語句用把一些語句括起來構(gòu)成復(fù)合語句。有時也把復(fù)合語句稱為語句塊。例如: x = 25 + i; cout “x = ” x endl; (3)控制語句控制語句用于控制程序流程及執(zhí)行的先后順序。C+語言的控制語句可分為三類:順序控制語句、選擇控制語句循環(huán)控制語句2.4.2 順序控制語句 順序控制是指計算機在執(zhí)行這種結(jié)構(gòu)的程序時,按從上到下的順序依次執(zhí)行程序中的每一條語句。順序控制是程序的最基本結(jié)構(gòu),包含有選擇控制語句和循環(huán)控制語句的程序,在總體執(zhí)行上也是按順序結(jié)構(gòu)執(zhí)行的。下面介紹一些經(jīng)常使用的順序控制語句 :文件包含命令賦值語句控制輸出

39、格式的輸出語句1、文件包含命令C+ 語言提供了數(shù)百個庫函數(shù)供人們調(diào)用,以方便程序設(shè)計。這些庫函數(shù)均保存在include目錄下擴展名為 .h 的頭文件中。用戶在程序中要調(diào)用頭文件中的庫函數(shù),必須使用#include命令。#include 命令稱為文件包含命令,又稱為文件預(yù)處理語句。如果使用的是系統(tǒng)提供的調(diào)用標準庫函數(shù),就用尖括號把頭文件括起來,如前面我們使用過的: #include 如果使用的頭文件是用戶自己編寫的,則可以將頭文件與源程序保存在同一目錄下,在文件包含命令中,用雙引號“ ”把頭文件括起來。如當前目錄下有用戶自己編寫的頭文件 mysum.h,則文件包含命令可寫為: #include

40、“mysum.h”2、賦值語句賦值語句是給變量提供數(shù)據(jù)的最簡單形式,它是程序中使用最多的語句之一,幾乎所有的程序都要用到它。其一般格式為:賦值語句的功能是把賦值號“=”右邊表達式的值賦給左邊的變量,它的意義與等號不同。變量 = 表達式;例2-14 求一元二次方程 2x2 + 8x + 6的根 根據(jù)求根公式x1,2 = , 先對常量a、b、c賦值,然后再計算x1和x2,1 #include 2 #include 3 using namespace std;4 void main()5 6 int a = 2, b = 8, c = 6;7 double x1, x2; 8 x1 = ( -b +

41、 sqrt( b * b 4 * a * c ) / ( 2 * a );9 x2 = ( -b - sqrt( b * b 4 * a * c ) / ( 2 * a );10 cout x1 = x1 t x2 = x2 endl;11 例2-15 交換兩個變量的值 在編寫程序時,有時需要把兩個變量的值互換,交換值的運算需要用到一個中間變量 1 #include 2 using namespace std;3 main()4 5 int a = 3, b = 5, temp;6 temp = a; 7 a = b;8 b = temp;9 cout a = a t b = b endl;1

42、0 第一步:把a的值放到中間變量temp中第二步:把b的值放到變量a中,這時變量a中存放的是b的值第三步:把temp中原a的值放到變量b中,這時變量b中得到的是原a的值設(shè)temp為中間變量3、控制輸出格式的輸出語句C+還提供了一些控制輸出格式的操縱符,它們可以直接嵌入到輸入/輸出語句中來實現(xiàn)格式控制。常用的I/O流類庫的操縱符如下:dec /輸出十進制數(shù)hex /輸出十六進制數(shù)otc /輸出八進制數(shù)endl /插入換行符ends /插入空字符setw(int n) /設(shè)置輸出域?qū)挾葹橹付ㄖ祅setprecision(int n) /設(shè)置浮點數(shù)的小數(shù)位數(shù)為指定值n (包括小數(shù)點)在使用setw(

43、int)和setprecision(int)操縱符時,要在程序的開頭包含iomanip。例2-16 應(yīng)用控制輸出寬度的setw操縱符,編寫一個用“ * ”組成倒置的三角形程序。 1 #include2 #include3using namespace std;4 void main()5 6 cout setw(7) * endl;7 cout setw(6) * endl;8 cout setw(5) * endl;9 cout setw(4) * endl;10 第一行setw(7) 指定輸出寬度為7,有7個*號。第二行setw(6) 指定輸出寬度為6,只有5個*號,因此在*號前面留有1個

44、空格。第三行setw(5) 指定輸出寬度為5,只有3個*號,因此在*號前面留有2個空格。第四行setw(4) 指定輸出寬度為4,只有1個*號,因此在*號前面留有3個空格。* * * *2.4.3 選擇控制語句單分支選擇結(jié)構(gòu)雙分支選擇結(jié)構(gòu)多分支的if-else-if結(jié)構(gòu)switch語句1、單分支選擇結(jié)構(gòu)if(條件表達式) 若干語句;對于單分支選擇的if條件語句,其的語法格式為: 其流程圖為:例2-17從鍵盤任意輸入兩個整數(shù),按從小到大的順序依次輸出這兩個數(shù) 。1 #include 2 using namespace std;3 void main()45int a, b, temp;6cout

45、a ;8cout b ;10if(a b)11 12 temp = a;13 a = b;14 b = temp;15 16cout a = a t b = b b時,執(zhí)行語句塊;當ab時,跳過該語句塊交換a、b兩變量值的語句塊程序運行結(jié)果如下:任意輸入二個整數(shù):a = 8b = 5a = 5 b = 8例2-18 對給定的三個數(shù),求最大數(shù)的平方 。1#include2using namespace std;3 void main()4 5int a = 5, b = 9, c = 7, max;6 max = a;7if (bmax) max = b; 8if (cmax) max = c;

46、 9cout 最大數(shù)的平方為: max * max endl;10程序運行結(jié)果如下:最大數(shù)的平方為:812、雙分支選擇結(jié)構(gòu)if(表達式)語句塊1;else語句塊2;對于雙分支選擇的if條件語句,其的語法格式為: 其流程圖為:例2-19計算: y = 1#include 2#include 3 using namespace std;4void main()56 double x, y;7 cin x;8 if( x -5 )9 y = sqrt( 25 - x * x );10 else11 y = sqrt( x * x - 25 );12 cout y = y endl;13if-else

47、結(jié)構(gòu),只能執(zhí)行其中一個語句塊& 為邏輯與運算符,表示x-5條件同時成立3、多分支的if-else-if結(jié)構(gòu)if(條件表達式1)程序段1;else if(條件表達式2)程序段2; else if(條件表達式n)程序段n;else程序段n+1;對于多分支選擇的if條件語句其的語法格式為: 其流程圖為: 例2-20 編寫一程序,根據(jù)月份判斷季節(jié)。1 /* if-else-if 結(jié)構(gòu). */2#include3void main()4 5 int month = 4; / 4月份 6 if(month = 12 | month = 1 | month = 2) 7 cout 4月是 冬天 endl;8

48、 else if(month = 3 | month = 4 | month = 5) 9 cout 4月是 春天 endl; 10 else if(month = 6 | month = 7 | month = 8) 11 cout 4月是 夏天 endl; 12 else if(month = 9 | month = 10 | month = 11) 13 cout 4月是 秋天 endl; 14 else 15 cout 不合法的月份; 16 | 為邏輯或運算符,表示只需滿足其中一個條件if-else-i結(jié)構(gòu),只能執(zhí)行其中一個語句塊4、switch語句switch 的語法結(jié)構(gòu)形式 :流程

49、圖例2-21把學(xué)生考試成績分成A、B、C、D、E四等個級,大于90分為A等,8090分為B等,7080分為C等,6070分為D等,60分以下為E等?,F(xiàn)某同學(xué)成績?yōu)?2分,試確定其成績等級。1 #include2 using namespace std;3void main()4 5 int score=82;6 char grade;7 switch(score/10)8 9 case 10 :10 case 9:11 grade=A;12 break; 13 case 8:14 grade=B;15 break; 16 case 7: 17 grade=C;18 break; 19 case

50、 6:20 grade=D;21 break;22 default: 23 grade=E;24 25 cout 成績等級: grade endl;26 switch結(jié)構(gòu),case后面的常量必須是整型數(shù)值2.4.5 循環(huán)語句for循環(huán)語句while循環(huán)語句循環(huán)嵌套1、for循環(huán)語句for(循環(huán)變量賦初值;循環(huán)條件;增量表達式) 循環(huán)體語句塊;循環(huán)體在for語句中,其語法成分是:(1)循環(huán)變量賦初值是初始循環(huán)的表達式,它在循環(huán)開始的時候就被執(zhí)行一次。(2)循環(huán)條件決定什么時候終止循環(huán),這個表達式在每次循環(huán)的過程被計算一次。當表達式計算結(jié)果為false的時候,這個循環(huán)結(jié)束。(3)增量表達式是每循環(huán)

51、一次循環(huán)變量增加多少(即步長)的表達式。(4)循環(huán)體是被重復(fù)執(zhí)行的程序段。for語句的執(zhí)行過程是這樣的: 首先執(zhí)行初始條件表達式,完成必要的初始化工作;再判斷終止條件,若為true,則執(zhí)行循環(huán)體;執(zhí)行循環(huán)體之后,緊接著執(zhí)行增量表達式,以便改變循環(huán)條件,這一輪循環(huán)就結(jié)束了。第二輪循環(huán)從判斷終止條件開始,若為ture,則繼續(xù)循環(huán),否則跳出整個for語句,執(zhí)行后續(xù)語句 例2-22 設(shè)計一個累加器,計算從1加到100的和 1 #include2 using namespace std;3void main() 4 5 int sum=0; 6 for(int i = 1; i = 100; i+)7

52、8 sum = sum + i;9 10 cout 1 + 2 + 3 + . + 100 = sum endl;11 變量sum存放累加值,初始值為0i為循環(huán)變量,每循環(huán)一次,i自加1(步長為i+),循環(huán)終止條件為i100循環(huán)體內(nèi),每循環(huán)一次,累加一次循環(huán)變量的值例2-23 求 10 ! n! = n * (n 1) * (n 2 ) * * 2 * 1 = n * (n - 1)! 遞推公式:pn = n * pn-1 ,pn-1 = ( n 1 ) * pn-2 p1 = 11 #include 2 using namespace std;3 void main()4 5 int i;6

53、 long p = 1;7 for (i=1; i=10; i+)8p = p * i;9 cout 10! = p endl;10 例2-24 從鍵盤上輸入10個整數(shù),邊輸入邊統(tǒng)計偶數(shù)的個數(shù) 1 #include 2 using namespace std;3 void main()4 5 int i, x, s = 0;6 for ( i=1; i x;9if ( x % 2 = 0 )1011cout x 是偶數(shù) endl;12s+;1314 15 cout 共有 s 個偶數(shù) endl;16 循環(huán)體內(nèi)嵌套條件語句用條件語句判斷偶數(shù)滿足條件為偶數(shù)變量s存放偶數(shù)個數(shù) for( ; ; ) /

54、無限循環(huán) 一般,為避免無限循環(huán),上述語句的循環(huán)體中應(yīng)包含能夠退出的語句??梢允褂胋reak語句強行退出循環(huán),忽略循環(huán)體中的任何其他語句和循環(huán)的條件測試。在循環(huán)中遇到break語句時,循環(huán)被終止,程序跳到循環(huán)后面的語句繼續(xù)運行。 循環(huán)條件等均省略,則為無限循環(huán)例2-25 /* 應(yīng)用break語句,中斷無限循環(huán)嵌套 */ 2 #include3using namespace std;4 void main()5 6 int i = 1;7 for( ; ;)8 9 cout i 5 ) break; 12 13 無限循環(huán)if語句設(shè)置跳出循環(huán)條件,應(yīng)用break中斷循環(huán)2、while循環(huán)語句C+語言

55、提供了兩種while循環(huán)語句:即while語句和do-while語句 1)while語句while語句的基本語法結(jié)構(gòu)為 :while(循環(huán)條件表達式) 循環(huán)體;例2-26 老漢賣西瓜,第一天賣西瓜總數(shù)的一半多一個,第二天賣剩下的一半多一個,以后每天都是賣前一天剩下的一半多一個,到第10天只剩下一個。求西瓜總數(shù)是多少? 算法分析:設(shè)共有x個西瓜,賣一半多一個后,還剩下x/2 - 1個,所以,每天的西瓜數(shù)可以用迭代表示: xn = (xn+1 + 1) * 2。且在賣了9天之后(第10天),x = 1。這是可以用循環(huán)來處理的迭代問題。 1 #include 2 using namespace st

56、d;3void main()4 5 int i=1, x=1;6 while(i=9)7 8 x=(x+1)*2;9 i+;10 11 cout “ x = “ x endl;12 while循環(huán)體while循環(huán)必須要有循環(huán)變量自增的語句循環(huán)條件程序運行結(jié)果為:x=15342)do-while語句do-while語句的語法結(jié)構(gòu)為: do 循環(huán)體;(循環(huán)條件表達式);do-while語句與while語句的區(qū)別在于:語句先執(zhí)行循環(huán)中的語句再計算條件表達式,所以do-while語句的循環(huán)體至少被執(zhí)行一次。例2-27 計算 1! + 2! + 3! + + 10! 1 #include2 using

57、namespace std;3 void main() 4 5 long sum = 0, i = 1, p = 1; 6 do7 8 p = p * i; 9 sum = sum + p;10 i+;11 while(i = 10) ;12 cout 1! + 2! + 3! + + 10! = sum endl;13 do-while結(jié)構(gòu)的循環(huán)體循環(huán)變量自增循環(huán)條件計算階乘累加1! + 2! + 3! + + 10! = 40379133、循環(huán)嵌套循環(huán)可以嵌套,在一個循環(huán)體內(nèi)包含另一個完整的循環(huán),叫做循環(huán)嵌套。循環(huán)嵌套運行時,外循環(huán)每執(zhí)行一次,內(nèi)層循環(huán)要執(zhí)行一個周期。例2-28 應(yīng)用循環(huán)嵌

58、套,編寫一個按9行9列排列輸出的乘法九九表程序 算法分析:用雙重循環(huán)控制乘法九九表按9行9列排列輸出,用外循環(huán)變量i控制行數(shù),i從1到9取值。內(nèi)循環(huán)變量j控制列數(shù),由于i * j = j * i,故內(nèi)循環(huán)變量j沒有必要從1到9取值,只需從1到i取值就夠了。外循環(huán)變量i每執(zhí)行一次,內(nèi)循環(huán)變量j執(zhí)行i 次。 1 /* 循環(huán)嵌套應(yīng)用 */ 2 #include3 using namespace std;4 void main()5 6 int i,j;7 for( i = 1;i = 9;i+) 8 9 for(j = 1;j = i;j+) 10 11 cout i x j = i*j t;12

59、13 cout endl; 14 15 外循環(huán)控制行數(shù)內(nèi)循環(huán)控制列數(shù)換行,外循環(huán)控制行數(shù)循環(huán)可以嵌套,可以是 但不能交叉,即 是不允許的 例2-29 應(yīng)用循環(huán)嵌套,編寫求出100以內(nèi)所有素數(shù)的程序。 算法分析:所謂素數(shù)是指只能被1和自身整除的自然數(shù)。根據(jù)素數(shù)定義,素數(shù)n不能是2的倍數(shù),不能是3的倍數(shù),不能是4的倍數(shù),不能是n-1的倍數(shù)。因此,判斷n是否為素數(shù),可以用2,3,4,n-1作除數(shù)依次與n相除,如果都不能整除,則n是一個素數(shù)。這種算法當n足夠大時,除法次數(shù)太多,效率很低??梢宰C明,不需要一直相除到n-1,只需相除到n的平方根就夠了,這樣就大大減少了除法次數(shù)。對于本題,可以通過循環(huán),把1

60、00以內(nèi)2、3、4、n的平方根的倍數(shù)的數(shù)篩去。即把符合下列條件的自然數(shù)n篩除:n % k = 0(k = 2,3,4,sqrt(n));因此需要應(yīng)用雙重循環(huán),外循環(huán)依次提供一個100以內(nèi)的數(shù),由內(nèi)循環(huán)通過作多次篩法運算,判斷其是否為素數(shù)。例2-30 編程,繪制指數(shù)函數(shù)y=ex 的圖像。 1 #include2 #include3 using namespace std;4 void main()5 6 double t;7 float r;8 int i, R;9 for( t = 0; t = 3000; t + = 150 )10 11 r = (float)exp( -0.001 * t

溫馨提示

  • 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

提交評論