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

下載本文檔

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

文檔簡(jiǎn)介

第六章

數(shù)

組基本問(wèn)題1.為什么要使用數(shù)組例如:要輸入一個(gè)100個(gè)學(xué)生的成績(jī)。方法1:用簡(jiǎn)單變量方法輸入學(xué)生成績(jī)int

m1,m2,m3,

……m100;scanf("%d",&m1);scanf("%d",&m2);……scanf("%d",&m100);要用100句輸入語(yǔ)句方法2:使用簡(jiǎn)單變量和循環(huán)結(jié)構(gòu)相結(jié)合int

mark,i;for

(i=1;i<=100;i++)scanf("%d",&mark);方法3:使用數(shù)組和循環(huán)結(jié)構(gòu)相結(jié)合int

mark[100],i;for

(i=1;i<=100;i++)scanf("%d",&mark[i]);4.數(shù)組的類型一維數(shù)組:數(shù)組中的變量具有先后順序的邏輯結(jié)構(gòu),則稱其為一維數(shù)組。二維數(shù)組:數(shù)組中的變量具有行列順序的邏輯結(jié)構(gòu),則稱其為二維數(shù)組。6.1

一維數(shù)組一、一維數(shù)組的定義定義格式:數(shù)據(jù)類型符

數(shù)組名[常量表達(dá)式];功能:定義指定“數(shù)據(jù)類型”的一維數(shù)組。說(shuō)明:數(shù)據(jù)類型符用于說(shuō)明數(shù)組中存放的數(shù)據(jù)的數(shù)據(jù)類型。它可以是任何基本類型,如int、float等。也可以是以后要介紹的指針類型或結(jié)構(gòu)類型等。數(shù)組名必須是按照“標(biāo)識(shí)符”的命名規(guī)則命名,不能與程序中的其他變量名同名。(3)常量表達(dá)式的值為數(shù)組的長(zhǎng)度,表示數(shù)組中的元素個(gè)數(shù),必須是整數(shù),可以是整型常量或符合常量,但不能是變量。例如:①int

a[10];②#define

N

10float

b[N];③int

i=10;int

c[i];以上①②是正確的,③是錯(cuò)誤的。(4)當(dāng)定義了某一個(gè)一維數(shù)組,則要給其所有的元素分配內(nèi)存單元。單元數(shù)目=數(shù)組長(zhǎng)度×每個(gè)元素占用的字節(jié)數(shù)據(jù)例如:①int

a[10];定義一個(gè)a數(shù)組,10個(gè)元素,每個(gè)元素占2個(gè)字節(jié),整個(gè)數(shù)組占20個(gè)字節(jié)的內(nèi)存單元。②float

b[10];定義一個(gè)b數(shù)組,10個(gè)元素,每個(gè)元素占4個(gè)字節(jié),整個(gè)數(shù)組占40個(gè)字節(jié)的內(nèi)存單元。二、一維數(shù)組元素的引用C語(yǔ)言規(guī)定不能整體使用數(shù)組,只能使用數(shù)組元素,數(shù)組元素在數(shù)組中的位置稱為下標(biāo)。引用格式:數(shù)組名[下標(biāo)]說(shuō)明:(1)數(shù)組名表示數(shù)組元素從屬的數(shù)組,該數(shù)組是事先已定義過(guò)的數(shù)組。(2)下標(biāo)確定數(shù)組元素在數(shù)組中的位置,下標(biāo)可以是整型常量、整型變量和整型表達(dá)式。其有效取值范圍是:0≤下標(biāo)<數(shù)組的長(zhǎng)度如果下標(biāo)的值超出范圍,稱為數(shù)組越界,將導(dǎo)致錯(cuò)誤的運(yùn)行結(jié)果。例1:一維數(shù)組元素引用舉例。設(shè)有數(shù)組定義語(yǔ)句:int

