C語(yǔ)言程序設(shè)計(jì)(第2版)課件:數(shù)組_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)(第2版)課件:數(shù)組_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)(第2版)課件:數(shù)組_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)(第2版)課件:數(shù)組_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)(第2版)課件:數(shù)組_第5頁(yè)
已閱讀5頁(yè),還剩39頁(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)介

0102036.1一維數(shù)組6.2二維數(shù)組6.3字符數(shù)組和字符串

數(shù)組04056.4知識(shí)點(diǎn)強(qiáng)化與應(yīng)用6.5本章小結(jié)【學(xué)習(xí)要點(diǎn)】1.一維數(shù)組、二維數(shù)組的定義,元素引用及初始化方法2.字符數(shù)組的定義與初始化3.字符串輸入、輸出方法及常用的字符串處理函數(shù)的使用4.簡(jiǎn)單的算法設(shè)計(jì)(排序,查找等算法)本章主要介紹一維和二維數(shù)組的定義與使用,字符數(shù)組的概念和使用,并培養(yǎng)使用數(shù)組對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)的思想。完成10個(gè)學(xué)生信息的輸入(學(xué)號(hào),性別,英語(yǔ)、高等數(shù)學(xué)、計(jì)算機(jī)考試成績(jī)),求出每個(gè)同學(xué)的考試平均分,并將所有同學(xué)信息按照格式輸出?!緦?dǎo)入案例:大量數(shù)據(jù)的存儲(chǔ)及處理】

若使用一般變量對(duì)案例中的數(shù)據(jù)進(jìn)行處理,將需要定義10個(gè)變量存儲(chǔ)性別,10個(gè)變量存儲(chǔ)學(xué)號(hào),10個(gè)變量存儲(chǔ)英語(yǔ)成績(jī),10個(gè)變量存儲(chǔ)數(shù)學(xué)成績(jī),10個(gè)變量存儲(chǔ)計(jì)算機(jī)成績(jī),10個(gè)變量存儲(chǔ)總分,總共至少包含60個(gè)變量,很顯然用常規(guī)的思路處理是不太合適的,該如何完成這些大量的有一定關(guān)聯(lián)的數(shù)據(jù)存儲(chǔ)呢?分析

在前面的章節(jié)中,當(dāng)處理的數(shù)據(jù)個(gè)數(shù)很少時(shí),會(huì)想到定義幾個(gè)變量來(lái)存儲(chǔ)這些數(shù)據(jù)。但當(dāng)需要處理的數(shù)據(jù)很多(幾十、上百甚至上萬(wàn)個(gè)數(shù)據(jù))時(shí),不可能一一去定義那么多變量來(lái)處理。例如,若需要將100個(gè)同學(xué)的計(jì)算機(jī)考試成績(jī)保存下來(lái),此時(shí)去定義100個(gè)變量來(lái)存儲(chǔ)這些數(shù)據(jù)是不明智的,?!窘鉀Q方案】對(duì)于存儲(chǔ)大量的、相同意義的數(shù)據(jù)使用數(shù)組(Array)最為合適。分析6.1一維數(shù)組6.1.1一維數(shù)組的定義6.1.2一維數(shù)組元素的引用6.1.3一維數(shù)組元素的初始化6.1.1一維數(shù)組的定義方法:數(shù)組類型數(shù)組名[數(shù)組長(zhǎng)度]如:inta[5];floatscore[66];charstr[100];1.數(shù)組類型:可以是前面介紹的所有的數(shù)據(jù)類型,也可以是后面將介紹的組合類型;2.數(shù)組名:命名規(guī)則同于前面介紹的變量的命名規(guī)則;3.數(shù)組長(zhǎng)度:表示數(shù)組內(nèi)元素個(gè)數(shù),必須是整形常量或表達(dá)式,不能是變量。6.1.2一維數(shù)組元素的引用方法:數(shù)組名[元素下標(biāo)]如:a[3],score[5],str[10];1.該數(shù)組必須已經(jīng)在前面定義過(guò);2.元素下標(biāo)可以是常量或表達(dá)式,也可以是變量,但是必須為整型;3.下標(biāo)的范圍為:[0,數(shù)組長(zhǎng)度-1],否則將發(fā)生訪問(wèn)越界;6.1.3一維數(shù)組元素的初始化方法:數(shù)據(jù)類型數(shù)組名[常量表達(dá)式]={初始化數(shù)據(jù)}主要包含以下情形:1、定義數(shù)組時(shí),對(duì)全部元素賦值:inta[5]={1,2,3,4,5};2、對(duì)部分元素賦值:intb[5]={1,2};b[0]=1,b[1]=2;其余元素為?6.1.3一維數(shù)組元素的初始化(續(xù))3、

