




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1第第6章章 數(shù)組數(shù)組C語言程序設(shè)計(jì)2摸底考試摸底考試l請(qǐng)編寫程序,先從鍵盤輸入請(qǐng)編寫程序,先從鍵盤輸入m和和n,再用雙重循再用雙重循環(huán)結(jié)構(gòu)分別讀入環(huán)結(jié)構(gòu)分別讀入m名學(xué)生名學(xué)生n門課的成績(jī)(成績(jī)門課的成績(jī)(成績(jī)?yōu)榘俜种普麛?shù)),計(jì)算并輸出每個(gè)學(xué)生的為百分制整數(shù)),計(jì)算并輸出每個(gè)學(xué)生的n門門課程的總成績(jī)和平均成績(jī)。課程的總成績(jī)和平均成績(jī)。 C語言程序設(shè)計(jì)3數(shù)據(jù)結(jié)構(gòu)的概念數(shù)據(jù)結(jié)構(gòu)的概念l程序設(shè)計(jì)程序設(shè)計(jì)=計(jì)算機(jī)編程語言計(jì)算機(jī)編程語言+數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)+算法。算法。l算法是算法是靈魂靈魂,數(shù)據(jù)結(jié)構(gòu)是加工對(duì)象,語言是工具。,數(shù)據(jù)結(jié)構(gòu)是加工對(duì)象,語言是工具。l選擇合適的數(shù)據(jù)結(jié)構(gòu)就是選擇合適的數(shù)據(jù)類型來存放
2、選擇合適的數(shù)據(jù)結(jié)構(gòu)就是選擇合適的數(shù)據(jù)類型來存放要處理的數(shù)據(jù)。要處理的數(shù)據(jù)。l對(duì)同一個(gè)問題的求解,可以采用不同的算法和數(shù)據(jù)結(jié)對(duì)同一個(gè)問題的求解,可以采用不同的算法和數(shù)據(jù)結(jié)構(gòu)。構(gòu)。l算法依賴于數(shù)據(jù)結(jié)構(gòu)。不同的數(shù)據(jù)結(jié)構(gòu)有不同的實(shí)現(xiàn)算法依賴于數(shù)據(jù)結(jié)構(gòu)。不同的數(shù)據(jù)結(jié)構(gòu)有不同的實(shí)現(xiàn)算法,其復(fù)雜程度也不相同。算法,其復(fù)雜程度也不相同。l選擇合適的數(shù)據(jù)結(jié)構(gòu),可以降低算法的復(fù)雜程度。選擇合適的數(shù)據(jù)結(jié)構(gòu),可以降低算法的復(fù)雜程度。l處理若干個(gè)相同類型的數(shù)據(jù),就要用到構(gòu)造類型。處理若干個(gè)相同類型的數(shù)據(jù),就要用到構(gòu)造類型。l構(gòu)造類型:由簡(jiǎn)單的數(shù)據(jù)類型按照一定的規(guī)則構(gòu)成的構(gòu)造類型:由簡(jiǎn)單的數(shù)據(jù)類型按照一定的規(guī)則構(gòu)成的數(shù)據(jù)
3、類型,如數(shù)組、結(jié)構(gòu)、聯(lián)合等。數(shù)據(jù)類型,如數(shù)組、結(jié)構(gòu)、聯(lián)合等。C語言程序設(shè)計(jì)4l本章任務(wù):掌握用數(shù)組這種結(jié)構(gòu)類型求大量數(shù)據(jù)的和、本章任務(wù):掌握用數(shù)組這種結(jié)構(gòu)類型求大量數(shù)據(jù)的和、平均值、最大最小值、排序等。平均值、最大最小值、排序等。l學(xué)習(xí)要點(diǎn):學(xué)會(huì)定義數(shù)組以及數(shù)組中每個(gè)元素的表示學(xué)習(xí)要點(diǎn):學(xué)會(huì)定義數(shù)組以及數(shù)組中每個(gè)元素的表示方式。方式。C語言程序設(shè)計(jì)56.1 一維數(shù)組的定義和引用一維數(shù)組的定義和引用l本段任務(wù):做一個(gè)考試成績(jī)處理系統(tǒng)。本段任務(wù):做一個(gè)考試成績(jī)處理系統(tǒng)。l提問:為什么需要數(shù)組?提問:為什么需要數(shù)組?l輸入輸入10個(gè)數(shù),并輸出這個(gè)數(shù),并輸出這10個(gè)數(shù)個(gè)數(shù)#include void m
4、ain() int a0,a1,a2,a3,a4,a5,a6,a7,a8,a9; scanf(%d %d %d %d %d %d %d %d %d %d, &a0,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8,&a9); printf(The datas are:n); printf(%d %d %d %d %d %d %d %d %d %d, a0,a1,a2,a3,a4,a5,a6,a7,a8,a9);C語言程序設(shè)計(jì)6l例例6.1已知一個(gè)班已知一個(gè)班10名學(xué)生的程序設(shè)計(jì)基礎(chǔ)(一)的名學(xué)生的程序
5、設(shè)計(jì)基礎(chǔ)(一)的考試成績(jī),求平均成績(jī),輸出所有考試成績(jī)和平均成考試成績(jī),求平均成績(jī),輸出所有考試成績(jī)和平均成績(jī)???jī)。l為了保留原始數(shù)據(jù),又不定義大量的簡(jiǎn)單變量,辦法為了保留原始數(shù)據(jù),又不定義大量的簡(jiǎn)單變量,辦法就是定義數(shù)組。就是定義數(shù)組。l數(shù)組包括一維數(shù)組、二維數(shù)組、多維數(shù)組、字符數(shù)組。數(shù)組包括一維數(shù)組、二維數(shù)組、多維數(shù)組、字符數(shù)組。C語言程序設(shè)計(jì)7用數(shù)組知識(shí)解決用數(shù)組知識(shí)解決例例6.1l步驟:步驟: 定義數(shù)組,定義變量定義數(shù)組,定義變量Sum,Aver。 輸入數(shù)組各個(gè)元素的值,循環(huán)使用輸入數(shù)組各個(gè)元素的值,循環(huán)使用scanf()函數(shù)對(duì)函數(shù)對(duì)數(shù)組元素進(jìn)行輸入,同時(shí)累加。數(shù)組元素進(jìn)行輸入,同時(shí)累
6、加。 利用求出的總成績(jī)計(jì)算平均成績(jī)。利用求出的總成績(jī)計(jì)算平均成績(jī)。 輸出所有的成績(jī)和平均成績(jī)。輸出所有的成績(jī)和平均成績(jī)。l程序:程序:C語言程序設(shè)計(jì)8#include void main()float score10,sum,aver;int i;sum=0.0f;for(i=0;i10;i+)scanf(%f,&scorei);sum+=scorei;aver=sum/10;for(i=0;i10;i+)printf(%6.2f,scorei);printf(naverage=%6.2fn,aver);說明數(shù)組引用數(shù)組元素引用數(shù)組元素引用數(shù)組元素?cái)?shù)組的下標(biāo)從0開始C語言程序設(shè)計(jì)9l簡(jiǎn)
7、單類型變量只含有一個(gè)成員。簡(jiǎn)單類型變量只含有一個(gè)成員。l數(shù)組是由相同類型的變量,按照一定的次序組織起來數(shù)組是由相同類型的變量,按照一定的次序組織起來的數(shù)據(jù)類型。的數(shù)據(jù)類型。l說明格式:類型說明符說明格式:類型說明符 數(shù)組名數(shù)組名數(shù)組長(zhǎng)度數(shù)組長(zhǎng)度; 如:如:float score5; 數(shù)組名為數(shù)組名為score,它含有,它含有5個(gè)成員,每個(gè)成員的類型為個(gè)成員,每個(gè)成員的類型為單精度浮點(diǎn)型。單精度浮點(diǎn)型。l說明數(shù)組后系統(tǒng)會(huì)在內(nèi)存中為其開辟一段連續(xù)的存儲(chǔ)說明數(shù)組后系統(tǒng)會(huì)在內(nèi)存中為其開辟一段連續(xù)的存儲(chǔ)空間??臻g。數(shù)組的概念數(shù)組的概念score0scorescore1 score2 score3 sco
8、re4地址地址 1000 1004 1008 1012 1016C語言程序設(shè)計(jì)10l類型說明符用來說明數(shù)組中各個(gè)數(shù)據(jù)元素的類型。在類型說明符用來說明數(shù)組中各個(gè)數(shù)據(jù)元素的類型。在任何一個(gè)數(shù)組中,數(shù)據(jù)元素的類型都是一致的。任何一個(gè)數(shù)組中,數(shù)據(jù)元素的類型都是一致的。l數(shù)組名的命名規(guī)則遵循標(biāo)識(shí)符命名規(guī)則。數(shù)組名的命名規(guī)則遵循標(biāo)識(shí)符命名規(guī)則。l數(shù)組名代表的不是一個(gè)數(shù),而是一組數(shù),或者代表一數(shù)組名代表的不是一個(gè)數(shù),而是一組數(shù),或者代表一組連續(xù)的內(nèi)存單元。組連續(xù)的內(nèi)存單元。l問題:若有數(shù)組問題:若有數(shù)組a8,數(shù)組名,數(shù)組名a代表什么?代表什么? &a1-&a0=? 數(shù)組名中存放的是一個(gè)地址常
9、量,它代表整個(gè)數(shù)組數(shù)組名中存放的是一個(gè)地址常量,它代表整個(gè)數(shù)組的首地址。其他元素的地址是通過首地址得到的。的首地址。其他元素的地址是通過首地址得到的。 注意:注意:a+; 是錯(cuò)誤的是錯(cuò)誤的 數(shù)組元素的地址數(shù)組元素的地址&a0 程序:程序: &a1-&a0=數(shù)組元素占用的字節(jié)數(shù)數(shù)組元素占用的字節(jié)數(shù)C語言程序設(shè)計(jì)11l數(shù)組中的每個(gè)成員稱為數(shù)組元素,每個(gè)元素的引用方數(shù)組中的每個(gè)成員稱為數(shù)組元素,每個(gè)元素的引用方法:法:數(shù)組名數(shù)組名下標(biāo)下標(biāo)。l數(shù)組元素是有順序的,只不過數(shù)組下標(biāo)從數(shù)組元素是有順序的,只不過數(shù)組下標(biāo)從0開始(開始(注注意!意?。?。)。l如果定義如果定義5個(gè)元素,個(gè)
10、元素, float score5,是從第,是從第0個(gè)元素個(gè)元素至第至第4個(gè)元素,沒有下標(biāo)為個(gè)元素,沒有下標(biāo)為5的元素。如:的元素。如: score0, score1, score4。 注意:無注意:無score5。l數(shù)組的下標(biāo)只能是非負(fù)整數(shù)。沒有數(shù)組的下標(biāo)只能是非負(fù)整數(shù)。沒有a-2、a3.5這些元這些元素。素。l下標(biāo)越界屬于邏輯錯(cuò)誤,系統(tǒng)并不檢查。下標(biāo)越界屬于邏輯錯(cuò)誤,系統(tǒng)并不檢查。C語言程序設(shè)計(jì)12l數(shù)組長(zhǎng)度可以是常量表達(dá)式,用方括號(hào)數(shù)組長(zhǎng)度可以是常量表達(dá)式,用方括號(hào) 括起來。括起來。不能用圓括號(hào)不能用圓括號(hào)( )。l數(shù)組長(zhǎng)度中不允許含變量。下面的用法是數(shù)組長(zhǎng)度中不允許含變量。下面的用法是錯(cuò)
11、誤錯(cuò)誤的。的。 int n;int n;scanf(%d,&n);scanf(%d,&n); int xn; int xn;l下面的用法是正確的:下面的用法是正確的:#define SIZE 100int numSIZE; char textSIZE*2+1;C語言程序設(shè)計(jì)13l#define NUMCODES 4char gradesNUMCODES;l#define NUMELS 8double pricesNUMELS ;l#define SIZE 100char amountSIZE ;l問題:一個(gè)數(shù)組究竟要占用多少內(nèi)存?問題:一個(gè)數(shù)組究竟要占用多少內(nèi)存? 元素個(gè)數(shù)元素
12、個(gè)數(shù)*sizeof(數(shù)據(jù)類型數(shù)據(jù)類型)C語言程序設(shè)計(jì)14l引用:取出數(shù)組中的某一元素的值或?qū)?shù)存放到數(shù)組中的引用:取出數(shù)組中的某一元素的值或?qū)?shù)存放到數(shù)組中的指定位置。指定位置。lC語言規(guī)定,只能一個(gè)一個(gè)地引用數(shù)組元素,而不能一次引語言規(guī)定,只能一個(gè)一個(gè)地引用數(shù)組元素,而不能一次引用數(shù)組中的全部元素。用數(shù)組中的全部元素。一維數(shù)組元素的引用一維數(shù)組元素的引用C語言程序設(shè)計(jì)15l使用說明:使用說明: 如果要引用數(shù)組中的元素,這個(gè)數(shù)必須是已經(jīng)定義如果要引用數(shù)組中的元素,這個(gè)數(shù)必須是已經(jīng)定義過的,遵循過的,遵循先定義,后引用先定義,后引用的原則。的原則。 下標(biāo)用一對(duì)方括號(hào)下標(biāo)用一對(duì)方括號(hào) 括起來,它表
13、示要引用數(shù)組括起來,它表示要引用數(shù)組中的第幾個(gè)元素。引用時(shí),下標(biāo)可以是常量表達(dá)式,中的第幾個(gè)元素。引用時(shí),下標(biāo)可以是常量表達(dá)式,也可以是變量表達(dá)式。也可以是變量表達(dá)式。 如:如:a0=1; a1=1; a2=a0+a1; (ai=ai-1+ai-2;)C語言程序設(shè)計(jì)16特別強(qiáng)調(diào)特別強(qiáng)調(diào):在運(yùn)行在運(yùn)行C語言程序過程中,系統(tǒng)并不自動(dòng)語言程序過程中,系統(tǒng)并不自動(dòng)檢驗(yàn)數(shù)組元素的下標(biāo)是否越界。因此在編寫程序時(shí),檢驗(yàn)數(shù)組元素的下標(biāo)是否越界。因此在編寫程序時(shí),保證數(shù)組下標(biāo)不越界是十分重要的保證數(shù)組下標(biāo)不越界是十分重要的。 一個(gè)數(shù)組元素,實(shí)質(zhì)上就是一個(gè)數(shù)組元素,實(shí)質(zhì)上就是1個(gè)變量,它具有和相個(gè)變量,它具有和相
14、同類型單個(gè)變量一樣的屬性,可以對(duì)它進(jìn)行賦值和同類型單個(gè)變量一樣的屬性,可以對(duì)它進(jìn)行賦值和參與各種運(yùn)算。參與各種運(yùn)算。 在在C語言中,數(shù)組作為一個(gè)整體不能參加數(shù)據(jù)運(yùn)算,語言中,數(shù)組作為一個(gè)整體不能參加數(shù)據(jù)運(yùn)算,只能對(duì)單個(gè)的元素進(jìn)行處理。只能對(duì)單個(gè)的元素進(jìn)行處理。C語言程序設(shè)計(jì)17一維數(shù)組的初始化一維數(shù)組的初始化l初始化格式:數(shù)據(jù)類型數(shù)據(jù)類型 數(shù)組名數(shù)組名常量表達(dá)式常量表達(dá)式初值表初值表;l使用說明:使用說明: 對(duì)數(shù)組的初始化操作只能在定義數(shù)組時(shí)進(jìn)行,其中對(duì)數(shù)組的初始化操作只能在定義數(shù)組時(shí)進(jìn)行,其中常量表達(dá)式表示數(shù)組元素的個(gè)數(shù),大括號(hào)中的內(nèi)容常量表達(dá)式表示數(shù)組元素的個(gè)數(shù),大括號(hào)中的內(nèi)容即為數(shù)組的初
15、值,各項(xiàng)用逗號(hào)隔開。即為數(shù)組的初值,各項(xiàng)用逗號(hào)隔開。 int a10=0,1,2,3,4,5,6,7,8,9; 注意:不能分成兩句寫注意:不能分成兩句寫 int a10; a10 =0,1,2,3,4,5,6,7,8,9;C語言程序設(shè)計(jì)18注意:注意: 初值的個(gè)數(shù)不應(yīng)超過一維數(shù)組元素的個(gè)數(shù),但可以初值的個(gè)數(shù)不應(yīng)超過一維數(shù)組元素的個(gè)數(shù),但可以少于一維數(shù)組元素的個(gè)數(shù)。少于一維數(shù)組元素的個(gè)數(shù)。 例:例:int a10=2,4,6,8,10; 在對(duì)全部數(shù)組元素賦初值時(shí),數(shù)組長(zhǎng)度說明可以缺在對(duì)全部數(shù)組元素賦初值時(shí),數(shù)組長(zhǎng)度說明可以缺省。例:省。例:int a =1,2,3,4,5; 相當(dāng)于相當(dāng)于int
16、a5=1,2,3,4,5; 可以只給部分?jǐn)?shù)組元素賦初值??梢灾唤o部分?jǐn)?shù)組元素賦初值。 int a10=2,4,6; 注意:只能缺省最右邊連續(xù)元素的初值。注意:只能缺省最右邊連續(xù)元素的初值。 如果想將數(shù)組中的所有元素全部賦為如果想將數(shù)組中的所有元素全部賦為0時(shí),時(shí), int a10=0,0,0,0,0,0,0,0,0,0; 或或int a10=0; 但不能:但不能: int a10=0*10;C語言程序設(shè)計(jì)19例例6_2#include void main(void)int a4;printf(%dn,a0);printf(%dn,a1);printf(%dn,a2);printf(%dn,a3
17、);C語言程序設(shè)計(jì)21想一想:想一想:l已知整型數(shù)組已知整型數(shù)組a有有10個(gè)元素,要使個(gè)元素,要使a0=1,a3=5,a4=7,其余元素都等于,其余元素都等于0,共有幾種,共有幾種賦值方法。賦值方法。lint a10; a0=1; a1=0; a2=0; a3=5; a4=7; a5=0; a6=0; a7=0; a8=0; a9=0;lint a10=1,0,0,5,7,0,0,0,0,0;lint a10=1,0,0,5,7;C語言程序設(shè)計(jì)22l列出下列代碼段顯示的元素列出下列代碼段顯示的元素lfor(m=1;m =5 ; m+) printf(%d, am);lfor(k=1;k =5
18、; k=k+2) printf(%d, ak);lfor(j=3;j 10 ; j+) printf(%f, bj);C語言程序設(shè)計(jì)23例例6.2l輸入一個(gè)班級(jí)輸入一個(gè)班級(jí)10名學(xué)生的計(jì)算機(jī)成績(jī),求出總成績(jī)、名學(xué)生的計(jì)算機(jī)成績(jī),求出總成績(jī)、平均成績(jī)、最高分和最低分。平均成績(jī)、最高分和最低分。l步驟:步驟: 定義數(shù)組,定義變量定義數(shù)組,定義變量Sum,Aver。 輸入數(shù)組各個(gè)元素的值,循環(huán)使用輸入數(shù)組各個(gè)元素的值,循環(huán)使用scanf()函數(shù)對(duì)函數(shù)對(duì)數(shù)組元素進(jìn)行輸入,同時(shí)累加。數(shù)組元素進(jìn)行輸入,同時(shí)累加。 利用求出的總成績(jī)計(jì)算平均成績(jī)。利用求出的總成績(jī)計(jì)算平均成績(jī)。 考查數(shù)組中的每個(gè)元素,求出最大
19、、最小值??疾閿?shù)組中的每個(gè)元素,求出最大、最小值。 輸出所有的成績(jī)和平均成績(jī),以及最大、最小值。輸出所有的成績(jī)和平均成績(jī),以及最大、最小值。C語言程序設(shè)計(jì)24試一試試一試l如果想在輸入輸出最高分、最低分分?jǐn)?shù)的同時(shí),輸出如果想在輸入輸出最高分、最低分分?jǐn)?shù)的同時(shí),輸出最高分學(xué)生的編號(hào)和最低分學(xué)生的編號(hào),應(yīng)該如何改最高分學(xué)生的編號(hào)和最低分學(xué)生的編號(hào),應(yīng)該如何改編程序?編程序?C語言程序設(shè)計(jì)256.1.2 數(shù)組的運(yùn)算和數(shù)組作為函數(shù)參數(shù)數(shù)組的運(yùn)算和數(shù)組作為函數(shù)參數(shù)l數(shù)組的運(yùn)算:數(shù)組的輸入、輸出、賦值及基本運(yùn)算。數(shù)組的運(yùn)算:數(shù)組的輸入、輸出、賦值及基本運(yùn)算。l數(shù)組的運(yùn)算一般只能作用于基本類型的單個(gè)元素。數(shù)
20、組的運(yùn)算一般只能作用于基本類型的單個(gè)元素。l輸入、輸出整個(gè)數(shù)組或?qū)φ麄€(gè)數(shù)組輸出,則需使用循環(huán)語輸入、輸出整個(gè)數(shù)組或?qū)φ麄€(gè)數(shù)組輸出,則需使用循環(huán)語句。句。C語言程序設(shè)計(jì)26l例例1:數(shù)組的輸入輸出。:數(shù)組的輸入輸出。 #define MAXGRADES 30int i;float xMAXGRADES ;for(i=0;i MAXGRADES;i+) scanf(%f,&xi); for(i=0;i MAXGRADES;i+) if (!(i%6) printf(n); printf(%8.2f,xi);printf(n);C語言程序設(shè)計(jì)27l例例2:數(shù)組賦值與數(shù)組拷貝:數(shù)組賦值與數(shù)組拷
21、貝#define SIZE 10int aSIZE,bSIZE,i;for(i=0;i SIZE;i+)ai=i+1;for(i=0;i SIZE;i+)bi=ai;注意:不能寫成 b=a;C語言程序設(shè)計(jì)28l例例 N盞燈排成一排,從盞燈排成一排,從1到到N按順序依次編號(hào)。有按順序依次編號(hào)。有N個(gè)人也從個(gè)人也從1到到N依次編號(hào)。第一個(gè)人(依次編號(hào)。第一個(gè)人(1號(hào))將燈全部號(hào))將燈全部關(guān)閉。第二個(gè)人(關(guān)閉。第二個(gè)人(2號(hào))將凡是號(hào))將凡是2和和2的倍數(shù)的燈打開。的倍數(shù)的燈打開。第三個(gè)人將凡是第三個(gè)人將凡是3和和3的倍數(shù)的燈做相反處理(該燈如的倍數(shù)的燈做相反處理(該燈如為打開的,將它關(guān)閉;如為關(guān)閉
22、的,將它打開)。以為打開的,將它關(guān)閉;如為關(guān)閉的,將它打開)。以后的人都和后的人都和3號(hào)一樣,將凡是與自己相同的燈和是自號(hào)一樣,將凡是與自己相同的燈和是自己編號(hào)倍數(shù)的燈做相反處理。請(qǐng)問:當(dāng)?shù)诩壕幪?hào)倍數(shù)的燈做相反處理。請(qǐng)問:當(dāng)?shù)贜個(gè)人操作個(gè)人操作之后,哪幾盞燈是點(diǎn)亮的。之后,哪幾盞燈是點(diǎn)亮的。#include #define N 10void main(void) int lampN+1; int i,j,k; for(i=1;i=N;i+) /*將燈全部關(guān)閉將燈全部關(guān)閉*/ lampi=0; for(i=2;i=N;i=i+2) /*將凡是將凡是2和和2的倍數(shù)的燈打開的倍數(shù)的燈打開*/ lam
23、pi=1; for(j=3;j=N;j+) /*將將3和和3的倍數(shù)的燈做相反處理的倍數(shù)的燈做相反處理*/ for(i=j;i=N;i=i+j) lampi=!lampi; for(i=1;i=N;i+) if(lampi) printf(%2d, i);C語言程序設(shè)計(jì)30數(shù)組作為函數(shù)參數(shù)數(shù)組作為函數(shù)參數(shù)l數(shù)組元素作為函數(shù)參數(shù):數(shù)組元素作為函數(shù)參數(shù): 一維數(shù)組元素、多維數(shù)組元素均可做函數(shù)參數(shù)。一維數(shù)組元素、多維數(shù)組元素均可做函數(shù)參數(shù)。 用變量作實(shí)參同。用變量作實(shí)參同。 值調(diào)用:值調(diào)用:值傳遞值傳遞。 例例:#include void swap(int ,int);void main(void)i
24、nt a,b; a=100;b=200;printf(inicial:a=%d b=%dn,a,b);swap(a,b);printf(in main:a=%d b=%dn,a,b);void swap(int x,int y)int temp;temp=x;x=y;y=temp;printf(in swap:x=%d y=%dn,x,y);C語言程序設(shè)計(jì)32l下列程序的運(yùn)行結(jié)果是(下列程序的運(yùn)行結(jié)果是( )。)。#include void main() int z,y3=2,3,4; yy2=10; printf(%dn,z);A、10B、2C、3D、運(yùn)行時(shí)出錯(cuò),得不到值、運(yùn)行時(shí)出錯(cuò),得不到
25、值C語言程序設(shè)計(jì)33l下列程序段的運(yùn)行結(jié)果是(下列程序段的運(yùn)行結(jié)果是( )。)。#include void main() double z,y3=2,3,4; z=yy0; printf(%dn,z);A、 2B、 3C、 4D、有語法錯(cuò),得不到值、有語法錯(cuò),得不到值例例:C語言程序設(shè)計(jì)35l數(shù)組名作為函數(shù)參數(shù):數(shù)組名作為函數(shù)參數(shù): 實(shí)參:數(shù)組名。實(shí)參:數(shù)組名。 形參:數(shù)組名形參:數(shù)組名 ,數(shù)組元素的數(shù)目或下標(biāo)。數(shù)組元素的數(shù)目或下標(biāo)。 地址調(diào)用:傳遞數(shù)組的首地址。地址調(diào)用:傳遞數(shù)組的首地址。#include #define N 10void add(int ,int);void main(vo
26、id)int aN,i;for(i=0;iN;i+)ai=i;add(a,N);for(i=0;iN;i+)printf(%3d,ai);printf(n);void add(int x,int n) int i;for(i=0;in;i+) xi=xi+1; 聲明函數(shù)原型函數(shù)調(diào)用(實(shí)參數(shù)組)函數(shù)定義(數(shù)組)C語言程序設(shè)計(jì)37注意:注意: 用數(shù)組名作函數(shù)參數(shù),應(yīng)該在主調(diào)函數(shù)和被調(diào)函數(shù)中用數(shù)組名作函數(shù)參數(shù),應(yīng)該在主調(diào)函數(shù)和被調(diào)函數(shù)中分別定義數(shù)組,不能只在一方定義。分別定義數(shù)組,不能只在一方定義。 實(shí)參數(shù)組和形參數(shù)組的類型應(yīng)一致。實(shí)參數(shù)組和形參數(shù)組的類型應(yīng)一致。 C編譯系統(tǒng)對(duì)形參數(shù)組的大小不做檢查
27、,形參數(shù)組可編譯系統(tǒng)對(duì)形參數(shù)組的大小不做檢查,形參數(shù)組可以不指定大小,在定義數(shù)組時(shí)在數(shù)組名后跟一個(gè)以不指定大小,在定義數(shù)組時(shí)在數(shù)組名后跟一個(gè)空的空的方括弧方括弧即可。有時(shí)為了在被調(diào)用函數(shù)中處理數(shù)組元素即可。有時(shí)為了在被調(diào)用函數(shù)中處理數(shù)組元素的需要,可以另設(shè)一個(gè)參數(shù),傳遞所需要的數(shù)組元素的需要,可以另設(shè)一個(gè)參數(shù),傳遞所需要的數(shù)組元素的個(gè)數(shù)。的個(gè)數(shù)。 用數(shù)組名做函數(shù)參數(shù)時(shí),不是把數(shù)組元素的值傳遞給用數(shù)組名做函數(shù)參數(shù)時(shí),不是把數(shù)組元素的值傳遞給形參,而是把實(shí)參數(shù)組的形參,而是把實(shí)參數(shù)組的首地址首地址傳遞給形參。形參數(shù)傳遞給形參。形參數(shù)組和實(shí)參數(shù)組共占同一段單元。在程序設(shè)計(jì)中可以利組和實(shí)參數(shù)組共占同一
28、段單元。在程序設(shè)計(jì)中可以利用這一特點(diǎn)改變實(shí)參數(shù)組元素的值(如排序)。用這一特點(diǎn)改變實(shí)參數(shù)組元素的值(如排序)。C語言程序設(shè)計(jì)38成績(jī)排序成績(jī)排序l排序方法:冒泡排序、排序方法:冒泡排序、shell排序、選擇排序。排序、選擇排序。l例例6.4:冒泡排序:冒泡排序升序升序l思想:思想: 每趟在待排序的數(shù)據(jù)中將相鄰的兩個(gè)數(shù)進(jìn)行比較,每趟在待排序的數(shù)據(jù)中將相鄰的兩個(gè)數(shù)進(jìn)行比較,將小數(shù)放在前面,將大數(shù)放在后面。共比較將小數(shù)放在前面,將大數(shù)放在后面。共比較n-1次。次。 n個(gè)數(shù)中最大的數(shù)就會(huì)排在最后一個(gè)。個(gè)數(shù)中最大的數(shù)就會(huì)排在最后一個(gè)。 第二輪在剩下的第二輪在剩下的n-1個(gè)數(shù)中繼續(xù)進(jìn)行,共比較個(gè)數(shù)中繼續(xù)進(jìn)
29、行,共比較n-2次。次。 N-1個(gè)數(shù)中最大的數(shù)就會(huì)排在倒數(shù)第二個(gè)。個(gè)數(shù)中最大的數(shù)就會(huì)排在倒數(shù)第二個(gè)。 如此進(jìn)行,直到最后一輪。如此進(jìn)行,直到最后一輪。l 9 2 4 1 8 6l程序程序C語言程序設(shè)計(jì)39#include #define N 10void sort(int ,int);void main(void)int aN,i;for(i=0;iN;i+)scanf(%d,&ai);sort(a,N);for(i=0;iN;i+)printf(%3d,ai);printf(n);C語言程序設(shè)計(jì)40void sort(int v ,int n) int i,j,temp;for(i=
30、0;in-1;i+) for(j=0;jvj+1) temp=vj; vj=vj+1; vj+1=temp; C語言程序設(shè)計(jì)41例例6.5 shell排序(快速排序)排序(快速排序)l思想:思想: 將將n個(gè)數(shù)的隊(duì)列分成兩段。個(gè)數(shù)的隊(duì)列分成兩段。 把后一段的每個(gè)元素分別與前一段間隔把后一段的每個(gè)元素分別與前一段間隔n/2處的元處的元素進(jìn)行比較,如果后者大于前者,則交換。素進(jìn)行比較,如果后者大于前者,則交換。 當(dāng)后一段的所有元素都處理完后,則將比較間隔減當(dāng)后一段的所有元素都處理完后,則將比較間隔減小一半,然后從距離第一個(gè)元素為當(dāng)前間隔的那個(gè)小一半,然后從距離第一個(gè)元素為當(dāng)前間隔的那個(gè)元素開始直到隊(duì)
31、列最后一個(gè)元素重復(fù)上述的比較、元素開始直到隊(duì)列最后一個(gè)元素重復(fù)上述的比較、交換過程;交換過程; 在每一輪比較、交換過程中,一旦發(fā)生交換,被交在每一輪比較、交換過程中,一旦發(fā)生交換,被交換到前面的那個(gè)值還要繼續(xù)與前面距離為當(dāng)前比較換到前面的那個(gè)值還要繼續(xù)與前面距離為當(dāng)前比較間隔的那些元素進(jìn)行比較和交換,一直進(jìn)行到比較間隔的那些元素進(jìn)行比較和交換,一直進(jìn)行到比較中位于前面的那個(gè)元素距離隊(duì)列的第一個(gè)元素小于中位于前面的那個(gè)元素距離隊(duì)列的第一個(gè)元素小于當(dāng)前比較間隔為止。當(dāng)前比較間隔為止。 當(dāng)間隔減小到當(dāng)間隔減小到0時(shí)算法結(jié)束。時(shí)算法結(jié)束。C語言程序設(shè)計(jì)42 72 73 71 23 94 16 5 68
32、(1) gap=4 (2) gap=2 (3) gap=1 7316 571 5727194717268732371687268717394C語言程序設(shè)計(jì)43例例6.6用選擇法對(duì)用選擇法對(duì)10個(gè)整數(shù)排序(升序)個(gè)整數(shù)排序(升序)l思路思路: 將將a0與與a1-a9比較,若比較,若a0比比a1-a9都小,都小,則不進(jìn)行交換。若則不進(jìn)行交換。若a1-a9中有一個(gè)以上比中有一個(gè)以上比a0小,則將其中最小的與小,則將其中最小的與a0交換,此時(shí)交換,此時(shí)a0中中存放了這存放了這10個(gè)數(shù)中最小的數(shù)。個(gè)數(shù)中最小的數(shù)。 第二輪,將第二輪,將a1與與a2-a9比較,將剩下比較,將剩下9個(gè)數(shù)個(gè)數(shù)中的最小者中的最小
33、者ai與與a1交換。交換。 依此類推,共進(jìn)行依此類推,共進(jìn)行9輪比較,最后輪比較,最后a0-a9已已按順序存放。按順序存放。C語言程序設(shè)計(jì)45void output(int s ,int n) int i; for(i=0;in;i+) printf(%5d,si);C語言程序設(shè)計(jì)46void sort(int s ,int n) int i,j,min,temp; for(i=0;in;i+) min=i; for(j=i+1;jsj) min=j; if(i!=min) temp=si; si=smin; smin=temp; C語言程序設(shè)計(jì)47數(shù)據(jù)查找數(shù)據(jù)查找l數(shù)據(jù)查找:數(shù)據(jù)查找: 線性
34、查找。線性查找。 二分查找。二分查找。l線性查找:順序查找線性查找:順序查找#define TRUE 1#define FALSE 0int linesearch(int list,int size,int key)int index,found,i; index=-1;found=FLASE;i=0;while(isize&!found) if(listi=key) found=TRUE; index=i; i+;return index;C語言程序設(shè)計(jì)49l例例6.7 二分查找函數(shù)二分查找函數(shù) 思想:思想:l按折半的方法在一個(gè)有序數(shù)組中查找一個(gè)給定按折半的方法在一個(gè)有序數(shù)組中查找一
35、個(gè)給定值的元素。如果找到,則返回元素的位置,否值的元素。如果找到,則返回元素的位置,否則返回則返回-1。ltop=0,bottom=n-1,mid=(top+bottom)/2l首先將首先將x與位于數(shù)組中間那個(gè)元素與位于數(shù)組中間那個(gè)元素vmid進(jìn)行比進(jìn)行比較,如果較,如果x小于小于vmid,則在數(shù)組的前一半元素,則在數(shù)組的前一半元素中查找。否則,在數(shù)組的后一半元素中查找。中查找。否則,在數(shù)組的后一半元素中查找。l無論往前還是往后,下一步要與無論往前還是往后,下一步要與x比較的是位于比較的是位于所選的那一半中間的那個(gè)元素。所選的那一半中間的那個(gè)元素。l該過程一直進(jìn)行到所有元素都已被檢查為止。該過
36、程一直進(jìn)行到所有元素都已被檢查為止。 調(diào)用方式:調(diào)用方式:C語言程序設(shè)計(jì)50成績(jī)的插入和刪除成績(jī)的插入和刪除l數(shù)據(jù)查找數(shù)據(jù)查找l例例6.8假設(shè)成績(jī)已經(jīng)輸入,并按照從大到小的順序排假設(shè)成績(jī)已經(jīng)輸入,并按照從大到小的順序排列好?,F(xiàn)在發(fā)現(xiàn)有某個(gè)成績(jī)被重復(fù)輸入,需要把該成列好?,F(xiàn)在發(fā)現(xiàn)有某個(gè)成績(jī)被重復(fù)輸入,需要把該成績(jī)刪除,使剩下的所有成績(jī)依然有序???jī)刪除,使剩下的所有成績(jī)依然有序。l步驟:步驟: 查找待刪除數(shù)據(jù)的位置。查找待刪除數(shù)據(jù)的位置。 移動(dòng)部分元素。移動(dòng)部分元素。 從被刪除位置的后一個(gè)元素開始到最后一個(gè)元素都從被刪除位置的后一個(gè)元素開始到最后一個(gè)元素都向前移動(dòng)一個(gè)位置。向前移動(dòng)一個(gè)位置。l程序
37、:程序:C語言程序設(shè)計(jì)51l問題:?jiǎn)栴}: 元素是否可以從最后一個(gè)元素開始向前移動(dòng),最后元素是否可以從最后一個(gè)元素開始向前移動(dòng),最后再移動(dòng)刪除位置后的那個(gè)元素?再移動(dòng)刪除位置后的那個(gè)元素? 如果要求將錯(cuò)誤的成績(jī)更正,如何修改程序?如果要求將錯(cuò)誤的成績(jī)更正,如何修改程序?C語言程序設(shè)計(jì)52l例例6.9假設(shè)成績(jī)已經(jīng)輸入,并按照從大到小的順序排假設(shè)成績(jī)已經(jīng)輸入,并按照從大到小的順序排列好?,F(xiàn)在發(fā)現(xiàn)有某個(gè)成績(jī)被遺漏,需要插入,并使列好?,F(xiàn)在發(fā)現(xiàn)有某個(gè)成績(jī)被遺漏,需要插入,并使插入后的所有成績(jī)依然有序。插入后的所有成績(jī)依然有序。l步驟:步驟: 查找待插入數(shù)據(jù)的位置。查找待插入數(shù)據(jù)的位置。 移動(dòng)部分元素,先
38、移動(dòng)最后一個(gè)元素,最后移動(dòng)待移動(dòng)部分元素,先移動(dòng)最后一個(gè)元素,最后移動(dòng)待插入位置元素。插入位置元素。l注意:注意: 數(shù)組元素的個(gè)數(shù)要足夠。數(shù)組元素的個(gè)數(shù)要足夠。l程序程序C語言程序設(shè)計(jì)53例例6.10用篩法求用篩法求100以內(nèi)的素?cái)?shù)。以內(nèi)的素?cái)?shù)。l基本思想:判斷基本思想:判斷100以內(nèi)的每個(gè)數(shù),找出一個(gè)非素?cái)?shù)以內(nèi)的每個(gè)數(shù),找出一個(gè)非素?cái)?shù)則把它去除,最后剩下的全是素?cái)?shù)。則把它去除,最后剩下的全是素?cái)?shù)。l具體做法為:具體做法為: 先去除先去除1。 用用2、3、4、100作為除數(shù),去除該除數(shù)以后作為除數(shù),去除該除數(shù)以后的各數(shù),把該除數(shù)的倍數(shù)標(biāo)注為的各數(shù),把該除數(shù)的倍數(shù)標(biāo)注為0,表示此數(shù)已從,表示此數(shù)
39、已從數(shù)組中被去除。數(shù)組中被去除。 循環(huán)結(jié)束后,數(shù)組中保留的即為循環(huán)結(jié)束后,數(shù)組中保留的即為100以內(nèi)的素?cái)?shù)。以內(nèi)的素?cái)?shù)。C語言程序設(shè)計(jì)54C語言程序設(shè)計(jì)55void getprime(int pm ,int n)int i,j;for(i=2;isqrt(n);i+) for(j=i+1;j=n;j+) if(pmi!=0&pmj!=0) if(pmj%pmi=0) pmj=0; C語言程序設(shè)計(jì)56void output(int pm ,int n) int i,j=0; for(i=2;i=n;i+) if(pmi!=0) printf(%5d,pmi); j+; if(j%10=0
40、) printf(n); C語言程序設(shè)計(jì)57練習(xí):練習(xí):l編程求某年第編程求某年第n天的日期。天的日期。l思想:思想: 將每月的天數(shù)存放于數(shù)組中。將每月的天數(shù)存放于數(shù)組中。 當(dāng)當(dāng)n足夠大(大于足夠大(大于31)時(shí)用)時(shí)用n減去減去1月的天數(shù),如果月的天數(shù),如果其差又大于其差又大于2月的天數(shù),則再減去月的天數(shù),則再減去2月的天數(shù),如此月的天數(shù),如此循環(huán)下去,直到循環(huán)結(jié)束求得所求日期。循環(huán)下去,直到循環(huán)結(jié)束求得所求日期。C語言程序設(shè)計(jì)58#include int leap(int);void dayofyear(int ,int,int);void main(void)int day_tab12= 31,28,31,30,31,30,31,31,30,31,30,31;int year,day;printf(請(qǐng)輸入年份請(qǐng)輸入年份:);scanf(%d,&year);printf(請(qǐng)輸入天數(shù)請(qǐng)輸入天數(shù):);scanf(%d,&day);dayofyear(day_tab,year,day);C語言程序設(shè)計(jì)59int leap(int y)if(y%4=0&y%100!=0|y%400=0)return 1;elsereturn 0;C語言程序設(shè)計(jì)60void dayofyear(int tab ,int y,int d) int i,j=0,t=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 鄰里火災(zāi)糾紛協(xié)議書
- 非自愿簽婚內(nèi)協(xié)議書
- 裝修安全保證協(xié)議書
- 銷售車輛合同協(xié)議書
- 首付付款比例協(xié)議書
- 餐廚垃圾合同協(xié)議書
- 苗圃現(xiàn)金收購(gòu)協(xié)議書
- 轉(zhuǎn)讓藥廠設(shè)備協(xié)議書
- 加入俱樂部合同協(xié)議書
- 協(xié)會(huì)副會(huì)長(zhǎng)合同協(xié)議書
- 2025-2030年中國(guó)腰果酚市場(chǎng)競(jìng)爭(zhēng)格局及發(fā)展前景研究報(bào)告
- 智能制造對(duì)融資租賃行業(yè)影響-全面剖析
- 2025年新高考語文【語言運(yùn)用新題型】考前訓(xùn)練試卷附答案解析
- GB 29743.2-2025機(jī)動(dòng)車?yán)鋮s液第2部分:電動(dòng)汽車?yán)鋮s液
- 安全人機(jī)工程學(xué)-人因事故分析與預(yù)防報(bào)告課件
- 生物有機(jī)肥試驗(yàn)方案
- 2025年小升初語文《分析人物形象》教學(xué)講義及專項(xiàng)練習(xí)題(附答案)
- 超星爾雅學(xué)習(xí)通《中華文化才藝(中國(guó)海洋大學(xué))》2025章節(jié)測(cè)試附答案
- 大數(shù)據(jù)與人工智能在財(cái)務(wù)管理中的深度應(yīng)用研究
- 《AI技術(shù)術(shù)語解析》課件
- 康姿百德入職培訓(xùn)
評(píng)論
0/150
提交評(píng)論