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

下載本文檔

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

文檔簡介

第七章數(shù)組本章主要內(nèi)容一維數(shù)組定義和數(shù)組元素的引用一維數(shù)組與指針運(yùn)算二維數(shù)組的定義和數(shù)組元素的引用二維數(shù)組與指針運(yùn)算動(dòng)態(tài)數(shù)組的使用7.1一維數(shù)組的定義及使用

一維數(shù)組的定義一維數(shù)組的引用一維數(shù)組的初始化7.1.1一維數(shù)組的定義數(shù)組的概念數(shù)組是具有相同的數(shù)據(jù)類型且按一定次序排列的一組變量的集合體,數(shù)組屬于構(gòu)造類型。intgrades[6];一維數(shù)組構(gòu)成一個(gè)數(shù)組的這些變量稱為數(shù)組元素?cái)?shù)組有一個(gè)統(tǒng)一的名字叫數(shù)組名。grades1009186537865一個(gè)成績單列表一維數(shù)組的定義類型說明符

數(shù)組名[常量表達(dá)式

];

例如:inta[10];

表示a

為整型數(shù)組,有10個(gè)元素:

a[0]...a[9]可以是常量和符號常量,不能用變量。數(shù)組名的構(gòu)成方法與一般變量名相同。一維數(shù)組數(shù)組長度下標(biāo):0~(數(shù)組長度–1)一維數(shù)組數(shù)組元素在內(nèi)存中順次存放,它們的

地址是連續(xù)的。數(shù)組grades存儲grades所需要的存儲空間(24位)agradeagradeagradeagradeagradeagradegrades的邏輯存儲方式數(shù)組gradesgrades[5]grades[0]grades[1]grades[2]grades[3]grades[4]第1個(gè)數(shù)組元素第2個(gè)數(shù)組元素第3個(gè)數(shù)組元素第4個(gè)數(shù)組元素第5個(gè)數(shù)組元素第6個(gè)數(shù)組元素grades的物理存儲方式一維數(shù)組grades[0]grades[1]grades[2]grades[3]grades[4]grades[5]數(shù)組名標(biāo)識了數(shù)組的起始位置起點(diǎn)從數(shù)組的起始位置越過4個(gè)元素到達(dá)grades[4]獲取grades[4]示意圖數(shù)組元素的下標(biāo)從0開始。一維數(shù)組引用必須先定義,后使用。只能逐個(gè)引用數(shù)組元素,而不能一次引用整個(gè)數(shù)組。

例如:a[0]=a[5]+a[7]-a[2*3]數(shù)組元素是一個(gè)變量。例如:price[3]=20.23;

scanf(“%d%f”,&grade[2],&price[0]);引用時(shí),數(shù)組元素的下標(biāo),可以是常量、變量或表達(dá)式,但其值應(yīng)為非負(fù)整型。例:grade[1] grade[2*i] grade[j-1]一維數(shù)組total=grade[0]+grade[1]+grade[2]+grade[3]+grade[4]total=0;for(i=0;i<=4;++i) total=total+grade[i];i<5intgrade[5];#defineNUMELS5100?NUMELS

i<NUMELS

100800一維數(shù)組#include<stdio.h>intmain(){inti,grades[5];

for(i=0;i<=4;++i)/*Enterfivegrades*/{printf("Enteragrade:");scanf("%d",&grades[i]);}for(i=0;i<=4;++i)/*Printfivegrades*/printf("\ngrades%dis%d",i,grades[i]);

return0;}longtotal=0;total=total+grades[i];printf("\nTotalis%ld.\n",total);一維數(shù)組的初始化初始化,即賦初值。C語言允許定義數(shù)組時(shí)直接對數(shù)組進(jìn)行初始化。一般形式: 類型說明符數(shù)組名[常量表達(dá)式]={數(shù)值表};

舉例:

floatvar[8]={0.1,1.2,2.6,3.5,

4.3,5.5,3.5,5.5}; int a[5]={2,3,4,5,6};初始化時(shí),各元素的值要順序放在一對花括號里面,各元素值之間用逗號間隔。一維數(shù)組的初始化若定義時(shí)無初始化,C語言將為數(shù)值型數(shù)組元素自動(dòng)初始化為0。

