注意c不進(jìn)行下標(biāo)越界檢查_第1頁(yè)
注意c不進(jìn)行下標(biāo)越界檢查_第2頁(yè)
注意c不進(jìn)行下標(biāo)越界檢查_第3頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第四章 數(shù)組數(shù)組是可以通過下標(biāo)訪問的同類型數(shù)據(jù)元素的集合,而下標(biāo)則是標(biāo)識(shí)數(shù)組元素位置的無符號(hào)整數(shù)。本章內(nèi)容比較簡(jiǎn)單,學(xué)員一般困難不大,在此將重點(diǎn)內(nèi)容強(qiáng)調(diào)如下:、一維數(shù)組的定義和使用例如:char s80/ 定義了一個(gè)具有80 個(gè)字符的一維數(shù)組,沒進(jìn)行初始化 int d=1,3,5,7,9,11/定義了一個(gè)具有6 個(gè)元素的整形數(shù)組 double num5=1.0,2.0,3.0/定義了一個(gè)具有5 個(gè)元素的雙精度數(shù)組,前三個(gè)元素依次是 1.0, 2.0, 3.0,后兩個(gè)為0.0 long data10=0L/10個(gè)元素都初始化為0注意: c+ 不進(jìn)行下標(biāo)越界檢查,即cout<<data

2、11 ,編譯系統(tǒng)不會(huì)提示出錯(cuò),所以編程時(shí)一定要注意,否則可能造成無法想象的后果,因?yàn)閿?shù)組在內(nèi)存中是連續(xù)排列的,data10 是指 data9 的下一個(gè)位置,而下一個(gè)位置也許是其他變量的存儲(chǔ)空間。編程練習(xí): 1、從建盤輸入 n 個(gè)數(shù),輸出最大數(shù)2、從建盤輸入n 個(gè)數(shù),找到最大數(shù),然后將最大數(shù)與第一個(gè)數(shù)交換位置通過上述兩題的編寫,你會(huì)很容易理解教材P91 例題,同時(shí)對(duì)一位數(shù)組的使用會(huì)掌握的比較好。對(duì)教材 P92 例題 4 一定要深刻理解,你可以自己編一程序: 從鍵盤輸入一個(gè)整數(shù),判斷他是否為素?cái)?shù)(提示:不需要用到數(shù)組,且有多種方法,分析每種方法的計(jì)算次數(shù))、二維數(shù)組的定義和使用folat d45/

3、 定義了一個(gè)4 行5 列單精度二維數(shù)組,共 20 個(gè)下標(biāo)變量, 未進(jìn)行初始化int num3=1,3,5,0,2,4,6/ 定義了一個(gè)3 行3 列的整形數(shù)組,每個(gè)數(shù)組元素的值是多少?double data53 =0.0int a5,3=1,3,5,2,4,6/ 每個(gè)數(shù)組元素賦值為0,注意中間的大括號(hào)不能少與 int a53=1,3,5,0,2,4,6的效果一樣嗎?在理解教材例4.5 的基礎(chǔ)上,你如何將這程序修改為:對(duì)數(shù)組每行每列求和,然后只輸出每行每列的和。對(duì)一維數(shù)組和二維數(shù)組的使用要注意以下問題:1、一維數(shù)組下標(biāo)的取值范圍是0元素個(gè)數(shù) 1,二維數(shù)組行下標(biāo)的取值范圍是0行數(shù) 1,列下標(biāo)的取值范

4、圍是0列數(shù) 1。2、 表示一維數(shù)組有 N 個(gè)成員,表示二維數(shù)組有 M*N 個(gè)成員 ,M 和 N 最好用符號(hào)常量或者常值變量表示,而不能用一般的整形變量。如:#definen10char an;或constintn=10;char an;都是正確的,而int n=10;char an則是錯(cuò)誤的。3、一維數(shù)組的處理常用單重循環(huán),二維數(shù)組的處理常用二重循環(huán),循環(huán)變量對(duì)應(yīng)數(shù)組的下標(biāo),處理數(shù)組的典型結(jié)構(gòu)是(假定是一維數(shù)組,是二維數(shù)組):for(I=0;I<n;I+)for(I=0;I<m;I+)/* 處理 aI*/for(j=0;j<n;j+)/* 處理 bIj*/練習(xí) : 1、下列數(shù)

