C++知識點(整理版)_第1頁
C++知識點(整理版)_第2頁
C++知識點(整理版)_第3頁
C++知識點(整理版)_第4頁
已閱讀5頁,還剩17頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、一、 C+標識符的命名規則1. 所有標識符必須由一個字母 (az 或 AZ) 或下劃線 (_)開頭;2.標識符的其它部分可以用字母、下劃線或數字(09) 組成;3.大小寫字母表示不同意義 , 即代表不同的標識符,如前面的cout 和 Cout ;二、如何正確地聲明變量及其初始化2. C+中變量定義的格式 :類型名變量名 1,變量名 2, ,變量名 n ; 如: int num1, num2;( 2.1)在 C+中,每個變量在使用前必須被定義,以便編譯器檢查變量使用的合法性。變量定義只是給變量分配相應的空間。( 2.2) C+允許在定義變量的同時給變量賦初值。變量未被賦值前,值為未知格式: 類型

2、名 變量名 = 初值;或者:類型名 變量名(初值);如: int count = 0; 或 int count(0); 都是定義整型變量 count ,并為它賦初值0。可以給被定義的變量中的一部分變量賦初值,如:int sum = 0, count = 0, num;( 2.3)一旦定義了一個變量,可以將一個常量賦給該變量。變量賦值過程是“覆蓋 ”過程,用新值去替換舊值如 int a;a=123; 或 a = 0x123; 都是正確的( 2.4)在 C+中, 定義變量時沒有賦初值,然后直接引用該變量是危險的!3. 數據類型 (data type) :數據的編碼方式、值域和可執行的操作。數據類型

3、包括兩個方面:數據的取值范圍、可用的操作。C/C+ 中的數據類型分為兩大類:基本數據類型:整型、浮點型、字符型和布爾型構造數據類型:字符串、數組、結構、聯合和枚舉( 3.1)整型 (int) :以補碼形式存儲。基本型 int ;長整型 long: long / long int( )整數運算時要注意數據的表示范圍。如整數用兩個字節表示,正整數 32767 加 1 的結果為 -32768 。這稱為整數運算的溢出,系統不檢查這樣的錯誤,程序員必須自己保證程序中不出現這樣的錯誤。()在某些應用中,不可能出現負數,則整型數中有一半的數值范圍是被浪費的。因此在 C/C+ 中可以將所有的數都看成正整數,稱

4、為無符號數。無 符 號 數 的 定 義 : 在 各 種 整 數 類 型 前 加 上 關 鍵 詞 unsigned , 變 成 unsigned int, unsigned short, unsigned long( 3.2) 實型:以浮點表示,操作類似于整型,浮點數無法精確表示。( )浮點類型的分類:單精度 float ;雙精度 double( 3.3)字符型( char ):存放一個字母或符號,占一個字節,存放的是字符的內碼。可執行比較、連接等運算。具有雙重屬性:整數屬性和字符屬性,整數屬性:字符類型即單字節的整數類 ,字符屬性:數據值即為相應字符的 Ascii 碼。字符類型名: char

5、。可分為可打印字符:小寫字母、大寫字母、數字、標點符號、空格等;非打印字符:換行和報警字符或響鈴等控制字符( 3.4 ) 布 爾 型 (bool) :只 有 “真 ”、 “假 ”兩 個 值 。 可 執 行 判 斷 運 算 。如 bool flag=true;( 3.5)字符串( string ):是類類型,用雙引號 “”表示,可執行字符串比較 ,連接應用時要加 #include <string> 如 string str= “dfhdsf ”;三、如何聲明常量4.常量:值的直接表示。如1、 3、1.57 、“A?等 ,又稱直接量。( 4.1) 整型常量可用十進制、八進制和十六進制表

6、示:如十進制: 123, -234;八進制:0123 十六進制: 0x123, 0x3a2f( 4.2)浮點數常量有兩種表示法:( 1)十進制表示: 1.23 , 3.14;( 2)科學計數法:尾數 e 指數 123e2=12300 2.25e-3=0.00225 ; 注意:尾數不能為空,指數必須為整數( 4.3)字符常量: ”a?, “S?, ”2?等用一對單引號括起來的數據。字符串常量用雙引號( 4.4)命名常量:為值指定一個描述性的文字,增加程序的可讀性。在 C+語言中,用 const 修飾,如 const double PI =3.14; 見 PI 即知 3.14。注意一般變量名需大寫

