面向?qū)ο蟪绦蛟O(shè)計(jì)教案分享_第1頁
面向?qū)ο蟪绦蛟O(shè)計(jì)教案分享_第2頁
面向?qū)ο蟪绦蛟O(shè)計(jì)教案分享_第3頁
面向?qū)ο蟪绦蛟O(shè)計(jì)教案分享_第4頁
面向?qū)ο蟪绦蛟O(shè)計(jì)教案分享_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第2章 C+ 編程基礎(chǔ)程序設(shè)計(jì)工作主要包括數(shù)據(jù)結(jié)構(gòu)(即數(shù)據(jù)類型)和算法(操作步驟)的設(shè)計(jì)。程序中最基本的元素是數(shù)據(jù)類型,確定了數(shù)據(jù)類型,才能確定變量空間的大小和其上的操作;算法是由一系列控制結(jié)構(gòu)組成。每種語言都是用一組字符來構(gòu)造有意義的語句,C+語言的字符集由下述字符構(gòu)成:· 英文字母:AZ,az· 數(shù)字字符:09· 特殊字符:空格!#%&*_(下劃線) +=:-<>/ “;.()2.1 數(shù)據(jù)類型與表達(dá)式一個(gè)程序要運(yùn)行,就要先描述算法。描述一個(gè)算法應(yīng)先說明算法要用的數(shù)據(jù),數(shù)據(jù)以變量或常量的形式來描述,每個(gè)變量或常量都有數(shù)據(jù)類型。C+中的數(shù)據(jù)類型

2、分為基本類型和非基本類型,見圖2-1?;绢愋褪荂+編譯系統(tǒng)內(nèi)置的,非基本類型也稱是用戶定義數(shù)據(jù)類型,即用戶自己定義的數(shù)據(jù)類型,無符號(hào)數(shù)unsigned 字符型 char 整型 int 整數(shù)integer 短整形 short 長整形 long 基本類型 邏輯型 bool 單精度型float 實(shí)數(shù) floating 雙精度型 double 數(shù)據(jù)類型 長雙精度型 long double 枚舉型enum 數(shù)組型 非空數(shù)據(jù)類型 指針型 非空數(shù)據(jù)類型 * 非基本類型 空類型 void 結(jié)構(gòu)體類型 struct 共用體類型 union 類 class 圖2-1 C+數(shù)據(jù)類型數(shù)據(jù)類型的定義確定了其內(nèi)存所占空

3、間大小,也確定了其表示范圍。表1-1列出了基本數(shù)據(jù)類型的取值范圍。需要說明的是,在不同的系統(tǒng)中,每個(gè)變量類型所占的字節(jié)數(shù)目可能有所不同,這里列出的是在VC+編譯環(huán)境中的情況。表2-1 常用基本數(shù)據(jù)類型描述類 型說 明長度表示范圍備 注bool邏輯型1false,truechar字符型1-128127-27(27-1)unsigned char無符號(hào)字符型10255 0(28-1)short短整形2-3276832767-215(215-1)unsigned short無符號(hào)短整型20655350(216-1)int整型4-21474836482147483647-231(231-1)unsig

4、ned int無符號(hào)整型4042949672950(232-1)long長整型4-21474836482147483647-231(231-1)unsigned long無符號(hào)長整型4042949672950(232-1)float浮點(diǎn)型4-3.4×10383.4×10387位有效位double雙精度8-1.7×103081.7×1030815位有效位long double長雙精度8-1.7×103081.7×1030815位有效位2.1.1 常量所謂常量是指在程序運(yùn)行的整個(gè)過程中其值始終不可改變的量,常量有以下幾種:1整型常量整型常

5、量即以數(shù)碼形式出現(xiàn)的整數(shù),包括正整數(shù)、負(fù)整數(shù)和零。整型常量的表示形式有十進(jìn)制、八進(jìn)制和十六進(jìn)制。十進(jìn)制整型常量的一般形式為:±若干個(gè)09的數(shù)字八進(jìn)制整型常量的一般形式為:±0若干個(gè)07的數(shù)字十六進(jìn)制整型常量一般形式為:±0x若干個(gè)09的數(shù)字及AF的字母整型常量可以用后綴字母L(或l)表示長整型,后綴字母U(或u)表示無符號(hào)型,也可同時(shí)用后綴L和U(大小寫無關(guān))。2實(shí)型常量實(shí)型常量又稱浮點(diǎn)小數(shù),在C+語言中,實(shí)型常量只使用十進(jìn)制表示,有兩種表示形式:一般形式 例如:16.5,-13.5等。指數(shù)形式 例如:0.565E2表示0.565×102,-34.4E-

6、3表示-34.4×10-3,實(shí)型常量默認(rèn)為double型,如果后綴F(或f)則為float型。3字符常量字符常量是單引號(hào)括起來的一個(gè)字符,如a,G,?,$等。另外,還有一些字符是不可顯示字符,也無法通過鍵盤輸入,例如響鈴、換行、制表符、回車等等。這樣的字符常量該如何寫到程序中呢?C+提供一種稱為轉(zhuǎn)義序列的表示方法來表示這些字符,表2-2列出了C+預(yù)定義的轉(zhuǎn)義序列。表2-2 C+預(yù)定義的轉(zhuǎn)義序列字符形式ASCII碼(十六進(jìn)制)功 能n0A換行t09橫向跳格(即跳到下一個(gè)輸出區(qū))v0B豎向跳格b08退格r0D回車a07響鈴5C反斜杠字符“”27單引號(hào)”22雙引號(hào)dddddd(八進(jìn)制)1到

