C115章程序設計教程(第PPT課件_第1頁
C115章程序設計教程(第PPT課件_第2頁
C115章程序設計教程(第PPT課件_第3頁
C115章程序設計教程(第PPT課件_第4頁
C115章程序設計教程(第PPT課件_第5頁
已閱讀5頁,還剩354頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、C115章程序設計教程(第8:52:411C + 程序設計教程(第二版)第一章 c+概述 Chapter 1 IntroductionChapter 1 IntroductionC115章程序設計教程(第 早期:機器語言、匯編語言 50年代中期:FORTRAN語言引進了許多現代仍然使用的程序設計概念。 50年代后期:ALGOL60提出塊結構的思想。 60年代:SIMULA67首先提出對象和類的概念,并支持類的繼承,是面向對象語言的鼻祖 70年代:ADA不能全面地支持繼承,稱為基于對象的語言。C115章程序設計教程(第 后來出現的Smalltalk是最有影響的面向對象的語言之一。 80年代中后期

2、以后,隨著面向對象的程序設計語言的廣泛應用,出現了更多的面向對象的語言。 C115章程序設計教程(第面向對象的語言可分為以下兩類: ObjectC Eiffel Smalltalk80稱為混合型語言,其代表有C+語言。支持傳統的面向過程的程序設計C+C+ 語言具有C語言的豐富的應用基礎和開發環境的支持,對于已經掌握C語言的人講,更易學易普及。C115章程序設計教程(第二、從C到C+ C語言是貝爾實驗室為DEC公司開發PDP系列計算機操作系統時研制的。C作為UNIX操作系統的開發語言而廣為應用和流行。1989年制定為ANSI C標準。1、語言簡潔、緊湊,使用方便、靈活。2、運算符和數據類型豐富。

3、3、訪問內存地址、寄存器、進行位操作, 具有匯編語言的功能。4、生成的目標代碼質量高、程序運行效率高。C語言的獨有特點是:C115章程序設計教程(第 局限: 1、對類型的檢查機制相對較弱、程序中的一些錯誤不能在編譯時發現; 2、無支持代碼重用的語言結構; 3、當程序規模達到一定的程度時,難以控制程序的復雜性; 為滿足管理程序復雜性需要,1980年,貝爾實驗室對C進行了改進和擴充:“帶類的C”C1983年取名為C+,后經過三次修訂。1994年制定了ANSI C+標準的草案。C115章程序設計教程(第1、C+是C的擴展,C是C+的子集,C+ 包括C的全部特征、屬性和優點。同時,增加了對面向對象編程

4、的完全支持。2、與C 一致, C+程序結構采用函數驅動機制實現。3、C+實現了類的封裝,數據隱藏、繼承及多態,使其代碼可重用并容易維護。4、C+是一門高效使用的程序設計語言,既可進行過程化程序設計,又可進行面向對象程序設計。C115章程序設計教程(第在面向過程的程序設計中,程序是處理數據的一系列過程。過程(或函數)定義為實現特定功能的一組指令。其主要設計思想是功能分解并逐步求精。數據與程序過程分開存儲,編程的主要技巧在于關注模塊之間的調用關系及數據的變化。1.2 1.2 面向過程的程序設計面向過程的程序設計C115章程序設計教程(第 1、當數據量增大時,數據與處理這些數據的方法之間的分離使程序

5、變得越來越難以理解。 2、相對于老問題的新方法都要帶來額外的開銷,程序的可重用性小。面向過程程序設計的面向過程程序設計的主要缺點主要缺點C115章程序設計教程(第面向對象程序設計 OOP (Object-Oriented Programming)的三要素: 對象、類和繼承面向對象程序設計的實現需要: 封裝和數據隱藏技術 繼承和多態性技術C115章程序設計教程(第數據1.數據n操作1.操作n 狀態(數據結構和值)方法對象的模型結構C115章程序設計教程(第多態性 封裝性、繼承性、多態性是構成面向對象程序設計的三大特征。 封裝性是基礎 繼承性是關鍵 多態性是補充什么是多態性? 多態是指一個名字有多

6、種語義,或一個相同界面有多種實現; 或是指發出同樣的消息被不同類型的對象接受而導致完全不同的行為。即對象根據所接收到的消息做出相應的操作。C115章程序設計教程(第例如:在學籍管理系統中學生類(基類)計算成績的操作中學生類(派生類)計算成績的操作大學生類(派生類)計算成績的操作C115章程序設計教程(第編譯錯連 接編 輯編 譯運 行連接錯運行錯YYYNNN完 成#include文件C+庫文件.CPP 源程序.obj目標程序.exe 可執行程序#include文件C115章程序設計教程(第例1:/*/*ch1.0.cpp*/*void main( ) 1.5 1.5 最簡單的程序最簡單的程序運行

7、結果為: Single-line comments.Function main returns no value.Left brace begins function body.Function main appears exactly once in every C+ program.Corresponding right brace ends function body.C115章程序設計教程(第例2:/*/*ch1.1.cpp*/*# include void main( ) cout “I am a student.n”; 1.5 1.5 最簡單的程序最簡單的程序運行結果為: I am

8、 a student.Single-line comments.Function main returns no value.Left brace begins function body.Preprocessor directive to include input/output stream header file .Function main appears exactly once in every C+ program.Statements end with a semicolon ;.Corresponding right brace ends function body.Stre

9、am insertion operator.C115章程序設計教程(第 /* ch1.2.cpp * #include void main( ) int interger1; int interger2; int result; cout interger1 interger2; result=3*interger1-2*interger2+1; cout “Result is ” resultch1.2Please input two numbers:100 50Result is 201 C115章程序設計教程(第內存的概念 Memory Conceptscin integer1; Ass

10、ume user entered 45cin integer2; Assume user entered 72sum = integer1 + integer2;integer145integer145integer272integer145integer272sum117C115章程序設計教程(第C+程序是由函數構成的,由一個主函數和若干個函數構成。 C+程序是函數驅動的。例3:/*ch1.3.cpp* #include #include double max(doubl x, doubl y); / function prototype void main( ) double a, b,

11、c; cout “Input two numbers:n”; c=max(a,b); cout “The squart of maximum=”y) return x; else return y;運行結果:Input two numbers:10.0,25.0The squart of maximum=5.0Keyword return is one of several means to exit function; Definition of max. x,y is a copy of the argument passed. if structure compares values o

12、f x and y to test for x is greater than yIf condition is true (i.e., x is greater than y), execute this statement.C115章程序設計教程(第學習本課程目的學習本課程目的 1、作為面向對象程序設計入門,領會面向對象程序設計的基本概念。 2、把握C+程序設計的基本要點,掌握面向對象程序設計的方法和要求。C115章程序設計教程(第C + 程序設計教程(第二版)第二章 基本編程語句 Chapter 2 Basic Programming Statements清華大學出版社 錢 能C115章

13、程序設計教程(第第二章內容說明語句說明語句 ( Declarative Statements ) 條件語句條件語句 (Condition Statements ) 循環語句循環語句 ( Loop Statements ) 循環設計循環設計(Loop Designs )輸入輸出語句輸入輸出語句( Input/Output Statements ) 轉移語句轉移語句 ( Move Statements ) 再做循環設計再做循環設計(More Loop Designs ) C115章程序設計教程(第1. 說明語句說明語句 ( Declarative Statements ) 數據說明: 求解問題所使

14、用的數據是什么性質,進行什么運算,表達范圍如何,必須預先說明 說明方式: 既要指明其名字,也要指明其是什么類型,還可以順便初始化如: int a; double d = 3.5; 說明數據的另一個目的是創建一個所需大小的實體空間給該名字,以便存儲所用的數據值 若數據名字沒有說明,使用其便是非法的C115章程序設計教程(第過程(函數)說明:求解中需要通過函數調用來實施求解時,便要對函數的性質進行說明,說明其返回類型,參數類型,參數個數函數說明分函數聲明和函數定義兩種: 函數聲明是說明函數的名字,函數的返回類型,以及函數的參數和個數如: double area(double ra); 函數定義是在

15、函數聲明的基礎上,對整個實現過程進行詳細定義如: double area(double ra) return ra*ra*3.14; C115章程序設計教程(第調用函數就是使用函數名字,使用名字前必須清楚名字的性質,所以必須先對函數進行聲明運行程序中,會涉及到被調用函數的執行,所以凡是被調用的函數都必須有函數定義,不管該定義在程序的什么位置如: double sphere(); / 聲明 int main() double result = sphere(); / 調用 cout“area: ”result“n”; void sphere() / 定義 coutr; return r*r*3.

16、14; C115章程序設計教程(第. 條件語句條件語句(Condition Statements )if語句的兩種形態:語句1條件語句1條件語句2是是否否C115章程序設計教程(第對應語句: if(ab) coutaendl; if(a=b) coutaendl; else coutb0) if(x50) cout”x is ok.n”; else cout0) if(x 50) cout”OKn”; else cout0) if(x 50) cout”OKn”; else cout”NOT OKn”;C115章程序設計教程(第條件表達式:對于對于 if(x) a = 327981; else

17、 b = 327981;可表示為:可表示為: x ? a=327981 : b=327981;如果如果a和和b為同類型,則還可以:為同類型,則還可以: (x?a:b) = 327981;C115章程序設計教程(第switch多分支語句: switch(整數表達式) case value1: 語句1; break; case value2: 語句2; break; default: 語句n; 等價于:等價于: if(整數表達式整數表達式=value1) 語句語句1; else if(整數表達式整數表達式=value2) 語句語句2; else 語句語句n; C115章程序設計教程(第雖然swit

18、ch有等價的復合if表示, 而且,分支判斷值只能是整數,顯得應用范圍狹窄, 但是switch在使用上的直觀和靈活形式, 使得其仍具有編程價值. 如:break可選,甚至case可以重疊: case value1: 語句1; case value2: 語句2; case v1: case v2: case v3: 語句;C115章程序設計教程(第3. 循環語句循環語句 ( Loop Statements )for循環結構: 開 始循環初始狀態循環體狀態修正條件判斷未結束結束結 束C115章程序設計教程(第對應語句為:對應語句為: for(int i=1; i=10; i+) cout”hello

19、.n”;循環初始狀態條件判斷狀態修正循環體C115章程序設計教程(第每次循環體執行,都改變循環狀每次循環體執行,都改變循環狀態,直到條件不滿足而終止態,直到條件不滿足而終止. .如,設置求和的初始值,交給循環計算,如,設置求和的初始值,交給循環計算,完成循環后,輸出求和結果:完成循環后,輸出求和結果:int sum = 0;for(int i=1; i=100; i+) sum = sum+i;coutsumendl;循環開始循環結束C115章程序設計教程(第因為并不是所有循環都有明顯的因為并不是所有循環都有明顯的循環初始狀態和狀態修正的,循環初始狀態和狀態修正的,所以,所以,whilewhi

20、le循環是一種循環是一種forfor循循環的簡潔形式環的簡潔形式. .如,同樣的求和:如,同樣的求和:int sum=0, i=1;while(i=100) sum += i+;coutsumendl;循環開始循環結束C115章程序設計教程(第4. 循環設計循環設計 ( Loop Designs )(1)簡單字符圖形的雙重循環MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMC115章程序設計教程(第分析方法:該圖形一共10行,每一行增加一個字符,所以,應循環10次,每次輸出一行,其循環模式為:for(int i=1; i=10; +

21、i) 輸出第i行(循環) 換行行 i M個數 1 1 1 2 2 2 3 3 3 4 4 4.10 10 10C115章程序設計教程(第for(int i=1; i=10; +i) for(int j=1; j=i; +j) cout”M”; coutendl;C115章程序設計教程(第(2)判斷素數:(利用數學定律)mij 假定ij, 則 i2ijmj2 即 i2mj2 即 imj bool isPrime(int m) double sqm=sqrt(m*1.0); for(int i=2; i=sqm; +i) if(m%i=0) return false; return true; C

22、115章程序設計教程(第5. 輸入輸出語句輸入輸出語句( Input/Output Statements ) 標準輸出流:可以控制輸出格式 coutshowpos12; / +12 couthex18” “showbase18; / 12 0 x12 couthex255” “uppercase255; / ff FF cout123.0” “showpoint123.0; / 123 123.000 cout3)” “boolalpha3); / 0 false coutfixed12345.678; / 12345.678000 coutscientific123456.678; / 1.

23、234568e+05C115章程序設計教程(第控制寬度和填充字符的操作是帶參數的,注意width(n)為一次性操作,即第二次顯示時將不再有效。默認為width(0),表示僅顯示數值。例如: cout.width(5); cout.fill(S); cout2323; / 輸出: SSS2323在頭文件iomanip的支持下,還可以直接由操作: #include coutsetw(6)setfill($)27endl; / 輸出: $27C115章程序設計教程(第文件流的輸入出操作與標準輸入出基本相同,只是需要以一定方式打開和關閉如,將文件a.in打開,逐行讀入字符,輸出到文件a.out: if

24、stream in(“a.in”); ofstream out(“a.out”); for(string s; getline(in, s); ) outsendl;其中文件流讀入操作總是伴隨著狀態返回,判斷狀態就可以確定文件 是 否 正 常 讀 入 , 如getline(in,s)當讀到文件尾時,便返回false,以使循環結束C115章程序設計教程(第. 轉移語句轉移語句 ( Move Statements ) break除了用在switch之外,主要的是用在終結本次循環for(int i; ; ) for( ; ; ) / . if(i=1) break; / . a=1; / .brea

25、k跳到此處C115章程序設計教程(第 continue一般是用條件判斷執行的,通過反條件,可以免去continue的使用,所以,它用來構筑良好的程序風格 for(int n=100; n=200; +n) if(n%3=0) continue; coutnendl; 免去continuecontinue的情形: for(int n=100; n=200; +n) if(n%3!=0) coutnendl; C115章程序設計教程(第 goto的程序段除了系統跟蹤和架構困難外,閱讀也相對復雜: int a; goto Init; Forward: a = a + 1; Print: coutae

26、ndl; goto Down; Init: a = 1; goto Print; Down: if(a100) goto Forward; 等價于: for(int i=1; i=100; +i) couti“n”;C115章程序設計教程(第break語句的可取之處:/ 用break語句的代碼段bool flag=false; / 用于做退出記號for(int i=1; i100; +i) for(int j=1; j100; +j) if(i*j=651) flag=true; break; else / . if(flag) break;/ goto語句的代碼段for(int i=1; i

27、100; +i)for(int j=1; j100; +j) if(i*j=651) goto End; / .End:C115章程序設計教程(第7. 再做循環設計再做循環設計( More Loop Designs ) 邏輯判斷類的語句控制結構: for(所有可能情況) / 可為多重循環 if(條件1不滿足) continue; if(條件2不滿足) continue; / if(條件n不滿足) continue; 輸出所要的結果 C115章程序設計教程(第百雞問題的例子: for(int c=1; c=13; +c) for(int h=1; h=18; +h) for(int s=1; s

28、=96; +s) if(7*c+5*h+s/3-100) continue; if(c+h+s-100) continue; if(s%3) continue; coutCock:c , Hens:h , Chicks:100-c-h1e-6; +n) item *= (-1.0)*(2*n-3)/(2*n-1); sum += item;coutPi = “ setiosflags(ios:fixed) sum*4endl;71513141C115章程序設計教程(第第三章內容 整型整型 ( int Types ) 整型子類整型子類 ( sub-int Types ) 浮點型浮點型 ( Flo

29、ating-Point Type ) C-串與串與string ( C-string & string ) 數組數組 ( Arrays ) 向量向量 ( vectors ) 指針與引用指針與引用 ( Pointer & References ) C115章程序設計教程(第1. 整型整型 ( int Types ) 整型數的內部表示:二進制補碼 位數既定的二進制補碼運算沒有加減的區別;對于溢出,只是簡單的舍棄而不是錯誤 整型數的表示范圍:取決于二進制位數 整型數的操作:+,-,*,/,%,=,!,=,=,=,&,|,&=,|=,&,|,&=,|=,

30、!=,=,+=,-=,*=,/=,%=,+,-,,,? :C115章程序設計教程(第編譯器的機器字長總是與整型的位長有關如: 32位編譯器的整型數一定為32位長整型字面值分八進制,十進制和十六進制不同表示如: 0123 / 8進制 0 x12af3 / 16進制 12345 / 10進制 超過表示范圍的整型數其值不可預料或者出錯如: int a = 12345678912345678912345; / 錯C115章程序設計教程(第 數據類型: 一定的數據在計算機的內部表示; 該數據所表示的值的集合; 在該數據上的一系列操作。 內部數據類型: 1.整型長整型,短整型,字符型,布爾型 2.浮點型單

31、精度,雙精度C115章程序設計教程(第. 整型子類整型子類( Sub-int Types )字符型:表示范圍: 有符號:-128127 無符號:0255 輸出形式與整型數不同: int a = 65; char b = 65; couta“n”; coutb“n”; 結果為: 65 A C115章程序設計教程(第枚舉型: 自定義整數區間,甚至列舉單個整數值 enum Week Mon, Tue, Wed, Thu, Fri, Sat, Sun ; 最大特點是可以給每個值指定一個在程序中直接使用的標記(枚舉符) 編程中將其當作整數常量用如: int a = 7; if ( a = Sun) co

32、ut “Sundayn”; C115章程序設計教程(第布爾型:表示范圍僅含整數和1,也可以表示成true和false,相當于: enum bool false, true ;因為條件表達式、邏輯運算的結果都是因為條件表達式、邏輯運算的結果都是或,所以,相當大數量的表達式的值與或,所以,相當大數量的表達式的值與布爾型對應布爾型對應C115章程序設計教程(第3. 浮點型浮點型 ( Floating-Point Types )浮點數的內部表示: 國際標準IEEE754浮點表示法,它與編程所用的浮點數字面量以及輸出的十進制浮點數之間有一個轉換關系浮點數的表示范圍:32位浮點數3.41038 64位浮點

33、數1.810308浮點數的操作: 常規的加、減、乘、除等操作C115章程序設計教程(第4. C-串與串與string ( C-string & string )C-串結構每個字符占據1個字節一個C-串是一個字符序列,用來表示各種名字或者文字說明C-串的字符序列的最后總是添加有一個結束標志.即在6個字符的字串(“Hello!”)其空間存儲有7個字節左邊三圖是不同細節的同一空間結構描述Hello!0 72 101 108 108 111 33 0C115章程序設計教程(第知道了知道了C-C-串首地址串首地址, ,即可知道整個即可知道整個串串, ,所以可以藉字符首址所以可以藉字符首址( (字

34、符字符指針指針) )來操作來操作C-C-串串, ,但要注意,但要注意,串的第一個字符與整個串的操串的第一個字符與整個串的操作不同作不同, ,如如,C-,C-串的輸出操作串的輸出操作: : char* str = ”Hello”; cout *str endl; / 顯示顯示H cout str endl; / 顯示顯示HelloC115章程序設計教程(第C + 程序設計教程(第二版)第三章 數據類型 Chapter 3 Data Types清華大學出版社 錢 能C115章程序設計教程(第C-串不能直接比較,因為字符指針的比較只是地址值的比較而不是C-串的字典序比較: cout(“join”=”

35、join” ? ” : ”not “)”equaln”; / 字面值比較 charchar* str1=”good”; charchar* str2=”good”; cout(str1=str2 ? ” : ”not “)”equaln”; / 字符指針比較 charchar buffer16=”Hello”; charchar buffer26=”Hello”; cout(buffer1=buffer2 ? ” : ”not “)”equaln”; / 字符數組比較 結果:結果:not equal not equal not equalC115章程序設計教程(第不得不配備專門操作C-串的庫函

36、數:strcpy(s1, s2); /從從s2拷貝到拷貝到s1strcmp(s1, s2); /比較比較s1與與s2strcat(s1, s2); /連接連接s2到到s1strrev(s); /將將s倒排倒排 strset(s, c); /將將s全置為全置為cstrstr(s, “ell”); /查找查找s中中的子串的子串strchr(s,c); /查找查找s中的字中的字符符 等等等等C115章程序設計教程(第但字符指針操作C-串的安全性受到質疑:char* str1;char* str2 = new char5;strcpy(str2, ”ugly”);strcpy(str1,str2);

37、/ 錯: str1沒有空間可儲strcpy(str2, ”Hello”); / 錯: str2空間不夠大str2 = ”Hello”; / 錯:原來的”ugly”空間脫鉤,導致內存泄漏根源:復制操作須以足夠的目的地空間為前提,而所有C-串操作的空間調配都是人為安排的,C-串庫函數一概不管C115章程序設計教程(第類串string串類自定義串對應字符指針的C-串操作: string a, s1 = Hello ; string s2 = 123; a = s1; / copy cout(a=s1 ? : not)equaln; / compare couta+s2endl; / concaten

38、ate reverse(a.begin(), a.end(); coutaendl; / reverse couta.replace(0,9,9,c)endl; / set cout(s1.find(ell)!= -1 ? : not )foundn;/ find string cout(s1.find(c)!= -1 ? : not )的讀入方式總是將前導的空格(所謂空格,即包括空格、回車、水平或垂直制表符等)濾掉,將單詞讀入,在遇到空格時結束本次輸入getline總是將行末的回車符濾掉,將其整行輸入對字串”Hello, How are you?”的兩種輸入方式 for ( string s

39、; cins; ) couts” “; coutendl; string s; getline(cin, s); couts a ; sum += a ) ; cout sum “n” ; C115章程序設計教程(第5. 數組數組( Arrays ) 數組是同類元素的集合,它的元素排列在連續的空間中,按下標來標記描述數組必須給出元素類型,元素個數元素個數必須在編程時確定,任何變量都不允許 int aa ; / 表示int a97; int n = 100 ; int an ; / 錯: 元素個數必須預知 const int n = 100 ; int an ; / ok int a ; / 錯

40、: 無元素個數 int a = 1, 2, 3, 4, 5 ; / ok:通過初始化確定元素個數C115章程序設計教程(第數組初始化可選,但須遵循語法無初始化的數組按規定取默認值 int array15 = 1, 2, 3, 4, 5, 6 ; / 錯: 初始值個數超元素個數 int array25 = 1, , 2, 3, 4 ; / 錯: 不能以逗號方式省略 int array35 = 1, 2, 3, ; / 錯: 同上 int array45 = ; / 錯: 初始值不能為空 int array55 = 1, 2, 3 ; / ok: 后面元素取0 int array65 = 0 ;

41、/ ok: 元素全為0 int array75 ; / ok: 元素值不確定 int a35 = 1, 2, 3, 4, 5 , 2, 3, 4, 5, 6 , 3, 4, 5, 6, 7 ; C115章程序設計教程(第數組有諸多缺陷,造成編程艱難和不安全 int a5 = 1,2,3,4,5, c5; int b5 = a; / 錯:無法拷貝創建 c = a; / 錯:無法整體拷貝和局部拷貝 a8 = 10; / 錯:無法動態擴容和隨意增減元素 for(int i=0; i=5; +i) / 錯:無法防范下標溢出 ai = i+1; if(a=c) a0 = 2; / 錯:不可比較 int

42、a5 = 1; / 初始化呆板,無法獲得全初值C115章程序設計教程(第二維數組的初始化,下標訪問及輸出 int array123=1,2,3,4,5; int array223=1,2,4; coutarray1: ; for(int i=0; i2; +i) for(int j=0; j3; +j) coutarray1ij,; coutnarray2: ; for(int i=0; i2; +i) for(int j=0; j3; +j) coutarray2ij,; coutn;結果為:結果為: array1: 1,2,3,4,5,0, array2: 1,2,0,4,0,0,C115

43、章程序設計教程(第.向量向量( vector ) 向量與數組的共同特征是元素的排列在邏輯上是線性序列結構,可以用下標進行訪問 向量可以按需創建,拷貝創建,局部拷貝創建,異類拷貝和創建 靈活的初始化 隨意擴容和元素增減 可通過異常來進行下標溢出追蹤和處理 可比較 等等C115章程序設計教程(第 int n=10; int t5=1,2,3,4,5; vector a(n); /按需創建 vector b(10, 1); /元素賦全,靈活的初始化 vector c(b); / 整體拷貝創建 vector f(t, t+5); /異類拷貝創建 vector d(b.begin(), b.begin(

44、)+3);/局部拷貝創建d為b的前個元素 a.assign(100); /動態擴容至100個元素C115章程序設計教程(第向量常用操作 a.assign(b.begin(), b.begin()+3); / b的前3個元素賦給a a.assign(4,2); / a向量含4個元素,全初始化為2 int x = a.back(); / a的最后一個元素賦給變量x a.clear(); / a向量清空(不再有元素) if(a.empty() cout”empty”; / a判空操作 int y = a.front(); / a的第一個元素賦給變量y a.pop_back(); / 刪除a的最后一個

45、元素 a.push_back(5); / a最后插入一個元素,其值為5 a.resize(10); / a元素個數調至10。多刪少補,其值隨機 a.resize(10,2);/a元素個數調至10。多刪少補,新添元素初值為2 if(a=b) cout”equal”; / a與b的向量比較操作C115章程序設計教程(第向量操作尤其適合于函數參數傳遞(-D以上的數組參數的傳遞十分丑陋):傳遞一個矩陣,無論其每行中的元素個數不同傳遞一個矩陣,無論其每行中的元素個數不同. .輸輸出之出之: :typedef vectorvector Mat;void print(const Mat& a) fo

46、r(int i=0; ia.size(); +i) for(int j=0; jai.size(); +j) coutaij ; coutendl; C115章程序設計教程(第7. 指針與引用指針與引用 ( Pointers & Reference ) 指針指向存放數據的地址 指針必須初始化或者賦值(指向了數據)后,才能進行間接訪問(間訪)操作 int* ip; int iCount = 18; int* iPtr = &iCount; / 初始化 ip = &iCount; / 賦值 *ip = 8; / 間訪操作C115章程序設計教程(第指針操作與指向數據的類型密切

47、相關 float f = 34.5; int* ip = reinterpret_cast(&f); cout“fAddr: ”&f”f“n”; cout“iAddr: ”ip”*ip“n”; *ip = 100; cout“ int: ”*ip“n”; cout“float: ”f34.5 iAddr: 1245064=1107951616 int: 100 float: 1.4013e-43C115章程序設計教程(第指針加減整數的操作表示空間位置上的挪動但是挪動的字節數與其數據類型相關:對float指針加6實際增加了24個字節對long int指針加5實際增加了20個字節對

48、char指針減7實際減少了7個字節對double指針減2實際減少了16個字節C115章程序設計教程(第數組名本身就是表示元素集合的首地址數組名本身就是表示元素集合的首地址可以將數組名賦給指針可以將數組名賦給指針 int a3; for(int i=0; i3; +i) ai = i*2; for(int* iP=a; iPa+3; iP+=1) coutiP“: ”*iP“n”; 結果為: 1245036: 0 1245040: 2 1245044: 4C115章程序設計教程(第指針限定指針限定const int a = 78;int b = 10;int c = 18;const int*

49、ip = &a; / const修飾指向的實體類型常量指針int* const cp = &b; / const修飾指針*cp指針常量int const* dp = &b; / 等價于上一句指針常量const int* const icp = &c; / 常量指針常量*ip = 87; / 錯:常量指針不能修改指向的常量,*ip只能做右值ip = &c; / ok:常量指針可以修改指針值*cp = 81; / ok:指針常量可以修改指向的實體cp = &b; / 錯:指針常量不能修改指針值,即使是同一個地址*icp = 33; / 錯:常量指針常

50、量不能修改指向的常量icp = &b; / 錯:常量指針常量不能修改指針值int d = *icp; / okC115章程序設計教程(第引用必須初始化,因為引用總是附屬于某個實體引用必須初始化,因為引用總是附屬于某個實體int someInt = 5;int& rInt = someIne; /初始化修改引用的值,即是修改了附屬的實體值修改引用的值,即是修改了附屬的實體值int a = 5;int& ra = a;ra = 8;couta“n”;結果為:8引用多用在函數參數的傳遞上引用多用在函數參數的傳遞上C115章程序設計教程(第C + 程序設計教程(第二版)第四章

51、計算表達 Chapter 4 Computational Expressing清華大學出版社 錢 能C115章程序設計教程(第計算表達: 表達計算使用一系列操作,它依賴于特定語言的操作符功能,關乎數據類型的內在特性,故計算表達目的在于深入剖析數據類型對于編程的影響,從而準確使用操作符學習方法: 1.掌握操作符的功能和相互關系(優先級和結合性) 2.針對內部數據類型,對一些典型的操作中的典型問題留下深刻印象C115章程序設計教程(第第四章內容 名詞解釋名詞解釋( Name Explainations ) 算術運算問題算術運算問題 ( Arithmetic Problems ) 相容類型的轉換相容

52、類型的轉換 ( Cast Campatible Type ) 關系與邏輯操作關系與邏輯操作 ( Relation & Logic Operations ) 位操作位操作 ( Bit Operations ) 增量操作增量操作 ( Increment Operations ) 表達式副作用表達式副作用 ( Expressions Side Effects ) C115章程序設計教程(第1. 操作符操作符 ( Operators ) 單目操作符:在一個操作數上施加的操作,如:-3 雙目操作符:在二個操作數上施加的操作,如:- 故有些操作符既是單目操作符,又是雙目操作符 表達式:若干個操作數

53、和操作符按語法規則構成的操作,如: a = -3-5+6*7/-8C115章程序設計教程(第優先級:表達式中多個操作符的執行順序的規定性,如: *x+; / 先做x+結合性:同級操作符的執行順序的規定性,如: a=b=6; / 先做b=6C115章程序設計教程(第. 算術運算問題算術運算問題( Arithmetic Problems )整型數表示范圍有限,如: 不能用整型變量累計的一般循環方法來解: int sum = 0; for(int i=1; i=10000; +i) sum += i; coutsum“n”;C115章程序設計教程(第整型數的周而復始性,如: unsigned int

54、 a = 2000000000; unsigned int b = 3000000000; cout a+b“n”; 結果為: 705032704 超過表示范圍的整型數不是報錯,而是表示成一個去掉進位后的余數C115章程序設計教程(第中間結果溢出導致計算錯誤,如: intint a = 100000; intint b = 100000; intint c = 1000; couta*b/cn; couta*(b/c)n; 結果為: 1410065 10000000C115章程序設計教程(第浮點數的精度和有效位 影響比較的正確性,如: float f1 = 7.123456789; float

55、 f2 = 7.123456785; if ( f1=f2 ) cout“f1 equal to f2n”; float f = 1.0/3.0; double d = 1.0/3.0; if ( g=d ) cout“g not equal to dn”;結果為:結果為: f1 equals to f2 g not equals to dC115章程序設計教程(第浮點數計算的近似性 使精確性比較失敗,如: double d1 = 123456789.9*9; double d2 = 1111111109.1;if ( d1!=d2 ) cout “Not samen” ;else cout

56、“Samen” ;if ( abs ( d1-d2 ) 1e-05 ) cout “Samen” ;else cout “Not samen” ;結果為:結果為:Not sameSameC115章程序設計教程(第3. 相容類型轉換相容類型轉換 ( Cast Compatible Type ) 隱式轉換:整型和浮點型都是數值型,所以它們是相容類型指針與整型不相容,如: 7.0 / 3 = 7.0 / 3.0 /將隱式轉換成浮點 = 2.33333333 int a = 9; int* ap = &a; 3 + ap /錯C115章程序設計教程(第從表達能力弱的類型到強的類型的轉換是安全的

57、,反之,會引起精度丟失如: float f = 7.0/3; / doublefloat int a = 7.0/3; / doubleint cout.precision(9); cout fixed 7.0/3 “n” ; cout f “n” a “n” ; 結果為:結果為: 2.333333333 2.333333254 2C115章程序設計教程(第可以用顯式轉換的方法,人為控可以用顯式轉換的方法,人為控制運算制運算在一定的數據類型下工作,如:在一定的數據類型下工作,如: double d = sqrt ( 123456.0 ) ;int a = static_cast(d) * 8

58、+ 5;int b = d * 8 + 5; / 隱式轉換為浮點couta“n”b“n”;結果為:28132815C115章程序設計教程(第4. 關系與邏輯操作關系與邏輯操作 (Relations & Logic Operations )=與=的區別intint x = 9;if if ( x = 0 ) cout “test 1 okn” ;if if ( x = 5 ) cout “test 2 okn” ;if if ( x = 0 ) cout “test 3 okn” ;結果為:test 2 okC115章程序設計教程(第!=!=是操作符,是操作符,=!=!不是操作符不是操作

59、符 int x = 3; if ( x!=9 ) cout “not 9n” ; if ( x=!9 ) cout “impossiblen” ;條件表達式(x!=0)與(x)等同 int x = 3; if ( x != 0 ) cout x ; if ( x ) cout x ;C115章程序設計教程(第不等式連寫的錯誤: int a = -1, b = 0, c = 1; if ( abc ) cout “ok1n” ; if ( ab & bc ) cout 2 ) cout “okn” ; 避免不必要的求值 if ( a=0 | b=func() ) cout”useless

60、n”; C115章程序設計教程(第5. 位操作位操作( Bit Operations ) 左移操作將整數最高位擠掉,在右端補0。如: int a = 12; / a為:0000001100 a = a在整數的高位擠一個在整數的高位擠一個0或或1進去(有符號數進去(有符號數擠符號位,無符號數擠擠符號位,無符號數擠 ),而整數最),而整數最低位被擠掉。如:低位被擠掉。如: short int a = -2; / 1111111111111110 a = a1; / a=-1 即1111111111111111 unsigned short int b = 65535; / 1111111111111111 b = b1; / b=32767即11111C115章程序設計教程(第位與操作&將兩個操作數每一位做與操作,如: int a = 12; / a為: 0000001100 int b = 6; / b為: 0000000110 /

溫馨提示

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

評論

0/150

提交評論