a[4];數(shù)組a有四個(gè)元素,分別是a[0],a[1],a[2],a[3下列方式引用數(shù)組a的元素均為正確的:a[0]=10;scanf("%d,%d",&a[1],&a[3]);a[2]=2*a[0]+a[1]-a[3];例2:一維數(shù)組元素下標(biāo)越界舉例。設(shè)有數(shù)組定義語(yǔ)句:int

y[2];數(shù)組y有兩個(gè)元素,分別是y[0],y[1]下列方式引用數(shù)組y的元素語(yǔ)法上均為正確的,但程序可能會(huì)出錯(cuò)。y[2]=10;scanf("%d",&y[3]);y[1]=y[4];(3)定義數(shù)組時(shí)方括號(hào)的數(shù)字與數(shù)組元素中的數(shù)字意義完全不同,前者的數(shù)字說(shuō)明數(shù)組的長(zhǎng)度,后者的數(shù)字說(shuō)明該數(shù)組元素在數(shù)組中的位置。(4)數(shù)組名不是變量是常量,而數(shù)組元素是變量如設(shè)有數(shù)組定義語(yǔ)句:int

x[3];x[2]=10;x=6;/*正確*//*非法操作*/三、一維數(shù)組的初始化定義數(shù)組時(shí)賦予初值,稱為初始化。格式:數(shù)據(jù)類型符

數(shù)組名[長(zhǎng)度]={初值表}方法一:對(duì)所有元素賦初值如:int

a[5]={1,2,3,4,5};結(jié)果:a[0]=1,a[1]=2,a[2]=3,a[3]=4,a[4]=5方法二:對(duì)部分元素賦初值如:int

a[5]={1,2,3};結(jié)果:a[0]=1,a[1]=2,a[2]=3,a[3]=0,a[4]=0方法三:對(duì)所有元素賦初值,可省略數(shù)組長(zhǎng)度如:int

a[

]={1,2,3,4,5};等價(jià)于:

int

a[5]={1,2,3,4,5};但是int

a[

];是錯(cuò)誤的。四、一維數(shù)組的應(yīng)用在一維數(shù)組的應(yīng)用中,需注意以下幾點(diǎn):一般具有先后順序的一組數(shù)據(jù)用一維數(shù)組存放。數(shù)組元素的下標(biāo)控制用循環(huán)實(shí)現(xiàn)。數(shù)組元素的下標(biāo)從0開(kāi)始,最后一個(gè)元素的下標(biāo)等于數(shù)組長(zhǎng)度的大小減1。例1:編寫程序,完成:(1)從鍵盤上任意輸入10個(gè)整數(shù);

(2)按反序輸出10個(gè)整數(shù);(3)按反序存放10個(gè)整數(shù)。例2:編寫一程序,功能是任意輸入10個(gè)整數(shù),把這10個(gè)數(shù)據(jù)由小到大排序。算法分析:排序的方法很多,如選擇法、冒泡法希爾法、插入法等。1.選擇法排序選擇法排序的基本思想是首先將n個(gè)數(shù)中最小的數(shù)找出來(lái),同第一個(gè)數(shù)對(duì)調(diào),然后再將n-1個(gè)數(shù)中最小的數(shù)找出來(lái)同第二個(gè)數(shù)對(duì)調(diào)……依次類推。對(duì)n個(gè)數(shù)作n-1輪比較,每輪都找出一個(gè)未經(jīng)排序的數(shù)中最小的數(shù)。選擇法排序示意圖2.冒泡法排序冒泡法排序的基本思想是將第一個(gè)數(shù)與第二個(gè)數(shù)作比較,小數(shù)調(diào)到前面,大數(shù)調(diào)到后面;再將第二個(gè)數(shù)與第三個(gè)數(shù)作同樣的比較與交換……依次類推,當(dāng)完成第一遍的兩兩比較后,最大的數(shù)已跑到了數(shù)列的最后。然后再對(duì)第一個(gè)數(shù)至倒數(shù)第二個(gè)數(shù)執(zhí)行兩兩比較和相應(yīng)的交換操作……依次類推,直至數(shù)列的第一、第二個(gè)數(shù)比較結(jié)束。冒泡法排序示意圖6.2

二維數(shù)組一、二維數(shù)組的定義定義格式:數(shù)據(jù)類型符

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

[常量表達(dá)式2];功能:定義指定“數(shù)據(jù)類型”的二維數(shù)組。說(shuō)明:數(shù)據(jù)類型符用于說(shuō)明數(shù)組中存放的數(shù)據(jù)的數(shù)據(jù)類型。它可以是任何基本類型,如int、float等。也可以是以后要介紹的指針類型或結(jié)構(gòu)類型等。數(shù)組名必須是按照“標(biāo)識(shí)符”的命名規(guī)則命名,不能與程序中的其他變量名同名。(3)常量表達(dá)式1說(shuō)明二維數(shù)組行數(shù)的大小(即第一維的長(zhǎng)度),常量表達(dá)式2說(shuō)明二維數(shù)組列數(shù)的大小(即第二維的長(zhǎng)度)。二維數(shù)組包含的數(shù)組元素個(gè)數(shù)=常量表達(dá)式1×常量表達(dá)式2。例如:int

a[4][5];(定義一個(gè)二維數(shù)組a,其元素為20個(gè))(4)當(dāng)定義了某一個(gè)二維數(shù)組,則要給其所有的元素分配內(nèi)存單元。單元數(shù)目=數(shù)組長(zhǎng)度×每個(gè)元素占用的字節(jié)數(shù)據(jù)例如:①int

a[4][5];定義一個(gè)a數(shù)組,20個(gè)元素,每個(gè)元素占2個(gè)字節(jié),整個(gè)數(shù)組占40個(gè)字節(jié)的內(nèi)存單元。②float

b[3][4];定義一個(gè)b數(shù)組,12個(gè)元素,每個(gè)元素占4個(gè)字節(jié),整個(gè)數(shù)組占48個(gè)字節(jié)的內(nèi)存單元。(5)C的編譯系統(tǒng)對(duì)二維數(shù)組的存儲(chǔ)單元的分配原則是:按行順序存放,即上一行的末元素之后是下一行的首元素。二、二維數(shù)組元素的引用引用格式:數(shù)組名[下標(biāo)1][下標(biāo)2]說(shuō)明:下標(biāo)1確定數(shù)組元素所在的行,下標(biāo)2確定數(shù)組元素所在的列。下標(biāo)1為任一整型表達(dá)式,滿足:0≤下標(biāo)1<行數(shù)

(3)下標(biāo)2為任一整型表達(dá)式,滿足:0≤下標(biāo)2<列數(shù)和一維數(shù)組一樣,C對(duì)二維數(shù)組的下標(biāo)也不作越界檢查。三、二維數(shù)組的初始化方法一:按行給所有元素賦初值如:int

a[3][5]={{1,2,3,4,5},

{6,7,8,9,10},{11,12,13,14,15}};結(jié)果:01122

3

43

4

56789101112131415012方法二:按行對(duì)部分元素賦初值如:float

b[3][4]={{1.0},{3.2,4.5}};結(jié)果:01.010.020.030.03.24.50.00.00.00.00.00.0012方法三:給所有元素賦初值,可省略第一維長(zhǎng)度如:int

a[

][3]={1,2,5,8,3,7};等價(jià)于:

int

a[2][3]={1,2,5,8,3,7};結(jié)果是:125837省略的第一維長(zhǎng)度由數(shù)據(jù)總個(gè)數(shù)除于第二維的長(zhǎng)度確定(6/3=2)。因?yàn)槎S數(shù)組在內(nèi)存中是按行存放的,所以必須知道每行的元素個(gè)數(shù),才能由數(shù)據(jù)總數(shù)確定數(shù)組的行數(shù)。四、二維數(shù)組的應(yīng)用在二維數(shù)組的應(yīng)用中,需要注意以下幾點(diǎn):(1)一般具有行、列的表格數(shù)據(jù)用二維數(shù)組存放。

