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

1、C程序設(shè)計(jì)數(shù)組PPT課件C程序設(shè)計(jì)數(shù)組PPT課件本章主要內(nèi)容 1. 數(shù)組基本概念 2. 一維數(shù)組及應(yīng)用 3. 二維數(shù)組及應(yīng)用 4. 字符數(shù)組和字符串本章主要內(nèi)容 1. 數(shù)組基本概念5.1 數(shù)組的概念 C語(yǔ)言中定義普通變量就是按變量的數(shù)據(jù)類型找到相應(yīng)大小的存儲(chǔ)空間例如: int a1,a2;float a3;char a4a1a2整型變量占兩個(gè)字節(jié)5.1 數(shù)組的概念 C語(yǔ)言中定義普通變量就是按變量int a1,a2;float a3;char a4a1a2a3實(shí)型變量占四個(gè)字節(jié) C語(yǔ)言中定義普通變量就是按變量的數(shù)據(jù)類型找到相應(yīng)大小的存儲(chǔ)空間例如:5.1 數(shù)組的概念int a1,a2;a1a5.1

2、 數(shù)組的概念int a1,a2;float a3;char a4a1a2a3a4 C語(yǔ)言中定義普通變量就是按變量的數(shù)據(jù)類型找到相應(yīng)大小的存儲(chǔ)空間例如:字符型變量占1個(gè)字節(jié)5.1 數(shù)組的概念int 5.1 數(shù)組的概念 C語(yǔ)言中定義數(shù)組就是按數(shù)組數(shù)據(jù)類型及元素個(gè)數(shù)找到相應(yīng)大小的一組連續(xù)的存儲(chǔ)空間。例如: int a4a0=2a3=5a2=3a定義了0 3共4個(gè)元素占8個(gè)字節(jié)01235.1 數(shù)組的概念 C語(yǔ)言中定義數(shù)組就是按數(shù)組數(shù)據(jù)5.1 數(shù)組的概念int a4a0=2a3=5a2=3a2 C語(yǔ)言中定義數(shù)組就是按數(shù)組數(shù)據(jù)類型及元素個(gè)數(shù)找到相應(yīng)大小的一組連續(xù)的存儲(chǔ)空間。例如: 5.1 數(shù)組的概念int

3、 5.1 數(shù)組的概念int a4a0=2a3=5a2=3a C語(yǔ)言中定義數(shù)組就是按數(shù)組數(shù)據(jù)類型及元素個(gè)數(shù)找到相應(yīng)大小的一組連續(xù)的存儲(chǔ)空間。例如: 525.1 數(shù)組的概念int 5.1 數(shù)組的概念int a4a0=2a3=5a2=3a C語(yǔ)言中定義數(shù)組就是按數(shù)組數(shù)據(jù)類型及元素個(gè)數(shù)找到相應(yīng)大小的一組連續(xù)的存儲(chǔ)空間。例如: 5235.1 數(shù)組的概念int 5.1 數(shù)組的概念1、數(shù)組是內(nèi)存中的一塊連續(xù)的存儲(chǔ)區(qū)域,該區(qū)域由若干個(gè)數(shù)據(jù)成員組成;2、每一個(gè)數(shù)據(jù)成員稱為一個(gè)數(shù)組元素,有統(tǒng)一的名字(即數(shù)組名),用元素在數(shù)組中的序號(hào)(稱為下標(biāo))來(lái)標(biāo)識(shí);3、數(shù)組可以是一維的,也可以是多維的,不管一維還是多維,各元素

4、在內(nèi)存中都是連續(xù)存放的;4、數(shù)組的每一維下標(biāo)必須用方括號(hào)括起來(lái);5.1 數(shù)組的概念1、數(shù)組是內(nèi)存中的一塊連續(xù)的存儲(chǔ)區(qū)域,該區(qū)5.1 數(shù)組的概念5、一維數(shù)組是指只有一個(gè)下標(biāo)的數(shù)組,定義一個(gè)數(shù)組必須說(shuō)明數(shù)組類型、名稱、下標(biāo)維數(shù)及每維下標(biāo)最多元素個(gè)數(shù)。例如:int a65.1 數(shù)組的概念5、一維數(shù)組是指只有一個(gè)下標(biāo)的數(shù)組,定義一5.1 數(shù)組的概念5、一維數(shù)組是指只有一個(gè)下標(biāo)的數(shù)組,定義一個(gè)數(shù)組必須說(shuō)明數(shù)組類型、名稱、下標(biāo)維數(shù)及每維下標(biāo)最多元素個(gè)數(shù)。例如:int a6 數(shù)組的類型,決定數(shù)組每個(gè)元素所占的存儲(chǔ)區(qū)域大小5.1 數(shù)組的概念5、一維數(shù)組是指只有一個(gè)下標(biāo)的數(shù)組,定義一5.1 數(shù)組的概念5、一維數(shù)

