c語言電子版教程第6章數(shù)組_第1頁
c語言電子版教程第6章數(shù)組_第2頁
c語言電子版教程第6章數(shù)組_第3頁
c語言電子版教程第6章數(shù)組_第4頁
c語言電子版教程第6章數(shù)組_第5頁
已閱讀5頁,還剩37頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第6章內(nèi)容提要數(shù)組類型;向函數(shù)傳遞一維數(shù)組和二維數(shù)組;常用算法:排序、查找、求最大最小值等;用字符數(shù)組存取字符串;使用字符串處理函數(shù)處理字符串2007-05-262數(shù)組的用處保存大量同類型的相關(guān)數(shù)據(jù)如矩陣運(yùn)算,表格數(shù)據(jù)等2007-05-263數(shù)組(a10;10定義一個(gè)有個(gè)元素的數(shù)組,每個(gè)元素的類型使用a0使a用、1a、0a、2a、1、aa、2、9、a這樣9的這形樣式訪問每個(gè)元素。它們與普通變量沒有任何區(qū)別系統(tǒng)會在內(nèi)存分配連續(xù)1的0數(shù)組下標(biāo)可以是整型表達(dá)式個(gè)空給間此給數(shù)此組數(shù)組直接對a直的a,就就是此此數(shù)數(shù)組組的的首首地地址址a9a8a7數(shù)組首地址a1aa02007-05-264C語言大學(xué)實(shí)用課

2、件數(shù)組的定義與初始化數(shù)組定義后的初值仍然是隨機(jī)數(shù),一般需要來初始化初始化55=12,34,56,78,9;0;a=11,22,33,44,55;數(shù)組大小最好用宏來定義,以適應(yīng)未來可能的變化#define#SSdIIeZZfEEin11e0aSIZE;aZE數(shù)組大小定義好后,將不變2007-05-265數(shù)組的使用數(shù)組的下標(biāo)都是從0對數(shù)組每個(gè)元素的使用與普通變量無異可以用任意表達(dá)式作為下標(biāo),動態(tài)決定哪個(gè)元素forf(oir=0; iSIZE;i+)ai=2*i;下標(biāo)越界大是忌大!忌 使用大于最大下標(biāo)的下標(biāo),將 的數(shù)據(jù)是未知的,可能帶來嚴(yán)重sizeof可以用來獲得數(shù)組大小數(shù)組以外的空間。那里2007

3、-05-266數(shù)組的特點(diǎn)快速地隨機(jī)一旦定義,不能改變大小2007-05-267一維數(shù)組的輸入和輸出只能逐個(gè)對數(shù)組元素進(jìn)行操作(字符數(shù)組例外)a10,i;輸入方法:輸出方法:i個(gè)數(shù)組元素:輸個(gè)出數(shù)第組i個(gè)元數(shù)素組:元素:輸出第f %dscanf(%d,&ai);rai輸出整個(gè)數(shù)組元素:輸入整個(gè)數(shù)組元素:for(i=0;i10;i+)scanf(%d,&ai);for(i=0;i10;i+)f(%d,ai);8pr2007-05-26例兔子生崽問題Fibonacci數(shù)列Fibon數(shù)ac列ci1,2,3,5,8,f1 1(n 1)f2 1n 2()(n3)n 2n2007-05-269例includ

4、e#main YEAR_MONTH12ai(n)YEAR_MONTH+1 = 0,1,2;month;ontforf(omronth=3;month=YEAR_MONTH; month+)fmonth =fmonth-1 +fmonth-2;forf(ommronth=1;month=YEAR_MONTH; month+)prf(%dt, fmonth);prf(prfum = %dn, fYEAR_MONTH);2007-05-2610例打印出最高分及其學(xué)生序號從鍵盤輸入學(xué)生人數(shù)n;從鍵盤輸入所有學(xué)生的學(xué)號和成績分別存入數(shù)nu組mscon和rue mscore假設(shè)其中的一個(gè)學(xué)生成績?yōu)樽?,同

5、時(shí)其學(xué)號,即令maxScore=score0maxNum=num0;對所有學(xué)生成績進(jìn)行比較,即for(i=0;imaxScore,= numi;并其學(xué)號maxNum打ma印x最Sc高or分e及其學(xué)號mmaaxxSNcuomr及e 其學(xué)號m;axNum2007-05-2611include# define#in defAiRnRe_SIZE40floatflosactoreARR_SIZE, maxScore; n, i;longlongmaxNum, numARR_SIZE;prfp(rfa(sePleenatseer etnotarl tnoutmablern:um)b;er:);scanf

6、s(ca%ndf,(%&dn),; &n);(ase enter the number and score: forfo(ri=0; in; i+)scanfs(ca%nlfd(%f%l,d%&fnu,m&inu,m&isc,or&escior)e;i);maxScore = score0; maxNum = num0;fo(ri=1; i maxScore)= scorei;maxNum =numi;(Score= %.0f, maxNum= %ldn, maxScore,maxNum);2007-05-2612float FindMax(float arr,n)floatmafxl;oat

7、 max;i;max = arr0;(i=1; i max)include#in ARR SIZE#40max=arri;floatFindMax(float arr,n);maai(n)floatflosactoreARR_SIZE, maxScore; n, i;prfp(rfa(sePleenatseer etnotarl tnoutmablern:um)b;er:);scanfs(ca%ndf,(%&dn),; &n);prfp(rfa(sePleenatseer etnhteersctnohr)e;:score:n);(i=0; in; i+)scanfmaxScore(sca%nf

8、f(,%&fsc,or&escior)e;i);=FindMax(score,n);prfp(rfS(comraexS=co%r.e0f=n%.,0fmaxScore);2007-05-2613數(shù)組名作函數(shù)參數(shù)用數(shù)組名作參數(shù),就是將數(shù)組的首地址傳遞給函數(shù)實(shí)參數(shù)組與形參數(shù)組占用同一段內(nèi)存在函數(shù)中可對形參數(shù)組元素修改的結(jié)果,會影響結(jié)果主調(diào)函數(shù)中的實(shí)參數(shù)組2007-05-2614簡單變量作函數(shù)參數(shù)2007-05-2615實(shí)參實(shí)參實(shí)參主調(diào)函數(shù)未變化被調(diào)函數(shù)修改形參形參形參調(diào)用時(shí)執(zhí)行被調(diào)函數(shù)從被調(diào)函數(shù)返回變量值變量值變量值變量值變量值變量值數(shù)組作函數(shù)參數(shù)實(shí)參實(shí)參實(shí)參地址值地址值地址值已改變主調(diào)函數(shù)數(shù)組被

9、調(diào)函數(shù)地址值地址值地址值修改形參調(diào)用時(shí)形參執(zhí)行被調(diào)函數(shù)形參從被調(diào)函數(shù)返回2007-05-2616現(xiàn)場演示排序算法交換法排序選擇法排序2007-05-2617交換法排序交換法排序for(i=0;in-1;i+)for(j=i+1;jscorei)交換成績scorej和scorei,交換學(xué)號numj和numi;2007-05-2618交換法排序19課件 制作人選擇法排序選擇法排序forf(oir=0;in-1;i+)k=i;forj=i+f(1orj;=jjiscorek)此輪比較中最高分的元素下標(biāo)的最大數(shù)不在位置i,則k=j;若k中交換sc成o績r(jià)e交j換成績 s和csocroereji,和nu

10、mi;2007-05-2620選擇法排序2007-05-2621現(xiàn)場演示查找算法順序查找 特例:求最大值,求最小值折半查找2007-05-2622序查找arclongSaear,clho(nan,gn,x)longx);i;forfo(ii=0; iamid, low=mid+19901399017low=midhighx=amid,找到2007-05-2624折半查找數(shù)組下標(biāo)0123499015599017699019第一次循環(huán):9901199013查找值x=99016low第二次循環(huán):99011mid 99015high 99019xamid, low=mid+19901399017low

11、=mid highxamid, high=mid-1第三次循環(huán):9901199013990159901799019highlow不滿足low=high, 循環(huán)結(jié)束,未找到2007-05-2625inSearlcohn(ga,lonan,gn,x)longx)ow, high, mid;low = 0;high = n - 1;(low amid)low = mid + 1;ifelseife(lxse amid)high =mid -1;elseelsereturn(mid);return(mid);return 1);2007-05-26r(etu-r1n);(-26字符與字符數(shù)組一串以0

12、一串0以結(jié)尾結(jié)的尾字的符字在C符C語在言中被看作字符串引號括起的一串字符是字符串常量,語言自動為其添加 0終添結(jié)加0符終結(jié)符語言并沒有為字符串提供任何專門的表示法,完全使用字符數(shù)組和字符指針來處理每個(gè)元素都是字符類型的數(shù)組charcsshttaring80;2007-05-2627字符數(shù)組的初始化用字符型數(shù)據(jù)對數(shù)組進(jìn)行初始化 charstr6=C,h,i,n,a,0;用字符串常量直接對數(shù)組初始化charcharstr6str6=China;China;2007-05-2628字符數(shù)組的輸入輸出chars10逐個(gè)輸入輸出輸入輸出scanf(%s,s);forf(oir=0;si!=0;i+)pr

13、f(%s,s);phar(si);pgets(%s,s);hanr();n);uts%ss2007-05-2629scanf(%d,/*&i);,就用i,能達(dá)到效果嗎?*/cshtar10;charstr10; str);scanf(%s, 不能讀入帶空格的字g符et串s(,)可以gets可()以 這種用法很不安全。當(dāng)用戶的輸入多于10個(gè)(含10個(gè)),s數(shù)t組r數(shù)將組越將界越界被公認(rèn)為最易遭到str的函數(shù)之一2007-05-2630字符串輸入函數(shù)也沒有提供限制輸入字符串長度的方法,容易引起緩沖區(qū)溢出,給以可對輸入字符串長度有限制的函數(shù)調(diào)用 fgets(buf,sizeofe(buf),stdi

14、n);2007-05-2631字符串處理函數(shù)在中定義了若干專門的字符串處理函數(shù)stringsctorpcypyco:psytringtrcpy:ch*asrtrcpy(charcha*rd*estr,chya(rco*ndsetst,c*hsarrc);const*src);ssttrirnlgenle:ngthsize_tcsshtar en(const cha*rs);trlen:con*s);返回字符串的實(shí)際長度,不包括0ssttrirncgatco:mbinationchar *strcat(char *dest, const char *src);ssttrirncgmpco:mpa

15、risontrcat:trcmp:cmprcosntsrtcmpc(h*asrc1h,ar concso*tnss1t, ch*asr2);cons*ts2);當(dāng)出現(xiàn)第一對不相等的字符時(shí),就由這兩個(gè)字符決定所在字符串的大小字符串不能直接整str1=str2錯誤/*錯誤*/322007-05-260作為字符串結(jié)束符的天生缺陷假若交給這些字符串處理函數(shù)的字符串沒有0會如何?如何? 00很關(guān)鍵,如果沒有,那么這些處理函數(shù)會一直進(jìn)行處理直到遇到一0個(gè)0為止為。止此。時(shí)此可時(shí)能可已能經(jīng)已把經(jīng)內(nèi)把存內(nèi)弄存得弄得亂七八糟亂七八糟C定義了一些“n族”字符處理函數(shù),包括strncpystrncasttrnsct

