第五章+數(shù)組+課件+-《編程語言基礎(chǔ)-C語言》(高教版第5版)_第1頁
第五章+數(shù)組+課件+-《編程語言基礎(chǔ)-C語言》(高教版第5版)_第2頁
第五章+數(shù)組+課件+-《編程語言基礎(chǔ)-C語言》(高教版第5版)_第3頁
第五章+數(shù)組+課件+-《編程語言基礎(chǔ)-C語言》(高教版第5版)_第4頁
第五章+數(shù)組+課件+-《編程語言基礎(chǔ)-C語言》(高教版第5版)_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第五章數(shù)組在C語言中,數(shù)組是一種構(gòu)造類型,即它是由基本類型數(shù)據(jù)按照一定規(guī)則組成的新類型.數(shù)組中每個值的類型必須與數(shù)組的類型相同,使用數(shù)組名和下標來唯一確定數(shù)組中的元素。5.1一維數(shù)組的定義和使用5.1.1一維數(shù)組的定義類型說明符數(shù)組名[常量表達式];例如: inta[10];

//數(shù)組名為a,有10個int類型元素*/ doublescores[50*2];

//數(shù)組名為scores,有100個double元素*/定義數(shù)組時需要注意以下幾個問題:數(shù)組名命名規(guī)則和變量名相同,應(yīng)遵循標識符命名規(guī)則;常量表達式表示數(shù)組元素的個數(shù)(即數(shù)組的長度),在定義數(shù)組時必須指定該值。引用元素時下標從0開始。常量表達式中可以包括常量和符號常量,但不能包含變量。數(shù)組元素在內(nèi)存中是連續(xù)存放的,數(shù)組名本身表示內(nèi)存的首地址。5.1.2一維數(shù)組元素的引用C語言規(guī)定只能逐個引用數(shù)組元素而不能一次引用整個數(shù)組。數(shù)組元素的表示形式為:數(shù)組名[下標];例如:inta[10];a數(shù)組的10個元素分別是:a[0]、a[1]、a[2]、a[3]、a[4]、a[5]、a[6]、a[7]、a[8]、a[9]。 例6-1輸入10個學生的成績并求總分。

main() { inti; floatscores[10],sum=0; for(i=0;i<10;i++) { scanf("%f",&scores[i]); sum+=scores[i]; } printf("sum=%.2f",sum); getch(); }運行結(jié)果如下:56678446819032556392sum=66.605.1.3一維數(shù)組的初始化1.對全部元素賦值。例如:

inta[10]={1,2,3,4,5,6,7,8,9,10};2.只對部分元素賦值。例如:

inta[10]={1,2,3,4,5};3.如果在{}中指定了所有元素的值,則數(shù)組的長度可省略不寫。例如: inta[10]={1,2,3,4,5,6,7,8,9,10}; 可改寫為: inta[]={1,2,3,4,5,6,7,8,9,10}; 例6-2輸出Fibonacci序列的前10個數(shù)。main(){ inti;inta[10]={1,1};//序列的第1,2個數(shù)值為1

for(i=2;i<10;i++)//從第3個數(shù)開始,按規(guī)律求值

a[i]=a[i-1]+a[i-2];for(i=0;i<10;i++) printf("%4d",a[i]);getch();}運行結(jié)果如下: 112358132134555.2.1二維數(shù)組的定義及引用二維數(shù)組的定義方式為:

數(shù)組名[行標

][列標

]注意:數(shù)組下標從0開始,因此行標范圍是0~M

-1,列標范圍是0~N

-1。例如:

#defineM3

#defineN5

intc[M][N];

定義了二維數(shù)組c,它是一個具有M行N列的二維數(shù)組,共有M×N個元素。C采用行優(yōu)先的方式來存儲二維數(shù)組,即先在內(nèi)存中順序存儲第一行(行標為0)的元素,再存放第二行的元素,依此類推。5.2.2二維數(shù)組的定義及引用1.分行全部賦值。例如:

inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};2.分行部分賦值。例如:

inta[3][4]={{1,2},{5},{9,10,11}};3.按一維數(shù)組形式賦值。例如:

inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};4。如果對全部元素賦值(無論是一維形式還是分行形式),則定義數(shù)組時可省略第一維長度,但第二維長度不能省略。例如:

inta[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};例6-3輸入一個3*4矩陣,找出矩陣中負數(shù)的個數(shù)并輸出。main(){inta[3][4]; inti,j,count=0; printf("inputmatrix:\n");for(i=0;i<3;i++) for(j=0;j<4;j++) {scanf("%d",&a[i][j]); if(a[i][j]<0)count++; } printf("thenumberofnegativeis%d",count); getch();} 5.3字符數(shù)組的定義和使用5.3.1字符數(shù)組的定義及元素引用 字符數(shù)組的定義類似于前面所介紹的數(shù)組定義,例如: chars[10];5.3.2字符數(shù)組的初始化 chars1[10]={'f','a','s','h','i','o','n'};該定義只對前8個元素賦值,后2個元素為零值(即ASCII碼為0的字符)。它在內(nèi)存中的表示如圖5-4所示。fashion\0\0由于采用字符串常量的方式對字符數(shù)組初始化時,系統(tǒng)會系統(tǒng)增加一個‘\0’,因此對于語句: chars2[]=

