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

下載本文檔

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

文檔簡介

第六章

數(shù)

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

m1,m2,m3,

……m100;scanf("%d",&m1);scanf("%d",&m2);……scanf("%d",&m100);要用100句輸入語句方法2:使用簡單變量和循環(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ù)組。說明:數(shù)據(jù)類型符用于說明數(shù)組中存放的數(shù)據(jù)的數(shù)據(jù)類型。它可以是任何基本類型,如int、float等。也可以是以后要介紹的指針類型或結(jié)構(gòu)類型等。數(shù)組名必須是按照“標(biāo)識符”的命名規(guī)則命名,不能與程序中的其他變量名同名。(3)常量表達(dá)式的值為數(shù)組的長度,表示數(shù)組中的元素個數(shù),必須是整數(shù),可以是整型常量或符合常量,但不能是變量。例如:①int

a[10];②#define

N

10float

b[N];③int

i=10;int

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

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

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

a[4];數(shù)組a有四個元素,分別是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ù)組定義語句:int

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

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

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

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

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

a[

]={1,2,3,4,5};等價于:

int

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

a[

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

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

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

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

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

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

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

b[3][4];定義一個b數(shù)組,12個元素,每個元素占4個字節(jié),整個數(shù)組占48個字節(jié)的內(nèi)存單元。(5)C的編譯系統(tǒng)對二維數(shù)組的存儲單元的分配原則是:按行順序存放,即上一行的末元素之后是下一行的首元素。二、二維數(shù)組元素的引用引用格式:數(shù)組名[下標(biāo)1][下標(biāo)2]說明:下標(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對二維數(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方法二:按行對部分元素賦初值如:float

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

a[

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

int

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

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

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

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

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

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

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

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

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

am

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

str[16];。如要同時存放3個字符串“I

am

a student.”、“You

are

a

worker.”、“He

is

a

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

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

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

str[]={"I

am

a

boy"};或者:char

str[]="I

am

a

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

0

1

2

3

4

5

6

7

8

9

10I

a

m

a

b

o

y

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

c[11];int

i;for

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

am

a

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

am

a

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

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

c[14];

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

are

a

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

c[14];

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

are

a

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

are

a

boy\0。(二)字符數(shù)組輸出的3種方法1.單個字符逐個輸出在printf函數(shù)中,用格式字符“%c”,輸出一個數(shù)組元素(即一個字符)。如: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.一次輸出整個字符串在printf函數(shù)中,用格式字符“%s”,輸出項直接寫數(shù)組名,一次輸出整個數(shù)組。如:char

c[11]="I

am

a

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

am

a

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

c[11]="I

am

a

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

am

a

boy說明:puts函數(shù)輸出字符串時,遇到字符串結(jié)束標(biāo)記"\0"換行。五、字符串處理函數(shù)1.字符串復(fù)制函數(shù)strcpy格式:strcpy(字符型參數(shù)1,字符型參數(shù)2)功能:把參數(shù)2指定的字符串復(fù)制到參數(shù)1指定的字符數(shù)組中。說明:參數(shù)1用于存放復(fù)制的字符串,所以它必須是字符數(shù)組,而且其長度不能小于所復(fù)制字符串的長度。參數(shù)2可以是字符數(shù)組,也可以是字符串常量。復(fù)制時連同字符串結(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ù)組中字符串的后面。說明:(1)參數(shù)1用于存放連接后的字符串,所以它必須是字符數(shù)組,而且其長度要足夠容納兩個字符串

(2)參數(shù)2可以是字符數(shù)組,也可以是字符串常量(3)連接時參數(shù)1指定的字符數(shù)組中原有的字符串結(jié)束標(biāo)記"\0"被參數(shù)2指定的字符串的第一個字符取代,而參數(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. 本站所有資源如無特殊說明,都需要本地電腦安裝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

提交評論