5、組的定義方式是否正確?1) int n;cin>>n;int an;2) int const n=5;int an;3)#define n 5int an;4)#define n 5int a2*n;2、編寫一個(gè)程序,從鍵盤輸入10 個(gè)數(shù),求最大數(shù)、最小數(shù)和平均數(shù)、字符數(shù)組與字符串字符數(shù)組可以用于存放字符串,因而可以通過下標(biāo)直接處理字符串中的任意字符,也可以把存于字符數(shù)組中的字符串作為一個(gè)整體,通過數(shù)組名交給系統(tǒng)提供的標(biāo)準(zhǔn)字符串處理函數(shù)來處理。其中strlen(求字符串長(zhǎng)度),strcpy (字符串復(fù)制),strcat(字符串連接) ,strcmp(字符串比較),strst(求子串

6、位置)是處理字符串最常用的5 個(gè)函數(shù),希望學(xué)員結(jié)合教材中的例題將這幾個(gè)函數(shù)一定弄清楚。說明: 教材 P109 4_10 是一個(gè)很好的例子,有興趣的同學(xué)可以親自編一下,并上機(jī)調(diào)試通過。第五章 c+ 函數(shù)一、函數(shù)聲明、定義和調(diào)用的三個(gè)步驟C+ 中的一個(gè)函數(shù)要經(jīng)過先聲明、再定義和函數(shù)調(diào)用三個(gè)步驟。當(dāng)函數(shù)的定義在使用之前時(shí), 前兩步往往可以合并在一起實(shí)現(xiàn)。 建議學(xué)員在學(xué)習(xí) c+ 時(shí)最好養(yǎng)成將聲明與定義分別編寫的編程習(xí)慣。強(qiáng)調(diào) :函數(shù)的原型與定義要在函數(shù)的返回類型,函數(shù)名和參數(shù)這三條線上保持一致。例:void Pr(int k, float f);/ 也可寫成void Pr(int,float);.vo

7、id Pr(int i, float f)/參數(shù)類型與數(shù)量一致即可。.二、函數(shù)傳遞參數(shù)的使用用于C+ 中的函數(shù)參數(shù)可以是值、地址(指針)和引用類型量。使用引用類型量做參數(shù)是傳值和傳地址的一種綜合變化形式。請(qǐng)學(xué)員一定將教材P123 例題 5.5 深入的理解(教師也可以把它放到第六章以后在講解,而在這里只講解可選參數(shù))三、函數(shù)的返回值1、 無缺省返回類型c+中對(duì)每個(gè)函數(shù)都必須給出返回值的類型聲明。如果沒有返回值,則聲明應(yīng)用表示(說明:在C 中,一個(gè)函數(shù)可以不聲明其返回值的類型,即缺省為int 。但在 C+void中沒有這個(gè)缺省類型)2、可以用引用類型量做函數(shù)返回值例:struct dt.;dt &