5、組是指只有一個(gè)下標(biāo)的數(shù)組,定義一個(gè)數(shù)組必須說(shuō)明數(shù)組類型、名稱、下標(biāo)維數(shù)及每維下標(biāo)最多元素個(gè)數(shù)。例如:int a6 數(shù)組的名稱,是程序中引用數(shù)組元素的依據(jù)之一5.1 數(shù)組的概念5、一維數(shù)組是指只有一個(gè)下標(biāo)的數(shù)組,定義一5.1 數(shù)組的概念5、一維數(shù)組是指只有一個(gè)下標(biāo)的數(shù)組,定義一個(gè)數(shù)組必須說(shuō)明數(shù)組類型、名稱、下標(biāo)維數(shù)及每維下標(biāo)最多元素個(gè)數(shù)。例如:int a6 數(shù)組的維說(shuō)明,決定數(shù)組由幾維組成,本例為一維數(shù)組,只有一個(gè)下標(biāo)5.1 數(shù)組的概念5、一維數(shù)組是指只有一個(gè)下標(biāo)的數(shù)組,定義一5、一維數(shù)組是指只有一個(gè)下標(biāo)的數(shù)組,定義一個(gè)數(shù)組必須說(shuō)明數(shù)組類型、名稱、下標(biāo)維數(shù)及每維下標(biāo)最多元素個(gè)數(shù)。例如:int a

6、6 數(shù)組的元素個(gè)數(shù),本例共定義6個(gè)元素,下標(biāo)從055.1 數(shù)組的概念 假設(shè)數(shù)組元素a3在內(nèi)存中的地址為3100,那a0的地址?a5呢?5、一維數(shù)組是指只有一個(gè)下標(biāo)的數(shù)組,定義一個(gè)數(shù)組必須說(shuō)明數(shù)組6、二維數(shù)組是指有兩個(gè)下標(biāo)的數(shù)組,二維數(shù)組在邏輯上表現(xiàn)為二維表格,是若干個(gè)一維數(shù)組的集合。例如:5.1 數(shù)組的概念int a23 定義了一個(gè)整型二維數(shù)組,邏輯上由兩行三列共6個(gè)元素組成。元素分別為: a00、a01、a02 a10、a11、a126、二維數(shù)組是指有兩個(gè)下標(biāo)的數(shù)組,二維數(shù)組在邏輯上表現(xiàn)為二維6、二維數(shù)組是指有兩個(gè)下標(biāo)的數(shù)組,二維數(shù)組在邏輯上表現(xiàn)為二維表格,是若干個(gè)一維數(shù)組的集合。例如:5.

7、1 數(shù)組的概念int a23a00a01a02a10a11a12a0a1 假設(shè)定義數(shù)組float a56,已知a11在內(nèi)存中的地址為3100,那a22的地址?a45呢?6、二維數(shù)組是指有兩個(gè)下標(biāo)的數(shù)組,二維數(shù)組在邏輯上表現(xiàn)為二維7、字符數(shù)組是用于存放字符的數(shù)組,每個(gè)元素可以存放一個(gè)字符,主要用于處理字符串。例如:5.1 數(shù)組的概念char a10 定義了一個(gè)字符型一維數(shù)組,最多可以存放10個(gè)字符。char a1010 定義了一個(gè)字符型二維數(shù)組,最多可以存放100個(gè)字符;一般用于存放長(zhǎng)度不超過(guò)10個(gè)字符的字符串。7、字符數(shù)組是用于存放字符的數(shù)組,每個(gè)元素可以存放一個(gè)字符,5.2 一維數(shù)組及應(yīng)用5

8、.2.1 一維數(shù)組的定義(P133)與初始化(P136)5.2.2 一維數(shù)組的引用與遍歷 所謂遍歷,是指對(duì)數(shù)組中的所有元素掃描一遍,對(duì)于一維數(shù)組,通常用單層循環(huán)完成。例如: 1. 遍歷賦值為每個(gè)元素賦值 for(i=0;iN;i+) printf(請(qǐng)輸入第%d個(gè)元素的值:,i); scanf(%d,&ai); 5.2 一維數(shù)組及應(yīng)用5.2.1 一維數(shù)組的定義(P133)5.2 一維數(shù)組及應(yīng)用5.2.2 一維數(shù)組的引用與遍歷2. 遍歷輸出輸出每個(gè)元素的值printf(數(shù)組各元素的值為:);for(i=0;iN;i+) printf(%5d,ai);5.2 一維數(shù)組及應(yīng)用5.2.2 一維數(shù)組的引用

9、與遍歷pri5.2 一維數(shù)組及應(yīng)用5.2.3 一維數(shù)組應(yīng)用舉例 利用數(shù)組編程的一般步驟為: (1)定義數(shù)組; (2)為數(shù)組各元素賦值; (3)遍歷數(shù)組各元素,按要求處理; (4)輸出處理結(jié)果。5.2 一維數(shù)組及應(yīng)用5.2.3 一維數(shù)組應(yīng)用舉例5.2 一維數(shù)組及應(yīng)用5.2.3 一維數(shù)組應(yīng)用舉例 1. 從鍵盤輸入10個(gè)學(xué)生成績(jī),求平均分并統(tǒng)計(jì)高于平均分的人數(shù)(1)定義有10個(gè)元素的數(shù)組,求平均分就需要累加,所以還需要一個(gè)累加器,要統(tǒng)計(jì)人數(shù)還需要一個(gè)計(jì)數(shù)器,要循環(huán)遍歷數(shù)組各元素還需要循環(huán)變量;(2)通過(guò)遍歷為數(shù)組各元素賦值(3)累加各數(shù)組元素值,需要遍歷各數(shù)組元素(4)求出平均分后還要統(tǒng)計(jì)高于平均分