7、3位8進(jìn)制數(shù)所代表的字符xhhHh1到2位16進(jìn)制數(shù)所代表的字符4字符串常量字符串常量簡稱字符串,是用一對(duì)雙引號(hào)括起來的字符序列,例如”China”就是一個(gè)字符串常量。5布爾常量布爾型常量只有兩個(gè):false(假)和true(真)。2.1.2 變量在程序的執(zhí)行過程中其值可以變化的量稱為變量,變量需要用標(biāo)識(shí)符來命名。變量在使用之前需要首先聲明其類型和名稱。變量聲明的形式如下:<類型標(biāo)識(shí)符> 變量名1,變量名2,變量名n;在聲明一個(gè)變量的同時(shí),也可以給它賦以初值。2.1.3 引用引用是個(gè)別名,當(dāng)建立引用時(shí),程序用另一個(gè)變量或?qū)ο螅繕?biāo))的名字初始化它。自此,引用作為目標(biāo)的別名而使用,對(duì)

8、引用的改動(dòng)實(shí)際是對(duì)目標(biāo)的改動(dòng)。引用的聲明形式為:<類型標(biāo)識(shí)符> &引用名=目標(biāo)名或<類型標(biāo)識(shí)符>& 引用名=目標(biāo)名其中:引用名是為引用型變量所起的名字,它必須遵循變量的命名規(guī)則。前面的數(shù)據(jù)類型就是它所引用目標(biāo)的數(shù)據(jù)類型。在此要特別說明的是:引用在聲明時(shí)必須進(jìn)行初始化,即指出該引用是哪一個(gè)對(duì)象的別名,這里的目標(biāo)名可以是變量名,也可以是以后將要介紹的對(duì)象名。而且引用一旦聲明,就以對(duì)應(yīng)目標(biāo)的內(nèi)存單元位置作為自己的位置,并且不再改變,從一而終。例如,引用一個(gè)整型變量:int someInt;int& rInt=someInt;聲明rInt是對(duì)整數(shù)的引用,

9、初始化為引用someInt。在這里,要求someInt已經(jīng)聲明或定義。引用不是值,不占存儲(chǔ)空間,聲明引用時(shí),目標(biāo)的存儲(chǔ)狀態(tài)是不會(huì)改變的。例2-1 如何建立和使用引用例題。#include<iostream.h>void main()int someInt;int& rInt=someInt;someInt=6;cout<<"someInt:"<<someInt<<endl;cout<<"rInt:"<<rInt<<endl;rInt=7;cout<<&

10、quot;someInt:"<<someInt<<endl;cout<<"rInt:"<<rInt<<endl;程序運(yùn)行結(jié)果為:someInt:6rInt:6someInt:7rInt:7在上述程序中,引用rInt用someInt來初始化。以后,無論改變someInt或rInt,實(shí)際上都是指someInt,兩個(gè)的值都一樣,對(duì)引用的理解可以見圖2-2。6someIntrInt圖2-2 引用與變量的關(guān)系 需要注意的是,引用在聲明時(shí)必須初始化,否則會(huì)產(chǎn)生編譯錯(cuò)誤。2.1.4 表達(dá)式表達(dá)式由運(yùn)算符、運(yùn)算對(duì)象和括號(hào)

11、組成。1運(yùn)算符C+語言中定義了豐富的運(yùn)算符,如算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符等等,有些運(yùn)算符需要兩個(gè)操作數(shù),使用形式為:<操作數(shù)1>運(yùn)算符<操作數(shù)2>這樣的運(yùn)算符稱為二元運(yùn)算符(或二目運(yùn)算符)。另一些運(yùn)算符只需要一個(gè)操作數(shù),稱為一元運(yùn)算符(或單目運(yùn)算符)。運(yùn)算符具有優(yōu)先級(jí)與結(jié)合性。在表2-3中列出了C+中全部運(yùn)算符的優(yōu)先級(jí)與結(jié)合性。2表達(dá)式在任何高級(jí)程序設(shè)計(jì)語言中,表達(dá)式都是最基本的組成部分,也就是說程序中的大部分的語句是由表達(dá)式構(gòu)成的??梢院唵蔚貙⒈磉_(dá)式理解為用于計(jì)算的公式,它由運(yùn)算符(例如:+ - * )、運(yùn)算對(duì)象(也稱操作數(shù),可以是常量、變量等等)和括號(hào)組成。

12、執(zhí)行表達(dá)式所規(guī)定的運(yùn)算,所得到的結(jié)果值便是表達(dá)式的值。表達(dá)式在使用時(shí)要注意以下幾點(diǎn):一個(gè)常量或標(biāo)識(shí)對(duì)象的標(biāo)識(shí)符是一個(gè)最簡單的表達(dá)式,其值是常量或?qū)ο蟮闹?。一個(gè)表達(dá)式的值可以用來參與其它操作,即用作其它運(yùn)算符的操作數(shù),這就形成了更復(fù)雜的表達(dá)式。包含在括號(hào)中的表達(dá)式仍是一個(gè)表達(dá)式,其類型和值與未加括號(hào)時(shí)的表達(dá)式相同。當(dāng)表達(dá)式中出現(xiàn)了多種類型數(shù)據(jù)的混合運(yùn)算時(shí),首先需要進(jìn)行類型轉(zhuǎn)換,其次才計(jì)算表達(dá)式的值。表達(dá)式中的類型轉(zhuǎn)換分為兩種:隱含轉(zhuǎn)換和強(qiáng)制轉(zhuǎn)換。表2-3 運(yùn)算符優(yōu)先級(jí)優(yōu)先級(jí)運(yùn) 算 符結(jié)合性1 () . -> 后置+ 后置-左右2前置+ 前置- sizeof * +(正號(hào)) -(負(fù)號(hào)) !右

13、左3(強(qiáng)制轉(zhuǎn)換類型)右左4· * ->*左右5* / %左右6+ -左右7<< >>左右8< > <= >=左右9= !=左右10&左右11左右12|左右13&&左右14|左右15?:右左16= *= /= %= += -= <<= >>= &= = |=右左17,左右(l)隱含轉(zhuǎn)換在混合運(yùn)算時(shí),對(duì)于二元運(yùn)算符要求兩個(gè)操作數(shù)的類型一致,若參加運(yùn)算操作數(shù)類型不一致時(shí),系統(tǒng)自動(dòng)對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)換(即隱含轉(zhuǎn)換),具體的規(guī)則如下:· 算術(shù)運(yùn)算和關(guān)系運(yùn)算轉(zhuǎn)換的基本原則是將低類型數(shù)

