2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩118頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1,5.1 數(shù)組概述5.2 一維數(shù)組5.3 二維數(shù)組5.4 二維數(shù)組5.5 案例應(yīng)用,第5章 數(shù)組,2,5.1 數(shù)組概述,前幾章使用的變量都屬于基本類型,例如整型、字符型、浮點(diǎn)型數(shù)據(jù),這些都是簡單的數(shù)據(jù)類型。對于有些數(shù)據(jù),只用簡單的數(shù)據(jù)類型是不夠的,難以反映出數(shù)據(jù)的特點(diǎn),也難以有效地進(jìn)行處理。,【例5.1】輸入10個學(xué)生的成績,要求輸出所有高于平均分的成績。,#includevoid main(){ float a1,

2、a2,a3,a4,a5,a6,a7,a8,a9,a10,avg; scanf("%f%f%f%f%f%f%f%f%f%f",&a1, &a2,&a3,&a4,&a5,&a6,&a7,&a8,&a9,&a10); avg=(a1+a2+a3+a4+a5+a6+a7+a8+a9+a10)/10; if(a1&

3、gt;avg) printf("%.2f\n",a1); if(a2>avg) printf("%.2f\n",a2); if(a3>avg) printf("%.2f\n",a3); if(a4>avg) printf("%.2f\n",a4); if(a5>avg) printf(&quo

4、t;%.2f\n",a5); if(a6>avg) printf("%.2f\n",a6); if(a7>avg) printf("%.2f\n",a7); if(a8>avg) printf("%.2f\n",a8); if(a9>avg) printf("%.2lf\n",a9);

5、 if(a10>avg) printf("%.2f\n",a10); },,10個變量存儲10個學(xué)生成績,繁瑣,4,5.1 數(shù)組概述,10名學(xué)生成績,需要用10個變量100名學(xué)生成績,需要用多少個變量?用s1,s2,s3,……,s30表示成績,能體現(xiàn)內(nèi)在聯(lián)系C語言用方括號中的數(shù)字表示下標(biāo),如用s[10]表示,,數(shù)組名,一組具有同一屬性的數(shù)據(jù),5,5.1 數(shù)組概述,對于一組具有同一屬性的數(shù)據(jù),

6、如學(xué)生成績,利用數(shù)組來存儲,既能從整個數(shù)組出發(fā)去處理其中的個別元素,如某一個學(xué)生的成績,也能以統(tǒng)一方式處理數(shù)組的一批元素或所有元素,如部分或所有學(xué)生的成績。 數(shù)組是一種常用的構(gòu)造數(shù)據(jù)類型。,由一批元素構(gòu)成的數(shù)組和一批獨(dú)立命名的變量之間的主要區(qū)別:,6,5.1 數(shù)組概述,數(shù)組是數(shù)目固定、類型相同的若干變量的有序集合。數(shù)組中各數(shù)據(jù)的排列是有一定規(guī)律的,下標(biāo)代表數(shù)據(jù)在數(shù)組中的序號。每個數(shù)組都有一個名字,稱為數(shù)組名。表示內(nèi)存中一塊連續(xù)的存

7、儲區(qū)域。數(shù)組元素是一種變量,也稱為下標(biāo)變量,用一個數(shù)組名和下標(biāo)來標(biāo)識該的元素。數(shù)組中的每一個元素都屬于同一個數(shù)據(jù)類型,占用相同大小的內(nèi)在單元。,7,5.2 一維數(shù)組,5.2.1 一維數(shù)組的定義與初始化5.2.2 一維數(shù)組元素的引用5.2.3 一維數(shù)組作為函數(shù)參數(shù)5.2.4 一維數(shù)組應(yīng)用舉例,8,5.2.1 一維數(shù)組的定義與初始化,一維數(shù)組是最簡單的數(shù)組數(shù)組元素只有1個下標(biāo)——一維數(shù)組數(shù)組元素2個下標(biāo)——二維數(shù)組使用數(shù)組之