10、的人數(shù),需要拿每個(gè)元素和平均分進(jìn)行比較,所以還需要遍歷各數(shù)組元素5.2 一維數(shù)組及應(yīng)用5.2.3 一維數(shù)組應(yīng)用舉例(1)定義5.2 一維數(shù)組及應(yīng)用5.2.3 一維數(shù)組應(yīng)用舉例 1. 從鍵盤輸入10個(gè)學(xué)生成績(jī),求平均分并統(tǒng)計(jì)高于平均分的人數(shù)(5)輸出處理結(jié)果。5.2 一維數(shù)組及應(yīng)用5.2.3 一維數(shù)組應(yīng)用舉例(5)輸出5.2.3 一維數(shù)組應(yīng)用舉例 2. 隨機(jī)產(chǎn)生10個(gè)兩位整數(shù)放入一維數(shù)組,再將各數(shù)組元素按逆序存放,如a0與a9對(duì)換,a1與a8對(duì)換; 3. 隨機(jī)產(chǎn)生10個(gè)兩位整數(shù)放入一維數(shù)組,找出其中最大值及其位置;5.2 一維數(shù)組及應(yīng)用5.2.3 一維數(shù)組應(yīng)用舉例 3. 隨機(jī)產(chǎn)生10個(gè)兩位整數(shù)5

11、.2 一維數(shù)組及應(yīng)用main()int a10,max,k,i,j; printf(原數(shù)據(jù)為:); for(i=0;i10;i+) ai=rand()%90+10; printf(%5d,ai); k=0; for(i=1;i10;i+) if(akai) k=i; printf(n最大值%d,在第%d位!,ak,k);5.2 一維數(shù)組及應(yīng)用main()5.2.3 一維數(shù)組應(yīng)用舉例 4. 對(duì)8個(gè)數(shù)按降序排序比較交換法 5.2 一維數(shù)組及應(yīng)用第1趟:假設(shè)a0元素最大,將其和后面a1-a7各元素值進(jìn)行比較,如果有比它更大的數(shù),則交換。代碼段如下: for(j=1;i8;j+) if(a0aj) t

12、=a0;a0=aj;aj=t;5.2.3 一維數(shù)組應(yīng)用舉例5.2 一維數(shù)組及應(yīng)用第1趟:假5.2 一維數(shù)組及應(yīng)用7192935950277941代碼段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj1j5.2 一維數(shù)組及應(yīng)用7192935950277941代碼段5.2 一維數(shù)組及應(yīng)用7192935950277941代碼段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a01j5.2 一維數(shù)組及應(yīng)用7192935950277941代碼段5.2 一維數(shù)組及應(yīng)用7192935950277941代碼段如下: for