14、據(jù)轉(zhuǎn)換為高類型數(shù)據(jù)。各種類型的高低順序如下:char short int unsigned long unsigned-long float double低 高· 邏輯運(yùn)算符要求參與運(yùn)算的操作數(shù)必須是bool型,如果操作數(shù)是其它類型,則系統(tǒng)自動(dòng)將其轉(zhuǎn)換為bool型。轉(zhuǎn)換方法是:非0數(shù)據(jù)轉(zhuǎn)換為true,0轉(zhuǎn)換為false。· 位運(yùn)算的操作數(shù)必須是整數(shù),當(dāng)二元位運(yùn)算的操作數(shù)是不同類型的整數(shù)時(shí),編譯系統(tǒng)會(huì)自動(dòng)進(jìn)行類型轉(zhuǎn)換。· 賦值運(yùn)算要求左值(賦值運(yùn)算符左邊的值)與右值(賦值運(yùn)算符右邊的值)的類型相同。(2)強(qiáng)制類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換又稱為顯式轉(zhuǎn)換,是通過類型標(biāo)識(shí)符和括號(hào)

15、來實(shí)現(xiàn)的,其語法形式有兩種:<類型標(biāo)識(shí)符>(表達(dá)式)或(類型標(biāo)識(shí)符)<表達(dá)式>2.2 程序的控制結(jié)構(gòu)2.2.1 選擇結(jié)構(gòu)用if語句可以實(shí)現(xiàn)簡單選擇結(jié)構(gòu)。其語法形式為:if(表達(dá)式)語句1else 語句2執(zhí)行順序是:首先計(jì)算表達(dá)式的值,若表達(dá)式值為true,則執(zhí)行語句1;否則執(zhí)行語句2。if語句中的語句2可以為空,當(dāng)語句2為空時(shí),else可以省略,成為如下形式:if(表達(dá)式)語句1其中語句1和語句2不僅可以是一條語句,而且可以是大括號(hào)括起來的多條語句,即復(fù)合語句。2.2.2 switch語句如果在算法中,雖然需要進(jìn)行多次判斷選擇,但都是判斷同一個(gè)表達(dá)式的值,這樣就沒有必要

16、在每一個(gè)嵌套的if語句中都計(jì)算一次表達(dá)式的值,為此C+中有switch語句專門來解決這類問題。switch語句的語法形式如下:switch(表達(dá)式)case常量表達(dá)式1:語句1case常量表達(dá)式2:語句2case常量表達(dá)式n:語句ndefault:語句 n+1使用switch語句應(yīng)注意下列問題:switch后面括弧內(nèi)的括弧“表達(dá)式”的值只能是整型、字符型、枚舉型。各常量表達(dá)式的值不能相同,且次序不影響執(zhí)行結(jié)果。每個(gè)case分支可以有多條語句,但不必用。每個(gè)case語句只是一個(gè)入口標(biāo)號(hào),通常我們只需執(zhí)行一個(gè)case后的語句,因此,每個(gè)case分支的最后應(yīng)該加break語句,用來結(jié)束整個(gè)switc

17、h結(jié)構(gòu),否則從入口點(diǎn)開始一直執(zhí)行到switch結(jié)構(gòu)的結(jié)束點(diǎn)。當(dāng)若干分支需要執(zhí)行相同操作時(shí),可以使多個(gè)case分支共用一組語句。2.2.3 循環(huán)結(jié)構(gòu)在C+中有三種循環(huán)控制語句:1while語句while語句的語法形式:while(表達(dá)式)語句執(zhí)行順序是:判斷一個(gè)條件表達(dá)式(循環(huán)控制欄件),以便決定是否應(yīng)當(dāng)進(jìn)入和執(zhí)行循環(huán)體,當(dāng)條件滿足時(shí)進(jìn)入循環(huán),不滿足該條件時(shí)則不再執(zhí)行循環(huán)。2do-while語句語法形式:do語句while(表達(dá)式);執(zhí)行順序是:當(dāng)流程執(zhí)行到do 后,立即執(zhí)行循環(huán)體語句,然后在判斷循環(huán)條件表達(dá)式的值。表達(dá)式為true時(shí),繼續(xù)執(zhí)行循環(huán)體,表達(dá)式為false則結(jié)束循環(huán),該語句結(jié)構(gòu)使循

18、環(huán)至少執(zhí)行一次。3for語句for語句的使用最為靈活,既可以用于循環(huán)次數(shù)確定的情況,也可以用于循環(huán)次數(shù)未知的情況。for語句的語法形式如下:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句for語句的執(zhí)行流程為:首先計(jì)算表達(dá)式1的值;再計(jì)算表達(dá)式2,如果表達(dá)式2的值為false,則退出循環(huán)。如果表達(dá)式2的值為true,則執(zhí)行一次循環(huán)體,然后計(jì)算表達(dá)式3的值;轉(zhuǎn)回,表達(dá)式2的值決定是否繼續(xù)執(zhí)行循環(huán)體。一個(gè)循環(huán)體內(nèi)可以包含另一個(gè)完整的循環(huán)結(jié)構(gòu),構(gòu)成多重循環(huán)。while、do-while、和for三種循環(huán)語句可以互相嵌套。2.2.4 其它控制語句1break 語句 break 語句只用于switch語句或