例如:intgrades[5];當(dāng)花括號中的數(shù)值表中的數(shù)據(jù)個(gè)數(shù)少于數(shù)組定義中的元素個(gè)數(shù)時(shí),C語言將這些數(shù)據(jù)分別賦給數(shù)組的前幾個(gè)元素,其余數(shù)組元素自動(dòng)被初始化為0。

例如:intgrades[5]={82,70};一維數(shù)組的初始化當(dāng)對全部數(shù)組元素賦初值時(shí),可省略數(shù)組長度。

例如:

floatvar[]={0.1,1.2,2.6,3.5,

4.3,5.5,3.5,5.5};

int a[]={2,3,4,5,6};

系統(tǒng)將認(rèn)為數(shù)組的元素個(gè)數(shù)就是后面初始化時(shí)所提供的數(shù)據(jù)的個(gè)數(shù)。floatvar[8]={0.1,1.2,2.6,3.5,

4.3,5.5,3.5,5.5};int a[5]={2,3,4,5,6};一維數(shù)組的初始化靜態(tài)數(shù)組的定義方式:static類型說明符數(shù)組名[常量表達(dá)式];可以只給數(shù)組的前若干個(gè)元素賦初值,此時(shí)后面的元素均將自動(dòng)賦以初值0。

staticinta[10]={1,2,3,4};需要指出的是,靜態(tài)存儲的數(shù)組在對程序進(jìn)行編譯連接的時(shí)候就給予分配存儲空間,并進(jìn)行賦初值。而程序中說明的動(dòng)態(tài)數(shù)組是在運(yùn)行時(shí)才分配存儲空間,并且,其中各元素的初值是任意的。7.2一維數(shù)組與指針運(yùn)算

一維數(shù)組的數(shù)組名一維數(shù)組的下標(biāo)與指針作為函數(shù)參數(shù)的一維數(shù)組的數(shù)組名一維數(shù)組的數(shù)組名先看以下兩個(gè)定義:intsum;intnum[5];變量sum是一個(gè)標(biāo)量,因?yàn)樗且粋€(gè)單一的值且這個(gè)數(shù)值是整型的。變量num是一個(gè)數(shù)組,因?yàn)樗且唤M值的集合。當(dāng)數(shù)組名和下標(biāo)值一起使用,就可以標(biāo)識數(shù)組中某個(gè)特定的值。num[2]的類型是整型數(shù)據(jù),那么num的類型又是什么呢?它所表示的又是什么呢?

在C語言中,在幾乎所有使用數(shù)組名的表達(dá)式中,數(shù)組名的值是一個(gè)指針常量,也就是數(shù)組中第一個(gè)數(shù)組元素的地址。num的類型取決于數(shù)組元素的類型,數(shù)組元素的類型是int類型,那么num的類型就是“指向int的常量指針”。因此一維數(shù)組的數(shù)組名表示的是該數(shù)組中第一個(gè)數(shù)組元素的存儲地址,數(shù)組名的類型是“指向數(shù)組元素存儲類型的常量指針”。請不要將數(shù)組等同于指針,因?yàn)閿?shù)組具有一些和指針完全不同的特征。數(shù)組名是一個(gè)指針常量,而不是指針變量,因此數(shù)組名的值是不能修改的。一維數(shù)組的下標(biāo)與指針現(xiàn)有語句intnum[5];那么*(num+2)表示什么呢?