7、,如 PI。二、算術運算符號及其運行規則a) 整數除整數b) % 求模運算5.算術運算符: +(加) -(減)*(乘)/ (求商)%(求余)( 5.1) “-”可為二元運算符,也可為一元運算符,其余所有的算術運算符都是二元運算符。( 5.2)優先級:高 * / % , 低 + -( 5.3)整型與整型數運算,結果為整型,如5 / 2 = 2 ;整型與浮點數運算,結果為浮點數,如5 / 2.0 = 2.5 ;字符與整型數運算,結果為整型;字符與浮點數運算,結果為浮點數。浮點數與浮點數運算,結果為浮點數。“%”運算符:取余,其兩邊都必須是整型數。6.關系運算符:>,>=,=,<=

8、,<,!=( 6.1) 優先級:高于賦值運算符,低于算術運算符。關系運算符內部:=和 ! =較低( 6.2)關系表達式:用關系運算符將二個表達式連接起來稱為關系表達式。關系表達式的結果是 true 或 false。 “等于 ”運算符是由兩個等號組成。常見的錯誤是在比較相等時用一個等號。 =( 相等 ), =(賦值)7. 邏輯運算符:&& (and)| (or)!(not)( 7.1)優先級:! 高于 關系運算符 高于 && 高于 |( 7.2)邏輯表達式:由邏輯運算符連接起來的表達式,其結果為 “真 (true) ”或 “假(false) ”邏輯表達式在執

9、行時,先處理左邊。如左邊已能決定此邏輯表達式的結果,則右邊不執行。因此,在&& 邏輯表達式中,應把false 可能性較大的條件放在左邊,在 | 表達式中,應把 true 可能性較大的條件放在左邊,這樣可以減少程序執行的時間8賦值運算符: = 的優先級比算術運算符低( 8.1)賦值語句:把一個值賦給一個變量。如x = y + z; x = 3.14; 賦值語句的左邊是變量,右邊是表達式。( 8.2)賦值表達式格式:<變量 > = <表達式 >如 x = x + 2。作用:將右邊的表達式的值存入左邊的變量,整個表達式的值是右邊的表達式的結果。 賦值運算符是右

10、結合的( 8.3)左值 (lvalue) : 在 C+中,能出現在賦值運算符左邊的表達式稱為左值右值( rvalue ):賦值運算符右邊的表達式的值( 8.4)賦值語句:賦值表達式后面加上分號。( 8.5)將賦值表達式作為更大的表達式的一部分。如: a = (x = 6) + (y = 7) 等價于分別將 x 和 y 的值設為 6 和 7,并將 6 和 7 相加,結果存于變量a( 8.6)其他運算符與賦值運算符結合的運算符稱為復合賦值運算符。格式:變量 op= 表達式 ; 等價于:變量 = 變量 op 表達式 ;常用的復合賦值運算符有:+=,=,*=,/=,%= 如: balance += d

11、eposit; balance -= surcharge; x /= 10; salary *=2;( 8.7)賦值和運算時的自動類型轉換,在進行賦值操作時,會發生類型轉換,將取范圍小的類型轉為取值范圍大的類型是安全的反之是不安全的,如果大類型的值在小類型能容納的范圍之內,則平安無事強制類型轉換: (類型名)(表達式);或類型名 (表達式);如 z = (double)x / y; 靜態轉換 (static_cast) :用于編譯器隱式執行的任何類型轉換格式:轉換類型 <類型名 > (表達式 ) 如 z = static_cast<double>(x) / y;1. 單

12、個分號組成的語句成為空語句2. 用 括起來的一組語句稱為復合語句。在邏輯上看成一個語句。 v 復合語句可以放在任何單語句出現的地方。3. 在復合語句中可以定義變量,但必須定義在最前面。4. 逗號表達式語句格式:表達式 1,表達式 2,,表達式 nv 逗號運 算符的優 先級 是所有 運算 符中最 低的 如 a 的初值為 0 , 則表達式 a += 1, a += 2, a += 3, a += 4, a += 5的結果為 155. 前置+i, -i ( 先執行 i+1 或 i-1 ,再使用 i 值)6.后置 i+, i-( 先使用 i 值 ,再執行 i+1 或 i-1 )If 語句c) 形式d)