19、循環(huán)體中時(shí),作用是使程序從switch語句內(nèi)跳出或結(jié)束循環(huán),繼續(xù)執(zhí)行邏輯上的下一條語句。2continue語句continue語句僅用于循環(huán)體中,其作用是結(jié)束本次循環(huán),接著開始判斷循環(huán)條件,決定是否繼續(xù)執(zhí)行下一次循環(huán)。3goto語句goto語句的語法格式為:goto <語句標(biāo)號(hào)>其中“語句標(biāo)號(hào)”是用來表示語句的標(biāo)識(shí)符,放在語句的最前面,并用冒號(hào)“:”與語句分開。2.3 函數(shù)C+語言中的函數(shù)分為三種,一是主函數(shù)(即main()函數(shù));二是系統(tǒng)提供的標(biāo)準(zhǔn)函數(shù),又稱庫函數(shù)。標(biāo)準(zhǔn)函數(shù)由系統(tǒng)定義,在程序中可以直接調(diào)用;三是用戶自定義函數(shù)。這里只介紹自定義函數(shù)的定義和使用。2.3.1 函數(shù)定義

20、一個(gè)完整的函數(shù)定義由兩部分組成,即函數(shù)頭與函數(shù)體。函數(shù)定義的一般語法形式為:<類型標(biāo)識(shí)符> <函數(shù)名說明符>(形式參數(shù)表)說明性語句序列;實(shí)現(xiàn)函數(shù)功能的語句系列;其中:類型標(biāo)識(shí)符 規(guī)定了函數(shù)的返回值類型。函數(shù)的返回值是返回給主調(diào)函數(shù)的處理結(jié)果,由函數(shù)體部分的return語句帶回。無返回值的函數(shù)其類型標(biāo)識(shí)符為void,不必有return語句。形式參數(shù)表,簡稱形參表的內(nèi)容如下:類型l 形參名1,類型2 形參名2,類型n 形參名n2.3.2 調(diào)用函數(shù)調(diào)用函數(shù)必須遵守先定義后調(diào)用的原則,否則,需要在調(diào)用函數(shù)之前在主調(diào)函數(shù)中聲明函數(shù)原型。函數(shù)原型聲明形式為:<類型標(biāo)識(shí)符&g

21、t; <被調(diào)函數(shù)名>(含類型說明的形參表);函數(shù)的調(diào)用形式:<函數(shù)名>(實(shí)參1,實(shí)參2,。,實(shí)參n)2.3.3 默認(rèn)參數(shù)的函數(shù)在函數(shù)定義中通過賦值運(yùn)算就可指定默認(rèn)參數(shù)值。一旦程序在調(diào)用該函數(shù)時(shí),如果給出實(shí)參,則用實(shí)參初始化形參;如果沒有給出實(shí)參,則C+編譯系統(tǒng)自動(dòng)以預(yù)先賦值的默認(rèn)參數(shù)值作為傳入數(shù)值。需要特別注意:默認(rèn)形參值必須按從右向左的順序定義。在有默認(rèn)值的形參右面,不能出現(xiàn)無默認(rèn)值的形參。因?yàn)樵谡{(diào)用時(shí),實(shí)參初始化形參是按從左向右的順序。2.3.4 內(nèi)聯(lián)函數(shù)內(nèi)聯(lián)函數(shù)與一般函數(shù)不同的是,它不是在調(diào)用時(shí)發(fā)生轉(zhuǎn)移,而是在編譯時(shí)將函數(shù)體嵌入在每一個(gè)調(diào)用語句處。這樣就相對(duì)節(jié)省了

22、參數(shù)傳遞、系統(tǒng)棧的保護(hù)與恢復(fù)等的開銷。內(nèi)聯(lián)函數(shù)的定義形式為:<inline> <類型標(biāo)識(shí)符> <被調(diào)函數(shù)名>(含類型說明的形參表)函數(shù)體注意: 內(nèi)聯(lián)函數(shù)體內(nèi)一般不能有循環(huán)語句和switch語句; 內(nèi)聯(lián)函數(shù)的定義必須出現(xiàn)在第一次被調(diào)用之前; 對(duì)內(nèi)聯(lián)函數(shù)不能進(jìn)行異常接口聲明。因此,只有很簡單而使用頻率很高的函數(shù)才被說明為內(nèi)聯(lián)函數(shù)。內(nèi)聯(lián)函數(shù)會(huì)擴(kuò)大目標(biāo)代碼,使用時(shí)要謹(jǐn)慎。例2-2 內(nèi)聯(lián)函數(shù)例題。#include <iostream.h>#include <iomanip.h>inline int max(int a,int b)if(a>

23、;b)return a;elsereturn b;void main()int a,b,c,d;a=210;b=150;c=20;d=max(a,b);d=max(d,c);/編譯時(shí)兩個(gè)調(diào)用處均被替換為max函數(shù)體語句。cout<<"The biggest of"<<setw(5)<<a<<setw(5)<<b<<setw(5)<<c<<" is "<<d<<endl;程序運(yùn)行結(jié)果為:The biggest of 210 150 20

24、is 2102.3.5 系統(tǒng)函數(shù)的使用系統(tǒng)函數(shù)的原型聲明已經(jīng)全部由系統(tǒng)提供了,并且已分類存在于不同的頭文件中。程序員需要做的事情,就是用include指令嵌入相應(yīng)的頭文件,然后便可以使用系統(tǒng)函數(shù)。2.4 數(shù)組數(shù)組是一種構(gòu)造數(shù)據(jù)類型,是具有統(tǒng)一名稱和相同類型的一組數(shù)據(jù)元素的集合,它占用連續(xù)內(nèi)存單元進(jìn)行存儲(chǔ)。組成數(shù)組的對(duì)象稱為該數(shù)組的元素,數(shù)組元素可存儲(chǔ)的數(shù)據(jù)類型由聲明時(shí)指定的C+語言數(shù)據(jù)類型決定。2.4.1 一維數(shù)組數(shù)組在使用前必須先聲明。聲明一個(gè)一維數(shù)組的形式如下:<類型標(biāo)識(shí)符> <數(shù)組名>數(shù)組長度注意:數(shù)組長度是個(gè)常量表達(dá)式。數(shù)組中的每個(gè)元素可以當(dāng)成普通的變量使用。訪

