C語言數(shù)組詳解ppt課件_第1頁
C語言數(shù)組詳解ppt課件_第2頁
C語言數(shù)組詳解ppt課件_第3頁
C語言數(shù)組詳解ppt課件_第4頁
C語言數(shù)組詳解ppt課件_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

.,數(shù)組,.,什么是數(shù)組?,就是一組具有固定數(shù)目的、有序的、類型相同的數(shù)據(jù)的集合。根據(jù)數(shù)組下標(biāo)的多少,數(shù)組可以分為一維數(shù)組和多維數(shù)組。,例如:一個班級有30個學(xué)生,可以用g1,g2,g30代表學(xué)生的成績,其中g(shù)是數(shù)組名,下標(biāo)代表學(xué)生的序號。由于在C語言中無法表示下標(biāo),所以就引入了表示下標(biāo)。g1:第1個學(xué)生的成績gi:第i個學(xué)生的成績等等,.,為標(biāo)識數(shù)組中的每個元素,C語言對其進(jìn)行編號。這個編號稱之為數(shù)組元素下標(biāo)。(C語言規(guī)定下標(biāo)從0開始)。,指定該數(shù)組的數(shù)據(jù)個數(shù),用于訪問的、具有相同的數(shù)據(jù)類型。在程序設(shè)計中相當(dāng)于變量名的用法。,一個數(shù)組就是一組連續(xù)的內(nèi)存空間,用來保存數(shù)據(jù),數(shù)組中的每一項稱為一個元素。,.,(一)一維數(shù)組(1)定義及使用,類型說明符數(shù)組名常量表達(dá)式inta10,任一種基本數(shù)據(jù)類型或構(gòu)造數(shù)據(jù)類型。,用戶自定義的數(shù)組名字,其定名規(guī)則與變量名定名規(guī)則一樣,都需遵循標(biāo)識符定名規(guī)則,表示元素的個數(shù),即數(shù)組長度。,下標(biāo)運(yùn)算符單目運(yùn)算符優(yōu)先級(1)左結(jié)合不能用(),.,注意:1.數(shù)組名不能與其它變量名相同,voidmain()inta;floata10;,(一)一維數(shù)組(1)定義及使用,.,2.不能在方括號中用變量來表示元素的個數(shù),但可以是符號常數(shù)或常量表達(dá)式。,intn;scanf(%d,#defineFD5voidmain()inta3+2,b7+FD;,(一)一維數(shù)組(1)定義及使用,.,3.方括號中常量表達(dá)式表示數(shù)組元素的個數(shù)。如inta5:數(shù)組a有5個元素,其下標(biāo)從0開始,分別為a0,a1,a2,a3,a4。,4.允許在同一個類型說明中說明多個數(shù)組和多個變量。例如:inta,b,c,d,k110,k220;,如果出現(xiàn)數(shù)組越界,編譯系統(tǒng)沒有提示的。,(一)一維數(shù)組(1)定義及使用,.,數(shù)組必須先定義,然后使用。數(shù)組元素的表示形式為:數(shù)組名下標(biāo)C語言規(guī)定只能逐個引用數(shù)組元素而不能一次引用整個數(shù)組。,可以是整型常量或整型表達(dá)式,(一)一維數(shù)組(2)引用,.,全部初始化部分初始化使用輸入函數(shù)scanf初始化使用表達(dá)式賦值,inta10=0,1,2,3,4,5,6,7,8,9;,a0=0;a1=1;a2=2;a3=3;a4=4;a5=5;a6=6;a7=7;a8=8;a9=9;,inta10=0,1,2,3;,a0=0;a1=1;a2=2;a3=3;a4=0;a5=0;a6=0;a7=0;a8=0;a9=0;,inta10;,for(inti=0;i10;i+)scanf(%d,inta10=0,1,2,3;,a4=a3+2;,對全部數(shù)組元素賦初值時,數(shù)組長度可以省略,(一)一維數(shù)組(3)初始化,一維數(shù)組元素的存儲方式,.,inta5=1,2,3,4,5;,一維數(shù)組元素的存儲方式,#includevoidmain()inta5=0,1,2,3,4;for(inti=0;i5;i+)printf(a%d=%d,其地址是%dn,i,ai,數(shù)組名表示數(shù)組的起始地址,是一個地址常量,程序舉例1:用選擇排序法進(jìn)行排序。,選擇排序法是編程中經(jīng)常用的一種排序算法。具體如下:先將5個數(shù)中最小的數(shù)與a0對換,再將a1到a4中最小的數(shù)與a1對換,這樣每比較一輪,找出一個未經(jīng)排序的數(shù)中最小的一個。共比較4輪。,inta5=3,6,1,9,4;,1.4一維數(shù)組程序舉例,.,a0a1a2a3a436194未排序的情況16394將5個數(shù)中最小的數(shù)1與a0對換13694將余下的4個數(shù)中最小的數(shù)3與a1對換13496將余下的3個數(shù)中最小的數(shù)4與a2對換13469將余下的2個數(shù)中最小的數(shù)6與a3對換,main()inti,j,k,t;inta5=3,6,1,9,4;for(i=0;isizeof(a)/sizeof(int)1;i+)k=i;for(j=i+1;jsizeof(a);j+)if(ajak)k=j;if(k!=i)t=ai;ai=ak;ak=t;,.,容易出錯的地方,數(shù)組的起始下標(biāo)、最后一個元素的下標(biāo)定義數(shù)組時不指定長度(動態(tài)數(shù)組)對數(shù)值型數(shù)組進(jìn)行整體操作用scanf語句時,數(shù)組元素前應(yīng)加,.,小結(jié),一維數(shù)組的定義、初始化、引用、輸入、輸出概念、操作必須掌握數(shù)組中的所有元素,數(shù)據(jù)類型都一致數(shù)組名字代表數(shù)組的首地址,是一個常量數(shù)組元素具有和相同單個變量一樣的屬性,凡允許使用單個變量的地方均可以使用數(shù)組元素,.,(二)二維數(shù)組定義及使用,這兒只討論二維數(shù)組,多維數(shù)組可由二維數(shù)組推導(dǎo)得出,二維數(shù)組定義的一般形式為:類型說明符數(shù)組名常量表達(dá)式常量表達(dá)式,第一常量表達(dá)式為行數(shù),第二個為列數(shù),inta34;,floata3,4,b5,10;/*錯誤*/,二維數(shù)組中的元素在內(nèi)存中的排列順序是:按行存放,即先順序存放第一行的元素,再存放第二行的元素,二維數(shù)組在內(nèi)存中的存放,下圖表示對a34數(shù)組存放的順序,.,inta23=1,2,3,4,5,6;,(二)二維數(shù)組存儲方式,#includevoidmain()inta23=1,2,3,4,5,6,i,j;for(i=0;i2;i+)for(j=0;j3;j+)printf(第a%d%d元素=%d,其地址為:%dn,i,j,aij,.,(二)二維數(shù)組引用,二維數(shù)組的表示形式:數(shù)組名下標(biāo)下標(biāo),注意:下標(biāo)可以是整型表達(dá)式,如a2-12*2-1數(shù)組元素可以出現(xiàn)在表達(dá)式中,也可以被賦值b12=a23/2;在使用數(shù)組元素時,應(yīng)該注意下標(biāo)值應(yīng)在已定義的數(shù)組大小范圍內(nèi)inta34;a34=5;嚴(yán)格區(qū)分在定義數(shù)組時用的a34和引用元素時的a34,.,全部初始化部分初始化使用輸入函數(shù)scanf初始化,inta23=0,1,2,3,4,5;inta23=0,1,2,3,4,5;,a00=0;a01=1;a02=2;a10=3;a11=4;a12=5;,inta23=0,1,2;inta23=0,1;,a00=0;a01=1;a02=2;a10=0;a11=0;a12=0;,inta23;,for(inti=0;i2;i+)for(intj=0;j3;j+)scanf(%d,對全部數(shù)組元素賦初值時,第一維的長度可以省略,(二)二維數(shù)組初始化,.,(二)二維數(shù)組程序舉例,例3:一個學(xué)習(xí)小組有5個人,每個人有三門課的考試成績。求全組分科的平均成績和各科總平均成績。,.,(二)二維數(shù)組程序舉例,例3:一個學(xué)習(xí)小組有5個人,每個人有三門課的考試成績。求全組分科的平均成績和各科總平均成績。,.,#include#defineN3#defineM5voidmain()floatscoreNM,avg1=0,avgN,sumN=0;inti,j;for(i=0;iN;i+)for(j=0;jM;j+)printf(第%d門課,第%d個學(xué)生的成績:,i,j);scanf(%f,.,小結(jié),二維數(shù)組在內(nèi)存中是按行存放數(shù)組元素的下標(biāo)每一維都是從0開始的數(shù)值型數(shù)組不能夠整體引用可以把二維數(shù)組看成是一個特殊的一維數(shù)組,即其元素是一個一維數(shù)組二維數(shù)組初始化有兩種方法:按行賦值或者一行賦值,.,(三)字符數(shù)組定義,字符數(shù)組:用來存放字符數(shù)據(jù)的數(shù)組就是字符數(shù)組。定義方式:char數(shù)組名長度,一維數(shù)組:chara10;二維數(shù)組:chara45;,.,(三)字符數(shù)組初始化,對字符數(shù)組初始化,最容易理解的方式是逐個字符賦給數(shù)組中各元素。如:Charc10=I,a,m,,h,a,p,p,y;,如果在定義字符數(shù)組時不進(jìn)行初始化,則數(shù)組中各元素的值是不可預(yù)料的。,如果花括弧中提供的初值個數(shù)(即字符個數(shù))大于數(shù)組長度,則按語法錯誤處理。,注意:,.,.,charc=I,a,m,h,a,p,p,y;數(shù)組c的長度自動定為10。,.,#includevoidmain()charc10=I,a,m,a,b,o,y;inti;for(i=0;i10;i+)printf(“%c”,ci);printf(“n”);,(三)字符數(shù)組引用,可以引用字符數(shù)組中的一個元素,得到一個字符,.,在實際編程中,最常用的是字符串。在中是用字符數(shù)組存放字符串。字符串以0作為串結(jié)束符,因此當(dāng)把字符串存入數(shù)組時,也把0存入數(shù)組,并以此作為該字符串是否結(jié)束的標(biāo)志。程序中通過循環(huán)掃描字符數(shù)組元素,讀到0時候便認(rèn)為字符串結(jié)束。,(三)字符數(shù)組字符串和字符串結(jié)束標(biāo)志,.,用字符串方式賦值比用字符逐個賦值要多占一個字節(jié),用于存放字符串結(jié)束標(biāo)志0。例如:數(shù)組charc=“cprogram”在內(nèi)存中的實際存放情況為:,(三)字符數(shù)組字符串和字符串結(jié)束標(biāo)志,0是由C編譯系統(tǒng)自動加上的。由于采用了0標(biāo)志,所以在用字符串賦初值時一般無須指定數(shù)組的長度,而由系統(tǒng)自行處理。,.,在內(nèi)存中數(shù)組c的狀態(tài),.,(三)字符數(shù)組字符數(shù)組的輸入輸出,字符數(shù)組的輸入輸出可以有兩種方式:逐個字符輸入輸出。用”%c”輸入或輸出一個字符將整個字符串一次輸出。用“%s”格式符,,charc=“China”;printf(“%s”,c);,China,.,(三)字符數(shù)組字符數(shù)組的輸入輸出,注意:輸出字符不包括結(jié)束符0;用“%s”格式符輸出字符串時,printf函數(shù)中的輸出項時字符數(shù)組名,而不是數(shù)組元素名。printf(“%s”,c);如果數(shù)組長度大于字符串實際長度,也只輸出遇0結(jié)束如果一個字符數(shù)組中包含一個以上0,則遇到第一個0時結(jié)束。,.,#includevoidmain()charst15;printf(inputstring:n);scanf(%s,st);printf(%sn,st);,(三)字符數(shù)組字符數(shù)組的輸入輸出,本例中由于定義數(shù)組長度為15,因此輸入的字符串長度必須小于15,以留出一個字節(jié)用于存放字符串結(jié)束標(biāo)志0。對于字符數(shù)組,如果不作初始化賦值,則須說明數(shù)組長度。應(yīng)該特別注意的是,當(dāng)用scanf函數(shù)輸入字符串時,字符串中不能含有空格,否則將以空格作為串的結(jié)束符。例如運(yùn)行上例,當(dāng)輸入的字符串中含有空格時,運(yùn)行情況為:,.,(三)字符數(shù)組字符數(shù)組的輸入輸出,#includevoidmain()charst16,st26,st36,st46;printf(inputstring:n);scanf(%s%s%s%s,st1,st2,st3,st4);printf(%s%s%s%sn,st1,st2,st3,st4);,從輸出結(jié)果可以看出空格以后的字符都未能輸出。為了避免這種情況,可多設(shè)幾個字符數(shù)組分段存放含空格的串。程序可改寫如下:,.,(三)字符數(shù)組字符數(shù)組的輸入輸出,重要一點(diǎn):在前面介紹過scanf的各輸入項必須以地址方式出現(xiàn),如puts(c);,從程序中可以看出puts函數(shù)中可以使用轉(zhuǎn)義字符,因此輸出結(jié)果成為兩行。puts函數(shù)完全可以由printf函數(shù)取代。當(dāng)需要按一定格式輸出時,通常使用printf函數(shù)。,字符串輸出函數(shù)puts,.,(三)字符數(shù)組字符串處理函數(shù),格式:gets(字符數(shù)組名),功能:從標(biāo)準(zhǔn)輸入設(shè)備鍵盤上輸入一個字符串。本函數(shù)得到一個函數(shù)值,即為該字符數(shù)組的首地址。,#includestdio.h“voidmain()charst15;printf(inputstring:n);gets(st);puts(st);,可以看出當(dāng)輸入的字符串中含有空格時,輸出仍為全部字符串。說明gets函數(shù)并不以空格作為字符串輸入結(jié)束的標(biāo)志,而只以回車作為輸入結(jié)束。這是與scanf函數(shù)不同的。,字符串輸入函數(shù)gets,.,3.strcat函數(shù)其一般形式為:strcat(字符數(shù)組1,字符數(shù)組2)strcat的作用是連接兩個字符數(shù)組中的字符串,把字符串2接到字符串1的后面,結(jié)果放在字符數(shù)組1中,函數(shù)調(diào)用后得到一個函數(shù)值字符數(shù)組1的地址。,(三)字符數(shù)組字符串處理函數(shù),.,例如:charstr130=PeoplesRepublicof;charstr2=China;print(%s,strcat(str1,str2);輸出:PeoplesRepublicofChina,.,4.strcpy函數(shù)其一般形式為:strcpy(字符數(shù)組1,字符串2)strcpy是“字符串復(fù)制函數(shù)”。作用是將字符串2復(fù)制到字符數(shù)組1中去。例如:charstr110,str2=China;strcpy(str1,str2);,.,1.字符數(shù)組1必須定義得足夠大,以便容納被復(fù)制的字符串。字符數(shù)組1的長度不應(yīng)小于字符串2的長度。,2.“字符數(shù)組1”必須寫成數(shù)組名形式(如str1),“字符串2”可以是字符數(shù)組名,也可以是一個字符串常量。如strcpy(str1,China);,3.復(fù)制時連同字符串后面的0一起復(fù)制到字符數(shù)組1中。,4.可以用strcpy函數(shù)將字符串2中前面若干個字符復(fù)制到字符數(shù)組1中去。例如:strcpy(str1,str2,2);作用是將str2中前面2個字符復(fù)制到str1中去,然后再加一個0。,.,5.不能用賦值語句將一個字符串常量或字符數(shù)組直接給一個字符數(shù)組。如下面兩行都是不合法的:charstr110,str210;str1=China;str1=str2;而只能用strcpy函數(shù)將一個字符串復(fù)制到另一個字符數(shù)組中去。用賦值語句只能將一個字符賦給一個字符型變量或字符數(shù)組元素。如下面是合法的:chara5,c1,c2;c1=A;c2=B;a0=C;a1=h;a2=i;a3=n;a4=a;,.,(三)字符數(shù)組字符串處理函數(shù),測字符串長度函數(shù)strlen,格式:strlen(字符數(shù)組名),功能:測字符串的實際長度(不含字符串結(jié)束標(biāo)志0)并作為函數(shù)返回值。,#includestring.h“#include“stdio.h”voidmain()intk;charst=Clanguage;k=strlen(st);printf(Thelenthofthestringis%dn,k);,.,Strlen()與sizeof()的區(qū)別,.,容易出錯的地方,將字符數(shù)組定義為一個字符混淆c和”c”的意義字符數(shù)組整體輸入時用取地址符號是不對的在實際應(yīng)用中,字符數(shù)組,在使用前先格式化。調(diào)用函數(shù)memset.chara100;memset(a,0,sizeof(a);,.,小結(jié),字符數(shù)組可以通過數(shù)組名進(jìn)行整體引用C語言沒有字符串類型數(shù)據(jù),字符串的操作通過一維字符數(shù)組實現(xiàn)C語言規(guī)定以0作為字符串結(jié)束標(biāo)志字符數(shù)組的輸入輸出分別可使用g

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論