13、 三種 If 語句的執行流程9. 控制語句 : 改變程序中語句的執行次序。(9.1)if 語句 : 兩個分支:條件測試為 true 時所執行的程序塊叫做 then 子句,條件為 false 時執行的語句叫做 else 子句。格式( 1 )if (條件測試)語句;即 else 語句可省略( 2)if (條件測試)語句 1; else語句 2;eg. if (grade >= 60)cout << “passed”;eg. if (grade >= 60)cout << “passed”;elsecout <<“failed ”;格式( 3)多分支語

14、句:條件 1 為 true 時所執行的程序塊 1,條件 1 為 false 但滿足條件 2 時執行的語句塊 2,。依次類推,條件 n-1 為 false 但滿足條件 n 時執行 else 語句。常見的有 3 分支語句: if else ifelse。eg. if(grade >= 90)cout << “A”;else if(grade >= 80)cout << “B”;else if(grade >= 70)cout << “C”;else if(grade >= 60)cout << “D”;elsecout <

15、;<”E”;( 9.2)條件語句使用注意 條件的結果值應該是true 或 false,它們是 C+中 bool 類型的值 條件可為任意表達式,不一定是關系表達式。0 為 false,非 0 為 true 。 if 語句可以沒有else 子句。合理的縮排。 if 語句的 then 子句和 else 子句含有 if 語句,稱為 if 語句的嵌套。 eg if (x < 100)if (x < 90)語句 1;else if (x<80)語句 2;else語句 3;else 語句 4; 歧義性:如最后一個else 跟哪個 if 配對 .。egif (y != 0)if (x

16、!= 0)result = x / y;elsecout<<“error :y = 0 ”<<endl;配對原則:每個else 子句是和在它之前最近的一個沒有else 子句的 if 語句配對。 在每個 if-else 語句后加一對大括號是一種良好習慣,特別是有兩個以上的復合語句需要執行時。( 9.2)條件表達式: 作用:更加簡練的用來表達條件執行的機制?:運算符 :問號冒號運算符形式 : (條件 ) ? 表達式 1 : 表達式 2 eg: max = x > y ? x :y;循環語句e) 形式f) 三種循環語句的區別g) 三種循環語句的執行流程10.循環語句:一

17、個完整的循環結構一般由四部分組成:( 10.1)For 語句:主要用于計數循環v 格式: for (表達式 1;表達式 2;表達式 3) 語句; or 語句快 ;可以理解為 :for( 循環變量賦初值;循環條件;循環變量增值 )符合循環條件時的執行語句v 循環體可以是復合語句或空語句。v 循環里所有語句的一次完全執行稱為一個循環周期。v 執行過程:先執行表達式1,再執行判斷表達式2,如果為true ,執行一次循環體(即一個循環周期),接著執行表達式3,然后重新執行判斷表達式2,若為true,又執行一次循環體,重復直至判斷表達式2 為 false,,最后跳出整個循環。若開始執行條件表示2 為 f

18、alse, 循環體一次也不執行。v For 循環的三個表達式可以是任意表達式。三個表達式都是可選的。v 如果循環不需要任何初始化工作,則表達式1 可以缺省。如循環前需要做多個初始化工作,可以將多個初始化工作組合成一個逗號表達式,作為表達式1。如 for (int i=0,; i<=10; +i) ;v 表達式2 也不一定是關系表達式。它可以是邏輯表達式,甚至可以是算術表達式。當表達式 2 是算術表達式時,只要表達式的值為非0,就執行循環體,表達式的值為 0 時退出循環。v 如果表達式2 省略,即不判斷循環條件,循環將無終止地進行下去。無終止的循環稱為 “死循環 ”,最簡單的死循環是for

19、 ( ;);( 10.2)While 語句: 與 for 循環等價,可相互代替。v 格式: while (表達式)語句; or 語句塊; v 執行過程:先計算出條件表達式的值。如果是false,循環終止;如果是true ,整個循環體將被執行,而后又回到 while 語句的第一行,再次對條件進行檢查,若為 true, 接著執行循環體,重復直到條件為 false,,跳出整個循環。v 用途:用于循環次數不定的循環。循環是否結束取決于某一個變量的值(標記控制重復)v 在 for 和 while語句之后一般沒有分號,有分號表示循環體就是分號之前的內容(空循環體)( 10.3)Do- While 語句v