"fashion";系統(tǒng)將認為數(shù)組s的長度是7,占8個字節(jié)。該數(shù)組在內(nèi)存中的表示如:上述語句等價于:chars2[8]={'f','a','s','h','i','o','n'};fashion\05.3.3字符數(shù)組的輸入輸出同其他類型的數(shù)組一樣,字符輸出的輸入與輸出可以逐個元素進行處理。例如: chars[10]; for(i=0;i<10;i++) scanf(“%c”,&s[i]); for(i=0;i<10;i++) printf(“%c”,s[i]);由于字符數(shù)組可以按照字符串形式處理,因此在輸入輸出時可以使用格式符“%s”整體進行。例如: chars[10]=“hello!”; printf(“%s”,s);輸出時,系統(tǒng)檢測到結(jié)束標志‘\0’即停止輸出,因此輸出結(jié)果為: hello!以“%s”輸出時需要注意,該格式表示輸出字符串,因此在輸出項中應(yīng)該寫數(shù)組名,而不能使用數(shù)組元素的形式,即語句: printf(“%s”,s[0]); 這種形式是不對的。輸入時,系統(tǒng)遇到第一個‘\0’即停止輸出,即使該字符后仍有其他字符。例如: chars[10]=“hello!\0ab”; printf(“%s”,s);輸出結(jié)果為:hello!使用scanf進行字符串輸入時,系統(tǒng)以空格或回車作為一個字符串的輸入結(jié)束標志。使用gets函數(shù)或puts函數(shù)對字符數(shù)組進行整體輸入與輸出。

在使用gets函數(shù)或puts函數(shù)之前,應(yīng)包含頭文件“stdio.h”。使用gets函數(shù)對字符數(shù)組進行整體輸入格式:gets(字符數(shù)組名

)作用:從鍵盤上輸入一個字符串賦給該數(shù)組。例如:chars[20];gets(s);若從鍵盤上輸入:thankyou此時字符數(shù)組s的值為字符串“thankyou”。使用puts函數(shù)對字符數(shù)組進行整體輸出格式:puts(字符數(shù)組名)

或:puts(字符串常量)作用:將一個字符數(shù)組或字符串輸出。例如:charstr[20]={"OneTwo\0Three"};printf("%s",str); puts(str);puts("thankyou!\0abc");5.3.4字符串處理函數(shù)C語言的函數(shù)庫中提供了許多字符串的處理函數(shù)(頭文件為string.h),使用戶能夠方便地處理字符串。這里介紹一些常用的函數(shù)如下:求串長函數(shù)strlen(s)、串復(fù)制函數(shù)strcpy(s1,s2)、串連接函數(shù)strcat(s1,s2)、串比較函數(shù)strcpy(s1,s2)。說明:其中的參數(shù)是符合指定要求的字符串數(shù)據(jù)。

1.strlen(字符數(shù)組)作用:計算字符串s的長度,即首次出現(xiàn)'\0'之前的字符個數(shù)。參數(shù)要求:字符串s既可以是字符串常量,也可以是字符數(shù)組。例如:chars1[]={"perfect"}; //strlen(s1)等于7chars2[20]={"One\0Two\0Three"}; //strlen(s2)等于3chars3[]="thank&you!\0abc"; //strlen(s3)等于10strlen("abc\t1234\n")等于9;strlen("abc\t1234\123\n")等于10。其中,’\t’、’\n’和’\123’均為轉(zhuǎn)義字符,按一個字符計算。2.串復(fù)制函數(shù)strcpy(s1,s2)作用:將字符串s2的內(nèi)容復(fù)制到字符串s1中。參數(shù)要求:s1必須是容量足夠大的字符數(shù)組;s2既可以是字符串常量,也可以是字符數(shù)組。不允許象其他變量一樣對字符數(shù)組整體賦值,例如下面語句是錯誤的: chars1[10],s2[]=“hello!”; s1=s2;因為數(shù)組名s1是地址常量,不能進行賦值運算,必須采用strcpy函數(shù)進行復(fù)制。例如:chars1[10]="thankyou!",chars2[]=“hello!”;strcpy(s1,s2);執(zhí)行后,s1的狀態(tài)如圖5-8所示。hello!\04.串比較函數(shù)strcpy(s1,s2)作用:比較字符串s1和字符串s2內(nèi)容的大小。參數(shù)要求:s1和s2既可以是字符串常量,也可以是字符數(shù)組。字符串比較并不是比較它們的長度,而是依據(jù)這樣的規(guī)則:對兩個字符串從左至右依次比較對應(yīng)的字符(按照字符的ASCII碼值進行比較),直到遇到不同字符為止。若全部字符相同,則認為兩字符串相等,否則以遇到的第一個不同字符的大小來決定兩個字符串的大小。例如:“abc”大于“ABC” (因為

'a'>'A')“abCdef”小于“abcd” (因為

'C'<'c')“ABC”等于“ABC”“COM”小于“COMPUTER”調(diào)用函數(shù)strcmp(s1,s2)的結(jié)果:若s1小于s2,則函數(shù)值

<0;若s1等于s2,則函數(shù)值

==0;若s1大于s2,則函數(shù)值

>0。該函數(shù)的返回值返回比較的結(jié)果: 字符數(shù)組1=字符數(shù)組2,函數(shù)值=0; 字符數(shù)組1>字符數(shù)組2,函數(shù)值>0; 字符數(shù)組1<字符數(shù)組2,函數(shù)值<0;例如: chars1[]=“thank”,s2[]=“you”; if(strcmp(s1,s2)>0)printf(“bigger\n”); 5.4數(shù)組的應(yīng)用舉例 例6-4:找出10個學生中成績低于其平均成績的人數(shù)并輸出。分析:可以定義一個長度為10的實型數(shù)組scores存儲10個學生成績。先計算出平均成績,然后統(tǒng)計成績低于平均成績的人數(shù)。

程序如下:main(){inti,count=0;//count存儲人數(shù),初始化為0

floatscores[10],ave;//ave存儲平均成績

for(i=0;i<10;i++){scanf("%f",&scores[i]);ave+=scores[i];

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論