(2)定義存放數(shù)據(jù)的二維數(shù)組行與列的大小只能是整型常量或符號(hào)常量。(3)行下標(biāo)與列下標(biāo)均成0開(kāi)始,它們的值惟一確定二維數(shù)組元素在數(shù)組中的位置。(4)二維數(shù)組元素的下標(biāo)控制,一般用兩重循環(huán)實(shí)現(xiàn)例3:編寫程序,對(duì)一個(gè)4行4列的二維數(shù)組,完成以下操作:(1)求對(duì)角線上的元素之和與積;

(2)求所有靠邊的元素之和與積;

(3)求所有不靠邊的元素之和與積。算法分析:對(duì)于一個(gè)行列相同的二維數(shù)組,它有兩條對(duì)角線一條稱為主對(duì)角線,另一條稱為副對(duì)角線。主對(duì)角線上的元素下標(biāo)特點(diǎn)是行、列下標(biāo)的值相等,副對(duì)角線上的元素下標(biāo)特點(diǎn)是行、列下標(biāo)之和等于(行數(shù)-1)。所有靠邊元素的下標(biāo)特點(diǎn)是行下標(biāo)等于0或者等于(行數(shù)-1),列下標(biāo)等于0或者等于(列數(shù)-1)。所有不靠邊元素的下標(biāo)特點(diǎn)是行下標(biāo)不等于0也不等于(行數(shù)-1),列下標(biāo)不等于0也不等于(列數(shù)-1)