25、問一維數(shù)組元素的形式如下:<數(shù)組名>下標(biāo)注意:下標(biāo)的值也是從0開始,不能超過該維的長度減1。一維數(shù)組的初始化有如下兩種形式:形式1:<類型標(biāo)識(shí)符> <數(shù)組名>數(shù)組長度=第0個(gè)元素值,第1個(gè)元素值,第n-1個(gè)元素值形式2:<類型標(biāo)識(shí)符> <數(shù)組名> =第0個(gè)元素值,第1個(gè)元素值,.,第n個(gè)元素值2.4.2 多維數(shù)組多維數(shù)組的聲明形式如下:<類型標(biāo)識(shí)符> <數(shù)組名>長度1長度2長度n訪問多維數(shù)組中的元素:<數(shù)組名>第1維下標(biāo)第2維下標(biāo)第n維下標(biāo)二維數(shù)組的初始化形式如下:形式1:<類型標(biāo)識(shí)符>

26、 <數(shù)組名>第1維長度第2維長度=第0個(gè)第2維數(shù)據(jù)組,第1個(gè)第2維數(shù)據(jù)組,., 第n-1個(gè)第2維數(shù)據(jù)組其中:n等于第1維長度。形式2:<類型標(biāo)識(shí)符> <數(shù)組名>第1維長度第2維長度=第0個(gè)元素值,第1個(gè)元素值,., 第m個(gè)元素值其中:m小于或等于第1維長度*第2維長度。2.4.3 數(shù)組應(yīng)用1排序數(shù)組元素排序是與數(shù)組有關(guān)的最重要的算法。所謂數(shù)組元素排序,是指將數(shù)組中的所有元素的位置重新排列,使得數(shù)組元素的值按照遞增或遞減有序排列。排序有很多方法,常用的有選擇排序法和冒泡排序法。選擇排序法是很樸素的排序方法,它的思想很簡單:先找到數(shù)組中最大的元素,將這個(gè)元素放到

27、數(shù)組的最前端;然后在剩下的數(shù)組元素中再找出最大的元素,把它放在剩下的這些元素的最前端,如此下來,就能使數(shù)組中的元素以遞減序排列了。冒泡排序法是交換排序法的一種,其基本思路是:兩兩比較待排序的序列中的相鄰元素,如果不滿足順序要求,就交換這兩個(gè)元素,這樣,第1輪比較完畢后,數(shù)組中的最大(或最小)元素就像氣泡一樣“冒”到數(shù)組的最尾部,可以認(rèn)為由這個(gè)元素組成的只有一個(gè)元素的子序列是已經(jīng)排好序的;然后對(duì)剩下的元素繼續(xù)上述過程,直到全部元素有序。例2-3 已知一個(gè)一維數(shù)組中的元素為:1、7、3、22、9、5,現(xiàn)要求以遞增順序?qū)@個(gè)數(shù)組中的元素進(jìn)行排列,結(jié)果為1、3、5、7、9、22,下面給出冒泡排序法的程

28、序代碼。#include <iostream.h>void main()int a6=1,7,3,22,9,5;int i,j,t,flag;for(i=0;i<6;i+)flag=0;for(j=0;j<6-i-1;j+)if(aj>aj+1) t=aj;aj=aj+1;aj+1=t;flag=1;if(flag=0) break;cout<<"排序后的數(shù)組為:n"for(i=0;i<6;i+)cout<<" "<<ai<<"n"2查找數(shù)組元素查找是

29、與數(shù)組有關(guān)的另一種重要算法。常用的查找方法有順序查找法和二分查找法。順序查找法的思路很樸素,也容易實(shí)現(xiàn),但效率不高:二分查找法的效率很高,但要求數(shù)組在查找前已經(jīng)排好序。順序查找法的思路:按順序逐個(gè)訪問數(shù)組元素,并將其同要找的值比較,直到找到與要查找的值相同的元素。二分查找法的思路:首先假設(shè)數(shù)組已經(jīng)按增序排好序。取位于數(shù)組中間的元素同要查找的值比較,如果待查值等于這個(gè)元素的值,則查找結(jié)束。如果待查值小于這個(gè)元素的值,則要查找的元素肯定在數(shù)組的左半邊,將數(shù)組左半邊看成完整的數(shù)組,繼續(xù)使用二分查找法查找。如果待查值大于這個(gè)元素的值,則要查找的元素肯定在數(shù)組的右半邊,將數(shù)組右半邊看成完整的數(shù)組,繼續(xù)使

30、用二分查找法查找。二分法查找函數(shù)代碼:#include <iostream.h>void efFind(int DataArray,int nSize,int fValue) int flag=0; /設(shè)置flag為查找標(biāo)記int nStart=0; /開始元素下標(biāo)int nEnd=nSize-1; /結(jié)尾元素下標(biāo)int nMid; /二分法中間元素下標(biāo)while(nStart<=nEnd)nMid=(nStart+nEnd)/2; /計(jì)算中間元素下標(biāo)if(DataArraynMid=fValue)flag=1; /標(biāo)記查找成功break; /退出循環(huán)/*如果待查找的值大于中

31、間元素的值,取后半邊繼續(xù)查找;否則,取前半邊繼續(xù)查找*/if(fValue>DataArraynMid)nStart=nMid+1;elsenEnd=nMid-1;if(flag)cout<<"元素找到了!是第 "<<nMid+1<<" 個(gè)"<<endl;elsecout<<"在數(shù)組中沒有要找的元素!"<<endl;3統(tǒng)計(jì)當(dāng)需要知道一個(gè)元素在數(shù)組中出現(xiàn)的次數(shù)時(shí),就要用到統(tǒng)計(jì)的算法。常用的統(tǒng)計(jì)方法有順序查找統(tǒng)計(jì)法和借用數(shù)組下標(biāo)值的統(tǒng)計(jì)方法。順序查找統(tǒng)計(jì),即按順

