C語言程序設(shè)計(jì)第9章_第1頁
C語言程序設(shè)計(jì)第9章_第2頁
C語言程序設(shè)計(jì)第9章_第3頁
C語言程序設(shè)計(jì)第9章_第4頁
C語言程序設(shè)計(jì)第9章_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

C語言程序設(shè)計(jì)第9章數(shù)組數(shù)組是指一組相同類型數(shù)據(jù)的有序集合。每個數(shù)組包含一組具有同一類型的變量,這些變量在內(nèi)存中占有連續(xù)的存儲單元。在程序中這些變量具有相同的名字,但具有不同的下標(biāo)。inta[5];數(shù)組名數(shù)組元素個數(shù)類型名9.1一維數(shù)組的定義和一維數(shù)組元素的引用9.1.1一維數(shù)組的定義類型名數(shù)組名[整型常量表達(dá)式],……;shorta[5];a[0]a[1]a[2]a[3]a[4]低地址高地址2000H2001H2002H2003H2004H2005H2006H2007H2008H2009H1567326989.1.2一維數(shù)組元素的引用數(shù)組名[下標(biāo)表達(dá)式]如:doublex[8];則x[0]、x[j]、x[i+k]均合法。注意:i+k是下標(biāo)表達(dá)式而不是兩個下標(biāo)。說明:1、“下標(biāo)表達(dá)式”可以是任何非負(fù)整型數(shù)據(jù),取值范圍是0~(元素個數(shù)-1)。特別強(qiáng)調(diào):在運(yùn)行C語言程序過程中,系統(tǒng)并不自動檢驗(yàn)數(shù)組元素的下標(biāo)是否越界。因此在編寫程序時,保證數(shù)組下標(biāo)不越界是十分重要的。2、1個數(shù)組元素,實(shí)質(zhì)上就是1個變量,它具有和相同類型單個變量一樣的屬性,可以對它進(jìn)行賦值和參與各種運(yùn)算。3、一個數(shù)組不能整體引用,數(shù)組名是一個地址常量,它代表整個數(shù)組的首地址。例如:doublex[8],*p,q;p=x;q=x;不能將數(shù)組名賦給一個普通變量9.1.3一維數(shù)組的初始化1、在定義語句中給所定義數(shù)組賦初值數(shù)據(jù)類型數(shù)組名[常量表達(dá)式]={初值表}說明:1、初值放在賦值號后的花括號中,數(shù)值類型與說明類型一致,初值間用逗號隔開,系統(tǒng)將自動按順序從第一個元素開始依次給數(shù)組中元素賦值。如:inta[8]={0,1,2,3,4,5,6,7};2、“初值表”中的初值個數(shù),可以少于元素個數(shù),即允許只給前面的部分元素賦初值,其后的元素自動賦0。字符補(bǔ)‘\0’。如:inta[10]={0};/*10個元素都賦初值0*/

charc[5]={‘@’};/*后4個元素均賦‘\0’*/3、當(dāng)初值多于元素個數(shù),編譯時會出錯。4、C語言規(guī)定可以通過賦初值來定義數(shù)組的大小,這時數(shù)組說明符的一對方括號中可以不指定數(shù)組的大小。如:inta[]={0,1,2,3,4};以上語句隱含地定義了a數(shù)組含有5個元素。5、數(shù)組不初始化,其元素值為隨機(jī)數(shù)。#include<stdio.h>main(){intary[10];inti,high;for(i=0;i<10;i++){scanf("%d",&ary[i]);}high=ary[0];for(i=1;i<10;i++){if(ary[i]>high) high=ary[i];}printf(“%d”,high);}定義賦值比較9.2一維數(shù)組和指針9.2.1一維數(shù)組和數(shù)組元素的地址數(shù)組是一組相同類型數(shù)據(jù)的集合,數(shù)組中各個元素在內(nèi)存占據(jù)連續(xù)的存儲單元,每個內(nèi)存單元都有相應(yīng)的地址。數(shù)組所占內(nèi)存單元的首地址稱為數(shù)組的指針,數(shù)組元素所占內(nèi)存單元的首地址稱為數(shù)組元素的指針。因此,可以用指針變量來指向數(shù)組元素。如shorta[5];a[0]a[1]a[2]a[3]a[4]2000H2001H2002H2003H2004H2005H2006H2007H2008H2009H數(shù)組的指針C語言規(guī)定,數(shù)組名代表數(shù)組的首地址,因此,數(shù)組名實(shí)際上也是指針,但它是一個固定不變的地址常量。如:inta[5];a是數(shù)組名,也是指針,它永遠(yuǎn)指向數(shù)組的首地址,即不能將新地址賦給該指針。但可以通過形如a+k的形式(k是整數(shù))來表達(dá)該數(shù)組其它元素的地址。如:for(k=0;k<5;k++)scanf(“%d”,a+k);若有語句:inta[10];int*p;p=a;則:for(k=0;k<10;k++)scanf(“%d”,a+k);for(k=0;k<10;k++){scanf(“%d”,p);p++;}for(k=0;k<10;k++)scanf(“%d”,p++);for(;p-a<10;p++)scanf(“%d”,p);