8、前必須先進(jìn)行定義。定義數(shù)組的方法與定義變量的方法類似。 在定義數(shù)組時需要指定這批變量的類型、數(shù)組名稱,數(shù)組中包含變量的個數(shù)。,如 int a[10];,,數(shù)組名,,數(shù)組名,9,5.2.1 一維數(shù)組的定義與初始化,1.一維數(shù)組的定義一維數(shù)組定義的一般形式為: 存儲類型 數(shù)據(jù)類型 數(shù)組名[整型表達(dá)式];下標(biāo)從0開始,如 int a[10]; a[0],a[1],a[2],…,a[9],,與變量聲明中的存儲類

9、型相同,,可以是所有的C數(shù)據(jù)類型,,命名規(guī)則與變量名相同,,數(shù)組元素的個數(shù),也稱為數(shù)組的長度或大小,#include#define SIZE 20void main(){ int n=5;int a1[5]; int a2[5*2+1]; static double a3[sizeof(int)]; char a4[SIZE];int a5[-3]; int a6[0]; int

10、 a7[4.5]; int a8[(int)4.5]; int a9[n];},//合法,整型常量,//合法,整型常量表達(dá)式,//合法,sizeof(int)被認(rèn)為是整型常量表達(dá)式,//合法,符號常量,//不合法,數(shù)組大小必須大于0,//不合法,數(shù)組大小必須大于0,//不合法,數(shù)組大小必須整數(shù),//合法,強(qiáng)制轉(zhuǎn)換成整型,//不合法,數(shù)組大小必須常量,int n;scanf(″%d″,&n); int a[

11、n];,不合法,#includevoid main(){ int a,b,k1[10],m,n,k2[20]; int a[5];},數(shù)組定義可以和普通變量定義寫在一起。數(shù)組名與普通變量名不能同名。,一旦定義了一個數(shù)組,系統(tǒng)將分配一塊連續(xù)內(nèi)存空間來存放它的所有元素。,默認(rèn)為自動(auto)型,12,5.2.1 一維數(shù)組的定義與初始化,2.一維數(shù)組的初始化對數(shù)組元素的賦值既可以通過賦值語句來實(shí)現(xiàn),也可通

12、過初始化。數(shù)組初始化是指在數(shù)組定義的同時給數(shù)組元素賦予初值。數(shù)組初始化是在編譯階段進(jìn)行的,這樣將減少運(yùn)行時間,提高效率。數(shù)組初始化的一般形式為:,存儲類型 數(shù)據(jù)類型 數(shù)組名[常量表達(dá)式]={值,值…值};,13,5.2.1 一維數(shù)組的定義與初始化,(1) 定義數(shù)組時對全部數(shù)組元素賦初值。 int a[10]={0,1,2,3,4,5,6,7,8,9}; (2) 可以只給一部分元素賦值。 int a[10]={0

13、,1,2,3,4}; 相當(dāng)于 int a[10]={0,1,2,3,4,0,0,0,0,0};(3)在對全部數(shù)組元素賦初值時,由于數(shù)據(jù)的個數(shù)已經(jīng)確定,因此可以不指定數(shù)組長度。 int a[5]={1,2,3,4,5}; 可寫為 int a[ ]={1,2,3,4,5};,14,5.2.2 一維數(shù)組元素的引用,必須先定義數(shù)組,才能引用數(shù)組中的元素數(shù)組元素是組成數(shù)組的基本單元對數(shù)組的引用最終都是通過對其元素

14、的引用而實(shí)現(xiàn)的只能逐個引用數(shù)組元素而不能一次引用整個數(shù)組中的全部元素,15,5.2.2 一維數(shù)組元素的引用,引用數(shù)組元素的一般形式為: 數(shù)組名[下標(biāo)表達(dá)式];a[0]=a[5]+a[2+1]-a[2*3] 合法 int n=5,a[10]; a[n]=20;,,下標(biāo)表達(dá)式可以為常量、變量或表達(dá)式,要求必須為整型。,合法,#includevoid main(){ int c[10]=