32、序逐個(gè)訪問數(shù)組元素,每找到一個(gè)要統(tǒng)計(jì)的元素,就給計(jì)數(shù)器變量加一。借用數(shù)組下標(biāo)值進(jìn)行統(tǒng)計(jì)方法是一種技巧性算法,主要借用統(tǒng)計(jì)元素的一些特性,比如整除某數(shù)后的商均相等或其值就等于數(shù)組下標(biāo)等來進(jìn)行。例2-4 輸入若干整數(shù),其值均在1至4的范圍內(nèi),使用借用數(shù)組下標(biāo)值進(jìn)行統(tǒng)計(jì)方法統(tǒng)計(jì)每個(gè)整數(shù)的出現(xiàn)的次數(shù)的程序代碼如下:#include <iostream.h>void main()int tj4=0,0,0,0; /存放統(tǒng)計(jì)結(jié)果int tjData;cout<<"請(qǐng)輸入數(shù)據(jù)(14),輸入其它時(shí)結(jié)束:"<<endl;cin>>tjData;

33、while(tjData>0&&tjData<5) /限定數(shù)據(jù)范圍的循環(huán)tjtjData-1+; /注意數(shù)組tj的下標(biāo)tjData-1作用cin>>tjData;cout<<"統(tǒng)計(jì)結(jié)果為:"<<endl;for(int i=0;i<4;i+)cout<<" "<<i+1<<" : "<<tji<<endl;程序運(yùn)行結(jié)果為:請(qǐng)輸入數(shù)據(jù)(14),輸入其它時(shí)結(jié)束:1 2 3 4 1 2 6統(tǒng)計(jì)結(jié)果為:1 22 2

34、3 14 12.4.4 數(shù)組作為函數(shù)的參數(shù)要將整個(gè)數(shù)組作為參數(shù)傳遞給函數(shù),可通過傳遞不帶方括號(hào)的數(shù)組名來進(jìn)行,其形式大體上有以下兩種形式:形式1:<類型標(biāo)識(shí)符> <函數(shù)名>(類型標(biāo)識(shí)符 數(shù)組名,int長度)形式2:<類型標(biāo)識(shí)符> <函數(shù)名>(類型標(biāo)識(shí)符 數(shù)組名長度)第一種形式適于處理不同長度的數(shù)組,數(shù)組的實(shí)際長度通過另一個(gè)參數(shù)傳遞給函數(shù),而第二種形式只可用于傳遞長度固定的數(shù)組。不管哪一種形式,傳遞給函數(shù)的都不是數(shù)組本身,而是保存數(shù)組第0個(gè)元素的內(nèi)存單元的位置,即存儲(chǔ)數(shù)組的起始位置,這樣,被調(diào)用函數(shù)就可以得到實(shí)際數(shù)組的準(zhǔn)確存放位置。因此,被調(diào)用函數(shù)

35、在函數(shù)體中修改數(shù)組元素時(shí),實(shí)際上是修改原內(nèi)存位置中的數(shù)組元素。例2-5 某次歌唱比賽有5名選手參加,有6名評(píng)委分別為選手打分,得分如下表2-4所示。表2-4 歌唱比賽記分表 評(píng)委號(hào)選手號(hào)12345619.319.209.009.409.359.2029.719.529.509.669.499.5738.898.809.109.258.909.0049.389.509.409.209.908.9059.308.849.409.459.108.89規(guī)定的積分規(guī)則是:每位選手去掉一個(gè)最高分,再去掉一個(gè)最低分, 然后取剩下的得分的平均分。編寫程序計(jì)算各選手的成績,并在窗口輸出選手號(hào)和成績。程序代碼如下

36、:#include <iostream.h>double Context(double pArry,int nNum)/評(píng)分函數(shù)int nInum;double fMark,fMax,fMin;/定義記錄成績、最高分、最低分的變量fMark=fMax=fMin=pArry0;for(nInum=1;nInum<nNum;nInum+)if(pArrynInum>fMax)fMax=pArrynInum;if(pArrynInum<fMin)fMin=pArrynInum;fMark+=pArrynInum;/fMark先記錄著所有評(píng)委的總分return (fMar

37、k-fMax-fMin)/4;/計(jì)算出平均分并返回調(diào)用函數(shù)void main()double pfSoreData56=9.31,9.20,9.00,9.40,9.35,9.20,9.71,9.52,9.50,9.66,9.49,9.57,8.89,8.80,9.10,9.25,8.90,9.00,9.38,9.50,9.40,9.20,9.90,8.90,9.30,8.84,9.40,9.45,9.10,8.89;int nRow;cout.precision(3);/設(shè)置小數(shù)點(diǎn)后的位數(shù)for(nRow=0;nRow<5;nRow+)cout<<nRow+1<<

38、" 號(hào)選手成績?yōu)椋?quot;cout<<Context(pfSoreDatanRow,6)<<endl;程序運(yùn)行結(jié)果為:1號(hào)選手成績?yōu)椋?.262號(hào)選手成績?yōu)椋?.563號(hào)選手成績?yōu)椋?.974號(hào)選手成績?yōu)椋?.375號(hào)選手成績?yōu)椋?.17注意:本例調(diào)用函數(shù)形式為Context(pfSoreDatanRow,6),將二維數(shù)組的第一維數(shù)組名作為實(shí)際參數(shù)傳遞給了形式參數(shù),由此可進(jìn)一步理解二維數(shù)組是若干個(gè)一維數(shù)組所組成的概念。2.4.5 數(shù)組與字符串在C語言中沒有字符串變量類型,為了表示字符串,要用到字符數(shù)組。字符型數(shù)組就是數(shù)組元素的類型是字符型的數(shù)組,它是通過字