20、格式:do 語句; or 語句塊; while ( 表達式 );v 執行過程:首先執行語句,然后判斷表達式的值。如果表達式為0,繼續向下執行,否則,再次執行語句,再次判斷表達式的值v 用途:用于至少執行一次的循環。注意后面有分號;11 跳轉語句:v break 語句:跳出整個循環或switch 語句。若有多重循環,跳出含break最近的循環體。v continue 語句:跳出當前本次循環,接著判斷是否執行下次循環周期。12 幾種典型的循環。注意格式及應用v 輸入驗證循環:以下兩種等價,右邊一個常用 cout <<" 請輸入半徑 :" / 提示輸入do cout

21、<< “請輸入半徑 :" cin>>radius;area = PI * radius * radius while ( radius < 0);/ 當 radius < 0 ,重復輸入,直到2.while(true) /或 while (1)>0for () cout << “輸入一個正整數:"/cin >>num;if (num = -1) break; / if (num=sum += num;/ 處理數據提示用戶并讀入數據標志) 跳出 ;v 查詢循環 累加循環 p=0; char ans; / 用于用

22、戶響應for(int i=1;i<=N;i+) cout <<" 請輸入半徑 :" / 提示輸入p=p+i;cin >> radius;area = PI * radius * radius 累乘循環 : p=1cout << "area = " <<area <<endl;for(int i=1;i<=N;i+)cout << "do you again?"<<endl; /詢問提示p=p*i;cin >>ans; / 詢問輸

23、入 while(ans = 'Y'| ans = 'y'); /詢問循環v 編譯( compiler ):將高級語言的程序翻譯成機器語言,分為解釋執行,編譯執行v 連接 (link) :將目標程序與已有的其它目標程序連接起來,產生一個可執行的程序v 輸出流是傳給顯示器的數據流,將變量或表達式的內容顯示在顯示器上格式? 輸出一個變量的值: cout << a;? 輸出多個變量的值: cout << a << b << c;? 輸出表達式的結果: cout << “Hello worldn ”<<

24、; endl? 上述情況的組合: cout << a << “+”<< b << “=”<< a+b << endl; v 鍵盤流入的數據流,將鍵盤輸入的數據存入變量格式: cin >>變量 1 >> 變量 2 >> >> 變量 n; 如 cin >> a;當程序執行到 cin 時會停下來等待用戶的輸入 ,后面一定是變量名,不可加引號 用戶可以輸入數據,用回車()結束。當有多個輸入數據時,一般用空白字符(空格、制表符和回車)分隔。如: a 為整型, d 為 dou