數(shù)組和指針的關(guān)系9.2.2通過數(shù)組的首地址引用數(shù)組元素采用間接運(yùn)算符“*”。如:數(shù)組元素a[0]*&a[0]*(a+0)*a數(shù)組元素a[1]*&a[1]*(a+1)for(k=0;k<10;k++)printf(“%4d”,a[k]);for(k=0;k<10;k++)printf(“%4d”,*(a+k));9.2.3通過指針引用一維數(shù)組元素若有語句:inta[10],*p,k;p=a;for(k=0;k<10;k++)printf(“%4d”,a[k]);for(k=0;k<10;k++)printf(“%4d”,*(p+k));for(k=0;k<10;k++){printf(“%4d”,*p);p++;}for(k=0;k<10;k++)printf(“%4d”,*p++);for(;p-a<10;p++)printf(“%4d”,*p);9.2.4用帶下標(biāo)的指針變量引用一維數(shù)組元素若有語句:ints[10],*p,i;p=s;數(shù)組元素s[i]p[i]練習(xí):有如下說明:inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;則數(shù)值為9的表達(dá)式是_____。*p+9*(p+8)*p+=9p+8√

練習(xí):下面程序執(zhí)行后的輸出結(jié)果是____。#include<stdio.h>inta[]={2,4,6,8};main(){inti;int*p=a;for(i=0;i<4;i++)a[i]=*p;printf(“%d\n”,a[2]);}6B)8C)4D)2√

練習(xí):設(shè)有定義語句:intx[6]={2,4,6,8,5,7},*p=x,i;要求依次輸出x數(shù)組6個元素中的值,不能完成此操作的語句是_____。for(i=0;i<6;i++)printf(“%2d”,*(p++));for(i=0;i<6;i++)printf(“%2d”,*(p+i));for(i=0;i<6;i++)printf(“%2d”,*p++);for(i=0;i<6;i++)printf(“%2d”,(*p)++);√

練習(xí):下面程序執(zhí)行后的輸出結(jié)果是____。#include<stdio.h>inta[]={2,4,6,8};main(){inti;int*p=a;for(i=0;i<4;i++)a[i]=*p++;printf(“%d\n”,a[2]);}6B)8C)4D)2√

練習(xí):下面程序執(zhí)行后的輸出結(jié)果是____。main(){inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;printf(“%d\n”,*(p+2));}3B)4C)1D)2√

練習(xí):有如下程序段:inta[10]={1,2,3,4,5,6,7,8,9,10};int*p=&a[3],b;b=p[5];則b的值是_____。5B)6C)9D)8√

練習(xí):下面程序執(zhí)行后的輸出結(jié)果是____。main(){inta[5]={2,4,6,8,10},*p,**k;p=a;k=&p;printf(“%d”,*(p++));printf(“%d\n”,**k);}4B)22C)24D)46√

練習(xí):下面程序執(zhí)行后的輸出結(jié)果是____。main(){inta[]={1,2,3,4,5,6,7,8,9,10,11,12};int*p=a+5,*q=NULL;*q=*(p+5);printf(“%d%d\n”,*p,*q);}運(yùn)行后報(bào)錯6661255√

9.3函數(shù)之間對一維數(shù)組和數(shù)組元素的引用9.3.1數(shù)組元素作實(shí)參數(shù)組元素作實(shí)參時,對應(yīng)的形參必須是類型相同的變量,所以用法與普通變量一致,傳遞實(shí)參后并不能改變數(shù)組元素的值。9.3.2數(shù)組名作實(shí)參數(shù)組名本身就是一個地址值,因此對應(yīng)的形參應(yīng)當(dāng)是一個指針變量,可以通過傳遞改變數(shù)組元素的值。例題見書上例9.2。注意:被調(diào)用函數(shù)定義部分可以有三種寫法:如:arrin(int*a)arrin(inta[])arrin(inta[M])M是一個符號常量9.3.4函數(shù)的指針形參和函數(shù)體中數(shù)組的區(qū)別若有以下程序,程序中定義了fun函數(shù),形參a指向主函數(shù)中的w數(shù)組,函數(shù)體內(nèi)定義了一個b數(shù)組,函數(shù)把b數(shù)組的起始地址作為函數(shù)值返回,企圖使主函數(shù)中的指針p指向函數(shù)體內(nèi)b數(shù)組的開頭。#defineN10int*fun(inta[N],intn){intb[N];

