第5章-1 數(shù)組_第1頁
第5章-1 數(shù)組_第2頁
第5章-1 數(shù)組_第3頁
第5章-1 數(shù)組_第4頁
第5章-1 數(shù)組_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1第5章2 5.1 數(shù)組概述數(shù)組概述 有如下幾組數(shù)據(jù),它們分別該如何存儲呢?有如下幾組數(shù)據(jù),它們分別該如何存儲呢? 一組具有一組具有相同數(shù)據(jù)類型相同數(shù)據(jù)類型的數(shù)據(jù)的的數(shù)據(jù)的有序集合。有序集合。一個班學生的學習成績一個班學生的學習成績一行文字一行文字一個矩陣一個矩陣這些數(shù)據(jù)的特點是:這些數(shù)據(jù)的特點是:1、具有相同的數(shù)據(jù)類型、具有相同的數(shù)據(jù)類型2、使用過程中需要保留原始數(shù)據(jù)、使用過程中需要保留原始數(shù)據(jù) C語言為這些數(shù)據(jù),提供了一種構造數(shù)據(jù)類型:數(shù)語言為這些數(shù)據(jù),提供了一種構造數(shù)據(jù)類型:數(shù)組。組。3類型說明符類型說明符 數(shù)組名常量表達式;數(shù)組名常量表達式;例如:例如: intint a a1010;

2、 ; 它表示定義了一個整形數(shù)組,數(shù)組名為它表示定義了一個整形數(shù)組,數(shù)組名為a a,此數(shù)組有,此數(shù)組有1010個元個元素。素。(1 1)數(shù)組名定名規(guī)則和變量名相同,遵循標識符定名規(guī)則。)數(shù)組名定名規(guī)則和變量名相同,遵循標識符定名規(guī)則。(2 2)在定義數(shù)組時,需要指定數(shù)組中元素的個數(shù),方括弧中的常量表達式)在定義數(shù)組時,需要指定數(shù)組中元素的個數(shù),方括弧中的常量表達式用來表示元素的個數(shù),即數(shù)組長度。用來表示元素的個數(shù),即數(shù)組長度。這。這1010個元素是,個元素是,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、。請持別注意,按上面的定義,不存在數(shù)組元素請持別注意,按上面的定義,不存在數(shù)組元素a a1010。 5.25.2一維數(shù)組一維數(shù)組4(3 3)常量表達式中可以包括常量和符號常量,但不能包含變量常量表達式中可以包括常量和符號常量,但不能包含變量。也就是說,。也就是說,C C語言不允許對數(shù)組的大小作動態(tài)定義,即數(shù)組的語言不允許對數(shù)組的大小作動態(tài)定義,即數(shù)組的大小不依賴于程序運行過程中變量的值。例如,下面這樣定義數(shù)大小不依賴于程序運行過程中變量的值。例如,下面這樣定義數(shù)組是不行的:組是不行的:intint n; n; scanf(“%d scanf(“%d,&n); &n); / /*

4、 *在程序中臨時輸入數(shù)在程序中臨時輸入數(shù) 組的大小組的大小 * */ / int int a an n; ; float a0;float a0;/ /* * 數(shù)組大小為數(shù)組大小為0 0沒有意義沒有意義 * */ / int int b(2)(3); b(2)(3); / /* * 不能使用圓括號不能使用圓括號 * */ / int int k, ak; k, ak; / /* * 不能用變量說明數(shù)組大小不能用變量說明數(shù)組大小* */ / 5一維數(shù)組:一維數(shù)組: floatfloat markmark100;100;mark0mark1mark2mark3. . . .mark9986.592