25、ble ,則對應于cin >> a >>d,用戶的輸入可以為12 13.2or12( tab 鍵) 13.2 or 1213.2如何定義一個帶默認值參數的函數如何調用一個帶默認值參數的函數h) 參數使用默認值i) 參數不使用默認值函數v 過程單元是程序的基本單位。在過程化的語言中,過程單元就是程序中某個模塊的表示。在面向對象的語言中,過程單元說明對象對各種事件是如何響應的。v 每個程序都必須有一個名為main的函數,它是程序的入口。主程序由一個或多個函數組成v 程序主體(主函數main ():主要包含如下模塊:(definitioninput-proocess-oupu

26、t)(1) 變量定義:為程序中的數據準備存儲空間( declaration or definition)(2) 輸入階段:接受所需輸入的信息。它由兩部分組成:顯示提示信息和接收輸入 (input)(3) 計算階段:完成所需的計算 (process)(4) 輸出階段:輸出計算的結果 (output)v 函數的主要構成:函數聲明,函數定義,函數調用v 可以把函數想象成數學中的函數。如 f(x)=2x 參數表是一組自變量 x,返回類型是函數值的類型 ; 函數聲明就是設函數為 f(x), 函數定義(函數頭 +函數體)就是函數表達式如 2x,函數調用就是帶值計算如 f(2)=2 ×2。v 函數

27、聲明:類似于變量聲明,所有函數在使用前必須被聲明。又稱函數的原型,功能:說明函數和外界的交流,反映函數調用的全部信息。包括下列內容:函數名,函數的參數類型,函數的返回類型它的形式為: 返回類型 函數名(參數表);返回類型:是函數的輸出值的類型 , void 函數沒有返回值函數名:是函數的名字。程序可以通過函數名執行函數體的語句參數表:是函數的輸入 , 無參數列表,可不寫,但是括號必須有。參數表中的參數說明之間用 “, ”分開,每個參數說明可以是類型,也可以是類型后面再接一個參數名。如: int max(int, int);int max(int a, int b); int main( ) v

28、函數定義:函數頭+函數體,相當于一個小程序。void函數頭:說明函數和外界的交流,與函數聲明一樣,參數表要有形參,除外 函數體: 一系列獨立的程序步驟 ; ,必須定義在函數體最前面形式:返回類型函數名(參數表) / 函數頭 code here;/ 函數體Eg : int max(int a, int b)/ 函數定義 if (a > b) return(a); else return(b);v 函數調用形式 : 函數名(實際參數表) ;一般出現在主調函數中或其他調用函數中。eg. max( x,y) ;v 函數執行過程:( 1) 在主程序中計算每個實際參數值。( 2) 調用時將實際參數的

29、值賦給對應的形式參數。在賦值的過程中完成自動類型轉換。( 3) 進入函數體依次執行函數體的每個語句,直到遇見return 語句或函數體結束( 4) 計算 return 后面的表達式的值,如果表達式的值與函數的返回類型不一致,則完成類型的轉換。( 5) 用函數的返回值置換函數,繼續主程序的執行。 Eg int max(int a, int b); / 函數聲明int main( ) int x, y ;cin >> x >> y;cout << max(x + 5, y - 3);/函數調用 int max(int a, int b) /函數定義 if (a

30、> b) return(a); else return(b); v 注意:(1) 形式參數和實際參數的個數 (number) 、排列次序 (order) 、類型 (type) 要完全相同。(2) 實際參數可以是常量、變量、表達式,甚至是另一個函數調用(3) 傳遞方式:值傳遞,執行函數調用時,將實參值傳遞給形參,并替換形參同名的實體(4) int a=3,b=4; cout<<"a="<<a<<",b= cout<<"a="<<a<<",b=(5) void

31、swap(int *x ,int *y);/(4) 值傳遞:函數獲得了主調程序參數變量值的拷貝。被調程序可以改變這些拷貝,但這對主調程序的環境沒有影響。( 5)請注意: C+中不允許函數定義嵌套,即在函數定義中再定義一個函數是非法的。一個函數只能定義在別的函數的外部,函數定義之間都是平行的,互相獨立的 。 例 如 : 下 面 的 代 碼 在 主 函 數 中 非 法 嵌 套 了 一 個 f ( ) 函 數 定義: void main() void f()/ 函數參數的傳遞比較:1. 按值傳遞 以按值傳遞方式進行參數傳遞的過程為:首先計算出實參表達式的值,接著給對應的形參變量分配一個存儲空間,該空

32、間的大小等于該形參類型的長度,然后把已求出的實參表達式的值一一存入到為形參變量分配的存儲空間中,成為形參變量的初值,供被調用函數執行時使用。這種傳遞是把實參表達式的值傳送給對應的形參變量,故稱這種傳遞方式為 “按值傳遞 ”。這種方式被調用函數本身不對(主調函數中)實參進行操作,也就是說,即使形參的值在函數中發生了變化(主調函數中)實參的值也完全不會受到影響,仍為調用前的值。 例:按值傳遞。void swap(int,int);/函數定義void main() int a=3,b=4;cout<<"a="<<a<<",b=“<

33、;<b<<endl;swap(a,b); /函數調用cout<<"a="<<a<<",b="<<b <<endl; void swap(int x,int y)/函數定義 int t=x; x=y; y=t; 此程序的運行結果為:a=3,b=4a=3,b=42. 地址傳遞 如果在函數定義時將形參的類型說明成指針,對這樣的函數進行調用時就需要指定地址值形式的實參。這時的參數傳遞方式即為地址傳遞方式。這種地址傳遞與上述的按值傳遞不同,它把實參的存儲地址傳送給對應的形參,從而使得形參

34、指針和實參指針指向同一個地址。因此,被調用函數中對形參指針所指向的地址中內容的任何改變都會影響到實參。例:地址傳遞。函數聲明 void main() “ <<b<<endl; swap(&a,&b); 、 “ <<b<<endl; void swap(int *x,int *y) int t=*x; *x=*y; *y=t; 此程序的運行結果為:a=3,b=4a=4,b=33. 引用傳遞 按值傳遞方式容易理解,但形參值的改變不能對實參產生影響;地址傳遞方式雖然可以使得形參的改變對相應的實參有效,但如果在函數中反復利用指針進行間接訪

35、問,會使程序容易產生錯誤且難以閱讀。如果以引用作為參數,則既可以使得對形參的任何操作都能改變相應的實參的數據,又使函數調用顯得方便、自然。引用傳遞方式是在函數定義時在形參前面加上引用運算符 “&”。 例引用傳遞。void swap(int &,int &); void main() int a=3,b=4;cout<<"a="<<a<<",b= “<<b<<endl; swap(a,b);cout<<"a="<<a<<&quo

36、t;,b= “<<b<<endl; void swap(int &x,int &y) int t=x; x=y; y=t; 此程序的運行結果為:a=3,b=4a=4,b=3函數的嵌套調用:函數體 由前述可知, C+函數不能嵌套定義,即一個函數不能在另一個函數體中進行定義。但在使用時,允許嵌套調用,即在調用一個函數的過程中又調用另一個函數。 例如: func1(int a, float b) float c;c=func2(b-1,b+1);/ int func2(float x, float y),func1 /函數體func2/func1和 func2

37、 是分別獨立定義的函數,互不從屬。如何定義一個遞歸函數j) 漢諾塔k) 求最大公約數l) 計算階乘函數的遞歸調用:一個函數直接或間接地調用自身,這種現象就是函數的遞歸調用。遞歸調用有兩種方式:直接遞歸調用和間接遞歸調用。直接遞歸調用即在一個函數中調用自身,間接遞歸調用即在一個函數中調用了其他函數,而在該其他函數中又調用了本函數。利用函數的遞歸調用,可將一個復雜問題分解為一個相對簡單且可直接求解的子問題( “遞推 ”階段);然后將這個子問題的結果逐層進行回代求值,最終求得原來復 雜問 題的 解( “回 歸 ”階 段)。 例: 求 n 的階乘 。( 函 數遞 歸調用 的例程。) long f(in

38、t n) if(n<0)cout<< “error! “<<endl;return(-1); else if(n<=1)return(1);elsereturn (n*f(n-1);/自己調用自己void main()long f(int n); int n;cout<<"input n:"<<endl; cin>>n;cout<<"n!="<<f(n)<<endl; 此程序的運行結果為:please input n:5n!=120程序的內存區域:

39、一個程序將操作系統分配給其運行的內存塊分為4 個區域。 (1)代碼區,存放程序的代碼,即程序中各個函數中的代碼塊。 (2)全局數據區,存放程序全局數據和靜態數據。 ( 3)堆區,存放程序的動態數據。( 4)棧區,存放程序的局部數據,即各個函數中的數據。如何使用變量(變量的作用是什么?)2.局部變量。在一個函數內部說明的變量是內部變量,它只在該函數范圍內有效。也就是說,只有在包含變量說明的函數內部,才能使用被說明的變量,在此函數之外就不能使用這些變量了。所以內部變量也稱 “局部變量 ”。關于局部變量的作用域還要說明以下幾點:1主函數 main() 中定義的內部變量,也只能在主函數中使用,其它函數

40、不能使用。同時,主函數中也不能使用其它函數中定義的內部變量。因為主函數也是一個函數,與其它函數是平行關系。這一點是與其它語言不同的,應予以注意。2形參變量也是內部變量,屬于被調用函數;實參變量,則是調用函數的內部變量。 3允許在不同的函數中使用相同的變量名,它們代表不同的對象,分配不同的單元,互不干擾,也不會發生混淆。4在復合語句中也可定義變量,其作用域只在復合語句范圍內。3.全局變量(1) 在函數外部定義的變量稱為外部變量。以此類推,在函數外部定義的數組就稱為外部數組。(2) 外部變量不屬于任何一個函數,其作用域是:從外部變量的定義位置開始,到本文件結束為止。(3) 外部變量可被作用域內的所

41、有函數直接引用,所以外部變量又稱全局變量 對于全局變量還有以下幾點說明:( 1)外部變量可加強函數模塊之間的數據聯系,但又使這些函數依賴這些外部變量,因而使得這些函數的獨立性降低。從模塊化程序設計的觀點來看這是不利的,因此不是非用不可時,不要使用外部變量。定義但不初始化,則自動賦以 " "(整型和實型)或 '0' (字符型)( 2)在同一源文件中,允許外部變量和內部變量同名。在內部變量的作用域內,外部變量將被屏蔽而不起作用。( 3)外部變量的作用域是從定義點到本文件結束。如果定義點之前的函數需要引用這些外部變量時,需要在函數內對被引用的外部變量進行說明。外部

42、變量說明的一般形式為:extern 數據類型外部變量 ,外部變量 2, ;注意:外部變量的定義和外部變量的說明是兩回事。外部變量的定義,必須在所有的函數之外,且只能定義一次。而外部變量的說明,出現在要使用該外部變量的函數內,而且可以出現多次。靜態局部變量1.定義格式: static 數據類型內部變量表; 2.存儲特點(1) 靜態局部變量屬于靜態存儲。在程序執行過程中,即使所在函數調用結束也不釋放。換句話說,在程序執行期間,靜態內部變量始終存在,但其它函數是不能引用它們的。(2) 定義但不初始化,則自動賦以 " " (整型和實型)或 '0' (字符型);且每次

43、調用它們所在的函數時,不再重新賦初值,只是保留上次調用結束時的值!(3) 何時使用靜態局部變量§需要保留函數上一次調用結束時的值。變量只被引用而不改變其值。一維數組m) 如何正確地聲明一維 “靜態 ”數組并初始化i. 初始化列表的長度與數組大小的關系ii. 數組大小必須是整型常量n) 如何使用數組元素i. 通過 “索引值 ”訪問數組中的具體元素ii. Const int NumOfElement= 10;ii. 對“索引值 ”的說明(整型值、從 0 開始)o) Josephus 問題p) 篩選質數13.數組:v 數組是一組同類元素,它有兩個特征:?數組元素是有序的?數組元素是同類的v

