![第5章-1 數(shù)組_第1頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/20/4ffb2394-0bca-4323-973c-a6bc9194d4da/4ffb2394-0bca-4323-973c-a6bc9194d4da1.gif)
![第5章-1 數(shù)組_第2頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/20/4ffb2394-0bca-4323-973c-a6bc9194d4da/4ffb2394-0bca-4323-973c-a6bc9194d4da2.gif)
![第5章-1 數(shù)組_第3頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/20/4ffb2394-0bca-4323-973c-a6bc9194d4da/4ffb2394-0bca-4323-973c-a6bc9194d4da3.gif)
![第5章-1 數(shù)組_第4頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/20/4ffb2394-0bca-4323-973c-a6bc9194d4da/4ffb2394-0bca-4323-973c-a6bc9194d4da4.gif)
![第5章-1 數(shù)組_第5頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/20/4ffb2394-0bca-4323-973c-a6bc9194d4da/4ffb2394-0bca-4323-973c-a6bc9194d4da5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1第5章2 5.1 數(shù)組概述數(shù)組概述 有如下幾組數(shù)據(jù),它們分別該如何存儲(chǔ)呢?有如下幾組數(shù)據(jù),它們分別該如何存儲(chǔ)呢? 一組具有一組具有相同數(shù)據(jù)類型相同數(shù)據(jù)類型的數(shù)據(jù)的的數(shù)據(jù)的有序集合。有序集合。一個(gè)班學(xué)生的學(xué)習(xí)成績(jī)一個(gè)班學(xué)生的學(xué)習(xí)成績(jī)一行文字一行文字一個(gè)矩陣一個(gè)矩陣這些數(shù)據(jù)的特點(diǎn)是:這些數(shù)據(jù)的特點(diǎn)是:1、具有相同的數(shù)據(jù)類型、具有相同的數(shù)據(jù)類型2、使用過(guò)程中需要保留原始數(shù)據(jù)、使用過(guò)程中需要保留原始數(shù)據(jù) C語(yǔ)言為這些數(shù)據(jù),提供了一種構(gòu)造數(shù)據(jù)類型:數(shù)語(yǔ)言為這些數(shù)據(jù),提供了一種構(gòu)造數(shù)據(jù)類型:數(shù)組。組。3類型說(shuō)明符類型說(shuō)明符 數(shù)組名常量表達(dá)式;數(shù)組名常量表達(dá)式;例如:例如: intint a a1010;
2、 ; 它表示定義了一個(gè)整形數(shù)組,數(shù)組名為它表示定義了一個(gè)整形數(shù)組,數(shù)組名為a a,此數(shù)組有,此數(shù)組有1010個(gè)元個(gè)元素。素。(1 1)數(shù)組名定名規(guī)則和變量名相同,遵循標(biāo)識(shí)符定名規(guī)則。)數(shù)組名定名規(guī)則和變量名相同,遵循標(biāo)識(shí)符定名規(guī)則。(2 2)在定義數(shù)組時(shí),需要指定數(shù)組中元素的個(gè)數(shù),方括弧中的常量表達(dá)式)在定義數(shù)組時(shí),需要指定數(shù)組中元素的個(gè)數(shù),方括弧中的常量表達(dá)式用來(lái)表示元素的個(gè)數(shù),即數(shù)組長(zhǎng)度。用來(lái)表示元素的個(gè)數(shù),即數(shù)組長(zhǎng)度。這。這1010個(gè)元素是,個(gè)元素是,a a0 0,a a1 1,a a2 2,a a3 3,a a4 4,a a5 5,a a6 6,a a7 7,a a8 8,a a9 9
3、。請(qǐng)持別注意,按上面的定義,不存在數(shù)組元素請(qǐng)持別注意,按上面的定義,不存在數(shù)組元素a a1010。 5.25.2一維數(shù)組一維數(shù)組4(3 3)常量表達(dá)式中可以包括常量和符號(hào)常量,但不能包含變量常量表達(dá)式中可以包括常量和符號(hào)常量,但不能包含變量。也就是說(shuō),。也就是說(shuō),C C語(yǔ)言不允許對(duì)數(shù)組的大小作動(dòng)態(tài)定義,即數(shù)組的語(yǔ)言不允許對(duì)數(shù)組的大小作動(dòng)態(tài)定義,即數(shù)組的大小不依賴于程序運(yùn)行過(guò)程中變量的值。例如,下面這樣定義數(shù)大小不依賴于程序運(yùn)行過(guò)程中變量的值。例如,下面這樣定義數(shù)組是不行的:組是不行的:intint n; n; scanf(“%d scanf(“%d,&n); &n); / /*
4、 *在程序中臨時(shí)輸入數(shù)在程序中臨時(shí)輸入數(shù) 組的大小組的大小 * */ / int int a an n; ; float a0;float a0;/ /* * 數(shù)組大小為數(shù)組大小為0 0沒(méi)有意義沒(méi)有意義 * */ / int int b(2)(3); b(2)(3); / /* * 不能使用圓括號(hào)不能使用圓括號(hào) * */ / int int k, ak; k, ak; / /* * 不能用變量說(shuō)明數(shù)組大小不能用變量說(shuō)明數(shù)組大小* */ / 5一維數(shù)組:一維數(shù)組: floatfloat markmark100;100;mark0mark1mark2mark3. . . .mark9986.592
5、.077.552.0. . . .94.0低地址低地址 高地址高地址每個(gè)數(shù)據(jù)元素占用每個(gè)數(shù)據(jù)元素占用的字節(jié)數(shù),就是的字節(jié)數(shù),就是基基類型類型的字節(jié)數(shù)的字節(jié)數(shù)一個(gè)元素占一個(gè)元素占字節(jié)字節(jié)6數(shù)組名下標(biāo)數(shù)組名下標(biāo)下標(biāo)可以是整型常量或整型表達(dá)式。例如下標(biāo)可以是整型常量或整型表達(dá)式。例如: :a a0 0=a=a5 5+a+a7 7-a-a2 2* *3 3定義數(shù)組時(shí)用到的定義數(shù)組時(shí)用到的“數(shù)組名常量表達(dá)式數(shù)組名常量表達(dá)式” ” 和引和引用數(shù)組元素時(shí)用到的用數(shù)組元素時(shí)用到的“數(shù)組名下標(biāo)數(shù)組名下標(biāo)” ” 是有區(qū)別的是有區(qū)別的。例如例如 intint a10; a10; / /* * 定義數(shù)組長(zhǎng)度為定義數(shù)組
6、長(zhǎng)度為10 10 * */ / t=a6; t=a6; / /* * 引用引用a a數(shù)組中序號(hào)為數(shù)組中序號(hào)為6 6即第即第7 7 個(gè)元素。此時(shí)個(gè)元素。此時(shí)6 6不代表數(shù)組長(zhǎng)不代表數(shù)組長(zhǎng) 度度* */ /二、一維數(shù)組元素的引用二、一維數(shù)組元素的引用1 1、數(shù)組元素的引用方式:、數(shù)組元素的引用方式:72 2、一維數(shù)組元素引用的、一維數(shù)組元素引用的#include stdio.h#include void main()void main() int int i i,a a1010; ; for (i=0; i=9;i+) for (i=0; i=0; i-) for(i=9;i=0; i-) pri
7、ntf(%d printf(%d ,a ai i);); printf(n printf(n);); 運(yùn)行結(jié)果如下:運(yùn)行結(jié)果如下:9 8 7 6 5 4 3 2 1 09 8 7 6 5 4 3 2 1 0 程序使程序使a0到到a9的值為的值為09,然后按逆序輸出。然后按逆序輸出。8(1 1)在定義數(shù)組時(shí)對(duì)數(shù)組元素賦以初值。例如)在定義數(shù)組時(shí)對(duì)數(shù)組元素賦以初值。例如: :intint a a1010=0=0,1 1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,9;9;將數(shù)組元素的初值依次放在一對(duì)花括弧內(nèi)。經(jīng)過(guò)上面將數(shù)組元素的初值依次放在一對(duì)花括弧內(nèi)。經(jīng)過(guò)上面的定義和初始化之后,的定
8、義和初始化之后,a a0 0=0=0,a a1 1=1=1,a a2 2=2=2,a a3 3=3=3,a a4 4=4=4,a a5 5=5=5,a a6 6=6=6,a a7 7=7=7,a a8 8=8=8,a a9 9=9=9。 三、一維數(shù)組的初始化三、一維數(shù)組的初始化9(3 3)如果想使一個(gè)數(shù)組中全部元素值為如果想使一個(gè)數(shù)組中全部元素值為0 0, 可以寫成可以寫成 intint a a1010=0,0,0,0,0,0,0,0,0,0; =0,0,0,0,0,0,0,0,0,0; 或或 intint a a1010=0;=0; 不不能寫成能寫成:intint a a1010=0=0*
9、*10;10;這是與這是與FORTRANFORTRAN語(yǔ)言不同的,不能給數(shù)組整體賦初值。語(yǔ)言不同的,不能給數(shù)組整體賦初值。 (2(2)可以只給一部分元素賦值。例如)可以只給一部分元素賦值。例如: :intint a a1010=0=0,1 1,2 2,3 3,4;4; 定義定義a a數(shù)組有數(shù)組有1010個(gè)元素,但花括弧內(nèi)只提供個(gè)元素,但花括弧內(nèi)只提供5 5個(gè)初值,這個(gè)初值,這表示只給前面表示只給前面5 5個(gè)元素賦初值,后個(gè)元素賦初值,后5 5個(gè)元素值為個(gè)元素值為0 0。10(4(4)在對(duì)全部數(shù)組元素賦初值時(shí),由于數(shù)據(jù)的個(gè)數(shù)已在對(duì)全部數(shù)組元素賦初值時(shí),由于數(shù)據(jù)的個(gè)數(shù)已經(jīng)確定,因此可以不指定數(shù)組長(zhǎng)
10、度。經(jīng)確定,因此可以不指定數(shù)組長(zhǎng)度。 例如例如: :intint a a5 5=1=1,2 2,3 3,4 4,5;5; 也可以寫成也可以寫成 int a=1,2,3,4,5; 在第二種寫法中,花括弧中有在第二種寫法中,花括弧中有5 5個(gè)數(shù),系統(tǒng)就會(huì)據(jù)此個(gè)數(shù),系統(tǒng)就會(huì)據(jù)此自動(dòng)定義自動(dòng)定義a a數(shù)組的長(zhǎng)度為數(shù)組的長(zhǎng)度為5 5。但若數(shù)組長(zhǎng)度與提供初值。但若數(shù)組長(zhǎng)度與提供初值的個(gè)數(shù)不相同,則數(shù)組長(zhǎng)度不能省略。例如,想定義的個(gè)數(shù)不相同,則數(shù)組長(zhǎng)度不能省略。例如,想定義數(shù)組長(zhǎng)度為數(shù)組長(zhǎng)度為1010,就不能省略數(shù)組長(zhǎng)度的定義,而必須,就不能省略數(shù)組長(zhǎng)度的定義,而必須寫成寫成 intint a a1010=
11、1=1,2 2,3 3,4 4,5; 5; 只初始化只初始化前前5 5個(gè)元素,后個(gè)元素,后5 5個(gè)元素為個(gè)元素為0 0。11用數(shù)組來(lái)處理)。用數(shù)組來(lái)處理)。#include #include #define SIZE 10#define SIZE 10void main()void main() int i; int i; float aSIZE,avg,sum=0; float aSIZE,avg,sum=0; for(i=0;iSIZE;i+) for(i=0;iSIZE;i+) scanf(%f,&ai); scanf(%f,&ai); sum=sum+ai; sum=s
12、um+ai; avg=sum/SIZE; avg=sum/SIZE; printf(avg=%.2fn,avg); printf(avg=%.2fn,avg); for(i=0;iSIZE;i+) for(i=0;iavg) if(aiavg) printf(%.2ft,ai); printf(%.2ft,ai); printf(n); printf(n); 12由于實(shí)參可以是表達(dá)式,而數(shù)組元素可以是表達(dá)由于實(shí)參可以是表達(dá)式,而數(shù)組元素可以是表達(dá)式的組成部分,因此數(shù)組元素也可以作為函數(shù)的實(shí)式的組成部分,因此數(shù)組元素也可以作為函數(shù)的實(shí)參,與用變量作實(shí)參一樣,是單向傳遞,即參,與用變量作實(shí)參一樣,
13、是單向傳遞,即“值傳值傳送送”方式。方式。 13#include #include void f(int x);void f(int x);void main()void main() int a5=1,2,3,4,5,i; int a5=1,2,3,4,5,i; for(i=0;i5;i+) for(i=0;i5;i+) printf(%dt,ai); printf(%dt,ai); printf(n); printf(n); for(i=0;i5;i+) for(i=0;i5;i+) f(ai); f(ai); printf(n); printf(n); for(i=0;i5;i+) fo
14、r(i=0;i5;i+) printf(%dt,ai); printf(%dt,ai); printf(n); printf(n); void f(int x)void f(int x) x*=2; x*=2; printf(%dt,x); printf(%dt,x); 數(shù)組元素作函數(shù)參數(shù)。數(shù)組元素作函數(shù)參數(shù)。 14 可以用數(shù)組名作函數(shù)參數(shù),此時(shí)形參應(yīng)當(dāng)用數(shù)組名可以用數(shù)組名作函數(shù)參數(shù),此時(shí)形參應(yīng)當(dāng)用數(shù)組名或用指針變量或用指針變量 。15(1)用數(shù)組名作函數(shù)參數(shù),應(yīng)該在主調(diào)函數(shù)和被調(diào)用函)用數(shù)組名作函數(shù)參數(shù),應(yīng)該在主調(diào)函數(shù)和被調(diào)用函數(shù)中分別定義數(shù)組。數(shù)中分別定義數(shù)組。(2)實(shí)參數(shù)組與形參數(shù)組類型
15、應(yīng)一至。)實(shí)參數(shù)組與形參數(shù)組類型應(yīng)一至。(3)形參數(shù)組可以不指定大小,在定義數(shù)組時(shí)在數(shù)組名)形參數(shù)組可以不指定大小,在定義數(shù)組時(shí)在數(shù)組名后面跟一個(gè)空的方括號(hào)。因?yàn)楹竺娓粋€(gè)空的方括號(hào)。因?yàn)镃語(yǔ)言編譯時(shí)對(duì)形參數(shù)組語(yǔ)言編譯時(shí)對(duì)形參數(shù)組的大小不做檢查,只是將實(shí)參數(shù)組的首元素的地址傳給的大小不做檢查,只是將實(shí)參數(shù)組的首元素的地址傳給形參數(shù)組。形參數(shù)組。(4)用數(shù)組名作函數(shù)實(shí)參時(shí),不是把數(shù)組元素的值傳遞)用數(shù)組名作函數(shù)實(shí)參時(shí),不是把數(shù)組元素的值傳遞給形參,而是把實(shí)參數(shù)組的首元素的地址傳遞給形參數(shù)給形參,而是把實(shí)參數(shù)組的首元素的地址傳遞給形參數(shù)組,這樣兩個(gè)數(shù)組共占同一段內(nèi)存單元,這一點(diǎn)與變量組,這樣兩個(gè)數(shù)
16、組共占同一段內(nèi)存單元,這一點(diǎn)與變量作函數(shù)參數(shù)的情況不相同。作函數(shù)參數(shù)的情況不相同。16#include #include #define SIZE 5#define SIZE 5void f(int b,int x);void f(int b,int x);void main()void main() int aSIZE=1,2,3,4,5,i; int aSIZE=1,2,3,4,5,i; printf(原數(shù)組為:n); printf(原數(shù)組為:n); for(i=0;iSIZE;i+) for(i=0;iSIZE;i+) printf(%dt,ai); printf(%dt,ai); pr
17、intf(n); printf(n); f(a,SIZE); f(a,SIZE); printf(修改之后的數(shù)組為:n); printf(修改之后的數(shù)組為:n); for(i=0;iSIZE;i+) for(i=0;iSIZE;i+) printf(%dt,ai); printf(%dt,ai); printf(n); printf(n); void f(int b,int x)void f(int b,int x) int i; int i; for(i=0;ix;i+) for(i=0;ix;i+)例例5.19:數(shù)組名作為函數(shù)參數(shù)。:數(shù)組名作為函數(shù)參數(shù)。17#include #includ
18、e void main()void main() void f(int y,int m,int d); void f(int y,int m,int d); int y,m,d; int y,m,d; printf(請(qǐng)輸入年_月_日:); printf(請(qǐng)輸入年_月_日:); scanf(%d_%d_%d,&y,&m,&d); scanf(%d_%d_%d,&y,&m,&d); f(y,m,d); f(y,m,d); void f(int y,int m,int d)void f(int y,int m,int d) int a13=0,31,2
19、8,31,30,31,30,31,31,30,31,30,31,i,s=d;int a13=0,31,28,31,30,31,30,31,31,30,31,30,31,i,s=d;for(i=1;im;i+)for(i=1;i2)if(m2)if(y%400=0 | (y%4=0 & y%100!=0) s+;if(y%400=0 | (y%4=0 & y%100!=0) s+;printf(%d年%d月%d號(hào)是該年的第%d天。n,y,m,d,s);printf(%d年%d月%d號(hào)是該年的第%d天。n,y,m,d,s); 1819#include #include #defin
20、e SIZE 11#define SIZE 11void main()void main() int aSIZE=0,x; int aSIZE=0,x; printf(請(qǐng)輸入候選人的代號(hào)(1-10):n); printf(請(qǐng)輸入候選人的代號(hào)(1-10):n); scanf(%d,&x); scanf(%d,&x); while(x!=-1) while(x!=-1) if(x=1 & x=1 & xSIZE) ax+; ax+; scanf(%d,&x); scanf(%d,&x); printf(n); printf(n); for(x=1;x
21、SIZE;x+) for(x=1;xSIZE;x+) printf(%3d:%3dn,x,ax); printf(%3d:%3dn,x,ax); 20 已知有已知有10個(gè)整數(shù):個(gè)整數(shù):24、56、8、47、63、82、27、15、90、39,編寫一個(gè)程序,用選擇法按照從小,編寫一個(gè)程序,用選擇法按照從小到大順序輸出。到大順序輸出。 從從n個(gè)數(shù)的序列中選出最小的數(shù)個(gè)數(shù)的序列中選出最小的數(shù)(遞增遞增),與第,與第1個(gè)數(shù)個(gè)數(shù)交換位置;交換位置; 除第除第1個(gè)數(shù)外,其余個(gè)數(shù)外,其余n-1個(gè)數(shù)再按個(gè)數(shù)再按(1)的方法選出次小的方法選出次小的數(shù),與第的數(shù),與第2個(gè)數(shù)交換位置;個(gè)數(shù)交換位置; 重復(fù)重復(fù)(1)
22、n-1遍,最后構(gòu)成遞增序列。遍,最后構(gòu)成遞增序列。21以以5個(gè)數(shù)為例,未排序時(shí)的情況如下:個(gè)數(shù)為例,未排序時(shí)的情況如下:a0 a1 a2 a3 a4 3 6 1 9 4(1) 將將5個(gè)數(shù)中最小的數(shù)個(gè)數(shù)中最小的數(shù)a2與與a0對(duì)換對(duì)換 1 6 3 9 4 (2) 將余下的將余下的4個(gè)數(shù)中最小的數(shù)個(gè)數(shù)中最小的數(shù)a2與與a1對(duì)換對(duì)換 1 3 6 9 4 (3) 將余下的將余下的3個(gè)數(shù)中最小的數(shù)個(gè)數(shù)中最小的數(shù)a4與與a2對(duì)換對(duì)換 1 3 4 9 6 (4) 將余下的將余下的2個(gè)數(shù)中最小的數(shù)個(gè)數(shù)中最小的數(shù)a4與與a3對(duì)換,至此完對(duì)換,至此完成排序成排序 。 1 3 4 6 9 22#include #in
23、clude void main()void main() void sort(int array,int n); void sort(int array,int n); int a10=24,56,8,47,63,82,27,15,90,39,i; int a10=24,56,8,47,63,82,27,15,90,39,i; printf(原數(shù)組為:n); printf(原數(shù)組為:n); for(i=0;i10;i+) for(i=0;i10;i+) printf(%d ,ai); printf(%d ,ai); printf(n); printf(n); sort(a,10); sort(
24、a,10); printf(n排好序的數(shù)組為:n); printf(n排好序的數(shù)組為:n); for(i=0;i10;i+) for(i=0;i10;i+) printf(%d ,ai); printf(%d ,ai); printf(n); printf(n); void sort(int array,int n)void sort(int array,int n) int i,j,k,t; int i,j,k,t; for(i=0;in-1;i+) 將最小的數(shù)與前面的數(shù)按序交換 for(i=0;in-1;i+) 將最小的數(shù)與前面的數(shù)按序交換 k=i; 存放數(shù)組中最小數(shù)所在的下標(biāo) k=i;
25、存放數(shù)組中最小數(shù)所在的下標(biāo) for(j=i+1;jn;j+) for(j=i+1;jn;j+)23 冒泡法排序與選擇法排序相似,選擇法排序在每一冒泡法排序與選擇法排序相似,選擇法排序在每一輪排序時(shí)找最小輪排序時(shí)找最小(遞增次序遞增次序)數(shù)的下標(biāo),出了內(nèi)循環(huán)數(shù)的下標(biāo),出了內(nèi)循環(huán)(一一輪排序結(jié)束輪排序結(jié)束),再交換最小數(shù)的位置;而冒泡法排序在,再交換最小數(shù)的位置;而冒泡法排序在每一輪排序時(shí)將相鄰的數(shù)比較,當(dāng)次序不對(duì)就交換位每一輪排序時(shí)將相鄰的數(shù)比較,當(dāng)次序不對(duì)就交換位置,出了內(nèi)循環(huán),最大數(shù)(或最小數(shù))已沉底。置,出了內(nèi)循環(huán),最大數(shù)(或最小數(shù))已沉底。241010個(gè)數(shù)排序個(gè)數(shù)排序( (由小到大由小到
26、大) )為例,冒泡法的思路是:為例,冒泡法的思路是: 將相鄰兩個(gè)數(shù)比較,將小的調(diào)到前面。將相鄰兩個(gè)數(shù)比較,將小的調(diào)到前面。 如有下例如有下例6個(gè)數(shù)(個(gè)數(shù)(9、8、5、4、2、0):):第一趟比較 經(jīng)過(guò)第一趟經(jīng)過(guò)第一趟( (共共5 5次比較與交換次比較與交換) )后,最大的數(shù)后,最大的數(shù)9 9已已“沉沉底底” ” 。然后對(duì)余下的前面。然后對(duì)余下的前面5 5個(gè)數(shù)進(jìn)行第二趟比較,個(gè)數(shù)進(jìn)行第二趟比較,注注25第二趟比較如果有如果有n個(gè)數(shù),則要進(jìn)行個(gè)數(shù),則要進(jìn)行n-1趟比較。在第趟比較。在第1趟比較中要趟比較中要進(jìn)行進(jìn)行n-1次兩兩比較,在第次兩兩比較,在第j趟比較中要進(jìn)行趟比較中要進(jìn)行n-j次兩兩次兩
27、兩比較。比較。 經(jīng)過(guò)第二趟經(jīng)過(guò)第二趟( (共共4 4次比較與交換次比較與交換) )后,得到次大的數(shù)后,得到次大的數(shù)8 8。注注26#include #include void main()void main() void sort(int array,int n); void sort(int array,int n); int a10=24,56,8,47,63,82,27,15,90,39,i; int a10=24,56,8,47,63,82,27,15,90,39,i; sort(a,10); sort(a,10); printf(the sorted array:n); printf
28、(the sorted array:n); for(i=0;i10;i+) for(i=0;i10;i+) printf(%d ,ai); printf(%d ,ai); printf(n); printf(n); void sort(int array,int n)void sort(int array,int n) int i,j,t; int i,j,t; for(i=0;in-1;i+) 控制循環(huán)的趟數(shù) for(i=0;in-1;i+) 控制循環(huán)的趟數(shù) for(j=i+1;jn;j+) 控制相鄰兩數(shù)比較的次數(shù) for(j=i+1;jarrayj) if(arrayiarrayj) t=
29、arrayi; t=arrayi;用冒泡法重做上題。用冒泡法重做上題。27#include #include void main()void main() int a10=22,10,44,17,31,51,89,68,120,95,i,x,f; int a10=22,10,44,17,31,51,89,68,120,95,i,x,f; for(i=0;i10;i+) for(i=0;i10;i+) printf(%d ,ai); printf(%d ,ai); printf(n請(qǐng)輸入要查找的數(shù):); printf(n請(qǐng)輸入要查找的數(shù):); scanf(%d,&x); scanf(%d
30、,&x); f=search(a,10,x); f=search(a,10,x); if(f=-1) if(f=-1) printf(數(shù)組中不存在 %d 這個(gè)數(shù)。n,x); printf(數(shù)組中不存在 %d 這個(gè)數(shù)。n,x); else else printf(數(shù) %d 是數(shù)組中的第 %d 個(gè)元素。n,x,f+1); printf(數(shù) %d 是數(shù)組中的第 %d 個(gè)元素。n,x,f+1); int search(int array,int n,int x)int search(int array,int n,int x) 28。 二分查找法也稱折半查找法,是一種效率較高的查找方法。二分查
31、找法也稱折半查找法,是一種效率較高的查找方法。對(duì)于大型數(shù)組,它的查找速度比順序查找法快很多。對(duì)于大型數(shù)組,它的查找速度比順序查找法快很多。 先從數(shù)組中間開始比較,先從數(shù)組中間開始比較, 判別中間的那個(gè)元素是不是要找的判別中間的那個(gè)元素是不是要找的數(shù)據(jù):是,則查找成功;否,若被查找的數(shù)據(jù)是在該數(shù)組的上半數(shù)據(jù):是,則查找成功;否,若被查找的數(shù)據(jù)是在該數(shù)組的上半部,則從上半部的中間繼續(xù)查找,否則從下半部的中間繼續(xù)查找部,則從上半部的中間繼續(xù)查找,否則從下半部的中間繼續(xù)查找 照此進(jìn)行下去,不斷縮小查找范圍至最后,因找到或找不到而照此進(jìn)行下去,不斷縮小查找范圍至最后,因找到或找不到而停止查找。停止查找。
32、29 對(duì)于對(duì)于n個(gè)數(shù)據(jù),若用變量個(gè)數(shù)據(jù),若用變量Top、Bott分別表示每次分別表示每次“折半折半”的的首位置和末位置,則中間位置首位置和末位置,則中間位置M為為 M=(Top+Bott)/2這樣就將這樣就將Top, Bott分成兩段,即分成兩段,即Top, M-1和和M+1, Bott, 若若要找的數(shù)據(jù)小于由要找的數(shù)據(jù)小于由M指示的數(shù)據(jù),則該數(shù)據(jù)在指示的數(shù)據(jù),則該數(shù)據(jù)在Top,M-1范圍范圍內(nèi),反之,則在內(nèi),反之,則在M+1,Bott范圍內(nèi)。范圍內(nèi)。用二分法重做例用二分法重做例5.22。30#include #include void main()void main() int a10=22
33、,10,44,17,31,51,89,68,120,95,i,j,k,t,x,f; int a10=22,10,44,17,31,51,89,68,120,95,i,j,k,t,x,f; for(i=0;i9;i+) for(i=0;i9;i+) k=i; k=i; for(j=i+1;j10;j+) for(j=i+1;jaj) k=j; if(akaj) k=j; t=ai; t=ai; ai=ak; ai=ak; ak=t; ak=t; for(i=0;i10;i+) for(i=0;i10;i+) printf(%d ,ai); printf(%d ,ai); printf(n請(qǐng)輸入要
34、查找的數(shù): ); printf(n請(qǐng)輸入要查找的數(shù): ); scanf(%d,&x); scanf(%d,&x); f=search(a,10,x); f=search(a,10,x); if(f=-1) if(f=-1) printf(n數(shù)組中不存在 %d 這個(gè)數(shù)。n,x); printf(n數(shù)組中不存在 %d 這個(gè)數(shù)。n,x); else else printf(n數(shù) %d 是數(shù)組中的第 %d 個(gè)元素。n,x,f+1); printf(n數(shù) %d 是數(shù)組中的第 %d 個(gè)元素。n,x,f+1); int search(int array,int n,int x)int sea
35、rch(int array,int n,int x) 314 4、插入數(shù)據(jù)、插入數(shù)據(jù) 已知有已知有10個(gè)整數(shù):個(gè)整數(shù):3、6、18、28、54、68、87、105、127、162,已從小到大排好序,編寫一個(gè)程序?qū)⒁唤o定值,已從小到大排好序,編寫一個(gè)程序?qū)⒁唤o定值x插入到該序列中插入到該序列中并保持原來(lái)的從小到大的順序不變。給定值并保持原來(lái)的從小到大的順序不變。給定值x從鍵盤輸入。從鍵盤輸入。要在有序數(shù)組要在有序數(shù)組a中插入數(shù)值中插入數(shù)值x,使插入后的數(shù)組仍有序。插入過(guò),使插入后的數(shù)組仍有序。插入過(guò)程如下圖:程如下圖:l 首先查找要插入數(shù)據(jù)在數(shù)組中的位置首先查找要插入數(shù)據(jù)在數(shù)組中的位置kl 然后
36、從最后一個(gè)位置往前直到下標(biāo)為然后從最后一個(gè)位置往前直到下標(biāo)為k的元素逐一往后移動(dòng)一個(gè)位的元素逐一往后移動(dòng)一個(gè)位置;置;l 第第k個(gè)元素的位置騰出,將數(shù)據(jù)插入。個(gè)元素的位置騰出,將數(shù)據(jù)插入。 1 4 7 10 13 16 19 22 25 14 k 32程序代碼如下:程序代碼如下:#include #include void main()void main() int a11=3,6,18,28,54,68,87,105,127,162,i,k,x; int a11=3,6,18,28,54,68,87,105,127,162,i,k,x; for(i=0;i10;i+) for(i=0;i10
37、;i+) printf(%d ,ai); printf(%d ,ai); printf(n請(qǐng)輸入要插入的數(shù): ); printf(n請(qǐng)輸入要插入的數(shù): ); scanf(%d,&x); scanf(%d,&x); for(k=0;k10;k+) for(k=0;k10;k+) if(x=ak) break; if(x=k;i-) for(i=9;i=k;i-) ai+1=ai; ai+1=ai; ak=x; ak=x; for(i=0;i11;i+) for(i=0;i11;i+) printf(%d ,ai); printf(%d ,ai); printf(n); print
38、f(n); 在上題中,當(dāng)出現(xiàn)插入的數(shù)比數(shù)組中所有數(shù)都大或都小的情況時(shí),上在上題中,當(dāng)出現(xiàn)插入的數(shù)比數(shù)組中所有數(shù)都大或都小的情況時(shí),上面的程序能處理嗎?面的程序能處理嗎?33編寫程序,將數(shù)組的前編寫程序,將數(shù)組的前n n個(gè)元個(gè)元素中,前端的素中,前端的m m個(gè)元素和隨后的個(gè)元素和隨后的n-mn-m個(gè)元素互換。個(gè)元素互換。n n和和m m從從鍵盤輸入并要求程序不另用其他數(shù)組。如:鍵盤輸入并要求程序不另用其他數(shù)組。如:a=1,2,3,4,5,6,7,8,9,0a=1,2,3,4,5,6,7,8,9,0,設(shè),設(shè)n=7n=7,m=3m=3。交換后有。交換后有a=4,5,6,7,1,2,3,8,9,0a=
39、4,5,6,7,1,2,3,8,9,0。 需移動(dòng)的元素為需移動(dòng)的元素為m m個(gè),每個(gè)元素需產(chǎn)生個(gè),每個(gè)元素需產(chǎn)生n n次移動(dòng)。次移動(dòng)。因此,在每次移動(dòng)中,首先將第因此,在每次移動(dòng)中,首先將第0 0個(gè)元素暫存起來(lái),將其個(gè)元素暫存起來(lái),將其后的后的n-1n-1個(gè)元素向前移動(dòng)一個(gè)位置,再將第個(gè)元素向前移動(dòng)一個(gè)位置,再將第0 0個(gè)元素保存?zhèn)€元素保存到第到第n n個(gè)位置。個(gè)位置。34#include stdio.h#include stdio.hvoid main()void main() int a10=1,2,3,4,5,6,7,8,9,0,i,j,m,n,t; int a10=1,2,3,4,5,
40、6,7,8,9,0,i,j,m,n,t; printf(原數(shù)組為:n); printf(原數(shù)組為:n); for(i=0;i10;i+) for(i=0;i10;i+) printf(%d ,ai); printf(%d ,ai); printf(n請(qǐng)輸入數(shù) n 和 m:); printf(n請(qǐng)輸入數(shù) n 和 m:); scanf(%d,%d,&n,&m); scanf(%d,%d,&n,&m); for(i=0;im;i+) for(i=0;im;i+) t=a0; t=a0; for(j=1;jn;j+) for(j=1;jn;j+) aj-1=aj; aj-1=aj; an-1=t; an-1=t; printf(新產(chǎn)生的數(shù)組為:n); printf(新產(chǎn)生的數(shù)組為:n); for(i=0;i10;i+) for(i=0;i10;i+) printf(%d ,ai); printf(%d ,ai); printf(n); printf(n); 程序代碼如下:程序代碼如下:35。如:已知數(shù)組。如:已知數(shù)組 a5=1,1,2,3,3,a5=1,1,2,3,3,復(fù)制產(chǎn)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 與業(yè)內(nèi)人士交流的計(jì)劃制定方式
- 2025年酒店、廚房設(shè)備用品項(xiàng)目發(fā)展計(jì)劃
- 七年級(jí)數(shù)學(xué)下冊(cè)教學(xué)計(jì)劃、單元分析、全冊(cè)教案(生本)、總結(jié)
- 七年級(jí)下冊(cè)《直方圖》課件與練習(xí)
- 河南省三門峽市2024-2025學(xué)年高一上學(xué)期1月期末考試 數(shù)學(xué) 含解析
- 2025年繞線絞線設(shè)備項(xiàng)目合作計(jì)劃書
- 構(gòu)建需求實(shí)現(xiàn)的進(jìn)度監(jiān)控系統(tǒng)
- 2025年微污染防控設(shè)備項(xiàng)目發(fā)展計(jì)劃
- 2025年通信設(shè)備、計(jì)算機(jī)及其他電子設(shè)備項(xiàng)目發(fā)展計(jì)劃
- 2025年CO2氣體保護(hù)藥芯焊絲項(xiàng)目建議書
- 2025書記員招聘考試題庫(kù)及參考答案
- 2024-2025年第二學(xué)期數(shù)學(xué)教研組工作計(jì)劃
- 2025輔警招聘公安基礎(chǔ)知識(shí)題庫(kù)附含參考答案
- 2025年菏澤醫(yī)學(xué)??茖W(xué)校高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 成都四川成都簡(jiǎn)陽(yáng)市簡(jiǎn)城街道便民服務(wù)和智慧蓉城運(yùn)行中心招聘綜治巡防隊(duì)員10人筆試歷年參考題庫(kù)附帶答案詳解
- 2025-2030全球廢棄食用油 (UCO) 轉(zhuǎn)化為可持續(xù)航空燃料 (SAF) 的催化劑行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- T-CSUS 69-2024 智慧水務(wù)技術(shù)標(biāo)準(zhǔn)
- 新版高中物理必做實(shí)驗(yàn)?zāi)夸浖捌鞑?(電子版)
- 中國(guó)慢性冠脈綜合征患者診斷及管理指南2024版解讀
- (正式版)SHT 3551-2024 石油化工儀表工程施工及驗(yàn)收規(guī)范
- JTGT H21-2011 公路橋梁技術(shù)狀況評(píng)定標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論