。程序清單:例4:編寫程序,輸出楊輝三角形的前10行11112113311464115101051………………算法分析:算法分析:楊輝三角形數(shù)據(jù)的特點(diǎn)是對(duì)角線和第1列上的值為1,其余從第3行起每行第2個(gè)數(shù)開(kāi)始的各個(gè)數(shù)等于上一行同一列上的數(shù)與其左側(cè)的數(shù)之和。即滿足

a[i][j]=a[i-1][j]+a[i-1][j-1]。程序清單6.3

字符串與字符數(shù)組一、字符串與字符數(shù)組所謂字符串,就是用雙引號(hào)括起來(lái)的字符序列。為了便于識(shí)別一個(gè)字符串的結(jié)尾,C語(yǔ)言約定,字符串的未尾以轉(zhuǎn)義字符“\0”作為結(jié)束標(biāo)志。在C語(yǔ)言中,字符串用字符數(shù)組來(lái)存放和處理。字符數(shù)組用于存放字符型數(shù)據(jù),每個(gè)數(shù)組元素存放一個(gè)字符,存放的是字符的ASCII代碼。不管字符數(shù)組中存放的是字符串,還是若干個(gè)字符,每個(gè)字符數(shù)組的元素都可以作為一個(gè)字符型變量來(lái)使用。二、字符數(shù)組定義一維字符數(shù)組定義格式:char

數(shù)組名[常量表達(dá)式];二維字符數(shù)組定義格式:char

數(shù)組名[常量表達(dá)式1][常量表達(dá)式2];3.說(shuō)明:一維字符數(shù)組用于存放一個(gè)字符串,二維字符數(shù)組用于存放多個(gè)字符串。在定義字符數(shù)組和存儲(chǔ)字符串時(shí)應(yīng)估計(jì)要存放的字符串的最大可能長(zhǎng)度,使得字符數(shù)組的長(zhǎng)度始終大于字符串的實(shí)際長(zhǎng)度,保證有效字符之后是字符串的結(jié)束標(biāo)志“\0”。例如:要存放字符串“I

am

a student.”,則定義的一維字符數(shù)組長(zhǎng)度至少為16(有效字符15個(gè)、字符串結(jié)束標(biāo)志1個(gè)),即char

str[16];。如要同時(shí)存放3個(gè)字符串“I

am

a student.”、“You

are

a

worker.”、“He

is

a

teacher.”,則定義的二維字符數(shù)組第二維的長(zhǎng)度至少為18(3個(gè)字符串中,第二個(gè)字符串最長(zhǎng),有效字符17個(gè)、字符串結(jié)束標(biāo)記1個(gè)),即char

str[3][18];。三、字符數(shù)組的初始化字符數(shù)組的初始化既可以用字符常量也可以用字符串常量來(lái)實(shí)現(xiàn)。例如:char