8、amp;fun( )/* 若在 fun() 前加 "&" ,則可在返回時(shí)只傳少數(shù)字節(jié)的地址,從而節(jié)省時(shí)空dt dt1=.;return dt1;void main() dt dt2;/* 因中介緩沖區(qū)的介入,傳值時(shí)要二次抄傳整體結(jié)構(gòu)內(nèi)容。dt2=fun();cout<<dt2.;/* 顯示 st2 中的內(nèi)容,實(shí)為子程序中st1 的內(nèi)容 */*/*/四、內(nèi)聯(lián)( inline )函數(shù)內(nèi)聯(lián)函數(shù)是 C+ 特有的一種函數(shù)類型。 學(xué)員一定要深入理解, 我們通過下面的例題幫助大家理解:#include<iostream.h>inline int add(i

9、nt,int);void main()cout<<"2+2="<<add(2,2);cout<<"100+50="<<add(100,50);inline int add(int x,int y)return (x+y);分析: 編譯系統(tǒng)會(huì)把帶 inline 關(guān)鍵字的 add 函數(shù)全過程的二進(jìn)代碼全部照抄到主程序中的兩個(gè) add(.)處,并把往返傳送的數(shù)據(jù)都溶合進(jìn)去直接參加運(yùn)行。這樣就打破了主、子程序的界線, 顯然會(huì)減少系統(tǒng)的函數(shù)調(diào)用和返回的例行開銷。當(dāng)然, 這是以增加程序代碼空間為代價(jià)換來的。 所以對(duì)大的

10、函數(shù)且調(diào)用頻繁的情況不宜使用。要由編譯器按一定準(zhǔn)則判斷是否按指定的 inline 的方式處理。 對(duì)不同公司和不同版本的C+ 編譯器,這個(gè)判決不一樣, 有些(如Turbo C+ 1.0 )還會(huì)對(duì)這類函數(shù)中的循環(huán)語句(如 for、 while) 報(bào)警告錯(cuò)??戳松厦娴姆治?,似乎內(nèi)聯(lián)函數(shù)極象宏(Marco ),其實(shí)這是誤解。如前所說,內(nèi)聯(lián)函數(shù)是把二進(jìn)碼插在編譯結(jié)果( OBJ)的調(diào)用處 ,而宏則是將其源碼插在源程序的調(diào)用處再一起參加編譯。 此兩種碼的插入階段完全不一樣,自然效果也就不一樣了。用下面的例子來說明它們之間有時(shí)發(fā)生的不同效果便可以一目了然了。先定義一宏 “#define sq(x) x*x ,

11、當(dāng)”程序中調(diào)用的是sq(3)時(shí),編譯器解釋成3*3=9 。但下面的兩個(gè)調(diào)用結(jié)果就不一樣了:sq(1+2);/結(jié)果顯示為:1+2*1+2=5將 sq 的定義改為sq(x) (x)*(x); 后才能避免此類錯(cuò)誤的發(fā)生。再如:int i=2;sq(+i);/結(jié)果顯示為:3*4=12這些結(jié)果都是由于宏作為一種源碼替換在編譯時(shí)就被固化在主程序中的原因而引起的,而將sq 定義改為: “ inline int sq(int x,int y)return (x*y); 后,上面的奇怪結(jié)”果就不會(huì)出現(xiàn)了。由此可見,內(nèi)聯(lián)函數(shù)仍是函數(shù)的一種,而不能看成宏。五、C+ 中函數(shù)的缺省參數(shù)C+ 中可以給函數(shù)定義缺省參數(shù)值。

12、從某個(gè)實(shí)參開始的全部實(shí)參數(shù)都缺?。ú毁x值)時(shí),在形參表中等號(hào)后的" 缺省值 " 將起實(shí)參作用。例:#include<iostream 、 h>int sub(int x=1,int y=1)returnx-y;void main()cout<<sb()<<sub(5)<<sub(5,8);結(jié)果顯示分別為:0(1-1)、4(5-1) 和 -3(5-8) 。注意 :在使用缺省參數(shù)時(shí)要注意參數(shù)聲明的順序,即只能把帶有缺省值的參數(shù)依次從右向左排放,如下的聲明格式就是錯(cuò)誤的:void sub(int,int=0,int);而應(yīng)改成:vo

13、id sub(int,int,int=0);六、函數(shù)的重載在 C+ 中,將含有不同的參數(shù)個(gè)數(shù)和參數(shù)類型的一系列同名函數(shù)稱為重載函數(shù)。此種函數(shù)族的出現(xiàn)就形成了用同一函數(shù)名重復(fù)、派生多種不同用途的函數(shù)的效應(yīng),我們又稱這種效應(yīng)為重載。重載函數(shù)具有極高的實(shí)用價(jià)值。比如要用同一個(gè)函數(shù)名dsp 來顯示不同型對(duì)象,就可以定義一系列重載函數(shù)來實(shí)現(xiàn)。例:#include<iostrean.h>void dsp(int i)cout<<"Value is "<<i;char dsp(char c)cout<<"Character is&

14、quot;<<c;return c;void dsp(.).;調(diào)用時(shí)只要給出同一函數(shù)名 dsp 并賦予實(shí)參即可, C+ 系統(tǒng)自動(dòng)判斷出應(yīng)調(diào)重載中的哪個(gè)函數(shù)。注意:重載的函數(shù)必須在參數(shù)的數(shù)量上或類型上與其他函數(shù)名有所區(qū)別。第六章指針、引用和動(dòng)態(tài)空間管理一、正確理解指針、地址和指針變量三個(gè)概念 ,這是本章的關(guān)鍵:指針是存儲(chǔ)特定類型數(shù)據(jù)的地址,而保存內(nèi)存地址的變量稱為指針變量。二、常值指針有兩種含義,書寫格式一定記請(qǐng):指針指向的數(shù)據(jù)為常值時(shí)const在*前;指針本身為常值時(shí)const 在 * 后;如:const char *s="hello"表示s 指向的數(shù)據(jù)是不可改

15、變的,而s="hello" 表示 s 是不可改變的,而s 指向的數(shù)據(jù)可以改變s 本身可以改變char * const三、指針表達(dá)式的綜合運(yùn)算記住以下兩句話:一是 +,-,*,& 級(jí);二是 =,+=,-=,*=. 是具有相同的,幾乎最低的優(yōu)先級(jí);(教材中 P152 的例子一定要理解清楚,不要死記)是具有相同的,幾乎最高的優(yōu)先四、字符指針與字符串:第四章講了,char s='s','t','r','i','n','g'可簡(jiǎn)寫為char s="string"

16、, 而 s 又是一指針,于是char *p=s, 這樣指針s,p 指向同一字符串,于是可見寫為char *p="string" 這是定義字符串的又一方法,而且常使用這種方法。要使用一批字符串可使用如下方法:char *weekday="sun","mon","tue","wed","thu","fri","sat"五、函數(shù)調(diào)用中參數(shù)的傳遞(總結(jié))注:要求學(xué)員一定搞清楚1、傳值方式(簡(jiǎn)單變量方式)這種方式實(shí)參是一簡(jiǎn)單變量,對(duì)應(yīng)的形式參數(shù)只

17、是實(shí)參的一個(gè)副本,因此對(duì)形參的改變不會(huì)影響到實(shí)參,如:void swap(double n1,doublen2)double t=n1;n1=n2;n2=t;void main()double a=10.1,=20.1;swap(a,b);cout<<a<<endl<<b;輸出結(jié)果為:10.120.12、指針參數(shù)方式這種方式傳遞的是實(shí)參的地址給形參,因此對(duì)形參的任何改變都會(huì)影響實(shí)參,如:void swap(double *n1,double*n2)double t=*n1;*n1=*n2;*n2=t;void main()double a=10.1,=20.

18、1;swap(&a,&b);cout<<a<<endl<<b;輸出結(jié)果為:20.110.13、數(shù)組參數(shù)方式數(shù)組名本身就是指針,因此它跟指針參數(shù)方式類似,對(duì)形參的任何改變都會(huì)影響實(shí)參,如:void aa(int x )x0*=2;x1*=2;x2*=2;void main()int y3=2,4,6;aa(y);/ 注意書寫格式cout<<y0<<' '<<y1<<' '<<y2;輸出結(jié)果為:48124、引用參數(shù)方式引用是一個(gè)變量的別名,因此對(duì)這別名的任何改變都會(huì)影響到對(duì)應(yīng)的變量,如:void swap(double &n1,double &n2)double t=n1;n1=n2;n2=t;void main()double a=10.1,=20.1;swap(a,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論