




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、C+程序設計C+是一門面向對象的程序設計語言,語法豐富,概念全面,兼顧易用和效率,在游戲開發(fā)、網絡軟件、分布式(服務器集群)、移動(手持)設備、嵌入式系統等領域有著廣泛的應用。C+是由C語言發(fā)展而來,保留了C語言原有的所有優(yōu)點,增加了面向對象的機制。C+與C語言兼容,用C語言寫的程序基本上可以不加修改地用于C+。一. C+基礎知識1.C+語言概述2.簡單的C+程序實例3.C+的詞法單位4.C+的數據類型5.變量和常量6.運算符和表達式7.C+語句8.算術類型轉換和賦值類型轉換9.求值次序與副作用10.數組與字符數組11.輸入輸出12.輸入輸出格式的控制二. 基本控制結構1.算法的概念與表示方法
2、2.分支結構-if語句3.分支結構-if語句的嵌套4.分支結構-條件運算符5.分支結構-switch語句6.循環(huán)結構-while語句7.循環(huán)結構-do-while語句8.循環(huán)結構-for語句9.循環(huán)結構-循環(huán)的嵌套10.轉向語句11.結構化程序設計思想12.常用算法的應用實例13.枚舉類型14.文件操作三. 函數函數的定義與調用參數傳遞、返回值及函數聲明全局變量和局部變量函數調用機制作用域與標識符的可見性變量存儲類型與標識符生命期函數的遞歸調用函數的重載、內聯和默認參數頭文件與多文件結構編譯預處理四. 類與對象1.類和成員函數的定義2.C+對象的創(chuàng)建與使用3.從面向過程到面向對象4.構造函數和
3、析構函數5.引用與復制構造函數6.運算符重載7.友元8.靜態(tài)成員9.結構五. 數組與指針1.數組2.多維數組3.指針與地址4.指針與地址5.this 指針6.數組與指針的關系7.字符串和string類8.多級指針與多維數組六. 模板與數據結構C+模板-函數模板C+模板-類模板與線性表常用的查找方法常用的排序方法索引查找與指針數組函數指針與指針識別七. 動態(tài)內存分配1.自由存儲區(qū)內存分配2.淺復制與深復制3.鏈表-單鏈表的基本算法4.鏈表-單鏈表類型模板5.鏈表-雙向鏈表6.棧與隊列-棧的基本操作和應用7.棧與隊列-隊列及其操作8.二叉樹八. 繼承與多態(tài)1.繼承與派生的概念2.派生類的構造函數與
4、析構函數3.多重繼承與派生類成員標識4.虛基類5.派生類應用討論6.多態(tài)性與虛函數九. 輸入/輸出流類庫C+的基本流類體系輸入輸出的格式控制標準設備的輸入/輸出文件-文件的打開與關閉文件-文件的讀/寫文件-文件的隨機訪問字符串流文件與對象十. 異常處理1.異常的概念和處理機制2.棧展開與異常捕獲3.異常的重新拋出和catch_all4.異常與繼承5.異常規(guī)范6.C+標準庫的異常類層次結構十一. 標準模板庫1.標準模板庫簡介2.迭代子類3.順序容器類4.泛型算法與函數對象5.關聯容器類6.容器適配器一、C+基礎知識C+語言是目前廣泛使用的程序設計語言之一,因其特有的優(yōu)勢在計算機應用領域占有重要一
5、席。本章作為C+程序設計的入門章節(jié),首先結合實例介紹C+程序的概貌;然后針對其特點,介紹C+中的基本詞法單位、數據類型、相關運算、以及常量、變量、表達式、語句等基礎知識,為編程做好準備;最后介紹簡單的輸入輸出方法。本章內容:1、C+語言概述C+語言是廣泛使用的程序設計語言之一,因其特有的優(yōu)勢在計算機應用領域占有重要一席。C語言的發(fā)展· 20世紀70年代初,貝爾實驗室的Dennis Richie 等人在B語言基礎上開發(fā)出C語言,最初是作為UNIX的開發(fā)語言。· 20世紀70年代末,隨著微型計算機的發(fā)展,C語言開始移植到非UNIX環(huán)境中,并逐步成為獨立的程序設計語言。·
6、; C語言版本很多,為了讓開發(fā)出來的代碼能夠在多種平臺上運行,1988年ANSI(美國國家標準協會)對C語言進行了標準化,產生了ANSI C。C語言的特點· 既有高級語言的結構和編程環(huán)境,又有類似于低級語言(如匯編語言)的系統資源操縱能力;· 目標代碼的執(zhí)行效率只比匯編低1020% ,比其他高級語言高,適合解決有實時要求的問題;· 有豐富的運算符、數據類型和表達式,對程序設計有良好的適應性;· 支持以函數為基礎結構化程序設計、多文件構成及文件獨立編譯,適合大型復雜程序設計;· 語言簡潔、緊湊,使用方便、靈活,書寫形式自由;· 代碼及可
7、執(zhí)行程序的可移植性好。C+語言的發(fā)展20世紀80年代初,繼面向對象語言smalltalk后,許多程序設計語言都向面向對象的方向發(fā)展。C+就是以C語言為基礎而發(fā)展起來的以面向對象為主要特征的語言。C+語言的特點· 繼承了C語言的優(yōu)點,又擴充了數據類型,使編譯系統可檢查出更多類型錯誤;· 支持面向對象程序設計,通過繼承、重載和多態(tài)性等特征實現了軟件重用和程序自動生成;· 加強了一致性(Consistency)檢查機制,提高了軟件開發(fā)的效率和質量;· 完全兼容C,多數C編寫的庫函數和應用程序都可為C+所用,加快了C+和面向對象技術的推廣;· 既支持面
8、向對象程序設計,也支持面向過程設計,不是純正的面向對象的語言;· C+有許多版本,國內較為流行的有Microsoft公司的Visual C+。2、簡單的C+程序實例下面通過一個簡單的程序例子來分析C+程序的基本構成及主要特點。程序舉例【例1.1】 一個簡單的C+程序:輸入兩個整數,通過調用函數求兩個數中的較大值。#include <iostream.h>using namespace std;int max(int i, int j) /*定義max()函數*/ if (i>=j) retu
9、rn i; else return j;int main(void) /*定義main()函數*/ cout<&
10、lt;"輸入i,j:" /顯示提示信息 int i, j;
11、0; /說明變量 cin>>i>>j;
12、; /從鍵盤上輸入變量的值
13、60; cout<<"最大數是:"<<max(i, j)<<'n' /輸出提示信息和結果 return 0;上面的示例代碼中,黑色字體為程序主體,深
14、綠色字體為注釋。組成結構及特點C+的程序結構由注釋、編譯預處理指令和程序主體組成。 注釋:注釋內容不參與編譯,僅供程序閱讀使用,編寫程序時可根據需要選取。注釋有兩種形式:· 以“/”開頭,至所在行結尾處(換行符之前)之間的內容。· 以“/*”開頭和“*/”結尾,兩者之間的內容均為注釋,可占多行。 編譯預處理:以符號“#”引出,一條指令也需在一行內寫完。上例中的#include命令,稱為“文件包含指令”,它使得后面被包含文件成為本程序的一個組成部分,被包含文件中的代碼可以直接被使用。編譯預處理是C+提供的組織程序的工具,有關內容在第
15、3章 函數中介紹。 程序主體:一般由一個或多個函數組成,但只有一個函數是程序入口,即代碼執(zhí)行的起點。如本例由max()和main()兩個函數組成,函數main()是所有控制臺程序程序的入口。· 在傳統的Windows操作系統編程中,入口由系統定義為Winmain()函數。· 任一函數的描述都是包括在一對 “”和“”中的語句序列,每個語句以“;”結束。關于函數的詳細知識將在第3章 函數中介紹 。· C+中嚴格區(qū)分大小寫,但不嚴格限制程序的書寫格式,不過從可讀性角度出發(fā),程序書寫應采用內縮格式,一般一個語句占一行。執(zhí)行過程· 上例給出的
16、是源程序代碼,以擴展名為.cpp的文件形式保存在磁盤上,經編譯、連接生成可執(zhí)行程序,即擴展名為.exe的文件。· 運行可執(zhí)行程序后,顯示器顯示: 輸入i,j:· 若用戶從鍵盤上輸入兩個整數10 20并按回車鍵,顯示器上將顯示結果: 最大數是:20· 這種編程方式稱為“控制臺編程”,即通過鍵盤和顯示器,用文本方式對程序進行編輯、運行和調試,是最初的編程方式。3、C+的詞法單位本節(jié)將分為4個小節(jié)介紹C+語言使用的字符集、關鍵字、標識符及標點符號。C+的字符集· ASCII碼字符集是計算機中的常用字符集。它包括英文字母及阿拉伯數字等128個字符,存儲一個ASC
17、II碼占用一個字節(jié)單元。· 由于漢字處理的需要,又出現了漢字國標碼等對應于不同語言的字符集。國標碼的存儲占用兩個字節(jié)單元。· 為了對各類字符進行統一編碼,Unicode字符集應運而生。它包括了世界上多種語言的基本字符,共有65536個字符。 ASCII碼字符集國標碼字符集都是它的子集。Unicode字符集對所有字符進行統一的雙字節(jié)編碼。C+語言使用下列基本字符來構成詞法單位:26個小寫字母abcdefghijklmnopqrstuvwxyz26個大寫字母ABCDEFGHIJKLMNOPQRSTUVWXYZ10個阿拉伯數字0 1 2 3 4 5 6 7 8 9其他符號
18、0;+ - * / = , . _ : ; ? " ' | ! # % & () < > 空格C+關 鍵 字關鍵字(keyword)又稱保留字,是系統定義的具有特定含義的英文單詞,不能另作它用。C+區(qū)分大小寫,關鍵字全部由小寫字母組成。標準C+(ISO14882)定義了74個關鍵字,具體的C+編譯器還會做一些增刪。常用關鍵字及分類見下表:數據類型說明符與修飾符bool、char、wchar_t、class、const、double、enum、float、int、long、short、signed、struct、union、unsigned、void、vol
19、atile存儲類型說明符auto、extern、inline、register、static訪問說明符friend、private、protected、public其它說明符asm、operator、template、this、typedef、virtual語句與標號break、case、catch、continue、default、do、else、for、goto、if、return、switch、throw、try、while運算符及邏輯值delete、false、new、sizeof、trueVC+中還有一些專用的關鍵字,它們都以雙下劃線開頭:_ _asm、_ _based、_ _cde
20、cl、_ _emit、_ _export、_ _far、_ _fastcall、_ _fortran、_ _huge、_ _interrupt、_ _loadds、_multipile_inheritance、_ _near、_ _pascal、_ _saveregs、_ _segment、_ _signal_inheritance、_ _self、_ _stdcall、_ _virtual、_ _inheritance除以上之外的一些關鍵字本書不作介紹,可查閱相關手冊。C+標識符標識符(Identifier,ID)是程序員定義的英文單詞,用來給變量、常量、數據類型、函數等命名。合法標識符由字
21、母或下劃線開始,由字母、數字、下劃線組成,其有效長度為131個字符,長度超過31個字符者只識別前31個字符,VC+標識符長度為1247個字符。建議使用有一定含義的英文單詞或拼音序列作標識符,以提高可讀性;另外,盡量不用下劃線或雙下劃線打頭,以免與系統定義的關鍵字沖突。例如:判斷下面哪些是合法的標識符(非 標紅 部分之外均為合法的標示符)94Salary $amountf3.5Num_of_StudentSalary 94amountMyFilevoidSalary94 標點符號c+中的標點符號包括 #、 (、 )、 、 、 ,、
22、:、 ;、 " 、 '等。標點符號的作用:· 有一定的語法意義。例如字符和字符串常量分別用 ' ' 和 " "引起來。· 對語法符號起分隔作用。例如 ;等。4、C+的數據類型C+語言是廣泛使用的程序設計語言之一,因其特有的優(yōu)勢在計算機應用領域占有重要一席。C+中的數據類型C+中的數據類型分為兩大類:基本數據類型和非基本數據類型,如圖1.1所示。圖1.1 C+的數據類型說明:圖中“type”表示任一種非void的類型,英文為關鍵字或程序中的表達方式。VC+中各種基本數據類型的詳細說明VC+中各種基本數據類型的詳細說明如下表
23、所示:類 型名 稱占用字節(jié)數取 值 范 圍bool布爾型true,false(signed) char有符號字符型1-128127unsiged char無符號字符型10255(signed)short(int)有符號短整型2-3276832767unsignedshort(int)無符號短整型2065535(signed) int有符號整型4-(2的31次方)2的31次方-1unsigned (int)無符號整型40(2的32次方-1)(signed)long (int)有符號長整型4-(2的31次方)(2的31次方-1)unsigned long(int)無符號長整型40(2的32次方-1
24、)float實型4-(10的38次方)10的38次方double雙精度型8-(10的308次方)10的308次方long double長雙精度型*8-(10的308次方)10的308次方void無值型0無值說明:· IEEE754定義長雙精度型為10個字節(jié),-(10的4932次方) 10的4932次方。· 表中用( )括起來的部分在書寫時可以省略。例如:int和char默認為有符號的,等同于加修飾詞signed。· short、long、signed和unsigned修飾int時,int可以省略。例如:unsigned short即是說明無符號短整型。5、C+變量
25、和常量變量和常量是用來在程序中表示數據的。常量是指取值在程序的執(zhí)行過程中始終保持不變的量,又分為文字常量(Literal constant)和常變量(也稱“符號常量”)。本節(jié)將分三小節(jié)來介紹。變 量 變量:在程序中是指可以改變值的量。 變量名:用于標識變量的標識符。而且變量必須用標識符進行標識。 變量的類型:變量有類型之分,如整形變量、字符變量等。 變量的說明:任何變量都必須先說明后使用。目的:一是便于編譯程序為變量分配空間,二是便于編譯時進行語法檢查。格式:在C+中,變量說明的一般格式為: &
26、#160; 存儲類型<數據類型> <變量名1>,<變量名2>,<變量名n>;舉例,下面是變量說明的幾個例子: int i, j, k; /說明3個整型變量i,j,k float x,y,z; /說明3個實型變量x,y,z char c1, c2; /說明2個字符型變量c1,c2 double dx;
27、60; /說明1個雙精度型變量dx 變量的使用:變量使用的第一步,是給變量賦初始值,稱為“初始化”。有兩種方法:· 變量說明時直接賦初值: int a=3, b=4, c=5; float x=3.0;· 用賦值語句賦初值: float x, e; x=3.5; e=2.71828;文字常量文字常量指程序中直接給出的量。文字常量存儲在程序區(qū),而不是數據區(qū);對它的訪問不是通過數據
28、地址進行的。根據取值和表示方法的不同,可分為整型常量、實型常量、字符型常量和字符串常量。 整型常量:即整數,可以有多種表示方法。· 十進制表示法:是平時的習慣寫法,例如:15 -24;· 八進制表示法:以0打頭,由數字07組成。例如: 012 /八進制數12,即十進制數10 -6555 /八進制數-655,即十進制數-429· 十六進制表示法:以0X(大小寫均可)打頭,由數字09和字母AF(大小寫均可)組成
29、,用來表示一個十六進制數。例如: 0x32A /十六進制數32A,即十進制數810 -0x2fe0 /十六進制數-2fe0,即十進制數-12256· 其他表示法:還可以表示以 L或l結尾的長整數和以U或u結尾的無符號整數。以UL或LU(大小寫均可)結尾則可表示無符號長整型常數。例如: -84L /十進制長整數-84 026U
30、160; /八進制表示的無符號數26 0X32LU /十六進制表示的無符號長整數32 實型常量:包含小數點和10的冪的數,有兩種表示方法:· 一般形式:與平時書寫形式相同,由數字0 9和小數點組成。例如: 0.23、 -125.76、 0.0、 .46、 -35.· 指數形式:即科學表示法,表示為尾數乘以10的次方形式,由尾數、E或e和階數組成。要求在E或e前面的尾數部分必須有數字,后面的指數部分必須為整數。判斷下列
31、實型常量表示是否合法:(答案:紅色的不合法)123E12 、 E4 、 1.43E3.5 、 -.34e-2 ; 字符型常量:用單引號引起來的單個字符。· 保存形式:在內存中保存的是字符的ASCII碼值。· 直接表示形式:對于可顯示字符,通常用單引號直接引起來表示。例如: 'a' /字符a '4' /字符4
32、0; '' /字符 ' ' /空格字符· 轉義序列表示法:對于不可顯示的或無法從鍵盤輸入的字符,如回車符、換行符、制表符、響鈴、退格等;另外,還有幾個具有特殊含義的字符,如反斜杠、單引號和雙引號等,C+提供了一種稱為“轉義序列”的表示方法。例如:'a' /響鈴 'n&
33、#39; /換行符 '' /字符 下表給出C+中預定義的轉義序列字符及其含義。字符表示ASCII碼值名 稱功 能 或 用 途a0x07響鈴用于輸出b0x08退格(Backspace鍵)退回一個字符f0x0c換頁用于輸出n0x0a換行符用于輸出r0x0d回車符用于輸出t0x09水平制表符(Tab鍵)用于輸出v0x0b縱向制表符用于制表00x00空字符用于字符串結束標志等0x5c反斜杠字符用于需要反斜杠字符的地
34、方0x27單引號字符用于需要單引號的地方0x22雙引號字符用于需要雙引號的地方nnn八進制表示 用八進制ASCII碼表示字符xnn十六進制表示 用十六進制ASCII碼表示字符說明:· 上表中最后兩行是所有字符的通用表示方法,即用反斜杠加ASCII碼表示。· 對于可顯示字符,有三種表示方法。以字母a為例: a、141和x61· 顯然,對于可見字符,第一種是最簡單直觀的表示方法。 字符串常量:由一對雙引號引起來的若干個字符組成。例如:I am a Chinese.、 123、 a、 字符串常量與字符型常量的區(qū)別如下:· 字符串
35、常量a占兩個字節(jié),存放'a'和'0',如圖左半部分,值為0x6100;· 字符型常量'a' 占一個字節(jié),存放'a',如圖右半部分,值為0x61。常變量用常量說明符const給文字常量命名所得的標識符就稱為“標識符常量”。因為標識符常量的說明和引用形式很像變量,所以也稱“常變量”。例如: const float PI=3.14159; /定義了常變量PI const int Number_of_Student=100; /定義了常變量N
36、umber_of_Student在使用常變量時應注意以下幾點:· 常變量必須也只能在說明時進行初始化。· 常變量初始化之后,不允許再被賦值。· 常變量必須先說明后使用。6、C+運算符和表達式程序中相當一部分數據處理和“語句”是通過“表達式”表達的,其中使用各種“運算符”。C+的運算符、優(yōu)先級和結合性 在C+中對常量或變量進行運算或處理的符號稱為“運算符”;參與運算的數稱為“操作數”。 運算符的“優(yōu)先級”指不同運算符在運算中的優(yōu)先關系,可用序號表示,序號越小,優(yōu)先級越高。比如: 加號“+”和減號“-”的優(yōu)先級是6;乘號“*”和除號“/”的優(yōu)
37、先級是5.“*”和“/”的優(yōu)先級高于“+”和“-”符合數學運算的規(guī)律。 運算符的“結合性”決定同優(yōu)先級的運算符對操作數的運算次序。從左到右運算稱為“右結合”,反之,從右到左稱為“左結合”。比如,+、-的結合性是從左到右(右結合),則a+b+c-d的運算次序為: (a+b)+c)-d /先算a+b,再加c,最后減d又如,前置+和單目負-的結合性是從右到左(左結合),則-+a的運算次序為: -(+a) /先做+a,再取相反數(加負號)同一優(yōu)先級的運算符有相
38、同的結合性。按照要求的操作數個數,運算符分為單目(一元)運算符、雙目(二元)運算符和三目(三元)運算符:· 單目運算符只對一個操作數運算,如負號運算符“-”等。· 雙目運算符要求有兩個操作數,如乘號運算符“*”等。· 三目運算符要求有三個操作數,三目運算符只有一個“?:”。運算符與操作數是相關聯的,相同的運算符對不同類型的操作數所執(zhí)行的運算是有差異的。基本運算符及其表達式“表達式”就是由運算符、操作數及標點符號組成的,能取得一個值的式子。本小節(jié)介紹的基本運算包括算術運算、關系運算、邏輯運算、位運算等。 1、算術運算符及其表達式· 算術運算符:
39、包括:+(加)、(減)、*(乘)、/(除)和%(求余),如下表所示。優(yōu)先級運算符名稱3+正,單目 -負,單目5*乘,雙目 /除,雙目 %取余,雙目6+加,雙目 -減,雙目· 算術表達式:由算術運算符連接的表達式稱為“算術表達式”。 例如:a+b*3 和 (a+b)/4注意:· 表達式中每個變量都有確定的值時才能進行表達式求值。· 注意數據溢出問題,應避免兩個很接近的數直接相減、除數是一個很小的數、整數的連續(xù)乘運算等情況。 2、賦值運算符與賦值表達式· 賦值:將數據存放在相應存儲單
40、元中稱為“賦值”。如果該單元中已有值,賦值使新值取代舊值。· 引用:從某個存儲單元中取出數據使用,稱為“引用”。引用也是對數據的使用,但不影響單元中的值,即一個量可以多次引用。· 賦值運算符:“”,其意義是將賦值號右邊的值送到左邊變量所標識的單元中。左操作數稱為“左值”,而右操作數稱為“右值”。· 賦值表達式:由運算符連接的表達式稱為格式為:<變量> = <表達式> 例如:x=5+6;· 復合賦值運算:復合賦值運算符的要求與格式和賦值運算符完全相同,表示為:
41、<變量> <復合賦值運算符> <表達式>它等同于:<變量> = <變量> <運算符> (<表達式>);例如:x+=5; 等同與 x=x+5;注意:賦值號不是等號,它具有方向性?!白笾怠北仨毞旁趦却嬷锌梢栽L問且可以合法修改值的存儲單元,通常只能是變量名;“右值”則可以是常量,也可以是變量或表達式,但一定能取得確定的值。例如:下面的賦值運算是錯誤的: 3.1415926=pi; /左值不能是常數 x+y=z;
42、0; /左值不能是表達式 設:const int N=30; 則:N=40; /左值不能是常變量 3、自增、自減運算· 意義:使變量當前值加1或減1,再賦給該變量。· 要求:操作數只能是變量,不能是常量或表達式· 運算: 分前置和后置兩種,例如: int i=5, j=5, m, n; m=i+; /后置+;相當于m=i; i=i+
43、1; 結果:i的值為6,m的值為5; n=+j; /前置+;相當于j=j+1;n=j; 結果:j的值為6,n的值為6; 4、邏輯運算、邏輯表達式和邏輯表達式的求值優(yōu)化· 邏輯運算用于判斷分析,運算符包括關系運算符和邏輯運算符。· 關系運算符:包括:>(大于)、>=(大于等于)、<(小于)、<=(小于等于)、=(等于)和!=(不等于),用來完成兩個操作數的比較,結果為邏輯值:true(真)或false(假)。· 邏輯運算符: 包括:!(邏輯非)、&&(邏輯與)和|(邏輯或),其操作數和運算結
44、果均為邏輯量。邏輯運算符優(yōu)先級和語義如下表所示。優(yōu)先級運算符名稱語義2!邏輯非,單目操作數的值為真,則結果為假。12&&邏輯與,雙目當兩個操作數全部為真是,結果為真,否則為假。13|邏輯或,雙目兩個操作數中有一個為真,則結果為真。· 邏輯值:在c+中,邏輯值與整數有一個對應關系:true對應1,false對應0。反過來,0對應false,非0整數對應true。所以,邏輯運算的結果可作為整數參與其他運算;整型數也可參與邏輯運算。· 關系表達式:由關系運算符連接而成的表達式,結果為邏輯值。· 邏輯表達式:由邏輯運算符連接的表達式,結果為邏輯值。關系表達
45、式是一種最簡單的邏輯表達式。計算時,邏輯非優(yōu)先級最高,關系運算其次,邏輯與和邏輯或最低。· 邏輯表達式的求值優(yōu)化:在邏輯表達式的求值過程中,并非先將所有邏輯運算都做完再得結果,而是一旦表達式的值能夠確定,就不再進行后面的運算。(演示)下面是幾個實例:例1:假定a=3, b=0,c=5,d=2,x=6,y=2; 試分析下面的關系表達式:: a>b>c /先求a>b,結果為true,即1,再將結果1與c比較,結果為假 a+b>c+d /等同于(a+b)>(c+
46、d),結果為假 a>b&&a<c|(x>y)-!a /相當于(a>b)&&(a<c)| (x>y)-(!a),結果為true例2:假定a=2, b=0, c=3; 則邏輯表達式 a|b+|c- 產生的結果是: 【分析】:a=2,第一個操作數為1;1與任何值相或的結果總是1(true);所以不用再計算b+和c-,則此b的值仍為0,c的值仍為3;整個表達式的值為1。例3:假定x=0, y=2, z=3; 求表達式 x&
47、amp;&(y=y*y)&&(z=z+3)的結果?【解答】 5、位運算· 位運算:c+語言提供字位運算,直接對操作數的二進制位進行操作。· 位運算符:包括:(按位取反)、<<(左移)、>>(右移)、&(按位與)、|(按位或)、(按位異或)。其中,(按位取反)為單目運算符,其余均為雙目運算符。· 位運算舉例:請參見演示。 6、逗號運算符與逗號表達式· 逗號運算符:C+中,逗號既是分隔符,又是運算符,且優(yōu)先級最低。· 逗號表達式:用逗號連接起來的表達式,其一般
48、格式為: <表達式1>,<表達式2>,<表達式n>· 運算規(guī)則是:從左到右依次求出各表達式的值,并將最后一個表達式的值當做整個逗號表達式的值。例如:假定a=1,b=2,c=3; 以下逗號表達式的結果是: c=b=(a=3,4*3) /結果為:a=3,b=12,c=12,表達式的值為12 c=b=a=3,4*3 /結果為:a=3,b=3,c=3,表達式的值為12 c=(b=a=3,4*3) /結果為:a=3,b=3,c=12,
49、表達式的值為12 7、sizeof( )運算符sizeof運算符:用于計算存儲一種數據類型或一個變量所需的字節(jié)數。一般格式為: sizeof (<數據類型>) 或 sizeof(<變量名>)關于sizeof()的幾點說明:· 數據類型可以是標準數據類型,也可以是用戶自定義類型。· 變量必須是已定義的變量。· 括號可以省略,運算符與操作數之間用空格間隔。sizeof()應用舉例: sizeof(int); /值為4
50、; sizeof( float); /值為4 設:double x; 則:sizeof(x); /值為87、C+語句語句是程序的基本單位,必須以分號作為結束標記。C+中的語句分為以下幾種:1. 表達式語句:是最簡單的語句形式,一般格式為:表達式;2. 空語句:只由一個分號構成的語句,一般格式為: ;注意:· 空語句不執(zhí)行任何操作,但具有語法作用。例如:for循環(huán)在有些情況下,循環(huán)體或者循環(huán)判別條件是空語句,詳細內容請參見第二章。
51、3; 從程序結構的緊湊性與合理性角度考慮,盡量不要隨便使用空語句。3. 復合語句:由“”括起來的一組語句,一般格式為: 若干語句序列 注意:· 復合語句描述一個塊,在語法上起一個語句的作用。· 復合語句中的每個語句以“;”結束,而整個復合語句的結束符為“”。4. 流程控制語句:用來控制或改變程序的執(zhí)行方向的語句,詳細內容請參見第2章。8、C+算術類型轉換和賦值類型轉換運算過程中,當參與運算的操作數類型不同時,可進行類型轉換。包括:自動轉換和強制轉換。自動類型轉換指在算術運算以及在賦值過程中,如果運算符兩邊的操作數屬于“類型相容”(指類型不同但系統可以自動進行轉換)的情況,如
52、整數、字符和實數之間,系統會自動進行類型轉換,然后再做運算。包括:算術類型轉換、賦值類型轉換。一.混合運算的類型轉換當運算符兩邊的操作數類型不同但類型相容時,系統自動將不同的數據類型轉換成相同類型,再進行運算。具體規(guī)則如下:· 字符可作為整數參與運算,整數值為其ASCII碼。· 對于字符或短整型操作數,系統自動變換成整型。· 對于單精度型操作數時,系統自動變換成雙精度型。· 當兩操作數類型不同時,將精度低(或表示范圍?。┑牟僮鲾档臄祿愋妥儞Q成與另一操作數類型相同,再進行運算。變換關系如圖1.2所示。圖1.2 數據類型轉換規(guī)則舉例說明:例如,設有變量
53、160; char c1, c2; int i1, i2; float x1, x2;則表達式 x2=c1*i1+c1*x1+c1*c2 的求值過程為:1. 將c1轉換成整型,完成c1*i1,結果為t1;2. 將c1和x1轉換成雙精度型,完成c1*x1,結果為t2;3. 將c1和c2均轉換成整型,完成c1*c2,結果為t3;4. 將t1轉換成雙精度型,完成t1+t2,結果為t4;5. 將t3轉換成雙精度型,完成t4+t3;6. 最后結果轉化為單精度型,賦給x2。二.賦值類型轉換當賦值號左值和右值類型不一致但類型相容時,系統將自動
54、進行類型轉換。轉換規(guī)則如下:· 實型數賦給整型變量時,僅取整數部分;若該部分超出整型變量取值范圍,結果將溢出。· 整數賦給實型變量時,將整數轉換成實數再賦值。· 字符數據賦給整型變量時,將字符轉換為整型。轉換分兩種情況:· 對無符號字符數據,低位字節(jié)不變,高位字節(jié)補0;· 對有符號字符數據,若符號位為0,與無符號字符數據轉換規(guī)則相同,若符號位為1,則低位字節(jié)不變,高位字節(jié)全部置1。· 絕對值較大的數賦給表達范圍較小的數據時,注意溢出舉例說明:例如:設有變量 signed char c1=250;
55、 short int a;a=c1;【分析】:c1的值為11111010,轉換成11111111 11111010賦給a,正是- 6的補碼。所以,a的值為- 6。三.強制類型轉換如果需要人為地將一種類型轉換為另一種類型,必須使用C+提供的強制類型轉換運算符。一般格式為: (<type>) <表達式> 或: <type> (<表達式>)注意:對整個表達式作強制類型轉換。舉例說明:設有變量說明:int a=7, b=5; float x; 求表達式 x=a/b 的值。【分析】:因為a和b都是整數,該除法
56、將執(zhí)行整除運算,再將整數結果1轉換為單精度類型后進行賦值。所以,結果 x=1【轉換】:將兩個操作數或其中一個操作數進行強制類型轉換。可表示為: x=(float)a/(float)b或x=(float)a/b表達式將求出這兩個整數相除的實數商1.4,并賦給x。關于強制類型轉換需要注意的幾點:· 上述(float)a/b與float(a/b)結果是不同的,后者是先進行整除運算,將結果(整數1)強制轉換為單精度型數1.0,所以結果為 x=1.0。· 強制類型轉換不改變表達式本身的值類型,而是產生一個臨時變量,用來暫存轉換后的值,該臨時變量引用后即自動釋
57、放。如上例,執(zhí)行強制類型轉換后變量a和b的值及類型都不變,而是各自產生一個臨時變量,用這兩個臨時變量的值進行運算。· 強制類型轉換符優(yōu)先級較高,只對緊隨其后的表達式起作用,而對其他部分不起作用。9、C+求值次序與副作用編譯器在求解表達式時,首先要對表達式進行解析。在符合優(yōu)先級和結合性的前提下,不同編譯器在解析時可能存在差異,使得求值次序不同,將導致結果不同。例如,設有int a=2, b=5, c; 對表達式 c=a*b+(+a)+(b=10) 三個同級運算中,是先算a*b,還是+a,還是b=10,其次再算哪個?C語言的標準對表達式中各操作數的求值次序沒有做統一規(guī)定。對于VC+,是按
58、照從前向后的順序進行,則上述表達式的結果是23;而對有的C+編譯器,則是從后向前進行,結果是43。如果某個操作數經歷了求值運算,那么這個求值過程可能影響到其他操作數的值,這時就會產生出乎意料的結果,稱為“副作用”(Side effect)。上例中,求表達式b=10改變了變量b的值,而求+a則改變了a的值,這些都將影響到表達式a*b的值,這就是所謂的副作用。由于編譯器有求值次序,因此對于復合表達式,交換律不一定成立。求值次序帶來副作用的主要原因是使用復合表達式,如果將復合表達式分開寫成若干個簡單表達式,就可以有效消除副作用。例如,可將上式按照從前向后的次序寫成: c=a
59、*b;+a;b=10;c=c+a+b;或按照從后向前的次序寫成: +a; b=10;c=a*b+a+b;10、C+數組與字符數組C+數組“數組”是有限個同類型元素的有序集合,這些元素有一個共同的名字,即“數組名”。每個元素以其在數組中的位置區(qū)分,位置用“下標”表示。例如:數列或向量就可以看作一個數組,其中的元素用一個下標即可確定;矩陣也可看作一個數組,其中的元素需要用“行”、“列”兩個下標確定。數組下標的個數稱“維數”,代表數列的數組和代表矩陣的數組分別稱為一維數組和二維數組。 1、一維數組的定義定義一個一維數組的一般格式為:
60、60; 存儲類型 <數據類型> <數組名> <常量>;其中:· 數據類型指數組中元素的數據類型,可以是C+中定義的任何一種數據類型。· 常量寫在中括號中,用來定義數組大小,即數組中元素的個數。舉例: int m5; /定義整型數組m, 其中有5個整數 const int N=3; float xN; /定義浮點型數組x,其中有3個實數注意:數組大小不能用變量定義,而只能是一個正整數常量。在C+中,數組大小在編譯時確定
61、。編譯系統根據數組的定義為其分配一段連續(xù)的存儲單元,且一經分配不能改變。因此,數組大小不能用變量定義,而只能是一個正整數常量。例如,下列定義是非法的: int count; float scount; /數組大小不能是變量; const float Num=3; int nNum; /數組個數不能是實數 2、數組的初始化· 一般方法:在定義時用大括號列出元素的值,例
62、如:int score5=88, 92, 90, 85, 78;· 初始化值少于元素個數的用法:初始化值的個數少于定義的元素個數時,從第0個元素開始逐個取得初始化值,其余的元素初始化為0。例如: float y5=3.4,4.2,7;/5個元素的取值分別為3.4,4.2,7,0,0· 缺省維數的用法:初始化時可以不指明元素個數,編譯器會按照初始化值的個數確定數組大小。例如: int n=1, 2, 3, 4; /數組n有4個元素 int nn; /非法定義,不是初始化時定義數組必須指明數組元素個數
63、 3、數組的使用· 數組的存儲形式:數組在存儲單元中是按下標的順序連續(xù)存放的。例如,上面定義的數組m的存儲如下圖所示:· 訪問方式:數組中任何一個元素都可以單獨訪問,訪問的一般格式為: 數組名表達式其中,“表達式”用來計算下標值。C+中規(guī)定數組第一個元素的下標為0。注意:對數組的訪問指的是對數組元素的訪問,一般不能直接將數組名作為訪問對象,對數組賦值也必須對每一個元素逐個賦值。字符數組如果數組中的元素為字符,就稱為“字符數組”。例如: char string110;
64、 /可用來保存10個字符的字符數組 char city_name1='N','a','n','j','i','n','g' /7個字符的字符數組C+中字符數組可用來處理字符串,允許直接用字符串常量對字符數組初始化。此時,系統會自動加上一個串結束符0。例如: char city_name2=”Nanjing”;則字符數組city_name2實際占用的內存比city_name1多一個字節(jié)。串結束符0在字符串操作中具有十分重要的意義,因此
65、,在定義字符數組大小時,應注意留出保存串結束符的空間。除了可以用字符串常量初始化外,字符數組的用法與一般數組是一樣的。另外,C+中提供若干字符串處理函數,在頭文件<cstring>中定義。其中包括strlen、strcpy等。· strlen(s) 返回字符串s的實際長度(不包括0)。· strcpy(s1,s2) 將字符串s2中0之前的所有字符依次賦值到字符串s1中,最后再加上一個0。由于不能直接對字符數組名賦值,所以將一個字符串的值賦給另一個字符串必須用字符串復制函數完成。例如: char string220;
66、0; string2=”VC+”;/非法 strcpy(string2, “VC+”); /合法11、C+輸入輸出程序執(zhí)行期間,從外設接收信息的操作稱為“輸入”,向外設發(fā)送信息的操作稱為“輸出”。本節(jié)介紹從鍵盤向程序中的變量輸入數據以及將程序計算的結果輸出到顯示器上的基本操作。C+輸入輸出簡介C+中沒有專門的輸入輸出語句,而是通過系統提供的輸入輸出流類來實現。· cin用來在程序執(zhí)行期間給變量輸入數據,一般格式為: cin>> <變量名1>>> <變量名2> >
67、;>>> <變量名n>其中:>> 稱為“提取運算符”,程序執(zhí)行到這條語句便暫停下來,等待從鍵盤上輸入相應數據,直到所列出的所有變量均獲得值后,程序方繼續(xù)執(zhí)行。· cout實現將數據輸出到顯示器的操作,一般格式為: cout<< <表達式1> << <表達式2> <<<< <表達式n>其中:<< 稱為“插入運算符”,將緊跟其后的表達式的值輸出到顯示器上當前光標位置。cin和cout的書寫形式很靈活,如果有多個變量,即使類型不相同,也可以寫在同一個語句中或者分成若干個語句輸入或輸出。注意,使用cin和cout必須在程序開頭增加一行: # include
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025福建省泉州鳳棲實業(yè)有限責任公司社會招聘17人筆試備考試題附答案詳解(完整版)
- 化學●福建卷丨2021年福建省普通高中學業(yè)水平選擇性考試化學試卷及答案
- 《老年人能力評估師》三級模擬考試題含答案
- 鄉(xiāng)鎮(zhèn)衛(wèi)生院財務管理
- 2025兒童腺樣體肥大臨床診治管理專家共識
- AI大模型賦能智慧港口數字化解決方案
- 教學副校長第二學期工作總結
- 銷售策劃試題及答案
- 西醫(yī)綜合試題及答案
- 福建省2025年6月普通高中學業(yè)水平合格性考試地理模擬卷一(含答案)
- 六年級集體備課活動記錄(北京的春節(jié))
- 浙教版人教版培智一年級上生活語文教案
- 苯甲苯二元系物精餾設計化工原理課程設計
- 完整三字經全文解釋ppt課件-完整三字經全文解釋
- 東南大學-實驗五-Matlab-Simulink仿真實驗報告
- 寶鋼股份設備管理培訓
- 鍋爐房基本培訓20120517課件
- 化工原理填料塔課程設計-清水吸收氨氣的填料塔裝置設計
- 關稅系統崗位練兵業(yè)務知識測試題庫(關稅業(yè)務知識)(多項選擇題)附答案
- 無人機校企合作協議
- cjj,129-2009,城快速路設計規(guī)范
評論
0/150
提交評論