15、{6,-30,45,0,12,-89,2,-7,56,93}; printf(“%d\n”,c[0]+c[2]+c[4]);},,數(shù)組元素的下標(biāo)表達(dá)式為整型常量,#includevoid main(){ int c[10]={6,-30,45,0,12,-89,2,-7,56,93};for(int i=0;i<10;i++) printf("%d\t",c[i]);prin

16、tf("\n");},,引用數(shù)組元素時的下標(biāo)表達(dá)式為循環(huán)變量i,能以這種統(tǒng)一的方式c[i]處理一批數(shù)據(jù)正是數(shù)組和一批獨(dú)立命名的變量之間的主要區(qū)別。,#include#define SIZE 10void main(){ int i; float a[SIZE], avg, sum=0; for(i=0;iavg) printf("%.2f\t"

17、;,a[i]); printf("\n");},,循環(huán)中逐個元素的輸入,輸入一個累加一個。,,循環(huán)中依次判斷各數(shù)組元素。,沒有例5.1程序那么繁瑣,并且容易擴(kuò)展,如果有100個學(xué)生成績,則只要修改一個地方即將宏定義中的10改為100即可。程序其它部分不變。,#includevoid main(){ int c[10]={6,-30,45,0,12,-89,2,-7,56,93}; p

18、rintf("%d\n",c[10]);},,下標(biāo)越界,C編譯器不會檢查下標(biāo)的合法性。如果使用了錯誤的下標(biāo),程序執(zhí)行結(jié)果是不可預(yù)知的,程序或者能運(yùn)行,但是運(yùn)行結(jié)果可能很奇怪,也可能會中斷程序的執(zhí)行。因此在引用數(shù)組元素時一定要注意這一點(diǎn)。,執(zhí)行結(jié)果:1245120,#includevoid main(){ int a[10],b[10]={1,2,3,4,5}; a=b;

19、 a={1,2,3,4,5}; a[10]={1,2,3,4,5};},程序中通常使用數(shù)組存儲數(shù)據(jù),C語言不支持把數(shù)組作為一個整體來賦值,也不支持用花括號括起來的列表形式進(jìn)行賦值(初始化的時候除外)。,,初始化時允許整體賦值。,,不允許。,程序中要對數(shù)組賦值,只能一個一個元素地逐個賦值,通常是利用循環(huán)進(jìn)行的。,#includevoid main(){ int

20、 i,a[5], b[5]={1,2,3,4,5}; for ( i=0;i<5;i++) a[i]=b[i]; for ( i=0;i<5;i++) printf("%d\t",a[i]); printf("\n");},,使a[0]~a[4]的值為1~

21、5,a[0]a[1]a[2]a[3]a[4],執(zhí)行結(jié)果:1 2 3 4 5,,\t:跳到下個制表位(每個制表位是8列),跳到第9列輸出2。,int a[5];scanf(“%d%d%d%d%d ”,&a); scanf("%d ",&a); int a[5]={1,2,3,4,5};printf("%d\n",a)

22、; printf("%d,%d,%d,%d,%d\n",a);,數(shù)組不能用scanf()和printf()函數(shù)進(jìn)行整體的輸入輸出,數(shù)組元素的輸入輸出必須用循環(huán)來實(shí)現(xiàn)。例:,不合法,#includevoid main(){ int a[5],i; for(i=0;i<5;i++) scanf("%d",

23、&a[i]); for(i=0;i<5;i++) printf("%d\n",a[i]); },【例5.17】數(shù)組元素的輸入輸出。,數(shù)組元素輸入,數(shù)組元素輸出,,不要漏掉,數(shù)組元素的使用與其相同類型的普通變量的使用一樣。,23,5.2.3 一維數(shù)組作為函數(shù)參數(shù),1.數(shù)組元素作函數(shù)實(shí)參由于實(shí)參可以是表達(dá)式,而數(shù)組元素可以是表達(dá)式的組成部分,因此數(shù)組元素可以作