13、(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj條件成立!交換!1j5.2 一維數(shù)組及應(yīng)用7192935950277941代碼段5.2 一維數(shù)組及應(yīng)用9271935950277941代碼段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj1j5.2 一維數(shù)組及應(yīng)用9271935950277941代碼段5.2 一維數(shù)組及應(yīng)用9271935950277941代碼段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj2j5.2 一維數(shù)組及應(yīng)用9271935950277941代碼

14、段5.2 一維數(shù)組及應(yīng)用9271935950277941代碼段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj2j條件成立!交換!5.2 一維數(shù)組及應(yīng)用9271935950277941代碼段5.2 一維數(shù)組及應(yīng)用9371925950277941代碼段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj2j5.2 一維數(shù)組及應(yīng)用9371925950277941代碼段5.2 一維數(shù)組及應(yīng)用9371925950277941代碼段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj

15、=t;a0aj3j5.2 一維數(shù)組及應(yīng)用9371925950277941代碼段5.2 一維數(shù)組及應(yīng)用9371925950277941代碼段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj3j條件不成立!5.2 一維數(shù)組及應(yīng)用9371925950277941代碼段5.2 一維數(shù)組及應(yīng)用9371925950277941代碼段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj4j5.2 一維數(shù)組及應(yīng)用9371925950277941代碼段5.2 一維數(shù)組及應(yīng)用9371925950277941代碼段如下: f

16、or(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj4j條件不成立!5.2 一維數(shù)組及應(yīng)用9371925950277941代碼段5.2 一維數(shù)組及應(yīng)用9371925950277941代碼段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj5j5.2 一維數(shù)組及應(yīng)用9371925950277941代碼段5.2 一維數(shù)組及應(yīng)用9371925950277941代碼段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj5j條件不成立!5.2 一維數(shù)組及應(yīng)用937192595027

17、7941代碼段5.2 一維數(shù)組及應(yīng)用9371925950277941代碼段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj6j5.2 一維數(shù)組及應(yīng)用9371925950277941代碼段5.2 一維數(shù)組及應(yīng)用9371925950277941代碼段如下: for(j=1;j8;j+) if(a0ai) t=a0;a0=aj;aj=t;a0aj6j條件不成立!5.2 一維數(shù)組及應(yīng)用9371925950277941代碼段5.2 一維數(shù)組及應(yīng)用9371925950277941代碼段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=a

18、j;aj=t;a0aj7j5.2 一維數(shù)組及應(yīng)用9371925950277941代碼段5.2 一維數(shù)組及應(yīng)用9371925950277941代碼段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj7j條件不成立!第一趟比較結(jié)束后,最大值被放在了a0位置。5.2 一維數(shù)組及應(yīng)用9371925950277941代碼段5.2 一維數(shù)組及應(yīng)用 第2趟是將a0排除在外,設(shè)a1是剩下的數(shù)中最大的,與后面a2-a7比較。 第3趟是將a0、a1排除在外,設(shè)a2是剩下的數(shù)中最大的,與后面a3-a7比較。 第7趟是將a0 a5排除在外,設(shè)a6是剩下的數(shù)中最大的,與后面

19、的a7-a7比較。完成排序。 以此類推,若要對(duì)N個(gè)數(shù)排序,要處理的趟數(shù)是N-1。由此增加一個(gè)外循環(huán)控制趟數(shù): for (i=0;in-1;i+) 完整的比較交換法排序核心程序段為: for (i=0;in-1;i+) for(j=i+1;jn;j+) if(aiaj) 交換兩個(gè)元素值 5.2 一維數(shù)組及應(yīng)用 第2趟是將a0排除在外,設(shè)5.2.3 一維數(shù)組應(yīng)用舉例 4. 對(duì)8個(gè)數(shù)按降序排序選擇法 與比較交換法類似,只是每次比較后不馬上交換,而是只記錄極值位置,一趟比較完成后再和假想的極值交換,極大地提高了排序效率。5.2 一維數(shù)組及應(yīng)用main()int a8,i,j,k,t; printf(排

20、序前數(shù)據(jù)為:); for(i=0;i8;i+) ai=rand()%90+10; printf(%5d,ai); for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; printf(n排序后數(shù)據(jù)為:); for(i=0;i8;i+) printf(%5d,ai);5.2.3 一維數(shù)組應(yīng)用舉例5.2 一維數(shù)組及應(yīng)用main(5.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941i5.2

21、 一維數(shù)組及應(yīng)用for(i=0;i7;i+)7195.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ki5.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+)7195.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941kij5.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+)7195.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+)

22、k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj5.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+)7195.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj5.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+)7195.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t

23、; 7192935950277941ikj5.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+)7195.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj5.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+)7195.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj因?yàn)闂l件不成立,所以K位置不變5.2 一維數(shù)組及應(yīng)用for

24、(i=0;i7;i+)7195.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj5.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+)7195.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj因?yàn)闂l件不成立,所以K位置不變5.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+)7195.2 一維數(shù)組及應(yīng)用for(i=0;i7

25、;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj5.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+)7195.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj因?yàn)闂l件不成立,所以K位置不變5.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+)7195.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)

26、k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj5.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+)7195.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj因?yàn)闂l件不成立,所以K位置不變5.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+)7195.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277