若所有元素賦值為0,可使用如下方法:

intc[5]={0,0,0,0,0};也可以使用:intc[5]={0};4、若要對(duì)數(shù)組的全部元素初始化,則可省略數(shù)組說(shuō)明中的大小。intd[]={1,2,3,4,5};例1:從鍵盤動(dòng)態(tài)輸入10個(gè)整數(shù),然后將10個(gè)數(shù)據(jù)順序輸出;分析:1.先定義正確類型的、合適長(zhǎng)度的數(shù)組;2.結(jié)合for循環(huán)(推薦)使用循環(huán)變量控制數(shù)組下標(biāo),來(lái)逐個(gè)引用數(shù)組元素;3.使用前面學(xué)習(xí)過(guò)的函數(shù)完成數(shù)據(jù)的輸入輸出。參考代碼段:inta[10],i;

for(i=0;i<10;i++) scanf(“%d”,&a[i]);

for(i=0;i<10;i++)

printf("%2d",a[i]);例2:從鍵盤動(dòng)態(tài)輸入10個(gè)整數(shù),然后將10個(gè)數(shù)據(jù)前后交換存放;分析:1.先正確的完成數(shù)據(jù)的輸入與輸出;2.a[0]與a[9]交換,a[1]和a[8]交換,a[2]和a[7]交換,進(jìn)而推理出a[

i]和a[9-i]交換;3.注意控制i的變化范圍。參考代碼段:for(i=0;i<10/2;i++)

{t=a[i];a[i]=a[9-i];a[9-i]=t; }若數(shù)據(jù)個(gè)數(shù)為n個(gè),該如何實(shí)現(xiàn)呢?6.2二維數(shù)組6.2.1二維數(shù)組的定義6.2.2二維數(shù)組元素的引用6.2.3二維數(shù)組元素的初始化6.2.1二維數(shù)組的定義當(dāng)存儲(chǔ)全班5個(gè)同學(xué)的總分時(shí),可以定義intsum[5]來(lái)存放,那么現(xiàn)在若需要存儲(chǔ)5個(gè)同學(xué)4門考試的分?jǐn)?shù)時(shí),可以考慮使用二維數(shù)組intscores[5][4]來(lái)存放。該二維數(shù)組可以理解成由5個(gè)一維數(shù)組構(gòu)成,其中每個(gè)一維數(shù)組包含有4個(gè)元素,在內(nèi)存中,二維數(shù)組以行為順序進(jìn)行存放,即先存放第一行的第一個(gè)元素,再一行的第二個(gè)元素,以此類推……6.2.1二維數(shù)組的定義(續(xù))方法:數(shù)組類型數(shù)組名[常量表達(dá)式一][常量表達(dá)式二]如:inta[5][3];floatscore[5][4];charstr[3][100];1.數(shù)組類型、數(shù)組名的命名規(guī)則與一維數(shù)組的定義相同;2.常量表達(dá)式一和常量表達(dá)式二分別表示所定義的數(shù)組的行數(shù)和列數(shù),與一維數(shù)組中數(shù)組長(zhǎng)度的定義規(guī)則相同;6.2.2一維數(shù)組元素的引用方法:數(shù)組名[行標(biāo)][列標(biāo)]如:a[3][0],score[2][3],str[2][10];1.該數(shù)組必須是在前面已經(jīng)定義過(guò)的數(shù)組;2.行標(biāo)、列標(biāo)表示所訪問(wèn)元素的具體行位置和所在的列的位置,其可以是常量或表達(dá)式,也可以是變量,但是必須為整型;3.行標(biāo)、列標(biāo)的范圍為:[0,行數(shù)-1]、[0,列數(shù)-1]。6.2.3二維數(shù)組元素的初始化方法:分行進(jìn)行初始化數(shù)據(jù)類型數(shù)組名[常量表達(dá)式一][常量表達(dá)式二]={{},{},{}};主要包含以下情形:1、定義數(shù)組時(shí),對(duì)全部元素賦值分行賦值