39、符數(shù)組的每一個(gè)元素保存字符串內(nèi)的每一個(gè)字符來進(jìn)行處理。而在VC+中,是由其MFC類庫中提供的功能完善的字符串類CString來完成對(duì)字符串的各種功能。1字符數(shù)組的初始化字符型數(shù)組通常有兩種特殊的初始化方法,形式如下:形式1:char <數(shù)組名>="字符串"形式2:char <數(shù)組名>="字符串"這兩種形式產(chǎn)生的效果是相同的,它們會(huì)產(chǎn)生一個(gè)以字符串常量中的每個(gè)字符為數(shù)組元素且在末尾加個(gè)“0”的特殊數(shù)組,例如:char pMyStrinq="This is a computer"執(zhí)行后,pMyString數(shù)組中的元

40、素依次是:'T','h','i','s',' ','a',','c','o','m','p','u','t','e','r ','0'。它等同于:char pMyString='T','h','i','s',' ','a',','c'

41、;,'o','m','p','u','t','e','r ','0'或:char pMyStrinq="This is a computer"2字符串的基本運(yùn)算在C+語言的庫函數(shù)中提供了各種字符串運(yùn)算的函數(shù),可以直接調(diào)用。我們?cè)诖私o出其中的求字符串長度、字符串復(fù)制和字符串連接3種運(yùn)算的具體實(shí)現(xiàn)方法,理解這些運(yùn)算,有助于提高對(duì)字符串和字符數(shù)組的認(rèn)識(shí)與理解。(1)求字符串的長度假設(shè)字符串保存在數(shù)組pString中,求字符串長度的程序代碼如下:char

42、pString="abcd"int nSize=0;while(pStringnSize!=0)nSize+;執(zhí)行完畢后,整型變量nSize中保存的值就是字符串pString的長度。(2)字符串的復(fù)制字符串的復(fù)制的方法是將源字符型數(shù)組中的字符依次賦予給目的字符型數(shù)組,直到碰到“0”(或0)為止。假設(shè)源字符串保存在數(shù)組pSource中,目的字符型數(shù)組為pDestination,則字符串復(fù)制的程序段如下:char pSource="abcd"char pDestination=5; /源字符串長度+1int nIndex=0;while(pSourcenSi

43、ze!=0)pDestinationnIndex=pSourcenIndex;nIndex+;pDestinationnIdex=0; /標(biāo)識(shí)字符串結(jié)束(3)字符串的連接字符串的連接就是將一個(gè)字符串連接到另一個(gè)字符串的末尾。在進(jìn)行字符串連接時(shí),先要找到被要連接的字符串的尾部,然后從尾部的位置開始將另一個(gè)字符串復(fù)制過來。假設(shè)源字符串保存在字符數(shù)組pDest中,要連接進(jìn)來的字符串保存在字符數(shù)組pTocat中,則進(jìn)行字符串連接的程序代碼為:char pTocat="efg"char pDest8="abcd"/8=現(xiàn)字符串長度+要連接進(jìn)來的字符串長度+1int

44、 nSize=0;int nIndex=0;while (pDestnSize!=0)/找到被要連接的字符串的尾部nSize+;dopDestnSize+=pTocatnIndex;nIndex+; while(pTocatnIndex!=0);pDestnSize=0;2.5 指針指針就是指向內(nèi)存中某個(gè)單元的位置值。所有的變量、數(shù)組、對(duì)象都是保存在內(nèi)存中的,凡是保存在內(nèi)存中的信息,必須知道它在內(nèi)存中的位置,在計(jì)算機(jī)中,引用了“位置”這個(gè)詞來代表內(nèi)存的某個(gè)位置。內(nèi)存以字節(jié)為單位編址,稱為內(nèi)存位置。2.5.1 指針型變量1指針型變量的聲明指針型變量是保存指針數(shù)據(jù)類型的變量。定義指針變量的一般形式

45、是:<類型標(biāo)識(shí)符> *指針變量名2指針的基本操作 與指針有關(guān)的基本運(yùn)算符有以下兩個(gè):(1)&變量名,&為取位置運(yùn)算符,用來獲取變量的首位置。(2)*指針變量名,*為指向運(yùn)算符,用來獲取指針變量所指向變量的值。&和*運(yùn)算符都是單目運(yùn)算符,其優(yōu)先級(jí)高于所有雙目運(yùn)算符,采用從右到左的結(jié)合性。3指針變量的初始化與引用指針變量所賦的初值必須是所定義數(shù)據(jù)類型的變量位置。一個(gè)指針變量在使用之前必須先賦初值再使用,不然的話,程序運(yùn)行時(shí)很可能出現(xiàn)不可預(yù)見的故障,如果沒有具體明確的變量位置要被賦值,可以先賦以NULL。4指針的算術(shù)運(yùn)算對(duì)于非void*型的指針型變量,只能進(jìn)行加一

46、個(gè)整數(shù)、減一個(gè)整數(shù)和兩個(gè)指針變量相減3種運(yùn)算。void*型指針變量不能做任何算術(shù)運(yùn)算。將一個(gè)非void*型的指針型變量做加上或減去一個(gè)整數(shù)的運(yùn)算,實(shí)際上就是對(duì)位置進(jìn)行加法或減法運(yùn)算,這種加法和減法運(yùn)算按照某種單位進(jìn)行。這種單位就是該指針?biāo)赶虻淖兞康臄?shù)據(jù)類型所占用的字節(jié)數(shù)。5const修飾符與指針const與指針在一起使用,情況比較復(fù)雜,可簡單歸納為三種:指向常量的指針、常指針和指向常量的常指針。(1)指向常量的指針:是指一個(gè)指向常量的指針變量,例如:const char *name ="chen";/聲明一個(gè)名為name 的指針變量name3= 'a';/