27、941ikj5.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+)7195.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj因?yàn)闂l件不成立,所以K位置不變5.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+)7195.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj交換ai、ak兩元素的值5.2 一維數(shù)組及應(yīng)用for(i=

28、0;i7;i+)7195.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 9392715950277941ikj交換ai、ak兩元素的值5.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+)9395.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 9392715950277941ikj第二趟開始,I取值為15.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+)9395.2 一維數(shù)組及應(yīng)用for(i

29、=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 9392715950277941ikj重新定位K,取與I相同值5.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+)9395.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 9392715950277941ikjJ從I+1重新開始循環(huán)5.2 一維數(shù)組及應(yīng)用for(i=0;i7;i+)939int a6=0,i;char c; printf(請(qǐng)輸入選票編號(hào):); while(

30、c=getche()!=#) if(c5)c=0; ac-48+; for(i=0;i6;i+) printf(“n%d號(hào):%d票n,i,ai);5.2 一維數(shù)組及應(yīng)用5. 用數(shù)組可以優(yōu)化程序 統(tǒng)計(jì)選票:有5個(gè)侯選人,選票號(hào)分別為15,從鍵盤鍵入,“#”號(hào)結(jié)束。除15以外的其它號(hào)以廢票計(jì)。 本題可以用多分支結(jié)構(gòu)完成,但程序代碼長(zhǎng)度較長(zhǎng),如果用數(shù)組則非常簡(jiǎn)單。int a6=0,i;char c;5.2 一維數(shù)組5.3.1 二維數(shù)組的定義(P138)5.3.2 二維數(shù)組元素的引用與遍歷 與二維數(shù)組元素的引用相似,元素由下標(biāo)來(lái)確定位置: 數(shù)組名行下標(biāo)列下標(biāo) 如果要遍歷一個(gè)二維數(shù)組的所有元素,一般用雙

31、循環(huán)嵌套完成。5.3 二維數(shù)組及應(yīng)用5.3.1 二維數(shù)組的定義(P138)5.3 二維數(shù)組及應(yīng)用5.3 二維數(shù)組及應(yīng)用main() int i,j,a1010; /*定義10*10數(shù)組*/ for(i=0;i10;i+) /*遍歷行*/ for(j=0;j10;j+) /*遍歷列*/ aij=i+j; /*遍歷賦值*/ for(i=0;i10;i+) for(j=0;j10;j+) printf(“%5d”,aij); /*遍歷輸出*/ printf(“n”); /*換行輸出*/ 5.3 二維數(shù)組及應(yīng)用main()5.3.3 二維數(shù)組的應(yīng)用 1. 輸出10行楊輝三角形(直角三角形) 特點(diǎn)如下圖

32、所示:如果將各數(shù)據(jù)放入一個(gè)二維數(shù)組的話,那楊輝三角形占據(jù)了二維數(shù)組的下半部分,且列標(biāo)為0的元素及行列標(biāo)相等的元素值為1,其它元素均為其左肩元素和頭頂元素之和。5.3 二維數(shù)組及應(yīng)用5.3.3 二維數(shù)組的應(yīng)用5.3 二維數(shù)組及應(yīng)用5.3 二維數(shù)組及應(yīng)用/*核心代碼為賦值*/ for(i=0;i10;i+) /*遍歷行,共10行*/ for(j=0;j=i;j+) /*遍歷列,不需為所有數(shù)組元素賦值*/ if(i=j | j=0) /*如果是第0列或主對(duì)角線(行列標(biāo)相等)*/ aij=1; /*這些元素賦值為1*/ else /*否則其它元素等于*/ aij=ai-1j+ai-1j-1; /*頭頂

33、元素與左肩元素之和*/5.3 二維數(shù)組及應(yīng)用/*核心代碼為賦值*/5.3.3 二維數(shù)組的應(yīng)用 2.輸出10行楊輝三角形(等腰三角形) 楊輝三角數(shù)據(jù)一旦進(jìn)入二維數(shù)組后,以什么樣的形式輸出就非常簡(jiǎn)單了,比如還可以以等腰三角形輸出。這里需要用到一個(gè)定位輸出函數(shù)gotoxy(列,行)函數(shù)。5.3 二維數(shù)組及應(yīng)用5.3.3 二維數(shù)組的應(yīng)用5.3 二維數(shù)組及應(yīng)用5.3 二維數(shù)組及應(yīng)用/*核心代碼為輸出*/ for(i=0;i10;i+) gotoxy(40-i*3,i+1);/*只需要定位每行的起點(diǎn),*/ /* 3和1是試出來(lái)的,可用別的值試試*/ for(j=0;j=i;j+) printf(“%6d”

34、,aij); /*遍歷輸出,注意6和前面3的關(guān)系*/ /*因?yàn)槊啃械钠瘘c(diǎn)由gotoxy函數(shù)定位,所以不需要換行語(yǔ)句了*/ 5.3 二維數(shù)組及應(yīng)用/*核心代碼為輸出*/5.3.3 二維數(shù)組的應(yīng)用 3. 二維數(shù)組的轉(zhuǎn)置(如下圖所示) (1) 定義兩個(gè)數(shù)組A,B; (2) 為A數(shù)組各元素賦值,為方便我們可用隨機(jī)數(shù); (3) 將Aij元素的值賦給Bji,完成轉(zhuǎn)置; (4) 輸出A數(shù)組各元素和B數(shù)組各元素;5.3 二維數(shù)組及應(yīng)用5.3.3 二維數(shù)組的應(yīng)用5.3 二維數(shù)組及應(yīng)用5.3.3 二維數(shù)組的應(yīng)用 4. 為15個(gè)學(xué)生5門課成績(jī)求總分,并排序后輸出5.3 二維數(shù)組及應(yīng)用 (1) 定義數(shù)組A158,多出

35、三列用于放總分和名次、學(xué)號(hào); (2) 賦值時(shí),學(xué)號(hào)用1-15,成績(jī)用隨機(jī)數(shù)生成; (3) 對(duì)每個(gè)學(xué)生計(jì)算總分; (4) 對(duì)總分列按降序排序,注意交換時(shí)整行交換; (5) 填入名次 (6) 輸出整個(gè)數(shù)組5.3.3 二維數(shù)組的應(yīng)用5.3 二維數(shù)組及應(yīng)用 (1#define swap(x,y) t=x;x=y;y=t; /*定義交換兩個(gè)變量的宏*/main() int i,j,a158,k,p,q,t; for(i=0;i15;i+) ai0=i+1; /*用i+1作為學(xué)號(hào)*/ for(j=1;j6;j+) aij=rand()%51+50; /*隨機(jī)產(chǎn)生學(xué)生成績(jī)賦值*/ for(i=0;i15;i

36、+) /*求總分,放在第6列*/ ai6=0; for(j=1;j6;j+) ai6+=aij; for(p=0;p14;p+) /*對(duì)第6例用比較交換法排序*/ for(q=p+1;q15;q+) if(ap6aq6) for(k=0;k7;k+) swap(apk,aqk);/*注意交換時(shí)要換整行數(shù)據(jù)*/ for(i=0;i15;i+) ai7=i+1; /*用將名次放在第7列,沒有考慮總分相同的情況*/ for(i=0;i15;i+) for(j=0;j8;j+) printf(“%5d”,aij); /*輸出數(shù)組的各元素*/ printf(n); getch(); 5.3 二維數(shù)組及應(yīng)

37、用#define swap(x,y) t=x;x=y;y=t 知識(shí)引申:如何將處理結(jié)果永久存放呢?這就需要存放到文件中: 將數(shù)據(jù)寫入文件需要有以下幾步: 1. 程序中包含頭文件:#include 2. 定義一個(gè)文件指針:FILE *fp;/*fp是指針名,可任意*/ 3. 在指定文件夾下創(chuàng)建一個(gè)文件,格式為: 文件指針=fopen(文件名,”w”); 4. 將數(shù)據(jù)寫入文件中的格式: fprintf(文件指針,”格式符”,變量列表); 5. 文件寫完成后,需要關(guān)閉打開的文件,格式為: fclose(文件指針);5.3 二維數(shù)組及應(yīng)用 知識(shí)引申:如何將處理結(jié)果永久存放呢?這就需要存放到文件#def

38、ine swap(x,y) t=x;x=y;y=t; /*定義交換兩個(gè)變量的宏*/#include /*文件操作必須要包含的頭文件*/main() int i,j,a158,k,p,q,t; FILE *fp; /*定義文件指針*/ for(i=0;i15;i+) ai0=i+1; /*用i+1作為學(xué)號(hào)*/ for(j=1;j6;j+) aij=rand()%51+50; /*隨機(jī)產(chǎn)生學(xué)生成績(jī)賦值*/ for(i=0;i15;i+) /*求總分,放在第6列*/ ai6=0; for(j=1;j6;j+) ai6+=aij; for(p=0;p14;p+) /*對(duì)第6例用比較交換法排序*/ fo

39、r(q=p+1;q15;q+) if(ap6aq6) for(k=0;k7;k+) swap(apk,aqk);/*注意交換時(shí)要換整行數(shù)據(jù)*/ for(i=0;i15;i+) ai7=i+1; /*用將名次放在第7列,沒有考慮總分相同的情況*/ fp=fopen(c:abc.txt,w); /*在C盤根目錄下創(chuàng)建一個(gè)新文件*/ for(i=0;i15;i+) for(j=0;j8;j+) fprintf(fp,%5d,aij); /*將數(shù)組的各元素值寫入文件*/ fprintf(fp,n); /*每寫完一行換行*/ fclose(fp); /*關(guān)閉數(shù)據(jù)文件*/ printf(ok!); /*提

40、示信息*/ getch(); #define swap(x,y) t=x;x=y;y=t*5. N階魔方陣問題,(N為奇數(shù)) 魔方陣的條件是: (1) 1在首行的正中間; (2) 下一個(gè)數(shù)在上一個(gè)數(shù)的上一行下一列; (3) 如果當(dāng)前位置為首行,則其上一行為最后一行;如果當(dāng)前列為最后一列,則其下一列為首列。 (4) 如果發(fā)生沖突(即計(jì)算出的位置上已經(jīng)有值),則將下一個(gè)值放在當(dāng)前位置的下一行相同列位置上。5.3 二維數(shù)組及應(yīng)用*5. N階魔方陣問題,(N為奇數(shù))5.3 二維數(shù)組及應(yīng)用6.3 二維數(shù)組及應(yīng)用main() int a2020=0,n,m,x,y,p,q; /*因?yàn)镃中不能動(dòng)態(tài)定義數(shù)組,

41、所以先定義一個(gè)大一點(diǎn)的二維數(shù)組*/ do printf(please input n(n is a odd number):); scanf(%d,&n); while(n%2=0);/*精典程序段,保證輸入合法數(shù)據(jù)*/ x=1;y=n/2+1; axy=1;/*將1放在第1行中間*/ for(m=2;m=n*n;m+) p=x;q=y;/*記錄當(dāng)前放置的位置*/ if(x=1) x=n; else x-; /*定位下一個(gè)數(shù)的行位置*/ if(y=n) y=1; else y+;/*定位下一個(gè)數(shù)的列位置*/ if(axy!=0) x=p+1,y=q; /*如果已經(jīng)放過(guò)數(shù),則重新定位*/ axy

42、=m; /*放入一個(gè)數(shù)到指定位置*/ for(x=1;x=n;x+) /*輸出放好數(shù)的魔方陣*/ for(y=1;y=n;y+) printf(%7d,axy); printf(n); getch(); 6.3 二維數(shù)組及應(yīng)用main()*6.心靈感應(yīng) 先想一個(gè)060之間的數(shù),再依次從六張卡片中回答有還是沒有你想的數(shù),最后由計(jì)算機(jī)輸出你想的那個(gè)數(shù).原理: (1) 對(duì)于一個(gè)二進(jìn)制數(shù)來(lái)說(shuō),將從低位到高位的每一個(gè)1按1,2,4,8, 16,32轉(zhuǎn)換,再相加就是對(duì)應(yīng)的十進(jìn)制數(shù). (2) 060之間的數(shù)化為二進(jìn)制后不超過(guò)6位,轉(zhuǎn)換成二進(jìn)制后,從低位到高位,只要第1位上有1的數(shù)都在第1張卡片上,第2位有1

43、的數(shù)都在第2張卡片上, (3) 每張卡片上第1個(gè)數(shù)剛好依次是1,2,4,8,16,32,只回答”有”,就將這張卡片上的第1個(gè)數(shù)相加,最后就可以得到這個(gè)數(shù).5.3 二維數(shù)組及應(yīng)用*6.心靈感應(yīng)5.3 二維數(shù)組及應(yīng)用6.3 二維數(shù)組及應(yīng)用main()int a630=1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41, 43,45, 47,49,51,53,55,57,59, 2,3,6,7,10,11,14,15,18,19,22,23,26,27,30,31, 34,35,38,39,42,43,46,47,50,51,54,55

44、,58,59,4,5,6,7,12,13,14,15,20,21,22,23,28,29,30,31,36,37,38,39,44,45,46,47,52,53,54,55,60 ,0,8,9,10,11,12,13,14,15,24,25,26,27,28,29,30,31,40,41,42, 43,44,45,46,47,56,57,58,59,60, 0, 16,17,18,19,20,21,22,23,24,25, 26,27,28,29,30,31,48,49,50,51,52,53, 54,55,56,57,58,59,60,0, 32,33,34,35,36,37,38,39,4

45、0,41,42,43,44,45,46,47, 48,49,50,51,52,53,54,55,56,57,58,59,60,0;int x=0, i, j,q;printf(請(qǐng)想一個(gè)160之間的數(shù),想好了以后按任意鍵n);getch();for(i=0;i6;i+) printf(這是第%d張卡片n,i+1); for(j=0;j60) printf(你想的數(shù)不在1-60之間!n);/*累加超過(guò)60,輸出錯(cuò)誤信息*/else printf(你想的數(shù)字是:%dn,x);6.3 二維數(shù)組及應(yīng)用main()5.4 一維字符數(shù)組1. 字符數(shù)組用于存放字符的ASCII碼值,每個(gè)數(shù)組元素 存放一個(gè)字符,

46、占用一個(gè)字節(jié)。2. 字符串存放于字符數(shù)組中,其中最后一個(gè)元素值為0。3. 字符數(shù)組與字符串的區(qū)別 (1)字符串肯定是存放在字符數(shù)組中的,且最后一個(gè)元素的值為0(0就是“0”); (2)以“0”結(jié)束的字符數(shù)組可以當(dāng)字符串處理。4. 字符數(shù)組元素的引用 與前面介紹過(guò)的數(shù)值引用相同,一個(gè)元素占一個(gè)字節(jié),-128127(帶符號(hào))或0255(無(wú)符號(hào))之間,當(dāng)只用作字符處理時(shí),二者是一致的,沒有正負(fù)之分。 5.4 一維字符數(shù)組1. 字符數(shù)組用于存放字符的ASCII5.4 一維字符數(shù)組5. 字符串長(zhǎng)度函數(shù)strlen 求字符串長(zhǎng)度函數(shù)是從指定地址開始,遇到0結(jié)束,求出長(zhǎng)度中不包括0那個(gè)字節(jié)。6. 字符串常量

47、 用雙引號(hào)引住的內(nèi)容被稱為字符串常量,字符串常量在內(nèi)存中被保存在一個(gè)特殊的區(qū)域,字符串常量后會(huì)自動(dòng)加0,以保證字符串能正常結(jié)束。7. 從鍵盤為字符串賦值可用scanf或gets, 后者更方便。8. 字符串輸出可以用printf或puts,后者更方便。5.4 一維字符數(shù)組5. 字符串長(zhǎng)度函數(shù)strlen9. 字符數(shù)組元素的遍歷,先求出字符串長(zhǎng)度,再用for循環(huán)完成(前提:必須有0做結(jié)束標(biāo)志,否則求不出長(zhǎng)度!)#include main() char a=I love this game!; int n=strlen(a),i; for(i=0;in;i+) printf(%c,ai); slee

48、p(1); getch();5.4 一維字符數(shù)組9. 字符數(shù)組元素的遍歷,先求出字符串長(zhǎng)度,再用for循環(huán)完#include main() char a=I love this game!; int i; for(i=0;ai!=0;i+) printf(%c,ai); sleep(1); getch();10. 字符數(shù)組元素的遍歷,也可以用0作循環(huán)結(jié)束條件。5.4 一維字符數(shù)組#include 10. 字符數(shù)組元素的11. 字符數(shù)組的輸入 (1)scanf函數(shù)并用%c作為格式控制符,一次只能為一個(gè)數(shù)組元素賦值,數(shù)組元素名必須加&,不會(huì)自動(dòng)加0,少用; scanf(%c,&ai);5.4 一維

49、字符數(shù)組11. 字符數(shù)組的輸入 scanf(%c,&ai);11. 字符數(shù)組的輸入 (2)scanf函數(shù)并用%s作為格式控制符,一次可為一個(gè)數(shù)組所有元素賦值,直接用數(shù)組名,不能再加&符,會(huì)在最后自動(dòng)加0,缺點(diǎn):輸入帶空格的字符串時(shí)只能接收第一個(gè)空格前的字符。 scanf(%s,a); scanf(%s,&a);因?yàn)閿?shù)組名本來(lái)就是字符串的首地址,所以不能再加“&”符號(hào)。5.4 一維字符數(shù)組11. 字符數(shù)組的輸入 scanf(%s,a); sca11. 字符數(shù)組的輸入 (3)用gets(起始地址)函數(shù)賦值,將輸入的一行字符依次賦給數(shù)組各元素,自動(dòng)在末尾加0,最常用。gets(a); gets(&a

50、);5.4 一維字符數(shù)組11. 字符數(shù)組的輸入gets(a); gets(&a);512. 字符數(shù)組的輸出 (1)printf函數(shù)并用%c作為格式控制符,一次只能輸出一個(gè)數(shù)組元素; printf(%c, ai);5.4 一維字符數(shù)組12. 字符數(shù)組的輸出 printf(%c, ai)12. 字符數(shù)組的輸出 (2)printf函數(shù)并用%s作為格式控制符,格式為: printf(“%s”,一個(gè)地址); 功能:從指定地址的元素開始輸出,到遇到的第一個(gè)0時(shí)結(jié)束。 注意:輸出時(shí)指定的必須是一個(gè)地址main() char a=I love this game!; int i; for(i=0;ai!=0;

51、i+) printf(%sn,ai); getch(); printf(%sn,&ai);5.4 一維字符數(shù)組12. 字符數(shù)組的輸出 printf(“%s”,一個(gè)地址);12. 字符數(shù)組的輸出 (3)用puts(字符數(shù)組首地址)函數(shù)輸出,最常用,它是從指定地址開始,輸出到遇到第一個(gè)0結(jié)束。puts(a); puts(&a); puts(&ai);main() char a=I love this game!; int i; for(i=0;ai!=0;i+) puts(&ai); getch(); 5.4 一維字符數(shù)組12. 字符數(shù)組的輸出puts(a); puts(&a); 示例:從鍵盤上輸