inta[3][4]={{1,2,3,4},{5,6,7,8},{2,3,4,5}};也可以:inta[3][4]={1,2,3,4,5,6,7,8,2,3,4,5};6.2.3二維數(shù)組元素的初始化(續(xù))2、對(duì)部分元素初始化:

inta[3][4]={{1,4},{0,5}};3、在不產(chǎn)生歧異的情況下,可以省略第一維長(zhǎng)度的說(shuō)明

inta[][4]={{1,2,3,4},{5,6,7,8},{2,3,4,5}};數(shù)組a所有元素的值分別為多少?例3:定義一個(gè)3行4列的整型數(shù)組,數(shù)據(jù)從鍵盤動(dòng)態(tài)輸入,最后按照行列的格式將該數(shù)組元素輸出;分析:1.先定義正確類型的、合適長(zhǎng)度的數(shù)組;2.使用for循環(huán)嵌套(二維數(shù)組一般都需要)分別控制行標(biāo)和列標(biāo),來(lái)逐個(gè)引用數(shù)組元素;參考代碼段:inta[3][4],i,j;

for(i=0;i<3;i++)

for(j=0;j<4;j++) scanf("%d",&a[i][j]);6.3字符數(shù)組和字符串6.3.1字符數(shù)組的定義6.3.2字符數(shù)組的初始化6.3.3字符數(shù)組元素的引用6.3.4字符串的存儲(chǔ)6.3.5字符數(shù)組的輸入輸出6.3.6常用字符串處理函數(shù)6.3.1字符數(shù)組的定義方法:一維:char數(shù)組名[數(shù)組長(zhǎng)度]二維:char數(shù)組名[行數(shù)][列數(shù)]6.3.2字符數(shù)組的初始化方法:

char數(shù)組名[數(shù)組長(zhǎng)度]={初始化的一個(gè)一個(gè)字符}如:charstr[10]={‘b’,’o’,’y’};6.3.3字符數(shù)組元素的引用方法:一維:數(shù)組名[下標(biāo)]二維:數(shù)組名[行數(shù)][列數(shù)]字符數(shù)組就是類型為char型的數(shù)組,之前介紹的一維、二維數(shù)組的定義、初始化和元素引用都可以直接使用。6.3.4字符串的存儲(chǔ)字符串是由“”擴(kuò)起來(lái)的以\0結(jié)束的零個(gè)或多個(gè)字符序列,如“welcome”在內(nèi)存的存放為:welcome\0C語(yǔ)言沒(méi)有提供專門的字符串類型,對(duì)字符串采用的思想是將字符串作為字符數(shù)組來(lái)處理,因此可以用如下方式對(duì)字符數(shù)組初始化:charstr[10]=“welcome”;6.3.5字符數(shù)組的輸入輸出輸入可以有以下方法:

1、用循環(huán)結(jié)合%c使用;

2、scanf函數(shù)結(jié)合%s使用;

3、調(diào)用gets函數(shù)。輸出可以有以下方法:

1、用循環(huán)結(jié)合%c使用;

2、printf函數(shù)結(jié)合%s使用;

3、調(diào)用puts函數(shù)。6.3.5字符數(shù)組的輸入輸出(續(xù))charstr[100],ch; inti;

for(i=0;(ch=getchar())!='\n';i++)

s[i]=ch;s[i]='\0';//方法1輸入

for(i=0;str[i]!=‘\0’;i++)

printf(“%c”,str[i]);//方法1輸出 scanf("%s",str);

//方法2輸入 printf(“%s”,str);

//方法2輸出