24、為函數(shù)實(shí)參。數(shù)組元素作為函數(shù)實(shí)參使用與處理普通變量沒有什么差別,在發(fā)生函數(shù)調(diào)用時,把作為實(shí)參的數(shù)組元素的值傳送給形參,實(shí)現(xiàn)單向的值傳遞。如果在函數(shù)中形參發(fā)生改變,對作為實(shí)參的數(shù)組元素是沒有影響的。,#include void modifyElement(int );void main(){ int a[5]={1,2,3,4,5}, i; for(i=0;i<5;i++) printf(&q

25、uot;%d\t",a[i]); printf("\n"); for(i=0;i<5;i++) modifyElement(a[i]); printf("\n"); for(i=0;i<5;i++) printf("%d\t",a[i]); printf("\n");},vo

26、id modifyElement(int x ){ x*=2; printf("%d\t",x);},與變量作為實(shí)參一樣,,【例5.18】數(shù)組元素作函數(shù)實(shí)參。,25,5.2.3 一維數(shù)組作為函數(shù)參數(shù),2.數(shù)組名作為函數(shù)參數(shù)希望在函數(shù)中處理整個數(shù)組的元素時,可以用數(shù)組名作為函數(shù)實(shí)參。注意,此時只是將數(shù)組的首元素的地址傳遞給所對應(yīng)的形參,因此對應(yīng)的形參應(yīng)當(dāng)是指針變量。,【例5.19】數(shù)組名作為函數(shù)參

27、數(shù)。,#include #define SIZE 5void modifyArray(int [],int ); void main(){ int a[ SIZE]={1,2,3,4,5},i; printf("The values of the original array are:\n"); for(i=0;i< SIZE ;i++) printf(&

28、quot;%d\t",a[i]); printf("\n"); modifyArray(a, SIZE); printf("The values of the modified array are:\n"); for(i=0;i< SIZE ;i++) printf("%d\t",a[i]); print

29、f("\n");},數(shù)組a作為實(shí)參,void modifyArray(int b[], int sizeofarray) { for(int i=0;i< sizeofarray ;i++) b[i]*=2;},與a共占同一存儲單元,實(shí)參、形參都是int型,相當(dāng)于a[i],調(diào)用形式: modifyArray(a, SIZE);,數(shù)組長度可以省略,

30、即使指定,編譯器也將其忽略。,為什么要用到這個參數(shù)?,28,5.2.3 一維數(shù)組作為函數(shù)參數(shù),說明:數(shù)組名代表數(shù)組存儲空間的首地址。數(shù)組名作函數(shù)參數(shù)時,傳遞的是首地址值,也就是說把實(shí)參數(shù)組的首地址賦予形參數(shù)組名,即地址傳遞。這時,形參數(shù)組和實(shí)參數(shù)組共用一段存儲空間。因此,被調(diào)函數(shù)在函數(shù)體中修改形參數(shù)組元素時,實(shí)際上修改的也是同一存儲空間中的實(shí)參數(shù)組元素。這樣當(dāng)形參數(shù)組發(fā)生變化時,實(shí)參數(shù)組也隨之變化。數(shù)組名作為函數(shù)參函數(shù)時,形參和實(shí)參

31、都必須是類型相同的數(shù)組。,29,5.2.4 一維數(shù)組應(yīng)用舉例,1.統(tǒng)計【例5.20】有一個學(xué)院在學(xué)生會換屆選舉中由全體學(xué)生無記名投票直選學(xué)生會主席,共有10名候選人,每個人的代號分別用1,2,3,…,10表示。每個學(xué)生填寫一張選票,若同意某名候選人則在其姓名后畫個圓圈即可(只能選一個)。編寫一個程序根據(jù)所有選票統(tǒng)計出每位候選人所得票數(shù),其中每張選票上所投候選人的代號從鍵盤輸入,當(dāng)輸入完所有選票后用-1作為數(shù)據(jù)輸入結(jié)束的標(biāo)志。,30,5

