版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C語(yǔ)言程序設(shè)計(jì)第9章數(shù)組數(shù)組是指一組相同類型數(shù)據(jù)的有序集合。每個(gè)數(shù)組包含一組具有同一類型的變量,這些變量在內(nèi)存中占有連續(xù)的存儲(chǔ)單元。在程序中這些變量具有相同的名字,但具有不同的下標(biāo)。inta[5];數(shù)組名數(shù)組元素個(gè)數(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á)式而不是兩個(gè)下標(biāo)。說(shuō)明:1、“下標(biāo)表達(dá)式”可以是任何非負(fù)整型數(shù)據(jù),取值范圍是0~(元素個(gè)數(shù)-1)。特別強(qiáng)調(diào):在運(yùn)行C語(yǔ)言程序過(guò)程中,系統(tǒng)并不自動(dòng)檢驗(yàn)數(shù)組元素的下標(biāo)是否越界。因此在編寫程序時(shí),保證數(shù)組下標(biāo)不越界是十分重要的。2、1個(gè)數(shù)組元素,實(shí)質(zhì)上就是1個(gè)變量,它具有和相同類型單個(gè)變量一樣的屬性,可以對(duì)它進(jìn)行賦值和參與各種運(yùn)算。3、一個(gè)數(shù)組不能整體引用,數(shù)組名是一個(gè)地址常量,它代表整個(gè)數(shù)組的首地址。例如:doublex[8],*p,q;p=x;q=x;不能將數(shù)組名賦給一個(gè)普通變量9.1.3一維數(shù)組的初始化1、在定義語(yǔ)句中給所定義數(shù)組賦初值數(shù)據(jù)類型數(shù)組名[常量表達(dá)式]={初值表}說(shuō)明:1、初值放在賦值號(hào)后的花括號(hào)中,數(shù)值類型與說(shuō)明類型一致,初值間用逗號(hào)隔開,系統(tǒng)將自動(dòng)按順序從第一個(gè)元素開始依次給數(shù)組中元素賦值。如:inta[8]={0,1,2,3,4,5,6,7};2、“初值表”中的初值個(gè)數(shù),可以少于元素個(gè)數(shù),即允許只給前面的部分元素賦初值,其后的元素自動(dòng)賦0。字符補(bǔ)‘\0’。如:inta[10]={0};/*10個(gè)元素都賦初值0*/
charc[5]={‘@’};/*后4個(gè)元素均賦‘\0’*/3、當(dāng)初值多于元素個(gè)數(shù),編譯時(shí)會(huì)出錯(cuò)。4、C語(yǔ)言規(guī)定可以通過(guò)賦初值來(lái)定義數(shù)組的大小,這時(shí)數(shù)組說(shuō)明符的一對(duì)方括號(hào)中可以不指定數(shù)組的大小。如:inta[]={0,1,2,3,4};以上語(yǔ)句隱含地定義了a數(shù)組含有5個(gè)元素。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ù)組中各個(gè)元素在內(nèi)存占據(jù)連續(xù)的存儲(chǔ)單元,每個(gè)內(nèi)存單元都有相應(yīng)的地址。數(shù)組所占內(nèi)存單元的首地址稱為數(shù)組的指針,數(shù)組元素所占內(nèi)存單元的首地址稱為數(shù)組元素的指針。因此,可以用指針變量來(lái)指向數(shù)組元素。如shorta[5];a[0]a[1]a[2]a[3]a[4]2000H2001H2002H2003H2004H2005H2006H2007H2008H2009H數(shù)組的指針C語(yǔ)言規(guī)定,數(shù)組名代表數(shù)組的首地址,因此,數(shù)組名實(shí)際上也是指針,但它是一個(gè)固定不變的地址常量。如:inta[5];a是數(shù)組名,也是指針,它永遠(yuǎn)指向數(shù)組的首地址,即不能將新地址賦給該指針。但可以通過(guò)形如a+k的形式(k是整數(shù))來(lái)表達(dá)該數(shù)組其它元素的地址。如:for(k=0;k<5;k++)scanf(“%d”,a+k);若有語(yǔ)句: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通過(guò)數(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通過(guò)指針引用一維數(shù)組元素若有語(yǔ)句: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ù)組元素若有語(yǔ)句:ints[10],*p,i;p=s;數(shù)組元素s[i]p[i]練習(xí):有如下說(shuō)明: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è)有定義語(yǔ)句:intx[6]={2,4,6,8,5,7},*p=x,i;要求依次輸出x數(shù)組6個(gè)元素中的值,不能完成此操作的語(yǔ)句是_____。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)錯(cuò)6661255√
9.3函數(shù)之間對(duì)一維數(shù)組和數(shù)組元素的引用9.3.1數(shù)組元素作實(shí)參數(shù)組元素作實(shí)參時(shí),對(duì)應(yīng)的形參必須是類型相同的變量,所以用法與普通變量一致,傳遞實(shí)參后并不能改變數(shù)組元素的值。9.3.2數(shù)組名作實(shí)參數(shù)組名本身就是一個(gè)地址值,因此對(duì)應(yīng)的形參應(yīng)當(dāng)是一個(gè)指針變量,可以通過(guò)傳遞改變數(shù)組元素的值。例題見(jiàn)書上例9.2。注意:被調(diào)用函數(shù)定義部分可以有三種寫法:如:arrin(int*a)arrin(inta[])arrin(inta[M])M是一個(gè)符號(hào)常量9.3.4函數(shù)的指針形參和函數(shù)體中數(shù)組的區(qū)別若有以下程序,程序中定義了fun函數(shù),形參a指向主函數(shù)中的w數(shù)組,函數(shù)體內(nèi)定義了一個(gè)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);
……}以上程序涉及幾個(gè)概念:1、函數(shù)fun中,形參a可以寫成a[N],a[],*a,它是一個(gè)指針變量,在調(diào)用fun函數(shù)時(shí),系統(tǒng)只為形參a開辟一個(gè)存儲(chǔ)單元,并把main函數(shù)中w數(shù)組首地址存進(jìn)去,使它指向w數(shù)組地址。2、函數(shù)fun的函數(shù)體定義了一個(gè)b數(shù)組,在調(diào)用fun函數(shù)時(shí),系統(tǒng)為它開辟了一串連續(xù)存儲(chǔ)單元,b是一個(gè)地址常量。雖然a和b有相同的說(shuō)明形式,但它們一個(gè)是作為形參的指針,一個(gè)是函數(shù)體內(nèi)定義的數(shù)組,具有完全不同的含義。3、在fun函數(shù)執(zhí)行完畢,返回主函數(shù)時(shí),系統(tǒng)釋放a,b所占存儲(chǔ)單元,指針變量a和數(shù)組b將不再存在。因此,函數(shù)fun不應(yīng)把b的值作為函數(shù)值返回,這樣做,主函數(shù)中的指針變量p將不指向任何對(duì)象而成為“無(wú)向指針”。練習(xí):若有以下調(diào)用語(yǔ)句,則不正確的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、一定要把兩個(gè)下標(biāo)分別放在兩個(gè)方括號(hào)內(nèi)3、第m行n列:a[m-1][n-1]9.5.3二維數(shù)組的初始化1、按行對(duì)二維數(shù)組初始化。如:inta[2][3]={{1,1,1},{4,4,4}};若大括號(hào)或其中的數(shù)據(jù)不夠,后面的元素自動(dòng)賦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ù)組的存儲(chǔ)順序賦初值。如: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ù)不夠,后面的元素自動(dòng)賦0。9.5.4通過(guò)賦初值定義二維數(shù)組的大小如果對(duì)數(shù)組元素全部賦初值,定義數(shù)組時(shí)行長(zhǎng)度可以省略,列長(zhǎng)度不能省略。如:inta[][3]={{1,2,3},{4,5},{6},{8}};若用以下形式:intb[][3]={1,2,3,4};確定第一維的規(guī)則:若初值個(gè)數(shù)能被第二維常量除盡,則商數(shù)即為第一維大小。如:intb[][3]={1,2,3,4,5,6};/*第一維為2*/若初值個(gè)數(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};則下面語(yǔ)句的輸出結(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通過(guò)地址引用二維數(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地址通過(guò)建立一個(gè)指針數(shù)組引用二維數(shù)組元素
p128
9.6.4通過(guò)建立一個(gè)行指針引用二維數(shù)組元素指向一維數(shù)組指針變量的定義形式:類型標(biāo)識(shí)符(*指針變量名)[數(shù)組元素個(gè)數(shù)]“*”表示其后的變量為指針類型,[數(shù)組元素個(gè)數(shù)]表示目標(biāo)變量是一維數(shù)組,并說(shuō)明一維數(shù)組元素的個(gè)數(shù)。由于“*”比“[]”的運(yùn)算級(jí)別低,“*指針變量名”作為一個(gè)說(shuō)明部分,兩邊必須加括號(hào)?!邦愋蜆?biāo)識(shí)符”是定義一維數(shù)組元素的類型。如:inta[3][4];int
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人工智能算法測(cè)試員安全技能測(cè)試強(qiáng)化考核試卷含答案
- 職業(yè)生涯規(guī)劃師安全管理能力考核試卷含答案
- 基材人造板處理與飾面材料選配工沖突管理評(píng)優(yōu)考核試卷含答案
- 外延工安全培訓(xùn)效果評(píng)優(yōu)考核試卷含答案
- 液晶顯示器件制造工崗前安全理論考核試卷含答案
- 重介質(zhì)制備回收工崗前趨勢(shì)考核試卷含答案
- 數(shù)控水射流切割機(jī)操作工安全防護(hù)測(cè)試考核試卷含答案
- 抖音提成合同范本
- 快遞租房合同范本
- 抖音火花合同協(xié)議
- CMK自動(dòng)計(jì)算公式表格模板
- 2023年考研考博考博英語(yǔ)東北大學(xué)考試歷年高頻考試題專家版答案
- 商場(chǎng)保安隊(duì)夜間清場(chǎng)安全檢查制度
- 《伶官傳》原文及譯文
- 2023-2024學(xué)年內(nèi)蒙古自治區(qū)赤峰市小學(xué)語(yǔ)文四年級(jí)期末高分考試題詳細(xì)參考答案解析
- 組合房計(jì)算書
- 宋濂《送東陽(yáng)馬生序》同步測(cè)練
- GB/T 36624-2018信息技術(shù)安全技術(shù)可鑒別的加密機(jī)制
- GB/T 34108-2017金屬材料高應(yīng)變速率室溫壓縮試驗(yàn)方法
- GB/T 2900.63-2003電工術(shù)語(yǔ)基礎(chǔ)繼電器
- GB/T 20329-2006端鍵傳動(dòng)的銑刀和銑刀刀桿上刀座的互換尺寸
評(píng)論
0/150
提交評(píng)論