44、 定義數組要定義三個基本內容:?數組名字?數組元素的類型?數組的大小v 定義格式:類型數組名 元素個數 ;其中,元素個數必須是常量。如:但int n=10; int intarrayn;是錯的int intarray10;v常用的方法是將元素個數定義為一個常量。如:int intarrayNumOfElement;相當于 int intarray10;v 聲明數組時可以對數組初始化float x5 = -1.1, 0.2, 33.0, 4.4, 5.05 ;v 初始化表的長度短于要被初始化的數組元素數目,那么剩余元素被初始化為0。 v 帶有初始化的數組可以不定義長度int a=1,2,3,4,

45、5; 則默認數組大小為5v 數組元素的使用是通過數組名及元素的序號來指定,如 intarray2 。當數組的大小為 n 時,元素的序號為 0 n-1。v 元素的序號稱為下標。程序中,下標可為整數、整型變量或結果為整型的任意表達式v 定義數組就是定義了一塊連續的空間,空間的大小等于元素數* 每個元素所占的空間大小。v 數組元素按序存放在這塊空間中。v C+語言不檢查數組下標的超界。如定義數組int intarray10;合法的下標范圍是 0 9,但如果你引用intarray10 ,系統不會報錯。如數組intarray 的起始地址是 1000 ,則引用 intarray10 ,則系統對1040 號

