版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
緒論
1.1C++的發展歷史C++源於C語言,而C語言是在B語言的基礎上發展起來的。
1960年出現了一種面向問題的高級語言ALGOL60。1963年英國劍橋大學推出了CPL(CombinedProgrammingLanguage)語言,後來經簡化為BCPL語言。
1970年美國貝爾(Bell)實驗室的K.Thompson以BCPL語言為基礎,設計了一種類似於BCPL的語言,取其第一字母B,稱為B語言。
1972年美國貝爾實驗室的DennisM.Ritchie為克服B語言的諸多不足,在B語言的基礎上重新設計了一種語言,取其第二字母C,故稱為C語言。1980年貝爾實驗室的BjarneStroustrup對C語言進行了擴充,推出了“帶類的C”,多次修改後起名為C++。以後又經過不斷的改進,發展成為今天的C++。
C++改進了C的不足之處,支持面向對象的程式設計,在改進的同時保持了C的簡潔性和高效性。
1.2C++程式的開發過程C++語言是一種高級程式設計語言,它的開發過程與其他高級語言程式開發過程類似,一般要經過四個步驟:編輯編譯鏈接執行1.2.1編輯 是指把按照C++語法規則編寫的程式代碼通過編輯器(BorlandC++5.05,VisualC++6.0,TurboC++3.0)輸入電腦,並存盤。在存盤時,C++原始檔案的擴展名為.CPP。1.2.2編譯 將編輯好的C++根源程式通過編譯器轉換為目標檔(OBJ檔)。即生成該原始檔案的目標代碼。
1.2.3鏈接 將用戶程式生成的多個目標代碼檔(.obj)和系統提供的庫檔(.lib)中的某些代碼連接在一起,生成一個可執行檔(.exe)。1.2.4執行 把生成的可執行檔運行,在螢幕上顯示運行結果。用戶可以根據運行結果來判斷程式是否出錯。1.3C++的詞法與規則1.3.1C++的字元集數字:0,1,2,3,4,5,6,7,8,9。小寫字母:a,b,…,y,z。大寫字母:A,B,…,Y,Z。運算符:+,-,*,/,
%,<,<=,=,>=,>,!=,==,<<,>>,&,|,&&,‖,∧,~,(),[],{},->,•
,!,?,?:,,,;,”,#。特殊字元:(連字元或下劃線)。不可印出字元:空白格(包括空格、換行和跳位字元)。1.3.2詞與詞法規則1.識別字 識別字是對實體定義的一種定義符,由字母或下劃線(或連字元)開頭、後面跟字母或數字或下劃線(或空串)組成的字元序列,一般有效長度是8個字元(而ANSIC標準規定31個字元),用來標識用戶定義的常量名、變數名、函數名、檔案名、數組名、和數據類型名和程式等。2.關鍵字 關鍵字是具有特定含義,作為專用定義符的單詞,不允許另作它用。auto break case char classconst continue default do ddefaultdelete double else enum explicitextern float for friend gotoif inline int long mutablenew operator private protectedpublic register return short signedsizeof static static_cast struct switchthis typedef union unsignedvirtualvoid while3.運算符和分隔符號 運算符是C++語言實現加、減等各種運算的符號。
C++語言的分隔符號主要是:空格、製錶和換行符。4.字串 字串是由雙引號括起來的字元。如“China”,“C++Program”等。
5.常量
C++語言中常量包括實型常量(浮點常量)和整型常量(十進位常量、八進制常量、十六進制常量)、浮點常量、字元常量和字串常量。
6.注釋
注釋是用來幫助閱讀、理解及維護程式。在編譯時,注釋部分被忽略,不產生目標代碼。C++語言提供兩種注釋方式。一種是與C相容的多行注釋,用/*和*/分界。另一種是單行注釋,以“//”開頭的表明本行中“//”符號後的內容是注釋。如下程式:
例1-1:一個簡單的C++程式。
#include<iostream.h> voidmain() { cout<<”ThisismyfirstC++program.\n”;//輸出ThisismyfirstC++program. /*輸出
ThisismyfirstC++program.*/
}1.3.3書寫格式
C++語言程式的書寫格式自由度高,靈活性強,隨意性大,如一行內可寫一條語句,也可寫幾條語句;一個語句也可分寫在多行內。不過應採用適當的格式書寫,便於人們閱讀和理解。 為了增加程式的可讀性和利於理解,編寫程式時按如下要點書寫: (1)一般情況下每個語句佔用一行。 (2)不同結構層次的語句,從不同的起始位置開始,即在同一結構層次中的語句,縮進同樣的字數。 (3)表示結構層次的大括弧,寫在該結構化語句第一個字母的下方,與結構化語句對齊,並佔用一行。 (4)適當加些空格和空行。1.4面向對象程式設計
面向對象程式設計是在吸取結構化程式設計的一切優點的基礎上發展起來的一種新的程式設計方法。它的本質是把數據和處理數據的過程當成一個整體——對象。 面向對象是C++中的主要概念,在學習C++之前首先要瞭解這些概念。1.4.1對象 從一般意義上講,對象是現實世界中一個實際存在的事物,它可以是有形的(比如一輛汽車),也可以是無形的(比如一項計畫)。對象是構成世界的一個獨立單位,它具有自己的靜態特徵(狀態)和動態特徵(操作)。靜態特徵即可以用某種數據來描述的特徵,動態特徵即對象所表現的行為或對象所具有的功能。 面向對象語言把狀態和操作封裝於對象體之中,並提供一種訪問機制,使對象的“私有數據”僅能由這個對象的操作來執行。用戶只能通過允許公開的操作提出要求(消息),才能查詢和修改對象的狀態。1.4.2類 類是面向對象語言必需提供的用戶定義的數據類型,它將具有相同狀態、操作和訪問機制的多個對象抽象成為一個對象類。 類與對象的關係如同汽車與具體的一輛車的關係。汽車都能跑,有四個輪子,所有的汽車組成了一個類,具體到一輛汽車,它具有類的全部特性(能跑,有四個輪子),是汽車類的一個子集或元素。類給出了屬於該類的全部對象的抽象定義,而對象則是符合這種定義的一個實體。所以,一個對象又稱作類的一個實例(instance)。
1.4.3封裝
封裝是面向對象方法的一個重要原則。它有兩個涵義:第一個涵義是,把對象的全部屬性和全部服務結合在一起,形成一個不可分割的獨立單位(即對象)。第二個涵義也稱作“資訊隱蔽”,即盡可能隱蔽對象的內部細節,對外形成一個邊界(或者說形成一道屏障),只保留有限的對外介面使之與外部發生聯繫。這主要是指對象的外部不能直接地存取對象地屬性,只能通過幾個允許外部使用地服務與對象發生聯繫。
1.4.4繼承
繼承是面向對象語言的另一特性。類與類之間可以組成繼承層次,一個類的定義(子類)可以定義在另一個已定義類(父類)的基礎上。子類可以繼承父類中的屬性和操作,也可以定義自己的屬性和操作。
C++語言支持單繼承和多繼承,因而具有繼承這一特性所帶來的優勢,大大增加了程式的重用性。
1.4.5多態性
對象的多態性是指在一般類中定義的屬性或操作被特殊類繼承之後,可以具有不同的數據類型或表現出不同的行為。這使得同一個屬性或操作名在一般類及其各個特殊類中具有不同的語義。
1.5C++程式的構成 C++語言程式由以下基本部分組成。1. 函數 一個C++程式是由若干個函數構成的。函數分為庫函數(標準函數)和自定義函數。庫函數一般是由系統提供的。一個完整的C++語言程式只有一個主函數。2. 預處理命令 預處理命令以位於行首的符號“#”開始,C++提供的預處理有宏定義命令、檔包含命令和條件編譯命令三種。
3. 程式語句 一條完整的語句必須以分號“;”結束。程式語句有如下幾類:(1)說明語句 用來說明變數的類型和初值。 如下面語句是把變數說明為浮點數。
floata,b,c;
又如下面語句是把變數sum說明為整型變數,並賦初值為零。
intsum=0;(2)運算式語句 由一個運算式構成一個語句,用以描述算術運算、邏輯運算、或產生某種特定動作,在任何運算式最後加一個分號就構成了一個語句。如下例由賦值運算式加“;”就構成一個賦值運算式語句。(3)程式控制語句 用來描述語句的執行條件與執行順序的語句,C++語言的控制語句有9種,如下頁所示。其語句中的括弧(
)表示其中是條件,~表示內嵌的語句。if()
~else 條件語句for()
~ 迴圈語句while()
~ 迴圈語句do~while()
迴圈語句continue 結束本次迴圈語句break 中止迴圈式switch語句switch 多分支選擇語句goto 轉移語句return 從函數返回語句(4)複合語句 複合語句是一種十分重要的語句,由大括弧{和}把一些說明和語句組合在一起,使它們在語法上等價於一個簡單語句;可由若干簡單語句或複合語句組成。 例如:
if(a>b) {c=a-b; d=c*a; } else {c=a+b; d=c*b; }
數據類型是指定義了一組數據以及定義在這一組數據的操作,它是程式中最基本的元素。
C++數據類型十分豐富,大體上可分為基本類型、空類型、構造類型、指針類型、類類型五種。如圖2-1所示。
數據類型基本類型空類型(無值類型)void構造類型類類型class指針類型整型int實型(浮點型)字元型邏輯型bool結構類型struct數組類型枚舉型類型enum聯合型類型union單精確度型float雙精度型double單字符型char寬字元型w-char圖2-1C++數據類型2.1數據類型2.1.1基本類型 基本數據類型有4種:整型(int)、浮點型(float)、字元型(char)、邏輯型(bool)。 整型數在電腦內部一般採用定點表示法,用於存儲整型量。(如123,-7等),存儲整數的位數依機器的不同而異。 浮點數和整數不同的地方是浮點數採用的是浮點表示法,也就是說,浮點數的小數點的位置不同,給出的精度也不相同。 字元類型表示單個字元,一個字元用一個位元組存儲。 邏輯類型,也稱布爾類型,表示運算式真和假。2.1.2空類型void
空類型void用於顯示說明一個函數不返回任何值。還可以說明指向void類型的指針,說明以後,這個指針就可指向各種不同類型的數據對象。2.1.3構造類型 構造類型又稱為組合類型,它是由基本類型按照某種規則組合而成的。數組:是由具有相同數據類型的元素組成的集合。結構體:是由不同的數據類型構成的一種混合的數據結構,構成結構體的成員的數據類型一般不同,並且在內存中分別佔據不同的存儲單元。共用體:是類似於結構體的一種構造類型,與結構體不同的是構成共同體的數據成員共用同一段記憶體單元。枚舉:是將變數的值一一列舉出來,變數的值只限於列舉出來的值的範圍內。
2.1.4指針類型 指針類型變數用於存儲另一變數的地址,而不能用來存放基本類型的數據。它在內存中佔據一個存儲單元。2.1.5類類型 類是體現面向對象程式設計的最基本特徵,也是體現C++與C最大的不同之處。類是一個數據類型,它定義的是一種對象類型,由數據和方法組成,描述了屬於該類型的所有對象的性質。
2.2常
量
常量是指在程式運行過程中其值不能改變的量。C++支持5種類型的常量:浮點型、整型、字元型、布爾型和枚舉型。常量在程式中一般以自身的存在形式體現其值。常量具有類型屬性,類型決定了各種常量在內存中佔據存儲空間的大小。
2.2.1整型常量 整型數據表示通常意義上的整數,整型常量可以用十進位、八進制或十六進製錶示。1.十進位常量 一般占一個機器字長,是一個帶正負號的常數(默認情況下為正數),如+3,-7等。2.八進制常量 由數字0開頭,其後由若干0~7的數字組成,如0378,0123等。3.十六進制常量 以0x或0X開頭,其後由若干0~9的數字及A~F(或小寫a~f)的字母組成,如0x173,0x3af。
整型常量可以後跟字母l或L表示long型(長整數),也可以跟u或U表示unsigned整數(無符號整數),如以下數是合法的:
375u //無符號整數
12345UL //無符號長整數
54321L //長整數
13579ul //無符號長整數2.2.2浮點數常量 浮點數也稱為實型數。只能以十進位形式表示。共有兩種表示形式:小數表示法和指數表示法。1.小數表示法 使用這種表示形式時,實型常量分為整數部分和小數部分。其中的一部分可在實際使用時省略,如10.2,.2,2.等。但整數和小數部分不能同時省略。2.指數表示法 也稱科學記數法,指數部分以E或e開始,而且必須是整數。如果浮點數採用指數表示法,則E或e的兩邊都至少要有一位數。如以下數是合法的:
1.2e20,-3.4e-2。
2.2.3字元常量與字串常量1.字元常量
C++中的字元常量通常是用單引號括起的一個字元。在內存中,字元數據以ASCII碼存儲,如字元‘a’的ASCII碼為97。字元常量包括兩類,一類是可顯字元,如字母、數字和一些符號
‘@’、‘+’等,另一類是不可顯字元常量,如ASCII碼為13的字元表示回車。2.轉義字元 轉義字元是特殊的字元常量,表示時一般以轉義字元‘\’開始,後跟不同的字元表示不同的特殊字元,表2-1列出了常用的特殊字元。
名稱符號空字元(null)\0換行(newline)\n換頁(formfeed)\f回車(carriagereturn)\r退格(backspace)\b響鈴(bell)\a水準製錶(horizontaltab)\t垂直製錶(verticaltab)\v反斜線(backslash)\\問號(questionmark)\?單引號(singlequote)\’雙引號(doublequote)\”表2-1
常用的特殊字元
3.字串常量 字串常量是由一對雙引號括起來的零個或多個字元序列。 字串可以寫在多行上,不過在這種情況下必須用反斜線‘\’表示下一行字元是這一行字元的延續。 字串常量實際上是一個字元數組,組成數組的字元除顯示給出的外,還包括字元結尾處標識字串結束的符號‘\0’,所以字串“abc”實際上包含4個字元:‘a’、‘b’、‘c’和‘\0’。 需要注意的是‘a’和“a”的區別,‘a’是一個字元常量,在內存中占一個位元組的存儲單元,而“a”是一個字串常量,在內存中占兩個位元組,除了存儲‘a’以外,還要存儲字串結尾符‘\0’。
2.2.4布爾常量 布爾常量僅有兩個:false(假)和true(真)。
2.2.5枚舉常量 枚舉常量可以通過建立枚舉類型來定義。 枚舉類型是一種用戶自定義數據類型。在聲明枚舉類型時,需要把常量的值一一列舉出來,形式如下:
enum枚舉類型名
{常量值1,常量值2,…,常量值n};例如聲明一個名為color的枚舉類型:
enumcolor{Red,Green,Blue,White,Black};
枚舉常量是一種符號常量。Red,Green等是符號常量,它們表示各個枚舉值,在內存中表示以整型數。如果沒有專門指定,第一個符號常量的枚舉值就是0,其他枚舉值依次為1,2,3…。所以,C++自動給Red賦0,Green賦1,等等。
2.3變
量
變數是指程式在運行時其值可改變的量。每個變數由一個變數名惟一標識,同時,每個變數又具有一個特定的數據類型。不同類型的變數在內存中佔有存儲單元的個數不同。
2.3.1變數名命名 變數名的命名要遵守以下規則:不能是C++保留字。C++的保留字如表2-2所列。第一個字元必須是字母或下劃線,中間不能有空格。變數名除了使用26個英文大小寫字母和數字外,只能使用下劃線。一般不要超過31個字元。變數名不要與C++中的庫函數名、類名和對象名相同。 例如,下列變數名是合法的變數名:
a123c3bfile_1asmautobreakcasecatchcharclassconstcontinuedefaultdeletedodoubleelseenumexternfloatforfriendgotoifinlineintlongnewoperatoroverloadprivateprotectedpublicregisterreturnshortsignedsizeofstaticstructswitchthistemplatethrowtrytypedefunionunsignedvirtualvoidvolatilewhile表2-2C++的標準保留字
2.3.2變數定義和說明
C++中,變數使用之前一定要定義或說明,變數定義的格式一般為:
[修飾符]類型
變數名;
[//注釋]
其中,類型指出變數所存放的數據的類型;變數名是任意合法的變數名;注釋指明該變數的含義和用途;修飾符進一步描述了變數的使用方式。修飾符和注釋是任選的,可以沒有。
多個同一類型的變數可以在一行中定義,中間用逗號隔開,也可以分別定義。 例如:
inta,b,c; //定義3個整型變數a,b,c和
inta; //定義整型變數a intb; //定義整型變數b intc; //定義整型變數c二者等價。2.3.3變數初始化 變數初始化一般採用兩種方式。 第一種方式是在定義變數時可以給變數賦一個初值,例如:
inta=3; floatb=3.4; constintc=5;
第二種方式是先定義變數,然後通過賦值語句使變數初始化,例如:
inta; a=3;2.4運算符與運算式
在程式中,運算式是計算求值的基本單位,它是由運算符和運算數組成的式子。運算符是表示進行某種運算的符號。運算數包含常量、變數和函數等。
C++語言的運算符按其在運算式中與運算對象的關係(連接運算對象的個數)可分為:單目運算(一元運算符,只需一個運算元)雙目運算(二元運算符,需兩個運算元)三目運算(三元運算符,需三個運算元)
按其在運算式中所起的作用又可分為:
算術運算符
+-*/%
關係運算符
<<=>===!=
邏輯運算符
!&&||
位運算符
<<>>~|^&
自增自減運算符
++--
賦值運算符
=及其擴展(+=-=*=/=%=等)條件運算符
?:
指針運算符
*和
&
逗號運算符
,
分量運算符
*->
函數調用運算符()下標運算符[]
求位元組運算符
sizeof
強制類型轉換運算符:(type)
2.4.1算術運算符 算術運算符有雙目運算和單目運算兩種。包括:
+(加法運算符,或正值運算符,如1+2,+3)
-(減法運算符,或負值運算符,如1-2,-3)
*(乘法運算符,如1*2)
/(除法運算符,如1/2)
%(模運算符或稱求餘運算符,如7%3=1)
2.4.2賦值運算符(1)賦值運算符“=”的一般格式為: 變數=運算式; 表示將其右側的運算式求出結果,賦給其左側的變數。例如:
inti; i=3*(4+5); //i的值變為27(2)賦值運算式本身的運算結果是右側運算式的值,而結果類型是左側變數的數據類型。例如:
inti=1.2*3; //結果為3,而不是3.6(3)賦值運算符的結合性是從右至左的,因此,C++程式中可以出現連續賦值的情況。例如,下麵的賦值是合法的:
inti,j,k; i=j=k=10; //i,j,k都賦值為10(4)複合運算符:
+=(加賦值),
-=(減賦值),
*=(乘賦值),
/=(除賦值),
%=(取模賦值),
<<=(左移賦值),
>>=(右移賦值),
&=(與賦值),
^=(異或賦值),
|=(或賦值)
它們的含義如下:a+=b 等價於
a=a+ba-=b 等價於
a=a-ba*=b 等價於
a=a*ba/=b 等價於
a=a/ba%=b 等價於
a=a%ba<<=b 等價於
a=a<<ba>>=b 等價於
a=a>>ba&=b 等價於
a=a&ba^=b 等價於
a=a^ba|=b 等價於
a=a|b例如:
inta=12; a+=a;表示
a=(a+a)=(12+12)=24;又例如:
inta=12; a+=a-=a*=a;表示
a=a*a//a=12*12=144 a=a-a//a=144-144=0 a=a+a//a=0+0=02.4.3關係運算符(1)關係運算符用於兩個值進行比較,運算結果為true(真)或false(假),分別用值非0(true)或0(false)表示。C++中的關係運算符如下:<(小於),
<=(小於等於),
>(大於),
>=(大於等於), ==(等於),
!=(不等於),
(2)關係運算符都是雙目運算符,其結合性是從左到右,<、<=、>、>=運算符的優先順序相同,==和!=運算符的優先順序相同,前者運算的優先順序高於後者。(3)關係運算符的優先順序低於算術運算符。例如:
a+b>c 等價於 (a+b)>c a!=b>c 等價於 a!=(b>c)
2.4.4邏輯運算符
&&(邏輯與),
||(邏輯或),!(邏輯非) 邏輯運算式的結果為真則為1,結果為假則為0。 邏輯非(!)是單目運算符,邏輯與(&&)與邏輯或(||)為雙目運算符。
邏輯非的優先順序最高,邏輯與次之,邏輯或最低。 邏輯運算真值表如表2-3所示。
表2-3邏輯運算真值(真為非0,假為0)aba&&ba||b!a!b0000110非00110非000101非0非011002.4.5自增、自減運算符(1)自增(++)、自減(--)運算符為變數的增1和減1提供了緊湊格式。(2)自增、自減運算符都是單目運算符,其作用是使變數的值增1或減1。(3)自增、自減運算符有四種應用格式:
inta=3;b=a++;等價於b=a;a=a+1; inta=3;b=a--;等價於b=a;a=a-1;
(運算符後置用法,代表先使用變數,然後對變數增值)
inta=3;b=++a;等價於a=a+1;b=a; inta=3;b=--a;等價於a=a-1;b=a;
(運算符前置用法,代表先對變數增值,再使用變數)
(4)C++編譯器在處理時盡可能多的自左向右將運算符結合在一起。 例如:a+++b表示為(a++)+b而不是a+(++b)。(5)在調用函數時,實參的求值順序一般為自右向左。而不是PASCAL語言那樣自左向右。例如:
inta=1; printf(“%d,%d,%d”,a++,a++,a++);
輸出的結果為3,2,1而不是1,2,3。
2.4.6條件運算符(1)條件運算符“?:”是C++中惟一三目運算符,其形式為: 運算式1?運算式2:運算式3
它的運算方式為:先計算運算式1的值,如果其值為非0(真),則運算式2的值就是整個運算式的最終結果;否則運算式3的值就是整個運算式的值。常見的一個例子為:
max=((a>b)?a:b)
上面例子定義了一個求兩個數a和b中最大值,其中決定哪一個是最大值用了條件運算符。(2)條件運算符的結合性是自右向左。例如有以下條件運算式:
a>b?a:c>d?c:d相當於
a>b?a:(c>d?c:d)(3)條件運算符的優先順序別高於賦值運算符,低於關係運算符和算術運算符。例如有:
a>b?a-b:b-a相當於
a>b?(a-b):(b-a)2.4.7位運算符(1)位(bit)是電腦中表示資訊的最小單位,一般用0和1表示。一個字元在電腦中用8個位表示,8個位組成一個位元組。C++語言需要將人們通常所習慣的十進位數表示為二進位、八進制或十六進制數來理解對位的操作。C++中所有的位運算符如下:
~(按位求反),
<<(左移),
>>(右移), &(按位與), ^(按位異或),
|(按位或)。(2)位運算符是對其運算元按其二進制形式逐位進行運算,參加位運算的運算元必須為整數。2.4.8sizeof運算符(求位元組運算符)(1)sizeof運算符是單目運算符,用於計算運算對象在內存中所占位元組的多少,它有兩種形式:
sizeof(類型識別字);
sizeof運算式;(2)sizeof可以接受的類型識別字很多,如sizeof(int)表示求整型數據在內存中所占位元組數。
例如:inta,則sizeof(a)表示求變數a在內存中所占位元組數。 例如:inta[10],則sizeof(a)表示求數組a在內存中所占位元組數。
2.4.9逗號運算符(1)逗號運算符用於將多個運算式連在一起,並將各運算式從左到右的順序依次求值,但只有其最右端的運算式的結果,作為整個逗號運算式的結果。(2)逗號運算式的一般格式為: 運算式1,運算式2,……,運算式n
例如:
inta=3,b=4,c=5; a+b,b+c,c+a;
則先求解a+b,再求解b+c,最後求解c+a,整個運算式的結果為c+a的結果。
2.4.10運算符優先順序(1)運算符優先順序決定了在運算式中各個運算符執行的先後順序。高優先順序運算符先於低優先順序運算符進行運算。在優先順序相同的情形下,則按從左到右的順序進行運算。(2)當運算式中出現了括弧時,會改變優先順序。先計算括弧中的子運算式值,再計算整個運算式的值。 表2-4(見教材)列出了C++的所有運算符集,依優先順序從高到低排列。(3)運算符的結合方式有兩種:左結合和右結合。左結合表示運算符優先與其左邊的識別字結合進行運算,如加法;右結合表示運算符優先與其右邊的識別字結合,如單目運算符+、-。(4)同一優先順序的優先順序別相同,運算次序由結合方向決定。如1*2/3,*和/的優先順序別相同,其結合方向自左向右,則等價於(1*2)/3。(5)不同的運算符要求有不同的運算對象個數,單目運算符只需一個運算對象,如i++,-a,sizeof(b)等。2.4.11運算式 運算式是用於計算的式子,它由運算符、運算數和括弧組成。最簡單的運算式只有一個常量或變數,當運算式中有兩個或多個運算符時,運算式稱為複雜運算式,其中運算符執行的先後順序由它們的優先順序和結合性決定。執行運算式所規定的運算,所得到的結果值便是運算式的值。
C++中由於運算符很豐富,因此運算式的種類也很多。常用的運算式有6種。
1. 算術運算式 由算術運算符和位操作運算符組成的運算式。其運算式的值是一個數值,運算式的類型由運算符和運算數確定。 例如,
a+3*(b/2)就是一個算術運算式。2. 邏輯運算式 由邏輯運算符組成的運算式。其運算式的值的類型為邏輯型,一般地,真用1表示,假用0表示。 例如,!a&&b||c就是一個邏輯運算式。
3. 關係運算式 由關係運算符組成的運算式。其運算式的值的類型為邏輯型,一般地,真用1表示,假用0表示。 例如,a>b!=c就是一個關係運算式。4. 賦值運算式 由賦值運算符組成的運算式。 例如,已知a=b就是一個賦值運算式。
5. 條件運算式 由三目運算符組成的運算式。條件運算式的值取決於?號前面的運算式,該運算式的值為非0時,整個運算式的值為:號前面運算式的值,否則為:號後面運算式的值。條件運算式的類型是:號前和:號後兩個運算式中類型高的一個運算式的類型。 例如,a>b?a:b就是一個條件運算式。6. 逗號運算式 用逗號將若干個運算式連起來組成的運算式。該運算式的值是組成逗號運算式的若干個運算式中最後一個運算式的值,類型也是最後一個運算式的類型。逗號運算式計算值的順序是從左至右逐個運算式分別計算。 例如,a+3,b+4,c+5就是一個逗號運算式。
2.4.12數據類型轉換
C++中數據類型轉換有兩類,即隱式類型轉換和顯式類型轉換。1. 隱式類型轉換 隱式類型轉換是由編譯器自動完成的類型轉換。當編譯器遇到不同類型的數據參與同一運算時,會自動將它們轉換為相同類型後再進行運算,賦值時會把所賦值的類型轉換為與被賦值變數類型一樣。隱式類型轉換按從低到高的順序進行,如圖2-2所示。
整型(int)短整型,字元型(short,char)單精確度浮點型(float)雙精度浮點型(double)無符號長整型(unsignedlong)長整型(long)無符號整型(unsigned)圖2-2數據類型轉換的順序
高級語言根源程式的基本組成單位是語句。在C++程式中,語句是最小的可執行單元,一條語句由一個分號結束。
C++程式的語句按其功能可以劃分為兩類: 操作運算語句 流程控制語句 基本的控制結構有三種: 順序結構,選擇結構,迴圈結構
3.1順序控制語句
顧名思義,所謂順序結構,就是指按照語句在程式中的先後次序一條一條的順次執行。順序控制語句是一類簡單的語句,上述的操作運算語句即是順序控制語句,包括運算式語句,輸入/輸出等。
3.1.1運算式語句
任何一個運算式後面加上一個分號就構成了運算式語句(沒有分號的不是語句)。運算式是指用運算符連接各個運算對象,合乎語法規則的式子。 例如,以下都是運算式語句:
a=3+5; a>b?a:b; a=1,b=2,c=3; printf(“hello\n”);
常見的運算式語句有以下幾種:空語句、賦值語句、函數調用語句。
1.空語句 空語句是指只有一個分號而沒有運算式的語句。語法格式為: ;
空語句不做任何操作運算,而只是作為一種形式上的語句,填充在控制結構之中。這些填充處需要一條語句,但又不做任何操作。 空語句是最簡單的運算式語句。
2.賦值語句 賦值語句是由賦值運算式加一個語句結束標誌(分號“;”)構成的語句。語法格式為: 變數
賦值運算符
運算式; 例如: a=1; b+=2; c=sin(d);
可以多重賦值,將一個運算式的值同時賦給多個變數。如:變數1=變數2=…=變數n=運算式; 等價於:變數1=運算式;變數2=運算式;…;變數n=運算式;
3.函數調用語句 函數調用語句是由函數調用運算式加一個語句結束標誌(分號“;”)構成的語句。 例如:
scanf(“%d”,&e);
max(a,b);
3.1.2
輸入/輸出(I/O)
C++程式沒有輸入/輸出語句,它的輸入/輸出功能由函數(scanf、printf)或流控制來實現。輸入/輸出流(I/0流)是輸入或輸出的一系列位元組。C++定義了運算符“<<”和“>>”的iostream類。在這裏只介紹如何利用C++的標準輸入/輸出流實現數據的輸入/輸出功能。
1.輸入 當程式需要執行鍵盤輸入時,可以使用抽取操作符“>>”從輸入流cin中抽取鍵盤輸入的字元和數字,並把它賦給指定的變數。例如:
#include<iostream.h> voidmain() { inta; cin>>a; }
注意:這裏的抽取操作符“>>”與位移運算符“>>”是同樣的符號,但這種符號在不同的地方其含義是不一樣的。
2.輸出 當程式需要在螢幕上顯示輸出時,可以使用插入操作符“<<”向輸出流cout中插入字元和數字,並把它在螢幕上顯示輸出。例如:
#include<iostream.h> voidmain() { cout<<”Hello.\n”; }
與輸入一樣,這裏的插入操作符“<<”與位移運算符“<<”是同樣的符號,但這種符號在不同的地方其含義是不一樣的。
在C++程式中,cin與cout允許將任何基本數據類型的名字或值傳給流。而且書寫格式較靈活,可以在同一行中串連書寫,也可以分寫在幾行,提高可讀性。 例如:cout<<”hello”; cout<<3; cout<<endl;
等價於:
cout<<”hello”<<3<<endl;
也等價於:
cout<<”hello” //注意:行末無分號
<<3 //行末無分號
<<endl;
又例如:
inta;doubleb; cin>>a>>b;//cin可分辨不同的抽取
//變數類型3.常用的控制符 用控制符(manipulators)可以對I/O流的格式進行控制。C++在頭檔iomanip.h中定義了控制符對象,可以直接將這些控制符嵌入到I/O語句中進行格式控制。在使用這些控制符時,要在程式的開頭包含頭檔iomanip.h。
表3-1列出了常用的I/O流控制符。
控制符含義dec數值數據採用十進位表示hex數值數據採用十六進製錶示oct數值數據採用八進製錶示setw(n)設置域寬為n個字元setprecision(n)設置浮點數的小數位數(包括小數點)setioflags(ios::uppercase)十六進制數大寫輸出setioflags(ios::lowercase)十六進制數小寫輸出setiosflags(ios::left)左對齊setiosflags(ios::right)右對齊setiosflags(ios::showpos)設置正、負符號的顯示setfill(c)設置填充字元為cendl插入換行符,並刷新流
表3-1
常用的I/O流控制符
(1)控制不同進制的輸出(十進位、八進制、十六進制)
#include<iostream.h> voidmain() { inta=1001; cout<<”默認下:”<<a<<endl; cout<<”十進位:”<<dec<<a<<endl; cout<<”八進制:”<<oct<<a<<endl; cout<<”十六進制:”<<hex<<a<<endl;}
此程式的運行結果為: 默認下:1001
十進位:1001
八進制:1751
十六進制:3e9(2)控制輸出寬度
#include<iostream.h> #include<iomanip.h> voidmain() { inta=1234567890; doubleb=123.45; cout<<setw(10)<<a<<endl; cout<<setw(10)<<b<<endl; cout<<setw(8)<<b<<endl; cout<<setw(6)<<b<<endl; cout<<setw(4)<<b<<endl; }此程式的運行結果為:
1234567890 123.45 123.45 123.45
123.45(3)控制輸出精度
#include<iostream.h> #include<iomanip.h> voidmain() { doublea=1.234567; cout<<setprecision(3)<<a<<endl; }
如果希望顯示的數字是1.23,即保留兩位小數,此時可用setprecision(n)控制符加以控制,此時顯示3位有效位。當小數位數截短顯示時,進行四捨五入處理。
C++默認的輸出流數值的有效位是6。
(4)控制左右對齊 默認情況下,C++程式的I/O流以左對齊方式顯示輸出的內容。使用控制符setiosflags(ios::left)和setiosflags(ios::right),可以控制輸出內容的左、右對齊方式。setiosflags(ios::left)和setiosflags(ios::right)控制符在頭檔iomanip.h中定義。
(5)控制正、負符號的顯示
#include<iostream.h>#include<iomanip.h>voidmain(){cout<<10<<””<<-20<<endl;cout<<setiosflags(ios::showpos)<<30<<””<<-40<<endl;}此程式的運行結果為:10 -20+30 -40
(6)控制空位填充
#include<iostream.h>#include<iomanip.h>voidmain(){cout<<setfill(‘*’)<<setw(4)<<12<<endl;}此程式的運行結果為:**12
3.1.3複合語句
C++語言允許把一組語句用一對花括弧括起來,構成一個複合語句。例如:
{ inta; a=1+2; }
請注意:一個複合語句的右花括弧“}”之後不能再寫分號。 複合語句也稱為分程式,是若干條語句的一個集合,它在語法上是一個整體,相當於一個語句。在分程式中定義的變數只在此分程式中有效。
3.2選擇控制語句
選擇語句又稱為分支語句,它通過對給定的條件進行判斷,從而決定執行兩個或多個分支中的哪一支。因此,在編寫選擇語句之前,應該首先明確判斷條件是什麼,並確定當判斷結果為“真”或“假”時應分別執行什麼樣的操作(演算法)。
C++程式中提供的選擇語句有兩種:
if…else語句和switch語句。
3.2.1if…else語句1.if語句
if語句的語法格式為:
if(條件運算式)或:
if(條件運算式)
語句; {
語句序列;
}
它的意義為:如果條件運算式進行一次測試,且測試為真,則執行後面的語句。 當語句序列只包含一條語句時,包圍該語句序列的花括弧可以省略。
例如:判斷用戶的輸入,如果輸入的數值大於0,則在螢幕上顯示“正數”。
#include<iostream.h> voidmain() { inta; cin>>a; if(a>0) cout<<”正數”<<endl; }2.空語句 編譯器必須在if條件運算式的後面找到一個作為語句結束符的分號“;”,以標誌if語句的結束。這樣,如果是下麵的代碼:
if(條件運算式);
//空語句做if中的語句 語句; 則不管條件運算式為真為假,總是接著執行分號後的語句。即相當於if語句不做任何事。3.if…else語句if…else語句的語法格式為:if(條件運算式){
語句序列1;}else{
語句序列2;}
它的意義為:如果“條件運算式”的判斷結果為真,則執行語句序列1;如果“條件運算式”的判斷結果為假,則執行語句序列2。
判斷用戶的輸入,如果輸入的數值大於0,則在螢幕上顯示“正數”;否則在螢幕上顯示“不是正數”。#include<iostream.h>voidmain(){inta;cin>>a;if(a>0)cout<<”正數”<<endl;elsecout<<”不是正數”<<endl;}
當多個if…else語句嵌套時,為了防止出現二義性,C++語言規定,由後向前使每一個else都與其前面的最靠近它的if配對。如果一個else的上面又有一個未經配對的else,則先處理上面的(內層的)else的配對。 例如:判斷a、b、c三個數中的最大值。if(a>b)if(a>c)max=a;elsemax=c;elseif(b>c)max=b;elsemax=c;
當多個if…else語句嵌套時,在容易誤解的地方可以按照語法關係加上花括弧來標識邏輯關係的正確性。 如上例可以改寫為:if(a>b){if(a>c)max=a;elsemax=c;}else{if(b>c) max=b; else max=c;}
3.2.2switch語句
switch語句是多分支的選擇語句。嵌套的if語句可以處理多分支選擇。但是,用switch語句更加直觀。
switch語句的語法格式為:switch(整數運算式)
{case常量運算式1:<語句序列1>;
case常量運算式2:<語句序列2>;
……case常量運算式n:<語句序列n>;
default:<語句序列n+1>;
} switch語句的執行順序是:首先對“整數運算式”進行計算,得到一個整型常量結果,然後從上到下尋找與此結果相匹配的常量運算式所在的case語句,以此作為入口,開始順序執行入口處後面的各語句,直到遇到break語句,才結束switch語句,轉而執行switch結構後的其他語句。如果沒有找到與此結果相匹配的常量運算式,則從default:處開始執行語句序列n+1。例如,根據考試成績的等級輸出百分制分數段:chargrade;//...switch(grade){case’A’:cout<<“85~100\n”;break;case’B’:cout<<“70~84\n”;break;case’C’:cout<<“60~69\n”;break;case’D’:cout<<“<60\n”;break;default:cout<<“error\n”;break;}若grade的值為‘A’,則程式的輸出結果為:85~100
幾點說明:(1)default語句是可缺省的。(2)switch後面括弧中的運算式只能是整型、字元型或枚舉型運算式。(3)在各個分支中的break語句起著退出switch語句的作用。(4)case語句起標號的作用。標號不能重名。(5)可以使多個case語句共用一組語句序列。(6)各個case(包括default)語句的出現次序可以任意。(7)每個case語句中不必用{},而整體的switch結構一定要寫一對花括弧{}。(8)switch結構也可以嵌套。3.3迴圈控制語句 C++提供了三種迴圈控制語句:while語句,do…while語句,for語句。三種語句都由相似的三部分組成:進入迴圈的條件,循環體,退出迴圈的條件;完成的功能也類似。所不同的只是三者進入與退出迴圈的方式不同。
while語句:當條件滿足時進入,重複執行循環體,直到條件不滿足時退出。
do…while語句:無條件進入,執行一次循環體後判斷是否滿足條件,當條件滿足時重複執行循環體,直到條件不滿足時退出。
for語句:當迴圈變數在指定範圍內變化時,重複執行循環體,直到迴圈變數超出了指定的範圍時退出。
3.3.1while語句
while語句的語法格式為:
while(條件運算式)
循環體; 它的含義為:首先對條件運算式進行判斷,若判斷結果為假(false,0),則跳過循環體,執行while結構後面的語句。若判斷結果為真(true,非0),則進入循環體,執行其中的語句序列。執行完一次循環體語句後,修改迴圈變數,再對條件運算式進行判斷,若判斷結果為真,則再執行一次循環體語句,……依次類推,直到判斷結果為假時,退出while迴圈語句,轉而執行後面的語句。即“先判斷後執行”。 while迴圈由4個部分組成:迴圈變數初始化,判斷條件,循環體,改變迴圈變數的值。 例如,計算sum=1+2+3+…+10的while迴圈結構如下:
sum=0; i=1; //迴圈變數初始化
while(i<=10) //判斷條件
{ //循環體
sum=sum+i; i++; //改變迴圈變數的值
}注意:(1)如果循環體包含一個以上的語句,則應該用花括弧括起來,以塊語句形式出現。(2)仔細定義迴圈變數的初始值和判斷條件的邊界值。(3)對條件運算式的計算總是比循環體的執行多一次。這是因為最後一次判斷條件為假時不執行循環體。(4)當循環體不實現任何功能時,要使用空語句作為循環體,表示為:
while(條件運算式)
;(5)循環體中,改變迴圈變數的值很重要。如果迴圈變數的值恒定不變,或者當條件運算式為一常數時,將會導致無限迴圈(也即死迴圈)。若要退出一個無限迴圈,必須在循環體內用break等語句退出。
3.3.2do…while語句
do…while語句的語法格式為:
do
循環體;
while(條件運算式);
它的含義為:當流程到達do後,立即執行循環體語句,然後再對條件運算式進行判斷。若條件運算式的值為真(非0),則重複執行循環體語句,否則退出。即“先執行後判斷”方式。
do…while語句與while語句功能相似。
例如:計算sum=1+2+3+…+10的do…while迴圈結構如下:
sum=0; i=1; //迴圈變數初始化
do { //循環體
sum=sum+i; i++; //改變迴圈變數的值
}while(i<=10) //判斷條件 與while語句不同的是:while語句有可能一次都不執行循環體,而do…while迴圈至少執行一次,因為直到程式到達循環體的尾部遇到while時,才知道繼續條件是什麼。
do…while結構與while結構中都具有一個while語句,很容易混淆。為明顯區分它們,do…while循環體即使是一個單語句,習慣上也使用花括弧包圍起來,並且while(運算式)直接寫在花括弧“}”的後面。這樣的書寫格式可以與while結構清楚地區分開來。 例如:
do { sum+=i++; }while(i<=100);3.3.3for語句
for語句的語法格式為:
for(運算式1;運算式2;運算式3)
循環體; 其中,運算式1可以稱為初始化運算式,一般用於對迴圈變數進行初始化或賦初值;運算式2可以稱為條件運算式,當它的判斷條件為真時,就執行循環體語句,否則終止迴圈,退出for結構;運算式3可以稱為修正運算式,一般用於在每次循環體執行之後,對迴圈變數進行修改操作;循環體是當運算式2為真時執行的一組語句序列。
具體來說,for語句的執行過程如下: (1)先求解運算式1; (2)求解運算式2,若為0(假),則結束迴圈,並轉到(5); (3)若運算式2為非0(真),則執行循環體,然後求解運算式3; (4)轉回(2); (5)執行for語句下麵的一個語句。
例如,計算sum=1+2+3+…+10的for迴圈結構如下:
sum=0; for(i=1;i<=10;i++)//初始化,判斷條
//件,修改方式,步長都在頂部描述
{ sum+=i; //循環體相對簡潔
}
由此例可見,for語句將循環體所用的控制都放在迴圈頂部統一表示,顯得更直觀。
除此之外,for語句還充分表現了其靈活性。比如,運算式3並不僅限於修正迴圈變數的值,還可以是任何操作。例如:for(sum=0,i=1;i<=10;sum+=i,i++);注意,此時for語句沒有循環體,也即循環體是一個空語句。 有時,運算式2被省略。即不判斷迴圈條件,迴圈無終止進行下去。這時候,需要在循環體中有跳出迴圈的控制語句。 最簡單的表示無限迴圈的方式如下:
for(
;
;)
//分號不能省略 三個運算式都可省略。即不設初值,不判斷條件(認為運算式2為真),迴圈變數不變化,無終止執行循環體的語句。3.4跳轉語句
在C++中,除了提供順序執行和選擇控制、迴圈控制語句外,還提供了一類跳轉語句。這類語句的總體功能是中斷當前某段程式的執行,並跳轉到程式的其他位置繼續執行。常見的跳轉語句有三種:break語句、continue語句與goto語句。其中,前兩種語句不允許用戶自己指定跳轉到哪里,而是必須按照相應的原則跳轉,而後一種語句可以由用戶事先指定欲跳轉到的位置,按照用戶的需要進行跳轉。3.4.1
break語句
break語句的作用是:結束當前正在執行的迴圈(for、while、do…while)或多路分支(switch)程式結構,轉而執行這些結構後面的語句。 在switch語句中,break用來使流程跳出switch語句,繼續執行switch後的語句。 在迴圈語句中,break用來從最近的封閉循環體內跳出。
例如,下麵的代碼在執行了break之後,繼續執行“a+=1;”處的語句,而不是跳出所有的迴圈:
for(;;){…for(;;){…if(i==1)break;…}a+=1;//break跳至此處
//…}3.4.2continue語句
continue語句的作用是:結束當前正在執行的這一次迴圈(for、while、do…while),接著執行下一次迴圈。即跳過循環體中尚未執行的語句,接著進行下一次是否執行迴圈的判定。 在for迴圈中,continue用來轉去執行運算式2。 在while迴圈和do…while迴圈中,continue用來轉去執行對條件運算式的判斷。
continue語句和break語句的區別是:continue語句只結束本次迴圈,而不是終止整個迴圈的執行。而break語句則是結束本次迴圈,不再進行條件判斷。
例如:
輸出1~100之間的不能被7整除的數。
for(inti=1;i<=100;i++) { if(i%7==0) continue; cout<<i<<endl; }
當i被7整除時,執行continue語句,結束本次迴圈,即跳過cout語句,轉去判斷i<=100是否成立。只有i不能被7整除時,才執行cout函數,輸出i。3.4.3goto語句
goto語句的語法格式為:
goto標號; 其中,標號是一個用戶自定義的識別字,它的命名規則與變數名的命名規則相同。定義標號時,由一個識別字後面跟一個冒號組成。標號的位置自由,可位於goto語句的前面,也可位於goto語句的後面,但必須與goto語句共處於同一函數中。
goto語句的作用是:結束當前正在執行的迴圈(for、while、do…while)或多路分支(switch)程式結構,轉而執行標號所標識的語句。
例如:求1加到10的總和。
i=1;sum=0; loop: sum+=i++; if(i<=10) gotoloop; cout<<“thesumis”<<sum<<endl;
濫用goto語句將使程式流程無規則、可讀性差,現代程式設計方法主張限制使用goto語句。用goto語句實現的迴圈完全可用while或for迴圈來表示。一般地,goto語句只在一個地方有使用價值:當要從多重迴圈深處直接跳轉到迴圈之外時,如果用break語句,將要用多次,而且可讀性並不好,這時goto可以發揮作用。
例3-8:判斷某一年是否是閏年。#include"iostream.h"voidmain(){intyear,leap;cout<<"pleaseinputayear:"<<endl;cin>>year;if((year%4==0&&year%100!=0)||(year%400==0))leap=1;elseleap=0;if(leap)cout<<year<<"isaleapyear."<<endl;elsecout<<year<<"isnotaleapyear."<<endl;}
最後看一個應用程式:
C++語言認為函數是一個能完成某一獨立功能的副程式,也就是程式模組。
函數就是對複雜問題的一種“自頂向下,逐步求精”思想的體現。
編程者可以將一個大而複雜的程式分解為若干個相對獨立而且功能單一的小塊程式(函數)進行編寫,並通過在各個函數之間進行調用,來實現總體的功能。
4.1函數概述
使用函數的優點:(1)可讀性好;(2)易於查錯和修改;(3)便於分工編寫,分階段調試;(4)各個函數之間介面清晰,便於相互間交換資訊和使用;(5)節省程式代碼和存儲空間;(6)減少用戶總的工作量;(7)成為實現結構程式設計思想的重要工具;(8)擴充語言和電腦的原設計能力;(9)便於驗證程式正確性。
設計C++程式的過程,實際上就是編寫函數的過程,至少也要編寫一個main()函數。 執行C++程式,也就是執行相應的main()函數。即從main()函數的第一個左花括弧“{”開始,依次執行後面的語句,直到最後一個右花括弧“}”為止。如果在執行過程中遇到其他的函數,則調用其他函數。調用完後,返回到剛才調用函數的下一條語句繼續執行。而其他函數也只有在執行main()函數的過程中被調用時才會執行。
函數可以被一個函數調用,也可以調用另一個函數,它們之間可以存在著調用上的嵌套關係。但是,C++不允許函數的定義嵌套,即在函數定義中再定義一個函數是非法的。
C++函數是一個獨立完成某個功能的語句塊,函數與函數之間通過輸入和輸出來聯繫。
4.2函數的定義與聲明
在C++程式中調用函數之前,首先要對函數進行定義。如果調用此函數在前,函數定義在後,就會產生編譯錯誤。 為了使函數的調用不受函數定義位置的影響,可以在調用函數前進行函數的聲明。這樣,不管函數是在哪里定義的,只要在調用前進行函數的聲明,就可以保證函數調用的合法性。4.2.1函數的定義
C++中的每一個函數都是從四個方面來進行定義:類型、函數名、形式參數表、函數體。 定義一個函數的語法格式為: 類型
函數名(形式參數表)
{
函數體;
}例如:intmax(inta,intb){intt;if(a>b)t=a;elset=b;returnt;}
類型就是該函數的類型,也就是該函數的返回值的類型,此類型可以是C++中除函數、數組類型之外的任何一個合法的數據類型,包括普通類型、指針類
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 昆工电力系统课程设计
- 以实践为导向的课程设计
- 亚洲的自然环境课程设计
- 课程设计的基本方针是指
- 拼多多虚拟电商课程设计
- 钉道护理中的伦理问题与应对策略
- 护理教育的理论与实践结合
- 巨大儿护理培训与教育
- 儿童心理护理与儿童福利
- CVC维护中的患者教育
- 百师联盟2025届高三10月一轮复习联考英语试卷(含答案详解)
- 管理经济学:理论与案例 毛蕴诗第2版 每章习题答案
- 品牌视觉形象设计智慧树知到期末考试答案章节答案2024年武昌理工学院
- (高清版)WST 415-2024 无室间质量评价时的临床检验质量评价
- 趣识古文字智慧树知到期末考试答案章节答案2024年吉林师范大学
- 国开(河北)2024年《中外政治思想史》形成性考核1-4答案
- 二年级乘除法口算题计算练习大全2000题(可直接打印)
- MOOC 微型计算机原理与接口技术-南京邮电大学 中国大学慕课答案
- 公有云技术及应用高职全套教学课件
- 有限空间安全检查档案(含检查记录、台账)全套
- 产品质量回顾分析课件
评论
0/150
提交评论