52、入一個(gè)英文句子,統(tǒng)計(jì)其中英文單詞 的個(gè)數(shù)(單詞之間用空格隔開)。main()char a100; /*不知道句子有多長(zhǎng),所以定義100個(gè)字符*/ int n=0,i; printf(Please intpu a sentence:n); gets(a); for(i=0;ai!=0;i+) if(ai=32)n+; printf(This sentence has %d word(s)n,n+1); getch(); 如果兩個(gè)單詞之間有多個(gè)空格呢?5.4 一維字符數(shù)組示例:從鍵盤上輸入一個(gè)英文句子,統(tǒng)計(jì)其中英文單詞main() 主要用于存儲(chǔ)多個(gè)字符串,與二維數(shù)值數(shù)組相同,只是需要注意每一行行尾

53、需要一個(gè)0作本行字符串的結(jié)束標(biāo)志,并要求必須按這些字符串中最長(zhǎng)的字符串字符個(gè)數(shù)定義列數(shù)。 示例. 將China,Russin,Japan , America, Canada,NewZealand 等六個(gè)國(guó)家名存入一個(gè)二維數(shù)組并輸出。5.5 二維字符數(shù)組main() char p611=China,Russin,Japan , America,Canada,NewZealand; int i; for(i=0;i6;i+) puts(pi); getch(); 主要用于存儲(chǔ)多個(gè)字符串,與二維數(shù)值數(shù)組相同,只是需要示例. 從鍵盤上輸入10個(gè)學(xué)生姓名并輸出。main() char a1020; in

54、t i; for(i=0;i10;i+) printf(請(qǐng)輸入第%d個(gè)學(xué)生姓名:,i+1); gets(ai); for(i=0;i10;i+) printf(第%d個(gè)學(xué)生姓名是:%sn,i+1,ai); 5.5 二維字符數(shù)組示例. 從鍵盤上輸入10個(gè)學(xué)生姓名并輸出。main()5.55.5 字符串處理函數(shù)1. 字符串測(cè)長(zhǎng)度函數(shù)strlen 格式:strlen(地址) 功能:從指定地址開始到遇到第一個(gè)0為止的字節(jié)數(shù),結(jié)果為一個(gè)整型值。 示例:main() char a=I love this game!; int i; for(i=0;ai!=0;i+) printf(“%dn”,strlen(&ai); getch(); 5.5 字符串處理函數(shù)1. 字符串測(cè)長(zhǎng)度函數(shù)strlenma5.5 字符串處理函數(shù)2. 字符串連接函數(shù)strcat 格式:strcat(地址1,地址2) 功能:將從地址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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論