46、內存進行操作。而1040 可能是另一個變量的地址v 解決方法:由程序員自己控制。在對下標變量進行操作前,先檢查下標的合法性。v 由一系列字符組成的一個單元稱為字符串v字符串:v 在 C+中,字符串常量用一對雙引號括起來。如”Hello,world ”v 字符串變量:用字符類型的數組來表示v 字符串的本質是一系列的有序字符,因此可以用一個字符數組來保存這組字符。用數組名表示這個字符串v 由于數組名是數組的起始地址,因此該字符串從該地址開始存儲。但到哪里為止?C+用 0 表示字符串的結束。v 字符串所需的存儲空間比實際的字符串長度大v 如要將字符串 ”Hello,world ”保存在一個數組中v

47、Charch= H,e,l,l,o,w ,o,r,l,d,0 ;v char ch = ”Hello,world ”;v char ch = ”Hello,world ”;v 不包含任何字符的字符串稱為空字符串。v 空字符串占用的空間為1 個字節,存儲 0 v 注意 a和“a”的區別1,該數組的長度為12v 逐個字符的輸入輸出:這種做法和普通的數組操作一樣。v 將整個字符串一次性地用cin 和 cout 輸入或輸出。v 通過函數 get 和 put 輸入輸出。v get 函數v 從終端接受一個包含任意字符的字符串。v 格式: cin.get (ch) ch 為 char 型v put 函數v