gets(str);//方法3輸入 puts(str);//方法3輸出6.3.5字符數(shù)組的輸入輸出(續(xù))1.方法1是將其完全當(dāng)作一般的數(shù)組來(lái)處理,這種處理方法不常見(jiàn);2.方法2處理時(shí),格式控制符需用%s,而不能用%c;輸入表列中的參數(shù),需直接給出字符數(shù)組的名稱,而不能用&str或&str[i]的形式;3.第2種方法在輸入過(guò)程中如檢測(cè)到空格則輸入結(jié)束,因此,當(dāng)輸入的有效字符中間包含字符,一般采用第3種方法。6.3.6常用的字符串處理函數(shù)1、strcat(str1,str2)//字符串連接函數(shù)功能:把字符串str2接到字符串str1的后面,結(jié)果較長(zhǎng)的新的串放在字符串1中。

說(shuō)明:

(1)字符數(shù)組1必須足夠長(zhǎng),以便容納連接后的新字符串,否則就會(huì)因長(zhǎng)度不夠出錯(cuò);

(2)在連接前,兩個(gè)字符串的后面都有一個(gè)‘\0’,連接后將字符串1后面的‘\0’取消,只在新串最后保留一個(gè)‘\0’;

(3)字符數(shù)組2可以使一個(gè)字符串常量;6.3.6常用的字符串處理函數(shù)(續(xù))2、

strcpy(str1,str2)//字符串復(fù)制函數(shù)功能:將字符串2拷貝到字符數(shù)組1中去。說(shuō)明:

(1)str1必須定義得足夠長(zhǎng),以便容納被拷貝的字符串。str1的長(zhǎng)度不應(yīng)小于str12的長(zhǎng)度;

(2)str1必須寫成數(shù)組名形式,str2可以是字符數(shù)組名,也可以是一個(gè)字符串常量。如strcpy(str1,“China”);6.3.6常用的字符串處理函數(shù)(續(xù))3、

strlen(str)//求字符串長(zhǎng)度功能:求字符串str有效字符的個(gè)數(shù)。說(shuō)明:

(1)函數(shù)的值為字符串中第一個(gè)‘\0’之前字符的個(gè)數(shù),不包括‘\0’在內(nèi)。如:charstr[10]={"China"};printf("%d",strlen(str));

輸出結(jié)果不是10,也不是6,而是5。

(2)也可以直接求字符串常量的長(zhǎng)度,strlen(“China”)。6.3.6常用的字符串處理函數(shù)(續(xù))4、strcmp(str1,str2)//字符串大小比較函數(shù)功能:比較字符串1和字符串2的大小。說(shuō)明:字符串比較的規(guī)則為:對(duì)兩個(gè)字符串自左至右逐個(gè)字符相比(按ASCII碼值大小比較),直到出現(xiàn)不同的字符或遇到‘\0’為止。如全部字符相同,則認(rèn)為相等;若出現(xiàn)不相同的字符,則以第一個(gè)不相同的字符的比較結(jié)果為準(zhǔn),比較的結(jié)果由函數(shù)值帶回。①如果字符串1=字符串2,函數(shù)值為0。②如果字符串1>字符串2,函數(shù)值為一正整數(shù)。③如果字符串1<字符串2,函數(shù)值為一負(fù)整數(shù)。例4:自己編寫程序?qū)崿F(xiàn)函數(shù)strcat的功能;分析:1.先理解strcat函數(shù)的功能;2.使用循環(huán)將字符串2‘\0’之前的字符逐個(gè)拷貝到字符串1;3.在字符串1后加上\0作為字符串的結(jié)束標(biāo)志。參考代碼段:charstr1[100],str2[50]; inti,j; i=j=0; gets(str2);puts(str2); while(str2[j])str1[i++]=str2[j++];