……returnb;}main(){intw[N],*p;

……p=fun(w,N);

……}以上程序涉及幾個概念:1、函數(shù)fun中,形參a可以寫成a[N],a[],*a,它是一個指針變量,在調(diào)用fun函數(shù)時,系統(tǒng)只為形參a開辟一個存儲單元,并把main函數(shù)中w數(shù)組首地址存進(jìn)去,使它指向w數(shù)組地址。2、函數(shù)fun的函數(shù)體定義了一個b數(shù)組,在調(diào)用fun函數(shù)時,系統(tǒng)為它開辟了一串連續(xù)存儲單元,b是一個地址常量。雖然a和b有相同的說明形式,但它們一個是作為形參的指針,一個是函數(shù)體內(nèi)定義的數(shù)組,具有完全不同的含義。3、在fun函數(shù)執(zhí)行完畢,返回主函數(shù)時,系統(tǒng)釋放a,b所占存儲單元,指針變量a和數(shù)組b將不再存在。因此,函數(shù)fun不應(yīng)把b的值作為函數(shù)值返回,這樣做,主函數(shù)中的指針變量p將不指向任何對象而成為“無向指針”。練習(xí):若有以下調(diào)用語句,則不正確的fun函數(shù)的首部是____。main(){inta[50],n;fun(n,&a[9]);..}voidfun(intm,intx[])voidfun(ints,inth[41])voidfun(intp,int*s)voidfun(intn,inta)√

練習(xí):下面程序執(zhí)行后的輸出結(jié)果是____。voidfunc(int*a,intb[]){b[0]=*a+6;}main(){inta,b[5];a=0;b[0]=3;func(&a,b);printf(“%d\n”,b[0]);}6B)7C)8D)9√

練習(xí):下面程序執(zhí)行后的輸出結(jié)果是____。f(intb[],intn){inti,r=1;for(i=0;i<=n;i++)r=r*b[i];returnr;}main(){intx,a[]={2,3,4,5,6,7,8,9};x=f(a,3);printf(“%d\n”,x);}720B)120C)24D)6√

9.5二維數(shù)組的定義和二維數(shù)組元素的引用9.5.1二維數(shù)組的定義類型名數(shù)組名[常量表達(dá)式1][常量表達(dá)式2],……;shorta[2][3];a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]低地址高地址2000H2001H2002H2003H2004H2005H2006H2007H2008H2009H200aH200bH9.5.2二維數(shù)組元素的引用數(shù)組名[下標(biāo)表達(dá)式1][下標(biāo)表達(dá)式2]規(guī)則與一維數(shù)組元素的一樣。1、行列下標(biāo)下限為0,上限為n-12、一定要把兩個下標(biāo)分別放在兩個方括號內(nèi)3、第m行n列:a[m-1][n-1]9.5.3二維數(shù)組的初始化1、按行對二維數(shù)組初始化。如:inta[2][3]={{1,1,1},{4,4,4}};若大括號或其中的數(shù)據(jù)不夠,后面的元素自動賦0。如:inta[3][4]={{1,2,3,4},{5,6,7,8}};如:inta[3][4]={{1,2},{3,4,5},{6,7,8,9}}2、按數(shù)組的存儲順序賦初值。如:intb[2][2]={1,2,3,4};表示將1初始化給b[0][0],2初始化給b[0][1],3初始化給b[1][0],4初始化給b[1][1]。若數(shù)據(jù)不夠,后面的元素自動賦0。9.5.4通過賦初值定義二維數(shù)組的大小如果對數(shù)組元素全部賦初值,定義數(shù)組時行長度可以省略,列長度不能省略。如:inta[][3]={{1,2,3},{4,5},{6},{8}};若用以下形式:intb[][3]={1,2,3,4};確定第一維的規(guī)則:若初值個數(shù)能被第二維常量除盡,則商數(shù)即為第一維大小。如:intb[][3]={1,2,3,4,5,6};/*第一維為2*/若初值個數(shù)不能被第二維除盡,則第一維大小=商數(shù)+1。如:intb[][3]={1,2,3,4};/*第一維為2*/練習(xí):定義如下變量和數(shù)組:intk;inta[3][3]={9,8,7,6,5,4,3,2,1};則下面語句的輸出結(jié)果是_____。for(k=0;k<3;k++)printf(“%d”,a[k][k]);753B)951C)963D)741√

二維數(shù)組元素的地址的表示:設(shè)有inta[3][4];a[i][j]的地址可有5種表示:1、&a[i][j]2、a[i]+j3、*(a+i)+j4、&a[0][0]+4*i+j5、a[0]+4*i+j9.6.2通過地址引用二維數(shù)組元素若有inta[3][4],i,j;則a數(shù)組元素可有5種表達(dá)方式引用:1、a[i][j]2、*(a[i]+j)3、*(*(a+i)+j)4、*(&a[0][0]+4*i+j)5、(*(a+i))[j]1、&a[i][j]2、a[i]+j3、*(a+i)+j4、&a[0][0]+4*i+j5、a[0]+4*i+j地址通過建立一個指針數(shù)組引用二維數(shù)組元素

p128

9.6.4通過建立一個行指針引用二維數(shù)組元素指向一維數(shù)組指針變量的定義形式:類型標(biāo)識符(*指針變量名)[數(shù)組元素個數(shù)]“*”表示其后的變量為指針類型,[數(shù)組元素個數(shù)]表示目標(biāo)變量是一維數(shù)組,并說明一維數(shù)組元素的個數(shù)。由于“*”比“[]”的運(yùn)算級別低,“*指針變量名”作為一個說明部分,兩邊必須加括號?!邦愋蜆?biāo)識符”是定義一維數(shù)組元素的類型。如:inta[3][4];int

溫馨提示

  • 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

提交評論