str[]={"I","","a","m","","a","","b等價(jià)于:char

str[]={"I

am

a

boy"};或者:char

str[]="I

am

a

boy“說(shuō)明:(1)不管用那一種方法,str數(shù)組都是有11個(gè)數(shù)組元素組成。str

0

1

2

3

4

5

6

7

8

9

10I

a

m

a

b

o

y

\0在用字符常量初始化字符數(shù)組時(shí),特別要注意:如存放的是字符串,最后一般要放上字符串結(jié)束標(biāo)志‘\0’,否則,C不將其視為字符串。用字符串常量初始化字符數(shù)組時(shí),系統(tǒng)自動(dòng)在字符串的末尾加上字符串結(jié)束標(biāo)志‘\0’。顯然,用字符串常量初始化字符數(shù)組比用字符常量要方便,直觀得多。四、字符數(shù)組的輸入與輸出(一)字符數(shù)組輸入的3種方法1.單個(gè)字符逐個(gè)輸入在scanf函數(shù)中,用格式字符“%c”,表示從鍵盤上輸入單個(gè)字符。如:char

c[11];int

i;for

(i=0;i<10;i++)scanf("%c",&c[i]);c[10]="\0";運(yùn)行時(shí)輸入:I

am

a

boy結(jié)果數(shù)組c存放的是:I

am

a

boy\0,可以作為數(shù)組使用。2.整個(gè)字符串一次輸入在scanf函數(shù)中,用格式字符“%s”,表示從鍵盤上

一次輸入一串字符,輸入項(xiàng)直接寫數(shù)組名。不過(guò)要注意:用“%s”輸入字符串時(shí),只能輸入不含有空格符的字符串。因?yàn)橛谩?s”輸入字符串時(shí),不接受空格符(即遇到空格符結(jié)束),并自動(dòng)補(bǔ)上字符串結(jié)束標(biāo)志‘\0’。如:char

c[14];

scanf("%s",c);運(yùn)行時(shí)若輸入:You

are

a

boy結(jié)果數(shù)組c存放的是:You\0。3.用gets函數(shù)一次輸入整個(gè)字符串格式:gets(字符數(shù)組名);功能:從鍵盤上輸入一串字符,存放在指定的字符數(shù)組中。說(shuō)明:gets函數(shù)既可輸入包含空格的字符串,又可輸入不包含空格的字符串。在輸入字符串時(shí),遇到回車符結(jié)束,并將回車符轉(zhuǎn)換成字符串結(jié)束標(biāo)志’\0’。如:char

c[14];

gets(c);運(yùn)行時(shí)若輸入:You

are

a

boy結(jié)果數(shù)組c存放的是:You

are

a

boy\0。(二)字符數(shù)組輸出的3種方法1.單個(gè)字符逐個(gè)輸出在printf函數(shù)中,用格式字符“%c”,輸出一個(gè)數(shù)組元素(即一個(gè)字符)。如:char

c[11]="I

am

a

boy";int

i;for

(i=0;i<11;i++)printf("%c",c[i]);printf("\n");運(yùn)行結(jié)果為:I

am

a

boy2.一次輸出整個(gè)字符串在printf函數(shù)中,用格式字符“%s”,輸出項(xiàng)直接寫數(shù)組名,一次輸出整個(gè)數(shù)組。如:char

c[11]="I

am

a

boy";printf("%s",c);printf("\n");運(yùn)行結(jié)果為:I

am

a

boy說(shuō)明:格式字符“%s”在輸出字符串時(shí),原樣輸出,遇到字符串結(jié)束標(biāo)記"\0"不換行。3.用puts函數(shù)一次輸出整個(gè)字符串格式:puts(字符數(shù)組名);功能:在顯示器上輸出存放在指定字符數(shù)組中的整個(gè)字符串。如:char

c[11]="I

am

a

boy";puts(c);運(yùn)行結(jié)果為:I

am

a

boy說(shuō)明:puts函數(shù)輸出字符串時(shí),遇到字符串結(jié)束標(biāo)記"\0"換行。五、字符串處理函數(shù)1.字符串復(fù)制函數(shù)strcpy格式:strcpy(字符型參數(shù)1,字符型參數(shù)2)功能:把參數(shù)2指定的字符串復(fù)制到參數(shù)1指定的字符數(shù)組中。說(shuō)明:參數(shù)1用于存放復(fù)制的字符串,所以它必須是字符數(shù)組,而且其長(zhǎng)度不能小于所復(fù)制字符串的長(zhǎng)度。參數(shù)2可以是字符數(shù)組,也可以是字符串常量。復(fù)制時(shí)連同字符串結(jié)束標(biāo)記"\0"一起復(fù)制。例如:char

str[20];strcpy(str,

"I

am

a

boy");puts(str);運(yùn)行結(jié)果為:I

am

a

boy例如:char

name[7]

="王大明";

/*正確*/name="王大明";/*非法操作*/strcpy(name,

"王大明");

/*正確*/2.字符串連接函數(shù)strcat格式:strcat(字符型參數(shù)1,字符型參數(shù)2)功能:把參數(shù)2指定的字符串連接到參數(shù)1指定的字符數(shù)組中字符串的后面。說(shuō)明:(1)參數(shù)1用于存放連接后的字符串,所以它必須是字符數(shù)組,而且其長(zhǎng)度要足夠容納兩個(gè)字符串

(2)參數(shù)2可以是字符數(shù)組,也可以是字符串常量(3)連接時(shí)參數(shù)1指定的字符數(shù)組中原有的字符串結(jié)束標(biāo)記"\0"被參數(shù)2指定的字符串的第一個(gè)字符取代,而參數(shù)2指定的字符串的字符串結(jié)束標(biāo)記"\0"作為新字符串的結(jié)束標(biāo)記。例如:char

str1[80]="I

am

a

boy.";char

str2[]="You

are

a

girl.";printf("%s\n",strcat(str1,str2));運(yùn)行結(jié)果為:I

am

a

boy.You

are

a

girl.str2數(shù)組中仍為:"You

are

a

girl."str1數(shù)組中為:"I

am

a

boy.

You

are

a

girl."3.字符串比較函數(shù)strcmp格式:strcmp(字符型參數(shù)1,字符型參數(shù)2)功能:比較參數(shù)1和參數(shù)2

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論