32、.2.4 一維數(shù)組應(yīng)用舉例,分析:由于需要同時使用10個變量分別統(tǒng)計10位候選人的票數(shù),為了處理的方便,應(yīng)該利用數(shù)組來存儲和統(tǒng)計。這里可以定義一個具有11個元素的一維整型數(shù)組vote來統(tǒng)計每個候選人的票數(shù),其中忽略第一個數(shù)組元素vote[0],用數(shù)組元素vote[1]對應(yīng)于代號為1的候選人票數(shù)。當(dāng)輸入某一個代號時,設(shè)為x(1≤x≤10),表示該候選人得一票,則對數(shù)組元素vote[x]進(jìn)行加1運(yùn)算。從鍵盤輸入一個代號序列(輸入-1

33、表示結(jié)束),當(dāng)程序運(yùn)行結(jié)束后,每個數(shù)組元素vote[x]的值就是代號為x的候選人最后所得的票數(shù)。,#include #define SIZE 11void main(){ int x,vote[SIZE]={0}; printf("Input number:"); scanf("%d",&x);

34、 while(x!=-1) { if(x>=1&&x<SIZE) vote[x]++; scanf("%d",&x); } printf("\n"); for(x=1;x<SIZE;x++)

35、 printf("%3d : %3d\n",x,vote[x]);},將數(shù)組元素初始化為0,不斷輸入,直到輸入-1為止,進(jìn)行統(tǒng)計,vote[x]代表第x個人的票數(shù),32,5.2.4 一維數(shù)組應(yīng)用舉例,2.排序【例5.21】已知有10個整數(shù):24,56,8,47,63,82,27,15,90,39,編寫一個程序按照從小到大的順序輸出 。解題思路一: 所謂選擇法就是先將10個數(shù)中最小的數(shù)與a

36、[0]對換;再將a[1]到a[9]中最小的數(shù)與a[1]對換……每比較一輪,找出一個未經(jīng)排序的數(shù)中最小的一個。共比較9輪,a[0] a[1] a[2] a[3] a[4],4 6 3 9 1,,,,1 6 3 9 4,,,,1 3 6 9 4,,,,1 3

37、 4 9 6,,,,1 3 4 6 9,小到大排序,每一趟只要進(jìn)行一次的數(shù)據(jù)交換,#include void main(){ void sort(int array[],int n); int a[10],i; printf("enter the array:\n"); for(i=0;i<10;i

38、++) scanf("%d",&a[i]); sort(a,10); printf("The sorted array:\n"); for(i=0;i<10;i++) printf("%d ",a[i]); printf("\n");},void sort(int array[],int n) { int i

39、,j,k,t; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++) if(array[j]<array[k]) k=j; if(k!=i) { t=array[k]; array[k]=array[i]; array[i]=t;} }},,在sort[i]~s

40、ort[9]中,找最小數(shù)下標(biāo),,在sort[i]~sort[9]中,最小數(shù)與sort[i]對換,36,5.2.4 一維數(shù)組應(yīng)用舉例,解題思路二: 第一次在待排序區(qū)間a[0]~a[n-1]中,將第一個位置上的元素a[0]與它后面的元素依次比較,如果后面的元素較小,將a[0]與該元素進(jìn)行交換,這樣a[0]肯定就是數(shù)組中最小值的元素; 第二次在待排序區(qū)間a[1]~a[n-1]中,將第一個位置上的元素a[1]與它后面的元素依次比較,