48、將一個字符串(以 0 結束的字符序列)輸出到終端v 格式: cout.put ( ch) ch 為 char 型v 字符串不能直接用系統的內置運算符進行操作v C+的函數庫中提供了一些用來處理字符串的函數。這些函數在庫中 v C+還提供了一個string類來處理字符串函數 作用 strcpy(dst, src)cstring將字符從 src 拷貝到 dst 。函數的返回值是 dst 的地址 strncpy(dst, src, n)至多從 src 拷貝 n 個字符到 dst 。函數的返回值是 dst 的地址 strcat(dst, src) 將 src 接到 dst 后。函數的返回值是 dst

49、的地址strncat(dst, src, n)從 src 至多取 n 個字符接到dst 后。函數的返回值是dst的地址 strlen(s) 返回 s 的長度strcmp(s1, s2)比較 s1 和 s2。如 s1 > s2 返回值為正數, s1=s1 返回值為 0, s1<s2 返回值為負數strncmp(s1, s2, n) 如 strcmp ,但至多比較n 個字符 strchr(s, ch) 返回一個指向s 中第一次出現ch 的地址 strrchr(s, ch) 返回一個指向s 中最后一次出現ch 的地址 strstr(s1, s2) 返回一個指向 s1 中第一次出現 s2

50、的地址如何定義一個函數q) 函數返回類型r) 函數名s) 參數列表i. 一維數組作為參數,該如何處理?ii. 二維數組作為參數,該如何處理?t) return 語句數組作為函數的參數小結:v 可以將數組元素傳遞給函數,這時實際參數用的是數組元素素數 isprime(ai);函數定義 bool isprime (ai);v 也可以將整個數組傳遞給函數,這時實際參數用的是數組名。函數調用判斷是否為如 函數調用sort(a,n);函數定義 sort(int a, int n);v 數組傳遞的實質是傳遞地址。把實際參數中的數組首地址作為形式參數中的數組的首地址 vv 數組在函數中的定義:函數原型應該體

51、現數組參數是一個數組,所以用無數組大小定義的方括號表示數組。你可能希望規定數組的大小,但在C+語言中并不檢查數組的界限,所以在函數中也沒必要知道數組的大小。數組大小只在數組定義中明確(為了申請內存量) 。v 數組的每一個元素又是數組的數組稱為多維數組v 最常用的多維數組是二維數組,又稱為矩陣v 二維數組的定義格式:類型說明數組名 常量表達式 1 常量表達式 2v 存放次序:按行存放int a45;v vector類模板是一種更加健壯, 且有許多附加功能的數組v 附加功能例如 :提供下標越界檢查 ;提供數組用相等運算和大小比較提供數組間賦值等運算指針u)利用指針移動(指針加法、減法運算) ,處理

52、數組中的不同元素。v) 利用 new/delete 處理一維動態數組指針與引用v 指針就是把地址作為數據,可以把地址存儲在內存中v 指針變量:存儲地址的變量v 變量的指針:當一個變量存儲另一個變量的地址時,那我們說它就是那個變量的指針v 如何定義一個變量是指針? 類型標識符 *指針變量;如: int *intp;double *doublepv 如何把某一變量的地址置入一個指針變量中?因為我們不知道系統分配給變量的真正地址是什么。?用地址運算符“&”解決。如表達式“&x”返回的是變量x 的地址。如: intp = &x;? &運算符后面不能跟常量或表達式。如 &2 是沒有意義的,&(m * n + p ) 。也是沒有意義的v 如何用指針變量處理和改變它所指向的單元的值??用引用運算符“*”解決。如 *intp 表示的是 intp 指向的這個單元的內容。?在對 intp 使用引用運算之前,必須先對intp 賦值如有: int X, *intp, Y;X=3;Y=4 intp=&X;注意:

溫馨提示

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

評論

0/150

提交評論