16、pryn、cms、ptrncats等t,rn通cm過p增加一個(gè)參數(shù)來限制處理的最大長度c*hsatrrcpy(charch*adre*st,rchhpaayrr(unsignedco*ndsetst*c,shracr,count);cons*tsrc,2007-05-2633例.從鍵盤任意輸入5個(gè)學(xué)生的,編程找出并輸出按字典順序排在最前面的學(xué)生等價(jià)最小字符串2007-05-2634include# includ#e#in in ARRA_SIZE 80maai(n)n,;n, num;charchssatrrARRA_SIZE,minARRA_SIZE;prf(Please enter fiv

17、e namnes):;n);gets(str);strcpy(min, str); f(onr=1; n5; n+)gets(str);if i(fstrcmp(str, min) 0)strcpy(min, str);forprf(The minis:);20p0u7-t05s-2(6min);35二維數(shù)組的定義:常量表達(dá)式常量表達(dá)式b23;b為23(2行3列)的數(shù)組,注意下標(biāo)范圍b-0b00b01b02b0bb1b-1b10b11b122007-05-2636二維數(shù)組的結(jié)構(gòu)存放順序:按行存放,先順序存放第一行的元素,再存放第二行的元素b02b23;b01b00b0b12b1b11b102007-05-2637二維數(shù)組的輸入和輸出數(shù)組的輸入和輸出只能逐個(gè)對數(shù)組元素進(jìn)行操作(字符數(shù)組例外)b23,i,j;輸出方法:輸出第i行第j列元素:輸入方法:輸入第i行第j列元素:scanf(“%d”,&aij);輸入整個(gè)數(shù)組元素:for (i=0;i2;i+) for(j=0;j3;j+)prf(“%d”,aij);輸出整個(gè)數(shù)組元素:for (i=0;i2;i+) for(j=0;j3;j+)scanf(“%d”&ai);rf(“%d”ai);2007-05-2638向函數(shù)傳遞二維數(shù)組實(shí)際傳送的是指向數(shù)組第一個(gè)元素的地址在二維數(shù)組形參時(shí),不能省

溫馨提示

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

評論

0/150

提交評論