41、如果后面的元素較小,將a[1]與該元素進(jìn)行交換,這樣a[1]就成為整個數(shù)組中第二小的元素;共比較9輪。,,4 6 3 9 1,a[0] a[1] a[2] a[3] a[4],,,,,3 6 4 9 1,,a[0]排好序,,每一趟可能要進(jìn)行多次的數(shù)據(jù)交換,,,,,1 6 4 9

42、 3,1 6 4 9 3,1 4 6 9 3,,a[1]排好序,1 3 6 9 4,,,,,,,,,,要進(jìn)行4趟排序,#include #define SIZE 10void selectsort( int a[], int len ){ int i,j

43、 ,t; for(i=0 ; ia[j]) { t=a[i]; a[i]=a[j]; a[j]=t; }},,數(shù)據(jù)交換,控制循環(huán)趟數(shù),控制每趟循環(huán)次數(shù),選擇排序函數(shù),void displayArray(int a[ ] , int len){ for(int i=0 ; i<len ; i++)

44、 if(i!=len-1) printf("%d\t",a[i]); else printf("%d\n",a[i]);}void main(){ int a[SIZE]={ 24,56,8,47,63,82,27,15,90,39}; printf("Before sorting :\n"

45、); displayArray(a, SIZE); selectsort(a, SIZE); printf("After sorting :\n"); displayArray(a, SIZE); },數(shù)組輸出函數(shù),40,5.2.4 一維數(shù)組應(yīng)用舉例,2.排序 還有一種常用的排序算法——冒泡法: 基本思想:將相鄰的兩個數(shù)比較,將小的調(diào)到前頭,

46、大的數(shù)調(diào)到后面。,985420,,,895420,,,859420,,,854920,,,854290,,,854209,,大數(shù)沉淀,小數(shù)起泡,a[0]a[1]a[2]a[3]a[4]a[5],for(i=0;ia[i+1]) { t=a[i];a[i]=a[i+1];a[i+1]=t; },854209,584209,,,,,5

47、48209,,,542809,,,542089,,a[0]a[1]a[2]a[3]a[4]a[5],for(i=0;ia[i+1]) { t=a[i];a[i]=a[i+1];a[i+1]=t; },542089,,,452089,,,425089,,,420589,,a[0]a[1]a[2]a[3]a[4]a[5],for(i=

48、0;ia[i+1]) { t=a[i];a[i]=a[i+1];a[i+1]=t; },420589,,,240589,,,204589,,a[0]a[1]a[2]a[3]a[4]a[5],for(i=0;ia[i+1]) { t=a[i];a[i]=a[i+1];a[i+1]=t; },204589,,,024589,,a[0]a[1]

