版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第4章,數(shù)組(3),【例4-3】寫出下面程序的運行結(jié)果,#includevoid main(){ int i, max, a[]={25,64,38,40,75,66,38,54}; max=a[0]; for(i=1;imax) max=a[i]; printf("max=%d\n&qu
2、ot;,max);},max=75,【例4-5 】有一3×4矩陣,編程求其元素最大值并輸出其行、列號。,main(){ int i,j,x,y,max; int a[][4]={3,5,8,1,6,9,7,12,-6}; max=a[0][0]; for (i=0;imax) { max=a[i][j]; x
3、=i; y=j; } printf("max is a[%d][%d]=%d\n",x,y,max);},3 5 8 1 6 9 7 12-6 0 0 0,要點:用兩重循環(huán)遍歷所有元素。,【討論】 如果求最小值?,4,習(xí)題: 輸入一個3行4列的二維數(shù)組,設(shè)計一程序,求出數(shù)組元素中的最大值和最小值,以及最大值和最小值所
4、在的行號和列號。,void main(void){ int i,j,rmax,rmin,cmax,cmin,min,max; int a[3][4]; printf("輸入3行4列的二維數(shù)組:\n"); for(i=0; imax) { max=a[i][j];rmax=i;cmax=j; } if(a[i][j
5、]<min) { min=a[i][j];rmin=i;cmin=j; } }},,,用戶輸入二維數(shù)組的初值,,初始認(rèn)為a[0][0]是最小和最大值,初始化最小最大值的行列號,遍歷二維數(shù)組,求出極值,用數(shù)組來處理求Fibonacci數(shù)列問題,例,1 1 2 3 5 8 …,0,1,2,用數(shù)組來處理求Fibonacci數(shù)列問題,main(){ int i; stati
6、c int f[20]={1,1}; for (i=2;i<20;i++) f[i]=f[i-1]+f[i-2]; for (i=0;i<20;i++); {if (i%5==0) printf(“\n”); printf(“%12d”,f[i]);}},例,程序填空:,1 0 0 0 02 1 0 0 0 3 2 1 0 04 3 2 1 05 4 3 2 1,main()
7、{ int a[5][5],i,j; for (i=0;i<5;i++) { for (j=0;j<5;j++) { if ( 【1】 ) a[i][j]=0; else a[i][j]=【2】; printf("%3d",a[i][j]); } printf("\n
8、"); }},【分析】這類題的元素值排列很有規(guī)律,一般要從分析行列數(shù) i、 j與元素值的關(guān)系著手.當(dāng) i=j時,元素值隨行數(shù) i 增加而增加,隨列數(shù) j 增加而減小,這樣就很容易得出其元素值與 i,j 的關(guān)系是 i+1-j。,1 0 0 0 02 1 0 0 0 3 2 1 0 04 3 2 1 05 4 3 2 1,a[5][5]分析:a00 a01 a02 a03 a04a10 a11
9、a12 a13 a14a20 a21 a22 a23 a24a30 a31 a32 a33 a34a40 a41 a42 a43 a44,main(){ int a[5][5],i,j; for (i=0;i<5;i++) { for (j=0;j<5;j++) { if ( 【1】 ) a[i][j]=0; e
10、lse a[i][j]=【2】; printf("%3d",a[i][j]); } printf("\n"); }},i<j,i+1-j,a[5][5]分析:a00 a01 a02 a03 a04a10 a11 a12 a13 a14a20 a21 a22 a23 a24a30 a31 a32
11、a33 a34a40 a41 a42 a43 a44,1 0 0 0 02 1 0 0 0 3 2 1 0 04 3 2 1 05 4 3 2 1,【例4-11】(數(shù)組分段交換),長度為n的數(shù)組a可以分為兩段,前面k個元素為一段,后面n-k個元素為另一段。編程交換兩組元素的位置,交換之后每一組內(nèi)部元素的相對位置保持不變。例如,數(shù)組a如下:a={1,2,3,4,5,6,7,8}. k=3, 兩組交換之后數(shù)組變成:
12、a={4,5,6,7,8,1,2,3},算法1:使用臨時數(shù)組,#includevoid array_swap(int a[ ], int n, int k){ int t[50]; int i; for(i=0;i<k;i++) //將數(shù)組a的第一段(用a[0~k-1]表示)拷貝到臨時數(shù)組t中 t[i]=a[i]; for(i=k;i<n;i++) //將數(shù)組a的第二段(用a
13、[k~n-1]表示)向前移動k個元素 a[i-k]=a[i]; for(i=0;i<k;i++) //將數(shù)組t的元素拷貝到數(shù)組a的后面k個位置(a[k~n-1]) a[n-k+i]=t[i];},a,t,0,k,n-1,算法1:使用臨時數(shù)組,#includevoid array_swap(int a[ ], int n, int k){ int t[50]; int i
14、; for(i=0;i<k;i++) //將數(shù)組a的第一段(用a[0~k-1]表示)拷貝到臨時數(shù)組t中 t[i]=a[i]; for(i=k;i<=n-1;i++) //將數(shù)組a的第二段(用a[k~n-1]表示)向前移動k個元素 a[i-k]=a[i]; for(i=0;i<k;i++) //將數(shù)組t的元素拷貝到數(shù)組a的后面k個位置(a[k~n-1])
15、 a[n-k+i]=t[i];},a,t,0,k,n-1,算法1:使用臨時數(shù)組,#includevoid array_swap(int a[ ], int n, int k){ int t[50]; int i; for(i=0;i<k;i++) //將數(shù)組a的第一段(用a[0~k-1]表示)拷貝到臨時數(shù)組t中 t[i]=a[i]; for(i=k;i<=n-1;i++
16、) //將數(shù)組a的第二段(用a[k~n-1]表示)向前移動k個元素 a[i-k]=a[i]; for(i=0;i<k;i++) //將數(shù)組t的元素拷貝到數(shù)組a的后面k個位置(a[k~n-1]) a[n-k+i]=t[i];},a,t,0,k,n-1,算法1:使用臨時數(shù)組,#includevoid array_swap(int a[ ], int n, int k){ int
17、 t[50]; int i; for(i=0;i<k;i++) //將數(shù)組a的第一段(用a[0~k-1]表示)拷貝到臨時數(shù)組t中 t[i]=a[i]; for(i=k;i<=n-1;i++) //將數(shù)組a的第二段(用a[k~n-1]表示)向前移動k個元素 a[i-k]=a[i]; for(i=0;i<k;i++) //將數(shù)組t的元素拷貝到數(shù)組a的后面k個位
18、置(a[k~n-1]) a[n-k+i]=t[i];},a,t,0,k,n-1,算法2:數(shù)組元素逆序法,對下列數(shù)組a={1,2,3,4,5,6,7,8}.以k=3為分界點,分成兩段,對第一段和第二段分別逆序,結(jié)果如下:a’={3,2,1,8,7,6,5,4}再對a’整體逆序得:a’’={4,5,6,7,8,1,2,3},數(shù)組逆序算法,/* 功能:逆序數(shù)組a中指定區(qū)間a[l]~a[h]的元素 */void
19、array_reverse(int a[],int l,int h){ int t; while(l<h) { t=a[l]; a[l]=a[h]; a[h]=t; l++; h--; } },a,l,h,1,8,數(shù)組逆序算法,/* 功能:逆序數(shù)組a中指定區(qū)間a[l]~a[h]的元素 */void
20、array_reverse(int a[],int l,int h){ int t; while(l<h) { t=a[l]; a[l]=a[h]; a[h]=t; l++; h--; } },a,l,h,,l,,h,數(shù)組逆序算法,/* 功能:逆序數(shù)組a中指定區(qū)間a[l]~a[h]的元素 */voi
21、d array_reverse(int a[],int l,int h){ int t; while(l<h) { t=a[l]; a[l]=a[h]; a[h]=t; l++; h--; } },a,h,l,數(shù)組逆序算法,/* 功能:逆序數(shù)組a中指定區(qū)間a[l]~a[h]的元素 */void ar
22、ray_reverse(int a[],int l,int h){ int t; while(l<h) { t=a[l]; a[l]=a[h]; a[h]=t; l++; h--; } },a,h,l,void array_swap(int a[],int n,int k){ array_rev
23、erse(a,0,k-1);//對第一段逆序 array_reverse(a,k,n-1);//對第二段逆序 array_reverse(a,0,n-1);//對整個數(shù)組逆序},main(){ int a[]={1,2,3,4,5,6,7,8}; int i,n=8,k=3; printf("交換前\n"); for(i=0;i<n;i++) printf(&
24、quot;%3d",a[i]); printf("\n"); array_swap(a,n,k); //調(diào)用函數(shù) printf("交換后(分段位置:%d)\n",k); for(i=0;i<n;i++) printf("%3d",a[i]); printf("\n");},a,k,0 1 2 3
25、 4 5 6 7,a,a,a,兩個有序集合的并集算法,a={ 1 2 3 8 12 15 } 元素個數(shù)為m=6,b={ 2 3 7 9 } 元素個數(shù)為n=4,c={
26、 },1,,2,,,3,,,7,,8,,9,,12,,15,,,,,,,,,,0 1 2 3 4 5 6 7,兩個有序集合的并集算法,int set_union(int a[],int m,int b[],int n,int c[]){ int p=0,q=0,k=0;while(p=m &
27、;& q=n) //集合b已經(jīng)處理完畢 {c[k]=a[p]; p++; k++; }}return k;},兩個有序集合的交集算法,int set_insection(int a[],int m,int b[],int n,int c[]){ int p=0,q=0,k=0;while(p<m && q<n){if(a[p]==b[q]){
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 第3章第4章習(xí)題解答
- 第5章-數(shù)組
- 第3、4章 習(xí)題課
- 第3、4章習(xí)題參考答案
- 第3、4章習(xí)題參考答案
- 統(tǒng)計學(xué)第3、4章習(xí)題
- 第3章習(xí)題
- 第四章 數(shù)組習(xí)題
- 第9章fortran中的數(shù)組
- 第4章 習(xí)題答案
- 第3章習(xí)題答案
- 第3章 習(xí)題答案
- 第3章 習(xí)題答案
- 第16章電能與電功率例題與習(xí)題
- 第4章習(xí)題答案
- 數(shù)組典型例題分析與解答
- 第3章習(xí)題答案
- 習(xí)題答案第1~4章
- 第3章-習(xí)題與解答
- 第3章-習(xí)題1(答案)
評論
0/150
提交評論