5、.077.552.0. . . .94.0低地址低地址 高地址高地址每個數(shù)據(jù)元素占用每個數(shù)據(jù)元素占用的字節(jié)數(shù),就是的字節(jié)數(shù),就是基基類型類型的字節(jié)數(shù)的字節(jié)數(shù)一個元素占一個元素占字節(jié)字節(jié)6數(shù)組名下標數(shù)組名下標下標可以是整型常量或整型表達式。例如下標可以是整型常量或整型表達式。例如: :a a0 0=a=a5 5+a+a7 7-a-a2 2* *3 3定義數(shù)組時用到的定義數(shù)組時用到的“數(shù)組名常量表達式數(shù)組名常量表達式” ” 和引和引用數(shù)組元素時用到的用數(shù)組元素時用到的“數(shù)組名下標數(shù)組名下標” ” 是有區(qū)別的是有區(qū)別的。例如例如 intint a10; a10; / /* * 定義數(shù)組長度為定義數(shù)組

6、長度為10 10 * */ / t=a6; t=a6; / /* * 引用引用a a數(shù)組中序號為數(shù)組中序號為6 6即第即第7 7 個元素。此時個元素。此時6 6不代表數(shù)組長不代表數(shù)組長 度度* */ /二、一維數(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);); 運行結果如下:運行結果如下: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ù)組元素賦以初值。例如)在定義數(shù)組時對數(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ù)組元素的初值依次放在一對花括弧內(nèi)。經(jīng)過上面將數(shù)組元素的初值依次放在一對花括弧內(nèi)。經(jīng)過上面的定義和初始化之后,的定

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)如果想使一個數(shù)組中全部元素值為如果想使一個數(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語言不同的,不能給數(shù)組整體賦初值。語言不同的,不能給數(shù)組整體賦初值。 (2(2)可以只給一部分元素賦值。例如)可以只給一部分元素賦值。例如: :intint a a1010=0=0,1 1,2 2,3 3,4;4; 定義定義a a數(shù)組有數(shù)組有1010個元素,但花括弧內(nèi)只提供個元素,但花括弧內(nèi)只提供5 5個初值,這個初值,這表示只給前面表示只給前面5 5個元素賦初值,后個元素賦初值,后5 5個元素值為個元素值為0 0。10(4(4)在對全部數(shù)組元素賦初值時,由于數(shù)據(jù)的個數(shù)已在對全部數(shù)組元素賦初值時,由于數(shù)據(jù)的個數(shù)已經(jīng)確定,因此可以不指定數(shù)組長

10、度。經(jīng)確定,因此可以不指定數(shù)組長度。 例如例如: :intint a a5 5=1=1,2 2,3 3,4 4,5;5; 也可以寫成也可以寫成 int a=1,2,3,4,5; 在第二種寫法中,花括弧中有在第二種寫法中,花括弧中有5 5個數(shù),系統(tǒng)就會據(jù)此個數(shù),系統(tǒng)就會據(jù)此自動定義自動定義a a數(shù)組的長度為數(shù)組的長度為5 5。但若數(shù)組長度與提供初值。但若數(shù)組長度與提供初值的個數(shù)不相同,則數(shù)組長度不能省略。例如,想定義的個數(shù)不相同,則數(shù)組長度不能省略。例如,想定義數(shù)組長度為數(shù)組長度為1010,就不能省略數(shù)組長度的定義,而必須,就不能省略數(shù)組長度的定義,而必須寫成寫成 intint a a1010=

11、1=1,2 2,3 3,4 4,5; 5; 只初始化只初始化前前5 5個元素,后個元素,后5 5個元素為個元素為0 0。11用數(shù)組來處理)。用數(shù)組來處理)。#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ù)組元素可以是表達由于實參可以是表達式,而數(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ù)組名可以用數(shù)組名作函數(shù)參數(shù),此時形參應當用數(shù)組名或用指針變量或用指針變量 。15(1)用數(shù)組名作函數(shù)參數(shù),應該在主調函數(shù)和被調用函)用數(shù)組名作函數(shù)參數(shù),應該在主調函數(shù)和被調用函數(shù)中分別定義數(shù)組。數(shù)中分別定義數(shù)組。(2)實參數(shù)組與形參數(shù)組類型

15、應一至。)實參數(shù)組與形參數(shù)組類型應一至。(3)形參數(shù)組可以不指定大小,在定義數(shù)組時在數(shù)組名)形參數(shù)組可以不指定大小,在定義數(shù)組時在數(shù)組名后面跟一個空的方括號。因為后面跟一個空的方括號。因為C語言編譯時對形參數(shù)組語言編譯時對形參數(shù)組的大小不做檢查,只是將實參數(shù)組的首元素的地址傳給的大小不做檢查,只是將實參數(shù)組的首元素的地址傳給形參數(shù)組。形參數(shù)組。(4)用數(shù)組名作函數(shù)實參時,不是把數(shù)組元素的值傳遞)用數(shù)組名作函數(shù)實參時,不是把數(shù)組元素的值傳遞給形參,而是把實參數(shù)組的首元素的地址傳遞給形參數(shù)給形參,而是把實參數(shù)組的首元素的地址傳遞給形參數(shù)組,這樣兩個數(shù)組共占同一段內(nèi)存單元,這一點與變量組,這樣兩個數(shù)