49、a[2]a[3]a[4]a[5],for(i=0;ia[i+1]) { t=a[i];a[i]=a[i+1];a[i+1]=t; },for(i=0;ia[i+1]) { ……},for(i=0;ia[i+1]) { ……},for(i=0;ia[i+1]) { ……},……,for(i=0;ia[i+1]) { ……},for(j=0;j&

50、lt;5;j++),int a[10]; int i,j,t;printf("input 10 numbers :\n");for (i=0;ia[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("the sorted numbers :\n");for(i=0;i<10;i++) printf("%d ",

51、a[i]);printf("\n");,input 10 numbers:24 56 8 47 63 82 27 15 90 39↙the sorted numbers:8 15 24 27 39 47 56 63 82 90,48,5.2.4 一維數(shù)組應(yīng)用舉例,3.查找【例5.22】已知有10個整數(shù):22,10,44,17,31, 51,89,68,120,95,從鍵盤輸入一個給定值x,在該序列中查

52、找是否有與給定值x相等的一個數(shù)。介紹兩種查找算法:順序查找和二分查找。,49,5.2.4 一維數(shù)組應(yīng)用舉例,(1)順序查找 基本思想:先假設(shè)定義了一個具有n個元素的一維整型數(shù)組a用來存放n個整數(shù)。順序查找就是從數(shù)組的第一元素a[0]開始,從頭到尾對數(shù)組中的每個元素逐個進(jìn)行比較,直到找到指定元素或查找失敗。順序查找適用于小數(shù)組或未排序數(shù)組。但當(dāng)數(shù)據(jù)量很大,順序查找效率很低。,#include #define SIZE 1

53、0int sequentialSearch( int a[], int len, int x) { for(int i=0;i<len;i++) if(x==a[i]) return i; return -1; }void displayArray(int a[] , int

54、len) { for(int i=0 ; i<len ; i++) if(i!= len-1) printf("%d\t",a[i]); else printf("%d\n",a[i]); },查找成功,返回該元素的下標(biāo)。,順序查找函數(shù),數(shù)組輸出函數(shù),void main(){ i

55、nt x,f, a[SIZE]={ 22,10,44,17,31,51,89,68,120,95}; displayArray(a, SIZE); printf("Input a number:"); scanf("%d",&x); f=sequentialSearch(a, SIZE,x); if(f==-1)

56、printf("%dvalue not found\n",x); else printf("found %d in element subscript is %d\n",x,f);},x是要查找的值,52,5.2.4 一維數(shù)組應(yīng)用舉例,(2)二分查找(又稱拆半查找)使用該算法進(jìn)行查找的前提條件:數(shù)組元素已排序?;舅枷耄?首先,將中間元素a[mid] 同給定

57、值x進(jìn)行比較,若x==a[mid]則表示查找成功,返回該元素的下標(biāo),若xa[mid],則表示待查找元素只可能在該中間元素的右邊區(qū)間a[mid+1]~a[N-1]中,接著只要在右邊這個區(qū)間繼續(xù)進(jìn)行二分查找即可。,第1次,,low,,mid,,high,以查找51為例。,第2次,,low,,mid,,high,第3次,,low,,mid,,high,查找成功,返回5,第1次,,low,,mid,,high,查找28,第2次,,low,,mi

58、d,,high,第3次,,low,mid,,high,low>high,查找失敗,第4次,,high,,low,,,mid,,high,#include #define SIZE 10int BinarySearch( int a[], int len, int x) { int low=0,high=len-1, mid; do { mid=(low+high)/2;

59、 if(x==a[mid]) return mid ; else if(x<a[mid]) high=mid-1; else low=mid+1; } while (low<=high); return -1

60、;},計算中間元素的下標(biāo),二分查找函數(shù),相等,則返回下標(biāo),小于,改變上界,大于,改變下界,查找不成功,void main( ) { int x,f, a[SIZE]={ 22,10,44,17,31,51,89,68,120,95}; printf("Before sorting :\n"); displayArray(a, SIZE); selectsort(a, S

61、IZE); printf("After sorting :\n"); displayArray(a, SIZE); printf("\nInput a number:"); scanf("%d",&x); f=BinarySearch(a, SIZE,x);

62、if(f==-1) printf("%d value not found\n",x); else printf("found %d in element subscript is %d\n",x,f); },57,5.2.4 一維數(shù)組應(yīng)用舉例,4.插入【例5.23】已知有10個整數(shù):3,6,18,28,54,68,87,105,127,162

63、,已從小到大排好序,編寫一個程序?qū)⒁唤o定值x插入到該序列中并保持原來的從小到大的順序不變。給定值x從鍵盤輸入。先假設(shè)定義一個具有n+1個元素的一維整型數(shù)組a來存放已從小到大排好序n個整數(shù)。即要多一個數(shù)組元素用來存放待插入的給定值x。,58,5.2.4 一維數(shù)組應(yīng)用舉例,基本思想:從數(shù)組的第一元素a[0]開始,將要插入的給定值x與數(shù)組中各元素按順序逐個比較,當(dāng)找到第一個比給定值x大的數(shù)組元素a[i]時,表示該元素之前即為要插入的位置