先分析num+2所表示的含義:num的值是一個(gè)指向整型的指針,所加的2表示數(shù)組num第一個(gè)元素向后移動(dòng)2個(gè)整型長度的運(yùn)算,換句話說,num+2表示以數(shù)組num的第一個(gè)元素為基準(zhǔn),向后移動(dòng)2個(gè)數(shù)組元素的長度后所指向的數(shù)組元素的存儲地址,也就是說這個(gè)2可以看作是偏移量。再通過間接訪問操作訪問這個(gè)新的存儲空間取得這個(gè)存儲空間中所存儲的數(shù)據(jù)。這個(gè)過程看上去很熟悉,因?yàn)檫@和前面的數(shù)組下標(biāo)的引用過程完全一樣的。因此num[2]和*(num+2)是等價(jià)的。請牢記在C語言中下標(biāo)引用和間接訪問表達(dá)式是一樣的。#defineN10 ……intarray[N];int*ptr=array+5;數(shù)組作函數(shù)參數(shù)時(shí)的指針表示將一維數(shù)組名作為函數(shù)參數(shù)傳送時(shí)被傳遞的是數(shù)組第0個(gè)元素的地址,被調(diào)用函數(shù)中接收這個(gè)地址的形參應(yīng)是一個(gè)存放該地址的變量,也就是指針變量。(1)實(shí)參與形參都用數(shù)組名。例如,intmain()定義Output()函數(shù):{intarray[10];voidOutput(intp[],intn)…{Output(array,10);… …return0;}}形參intp[]表示p所指向?qū)ο蟮闹羔樧兞浚琲ntp[]等價(jià)于int*p。(2)實(shí)參用數(shù)組名,形參用指針變量。例如,intmain()定義Output()函數(shù):{intarray[10];voidOutput(int*p,intn)…{Output(array,10);……return0;}}函數(shù)開始執(zhí)行時(shí),p指向array[0],即p=&array[0]。通過p值的改變,可以指向數(shù)組array中的任一元素。(3)實(shí)參與形參都用指針變量。例如,intmain()定義Output()函數(shù):{intarray[10],*ptr=array;voidOutput(int*p,intn) …{Output(ptr,10);……return0;}}

如果實(shí)參用指針變量,則這個(gè)指針變量必須有一個(gè)確定的值。先使實(shí)參指針變量ptr指向數(shù)組array,ptr的值是&array[0],然后將ptr的值傳給形參指針變量p,p的初始值也是&array[0]。通過p值的改變可以使p指向數(shù)組array的任一元素。(4)實(shí)參用指針變量,形參用數(shù)組名。例如,intmain()定義Output函數(shù):{intarray[10],*ptr=array;voidOutput(intp[],intn) …{Output(ptr,10);… …return0;}}實(shí)參ptr為指針變量,它使指針變量ptr指向數(shù)組array。形參為數(shù)組名p,實(shí)際上將p作為指針變量處理,可以理解為形參數(shù)組p和array數(shù)組共用同一段內(nèi)存單元。在函數(shù)執(zhí)行過程中可以使p[i]的值變化,而它也就是array[i]。7.3二維數(shù)組的定義及使用

二維數(shù)組的定義二維數(shù)組元素的引用二維數(shù)組的初始化二維數(shù)組二維數(shù)組定義的一般形式:

數(shù)據(jù)類型名

數(shù)組名[常量表達(dá)式1][常量表達(dá)式2];

例如:

double a[3][3],b[2][2]; int f[2][3];同一維數(shù)組一樣,二維數(shù)組(或多維數(shù)組)中行、列下標(biāo)的值也都是從0開始的。二維數(shù)組可以看成是一個(gè)特殊的一維數(shù)組,只是這個(gè)一維數(shù)組的每一個(gè)元素又是一個(gè)一維數(shù)組。二維數(shù)組二維數(shù)組二維數(shù)組中各元素的順序遵照按行存放的原則。例如,定義一個(gè)二維數(shù)組a[3][3]后,其中的元素a[0][2]在內(nèi)存中被存放在元素a[1][0]之前。

345存儲單元3a[0][0]a=678對應(yīng)表:4a[0][1]129→5a[0][2]6a[1][0]7a[1][1]8a[1][2]1a[2][0]2a[2][1]9a[2][2]

二維數(shù)組可以計(jì)算數(shù)組元素在數(shù)組中的序號假設(shè)m×n的數(shù)組a,

計(jì)算a[i][j]序號的公式:i×n+j

如:a為3×3的數(shù)組,則

a[0][1]0×3+1=1a[1][2]的序號是:1×3+2=5a[2][2]2×3+2=8例:若數(shù)組a有m列,則a[i][j]之前的數(shù)組元素個(gè)數(shù)為

A、(i-1)*(j-1)B、i*m+j+1C、i*m+j-1D、i*m+j答案:D多維數(shù)組多維數(shù)組定義的一般形式:

數(shù)據(jù)類型名 數(shù)組名[常量表達(dá)式1][常量表達(dá)式2]……[常量表達(dá)式n];舉例:

inta[3][3][3];多維數(shù)組多維數(shù)組中的元素在內(nèi)存中的存放順序?yàn)榘葱写娣?,即最左邊的下?biāo)變化最慢,最右邊的下標(biāo)變化最快。注意:二維數(shù)組的幾點(diǎn)說明對多維數(shù)組同樣適用!二維數(shù)組的引用引用的一般形式:P126

數(shù)組名[下標(biāo)表達(dá)式1][下標(biāo)表達(dá)式2]例如:

f[2][2],f[2*4][3],f[2+1][4%2]

下標(biāo)表達(dá)式的值必須是一個(gè)整型的量,可以是整型常量、整型變量或者結(jié)果為整型的表達(dá)式。說明:二維數(shù)組中的元素地址可表示為:

&數(shù)組名[下標(biāo)表達(dá)式1][下標(biāo)表達(dá)式2]可以把二維數(shù)組或多維數(shù)組中的元素看成是普通的變量。基本數(shù)據(jù)類型的變量所能進(jìn)行的各種操作,同樣適用于二維數(shù)組或多維數(shù)組中的元素。例如:

f[2][3]=f[2][2]/2+1; f[2][2]=f[1][2]*f[2][1];二維數(shù)組的初始化方法1:直接賦初值。適用于數(shù)據(jù)較少時(shí)。將數(shù)組元素的所有初始值都寫在一個(gè)花括號內(nèi),由編譯系統(tǒng)按照數(shù)組元素在內(nèi)存中存放的順序?qū)Ω髟刭x初值。例如:

intnum[3][4]={11,2,23,4,51,6,

7,8,92,10,0,12};方法2:分行為二維數(shù)組賦值。適用于每一行的初始值個(gè)數(shù)少于每一行中的數(shù)組元素個(gè)數(shù)時(shí)。例如:intnum[3][4]={{11,2},

{51,6,7},

{92,10,0,12}};每一行中后面的剩余元素被自動(dòng)賦值為0!二維數(shù)組的長度不能隨意省略,必須遵守如下規(guī)則:使用第一種方式,只有當(dāng)為二維數(shù)組的所有元素賦初值時(shí),所定義數(shù)組的第一維的長度才可以省略。例如:

intnum[][4]={11,2,0,0,51,

6,7,0,92,10,0,12};使用第二種方式,無論是為二維數(shù)組的所有元素賦初值,還是為二維數(shù)組的部分元素賦初值,定義數(shù)組時(shí)都可以省略第一維的長度。無論采用上述哪一種方式為二維數(shù)組元素賦初值,在定義數(shù)組時(shí)第二維的長度都絕對不可以省略。例:若有說明:inta[][4]={1,2,3,4,5,6,7,8,9},則數(shù)組第一維的大小為。

A、2B、3C、4D、不確定的值答案:B二維數(shù)組二維數(shù)組#include<stdio.h>intmain(){intval[3][4]={8,16,9,52,3,15,27,6,14,25,2,10};voiddisplay(intnums[3][4]);/*functionprototype*/display(val);return0;}voiddisplay(intnums[3][4]){introw_num,col_num;for(row_num=0;row_num<3;++row_num){for(col_num=0;col_num<4;++col_num)printf("%4d",nums[row_num][col_num]);printf("\n");}}7.4二維數(shù)組與指針運(yùn)算

二維數(shù)組的數(shù)組名二維數(shù)組的下標(biāo)與指針作為函數(shù)參數(shù)的二維數(shù)組的數(shù)組名二維數(shù)組的數(shù)組名例如:intmatrix[3][4];該語句創(chuàng)建了matrix,matrix可以看作是一個(gè)一維數(shù)組,包含了3個(gè)元素,只是每個(gè)元素恰好是包含4個(gè)整型元素的數(shù)組。matrix這個(gè)名字的值是一個(gè)指向它的第一個(gè)元素的指針,因此matrix是一個(gè)指向包含4個(gè)整型元素的數(shù)組的指針。二維數(shù)組的下標(biāo)與指針數(shù)組名是一個(gè)指向第一維第一個(gè)元素的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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

提交評論