str1[i]='\0'; puts(str1); puts(str2);6.4知識(shí)點(diǎn)強(qiáng)化與應(yīng)用例5:輸入10個(gè)整數(shù),求出最大值并將其輸出;分析:1.先定義合適大小,合適類型的數(shù)組,再通過(guò)循環(huán)為元素賦值;2.再假設(shè)第1個(gè)元素a[0]為最大,將其賦予變量max,然后將剩下的9個(gè)元素依次和max變量比較;若a[i]>max,則用a[i]更新max,即max=a[i];接著繼續(xù)與下一個(gè)元素進(jìn)行比較,直到與數(shù)組中的所有元素比較完畢。此時(shí),變量max中存放的就是這10個(gè)數(shù)中的最大值。6.4知識(shí)點(diǎn)強(qiáng)化與應(yīng)用例6:從鍵盤輸入10個(gè)整數(shù),用冒泡法對(duì)其排序后按照從小到大輸出輸出;冒泡法思想:將相鄰位置上的兩個(gè)數(shù)比較,將小的調(diào)到前頭。假設(shè)數(shù)組元素初始序列為:985420第一趟比較

經(jīng)過(guò)第一趟(共5次比較)后,最大的數(shù)9已“沉底”

,然后進(jìn)行對(duì)余下的前面5個(gè)數(shù)進(jìn)行第二趟比較。

經(jīng)過(guò)第二趟(共4次比較)后,得到次大的數(shù)8,接下來(lái)對(duì)剩下的4個(gè)數(shù)進(jìn)行第三趟比較,依次類推……。第二趟比較如此進(jìn)行下去,可以推知6個(gè)數(shù)要比較5趟。在第一趟中要進(jìn)行兩兩比較5次,在第二趟中比4次,……第5趟比1次。如果有n個(gè)數(shù),則要進(jìn)行n一1趟比較。在第j趟比較中要進(jìn)行n一j次兩兩比較,流程圖可以表示為:參考程序:{

inti,j,m,a[11];for(i=1;i<=10;i++)scanf(“%d”,&a[i]);//輸入N個(gè)整數(shù)for(j=1;j<=10;j++)//N-1輪排序處理for(i=1;i<=10-j;i++)//N-j次相鄰數(shù)據(jù)比較if(a[i]>a[i+1]){m=a[i];//交換數(shù)據(jù)a[i]=a[i+1];

a[i+1]=m;

}6.4知識(shí)點(diǎn)強(qiáng)化與應(yīng)用例7:從鍵盤輸入10個(gè)整數(shù),在其中查找某一指定的元素是否存在,若存在,輸出其位置,若不存在,輸出提示結(jié)果。(假設(shè)10個(gè)數(shù)據(jù)不重復(fù))分析:1.先定義合適大小,合適類型的數(shù)組,再通過(guò)循環(huán)為元素賦值;2.定義一個(gè)標(biāo)志位flag以最后判定查找的數(shù)據(jù)是否存在于數(shù)組中,初始假定不存在,flag=0;3.從數(shù)組第一個(gè)元素開(kāi)始逐一判斷其值是否與待查找的數(shù)值相等,若不相等則繼續(xù)判斷下一個(gè),直到所有元素判斷完畢,若相等則記下當(dāng)前元素的下標(biāo)并更改flag為1,并強(qiáng)制退出循環(huán);4.最后根據(jù)flag的值判定元素是否存在于數(shù)組中,并將結(jié)果輸出。6.4知識(shí)點(diǎn)強(qiáng)化與應(yīng)用例8:有一個(gè)3×4的矩陣,編程求出每行中的最大元素及其所在的行號(hào)和列號(hào)。分析:對(duì)于一個(gè)二維數(shù)組,可以理解為由多個(gè)一維數(shù)組組成。對(duì)于3×4數(shù)組,可理解為由3個(gè)一維數(shù)組構(gòu)成,每個(gè)一維數(shù)組有4個(gè)元素。求每行的最大值即為求每個(gè)一維數(shù)組的最大值,用循環(huán)逐行求出該行中最大的元素及其所在的位置并將結(jié)果輸出,每行處理結(jié)束以后再跳轉(zhuǎn)到下一行。6.4知識(shí)點(diǎn)強(qiáng)化與應(yīng)用例9:找出3個(gè)字符串中最大的那個(gè)字符串。分析:1.定義一個(gè)二維字符數(shù)組str[3][100]存放這三個(gè)字符串,調(diào)用gets函

溫馨提示

  • 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)論