47、錯(cuò)誤,不容許改變指針?biāo)傅某A縩ame ="zhang";/正確,可以改變指向常量的指針name的值(2)常指針:是指把指針本身,而不是它指向的對(duì)象聲明為常量,例如:char *const name="chen";/聲明一個(gè)名為name的常指針name3= 'a'/正確,所指的數(shù)據(jù)可以改變name="zhang"/錯(cuò)誤,不容許改變指針本身(3)指向常量的常指針:是指這個(gè)指針本身不能改變,它所指向的數(shù)據(jù)值也不能改變。例如:const char *const name="chen"/聲明一個(gè)指向字符型常

48、量的常指針name3= 'a'/錯(cuò)誤,不能改變指針?biāo)傅闹祅ame="zhang"/錯(cuò)誤,不能改變指針本身注意:如果用const定義的是一個(gè)整型常量,關(guān)鍵字int可以省略;常量一旦被建立,在程序的任何地方都不能再更改。如果沒有給常量定義一個(gè)初始值,C+假定初始值為零,并且不允許以后再給它賦值;函數(shù)參數(shù)也可以用const進(jìn)行說明,用于保證實(shí)參在該函數(shù)內(nèi)部不被改動(dòng),大多數(shù)C+編輯器能對(duì)具有const參數(shù)的函數(shù)能進(jìn)行更好的代碼優(yōu)化。2.5.2 指針與字符串前面我們已經(jīng)講過,以字符數(shù)組的形式對(duì)字符串進(jìn)行存儲(chǔ)與處理的,而數(shù)組與指針又緊密相連(數(shù)組名就保存著字符串在內(nèi)存

49、的起始位置),因此,字符串實(shí)質(zhì)與char*型指針相對(duì)應(yīng)。例如, 用字符數(shù)組的形式:char pString="I love China!"如果直接用字符型指針的形式,可以表示為:char *cString="I love China!"使用char*型指針變量要注意以下兩點(diǎn):char*型指針變量可以在定義時(shí)進(jìn)行初始化,其形式為:char *指針變量名="字符串"char*型的指針變量(或函數(shù)參數(shù))既可以用于接收字符串常量,也可以接收字符型數(shù)組。例如:char pString="I love China!"char

50、*myString="This is a string."myString=pString;例2-6 使用char*型指針變量重寫字符串的復(fù)制的程序代碼。#include <iostream.h>void copy_string(char *from,char *to)for(;*from!='0'from+,to+)*to=*from;*to='0'/賦值字符串結(jié)束標(biāo)識(shí)void main()char pSource="I am a teacher."char pDestination="you ar

51、e a student." /pDestination字符串長度pSource字符串長度copy_string(pSource,pDestination);cout<<pSource<<endl;cout<<pDestination<<endl;程序運(yùn)行結(jié)果為:I am a teacher.I am a teacher.C+提供了許多操作字符串?dāng)?shù)據(jù)的標(biāo)準(zhǔn)庫函數(shù),如比較字符串、搜索字符串中的字符、確定字符串長度等,只要我們?cè)谑褂盟鼈兦霸趹?yīng)用程序的開頭添加包含“string.h”頭文件的預(yù)處理命令:#include <string.h

52、>,我們?cè)诔绦蛟O(shè)計(jì)時(shí)就可直接引用。下表2-5總結(jié)了這些函數(shù)。表2-5 C+字符串處理庫(標(biāo)準(zhǔn)庫)中常用的字符串操作函數(shù)函數(shù)原型函數(shù)說明char *strcpy(char *s1 ,const char *s2)將字符串s2復(fù)制到字符數(shù)組s1中,返回s1的值char *strncpy(char *s1,const char *s2, n)將字符串s2中最多n個(gè)字符復(fù)制到字符數(shù)組s1中,返回s1的值char *strcat(char *s1,const char *s2)將字符串s2添加到字符串s1后面。s2的第一個(gè)字符覆蓋s1的null終止符。返回s1的值char *strncat(cha

53、r *s1,const char *s2, n)將字符串s2中最多n個(gè)字符添加到字符串s1后面。s2的第一個(gè)字符覆蓋s1的null終止符。返回s1的值int strcmp(const char *s1,const char *s2)比較字符串s1與字符串s2。函數(shù)在s1等于、小于或大于s2時(shí)分別返回0、小于0或大于0的值int strncmp(const char *s1,const char *s2,n)比較字符串sl中的前n個(gè)字符與字符串s2。函數(shù)在s1的前n個(gè)字符等于、小于或大于s2時(shí)分別返回0、小于0或大于0的值int stelen(const char *s)確定字符串長度,返回nu

54、ll終止符之前的字符數(shù)2.6 構(gòu)造數(shù)據(jù)類型本節(jié)主要介紹結(jié)構(gòu)體、共用體和枚舉類型,它們同數(shù)組一樣被稱為構(gòu)造類型。另外還介紹使用typedef將一個(gè)普通的標(biāo)識(shí)符定義為類型標(biāo)識(shí)符的方法。2.6.1 結(jié)構(gòu)體1結(jié)構(gòu)體類型的定義定義一個(gè)結(jié)構(gòu)體類型只是向C+系統(tǒng)通報(bào)該結(jié)構(gòu)體類型的名稱和各成員的組成,C+對(duì)結(jié)構(gòu)體類型并不分配內(nèi)存,只有在定義結(jié)構(gòu)體變量時(shí),C+才為結(jié)構(gòu)體變量分配內(nèi)存。定義一個(gè)結(jié)構(gòu)體類型的一般形式是:struct <結(jié)構(gòu)體類型名><類型標(biāo)識(shí)符> 成員名l;<類型標(biāo)識(shí)符> 成員名2;<類型標(biāo)識(shí)符> 成員名n;2結(jié)構(gòu)體變量的聲明聲明結(jié)構(gòu)體變量一般有兩種形式,分別是:<結(jié)構(gòu)體類型名> 變量名struct <結(jié)構(gòu)體類型名> 變量名另外,聲明結(jié)構(gòu)體變量也可在定義結(jié)構(gòu)體類型的同時(shí)進(jìn)行,其形式為:struct

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論