16、組共占同一段內(nèi)存單元,這一點與變量作函數(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(請輸入年_月_日:); printf(請輸入年_月_日:); 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號是該年的第%d天。n,y,m,d,s);printf(%d年%d月%d號是該年的第%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(請輸入候選人的代號(1-10):n); printf(請輸入候選人的代號(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個整數(shù):個整數(shù):24、56、8、47、63、82、27、15、90、39,編寫一個程序,用選擇法按照從小,編寫一個程序,用選擇法按照從小到大順序輸出。到大順序輸出。 從從n個數(shù)的序列中選出最小的數(shù)個數(shù)的序列中選出最小的數(shù)(遞增遞增),與第,與第1個數(shù)個數(shù)交換位置;交換位置; 除第除第1個數(shù)外,其余個數(shù)外,其余n-1個數(shù)再按個數(shù)再按(1)的方法選出次小的方法選出次小的數(shù),與第的數(shù),與第2個數(shù)交換位置;個數(shù)交換位置; 重復重復(1)

22、n-1遍,最后構成遞增序列。遍,最后構成遞增序列。21以以5個數(shù)為例,未排序時的情況如下:個數(shù)為例,未排序時的情況如下:a0 a1 a2 a3 a4 3 6 1 9 4(1) 將將5個數(shù)中最小的數(shù)個數(shù)中最小的數(shù)a2與與a0對換對換 1 6 3 9 4 (2) 將余下的將余下的4個數(shù)中最小的數(shù)個數(shù)中最小的數(shù)a2與與a1對換對換 1 3 6 9 4 (3) 將余下的將余下的3個數(shù)中最小的數(shù)個數(shù)中最小的數(shù)a4與與a2對換對換 1 3 4 9 6 (4) 將余下的將余下的2個數(shù)中最小的數(shù)個數(shù)中最小的數(shù)a4與與a3對換,至此完對換,至此完成排序成排序 。 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ù)所在的下標 k=i;

25、存放數(shù)組中最小數(shù)所在的下標 for(j=i+1;jn;j+) for(j=i+1;jn;j+)23 冒泡法排序與選擇法排序相似,選擇法排序在每一冒泡法排序與選擇法排序相似,選擇法排序在每一輪排序時找最小輪排序時找最小(遞增次序遞增次序)數(shù)的下標,出了內(nèi)循環(huán)數(shù)的下標,出了內(nèi)循環(huán)(一一輪排序結束輪排序結束),再交換最小數(shù)的位置;而冒泡法排序在,再交換最小數(shù)的位置;而冒泡法排序在每一輪排序時將相鄰的數(shù)比較,當次序不對就交換位每一輪排序時將相鄰的數(shù)比較,當次序不對就交換位置,出了內(nèi)循環(huán),最大數(shù)(或最小數(shù))已沉底。置,出了內(nèi)循環(huán),最大數(shù)(或最小數(shù))已沉底。241010個數(shù)排序個數(shù)排序( (由小到大由小到

26、大) )為例,冒泡法的思路是:為例,冒泡法的思路是: 將相鄰兩個數(shù)比較,將小的調到前面。將相鄰兩個數(shù)比較,將小的調到前面。 如有下例如有下例6個數(shù)(個數(shù)(9、8、5、4、2、0):):第一趟比較 經(jīng)過第一趟經(jīng)過第一趟( (共共5 5次比較與交換次比較與交換) )后,最大的數(shù)后,最大的數(shù)9 9已已“沉沉底底” ” 。然后對余下的前面。然后對余下的前面5 5個數(shù)進行第二趟比較,個數(shù)進行第二趟比較,注注25第二趟比較如果有如果有n個數(shù),則要進行個數(shù),則要進行n-1趟比較。在第趟比較。在第1趟比較中要趟比較中要進行進行n-1次兩兩比較,在第次兩兩比較,在第j趟比較中要進行趟比較中要進行n-j次兩兩次兩

27、兩比較。比較。 經(jīng)過第二趟經(jīng)過第二趟( (共共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請輸入要查找的數(shù):); printf(n請輸入要查找的數(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 這個數(shù)。n,x); printf(數(shù)組中不存在 %d 這個數(shù)。n,x); else else printf(數(shù) %d 是數(shù)組中的第 %d 個元素。n,x,f+1); printf(數(shù) %d 是數(shù)組中的第 %d 個元素。n,x,f+1); int search(int array,int n,int x)int search(int array,int n,int x) 28。 二分查找法也稱折半查找法,是一種效率較高的查找方法。二分查

31、找法也稱折半查找法,是一種效率較高的查找方法。對于大型數(shù)組,它的查找速度比順序查找法快很多。對于大型數(shù)組,它的查找速度比順序查找法快很多。 先從數(shù)組中間開始比較,先從數(shù)組中間開始比較, 判別中間的那個元素是不是要找的判別中間的那個元素是不是要找的數(shù)據(jù):是,則查找成功;否,若被查找的數(shù)據(jù)是在該數(shù)組的上半數(shù)據(jù):是,則查找成功;否,若被查找的數(shù)據(jù)是在該數(shù)組的上半部,則從上半部的中間繼續(xù)查找,否則從下半部的中間繼續(xù)查找部,則從上半部的中間繼續(xù)查找,否則從下半部的中間繼續(xù)查找 照此進行下去,不斷縮小查找范圍至最后,因找到或找不到而照此進行下去,不斷縮小查找范圍至最后,因找到或找不到而停止查找。停止查找。

32、29 對于對于n個數(shù)據(jù),若用變量個數(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請輸入要

34、查找的數(shù): ); printf(n請輸入要查找的數(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 這個數(shù)。n,x); printf(n數(shù)組中不存在 %d 這個數(shù)。n,x); else else printf(n數(shù) %d 是數(shù)組中的第 %d 個元素。n,x,f+1); printf(n數(shù) %d 是數(shù)組中的第 %d 個元素。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個整數(shù):個整數(shù):3、6、18、28、54、68、87、105、127、162,已從小到大排好序,編寫一個程序將一給定值,已從小到大排好序,編寫一個程序將一給定值x插入到該序列中插入到該序列中并保持原來的從小到大的順序不變。給定值并保持原來的從小到大的順序不變。給定值x從鍵盤輸入。從鍵盤輸入。要在有序數(shù)組要在有序數(shù)組a中插入數(shù)值中插入數(shù)值x,使插入后的數(shù)組仍有序。插入過,使插入后的數(shù)組仍有序。插入過程如下圖:程如下圖:l 首先查找要插入數(shù)據(jù)在數(shù)組中的位置首先查找要插入數(shù)據(jù)在數(shù)組中的位置kl 然后

36、從最后一個位置往前直到下標為然后從最后一個位置往前直到下標為k的元素逐一往后移動一個位的元素逐一往后移動一個位置;置;l 第第k個元素的位置騰出,將數(shù)據(jù)插入。個元素的位置騰出,將數(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請輸入要插入的數(shù): ); printf(n請輸入要插入的數(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); 在上題中,當出現(xiàn)插入的數(shù)比數(shù)組中所有數(shù)都大或都小的情況時,上在上題中,當出現(xiàn)插入的數(shù)比數(shù)組中所有數(shù)都大或都小的情況時,上面的程序能處理嗎?面的程序能處理嗎?33編寫程序,將數(shù)組的前編寫程序,將數(shù)組的前n n個元個元素中,前端的素中,前端的m m個元素和隨后的個元素和隨后的n-mn-m個元素互換。個元素互換。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,設,設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。 需移動的元素為需移動的元素為m m個,每個元素需產(chǎn)生個,每個元素需產(chǎn)生n n次移動。次移動。因此,在每次移動中,首先將第因此,在每次移動中,首先將第0 0個元素暫存起來,將其個元素暫存起來,將其后的后的n-1n-1個元素向前移動一個位置,再將第個元素向前移動一個位置,再將第0 0個元素保存?zhèn)€元素保存到第到第n n個位置。個位置。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請輸入數(shù) n 和 m:); printf(n請輸入數(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,復制產(chǎn)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論