64、。找到插入位置后,從a[n-1]開始到a[i]為止,逐個后移(即將a[j]的值賦于后一個元素a[j+1] )。目的是要留出一個用于存放x的位置,并保持從元素a[i+1]到最后一個元素a[n]的排序順序不變。最后把插入的給定值x賦予數(shù)組元素a[i]。,#include #define SIZE 10int Insert(int a[], int len, int x){ int i,j; for(i

65、=0;i=i;j--) a[j+1]=a[j]; break; } a[i]=x; return i; },插入函數(shù),a[n-1]開始到a[i],逐個往后移。,找到插入位置后,即提前退出循環(huán)。,返回插入位置值。,void main( ) { int x,f, a[SIZE+1]

66、={ 3, 6, 18, 28, 54, 68, 87, 105,127, 162}; printf("Before inserting :\n"); displayArray(a, SIZE); printf("\nInput a number:"); scanf("%d",&am

67、p;x); f=Insert(a, SIZE,x); printf("\nAfter inserting :\n"); displayArray(a, SIZE+1); printf("Insert %d in element , subscript is %d\n",x,f); },61,5.3 二維數(shù)組,5.3.1

68、 二維數(shù)組的定義與初始化5.3.2 二維數(shù)組元素的引用5.3.3 二維數(shù)組應(yīng)用舉例,62,5.3.1 二維數(shù)組的定義與初始化,1.一維數(shù)組的定義 int a[3][4],b[5][10]; 定義 a為3×4(3行4列)的數(shù)組,共12個元素。 b為5×10(5行10列)的數(shù)組,共50個元素。一維數(shù)組定義的一般形式為: 存儲類型 數(shù)據(jù)類型 數(shù)組名[整型表達(dá)式1] [整型表達(dá)式2];

69、 整型表達(dá)式1表示第一維(行)的長度,整型表達(dá)式2 表示第二維(列)的長度。,63,5.2.1 一維數(shù)組的定義與初始化,注意:我們可以把二維數(shù)組看作是一種特殊的一維數(shù)組:它的元素又是一個一維數(shù)組。例如:可以把a(bǔ)看作是一個一維數(shù)組,它有3個元素:a[0]、a[1]、a[2],每個元素又是一個包含4個元素的一維數(shù)組。,64,5.2.1 一維數(shù)組的定義與初始化,邏輯存儲,內(nèi)存中的存儲順序:按行存放,,,65,5.3.1 二維數(shù)組的定義

70、與初始化,2.一維數(shù)組初始化(1)按行分組賦值 將初值分別用花括號“{}” 括起來進(jìn)行按行分組。 ①按行分組初始化 例如:int a[2][3]={{80,75,92},{61,65,71}}; ②按行分組部分元素賦初值例如:int a[2][3]={{80,75},{61}}; 其余的元素自動賦0值。,66,5.3.1 二維數(shù)組的定義與初始化,2.一維數(shù)組初始化(2)按行連續(xù)賦值

71、 初值之間沒有用花括號“{}”按行分組,只有最外面的一對花括號“{}”。 ①按行連續(xù)初始化 例如:int a[2][3]={80,75,92, 61,65,71}; ②按行連續(xù)部分元素賦初值例如:int a[2][3]={80,75,92, 61}; 其余的元素自動賦0值。,67,5.3.1 二維數(shù)組的定義與初始化,2.一維數(shù)組初始化(2)按行連續(xù)賦值 ③如對全部元素賦初值,則第一維的

72、長度可以不給出,但第二維的長度不能省。例如:int a[ ][3]={1,2,3,4,5,6,7,8,9};等價于: int a[3][3]={1,2,3,4,5,6,7,8,9}; ④在定義時也可以只對部分元素賦初值而省略第一維的長度,但應(yīng)分行賦初值。例如:int a[ ][4]={{0,0,3},{},{0,10}};,,0 0 3 00 0 0 00 10 0 0,68,5.3.

溫馨提示

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

評論

0/150

提交評論