c程序編寫求三個(gè)數(shù)的最大值和最小值c函數(shù)應(yīng)用_第1頁
c程序編寫求三個(gè)數(shù)的最大值和最小值c函數(shù)應(yīng)用_第2頁
c程序編寫求三個(gè)數(shù)的最大值和最小值c函數(shù)應(yīng)用_第3頁
c程序編寫求三個(gè)數(shù)的最大值和最小值c函數(shù)應(yīng)用_第4頁
c程序編寫求三個(gè)數(shù)的最大值和最小值c函數(shù)應(yīng)用_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

C++程序編寫求三個(gè)數(shù)的最大值和最小值,C++函數(shù)應(yīng)用有一個(gè)很基礎(chǔ)的算法在做嵌入式開發(fā)中經(jīng)常會(huì)使用到,那就是找最值,最常見的是以下兩個(gè)宏:#definemax(a,b)((a)>(b)?(a):(b))#definemin(a,b)((a)<(b)?(a):(b))max和min宏分別比較兩個(gè)值誰大誰小,然后予以返回,很簡單。但如果是比較多個(gè)數(shù)據(jù)的數(shù)值,我們就需要對數(shù)組里的元素進(jìn)行比較了,來看看程序?qū)崿F(xiàn):find_buffer_max_min.c#include<stdio.h>#include<unistd.h>#include<stdlib.h>#defineNR(x)(sizeof(x)/sizeof(x[0]))#defineu32unsignedint

#defineu8

unsignedchar//找數(shù)組的最小值

staticu32find_buffer_min(u32buffer_value_min,u32size,u32*buffer){u8count=0;

//先設(shè)置一個(gè)比較的范圍值u32min=buffer_value_min;//遍歷數(shù)組size個(gè)字節(jié)

for(count=0;count<size;count++){//比較當(dāng)前數(shù)組的索引值是否小于當(dāng)前設(shè)定的最小值

//如果是的話,將該值賦值給min,依次通過for循環(huán)遍歷,直到找到最小值

if(buffer[count]<min)min=buffer[count];}//返回最小值

returnmin;

}//找數(shù)組的最大值

staticu32find_buffer_max(u32buffer_value_max,u32size,u32*buffer){u8count=0;

u32max=buffer_value_max;//遍歷數(shù)組size個(gè)字節(jié)

for(count=0;count<size;count++){//比較當(dāng)前數(shù)組所在的索引值是否大于當(dāng)前設(shè)定的最大值

//如果是的話,將該值賦值給max,依次通過for循環(huán)遍歷,直到找到最大值

if(buffer[count]>max)max=buffer[count];}//返回最大值

returnmax;

}

intmain(void){inti=0;intbuffer[10]={11111,45465,5454,11211,45778,21144,854,12347,12347,8898};intmin=find_buffer_min(32767,NR(buffer),buffer);intmax=find_buffer_max(32767,NR(buffer),buffer);printf("min:%d

max:%d\n",min,max);return0;

}

C語言丨如何查找數(shù)組中的最大值或者最小值?程序中,我們經(jīng)常使用數(shù)組(列表)存儲(chǔ)給定的線性序列(例如{1,2,3,4}),那么如何查找數(shù)組(序列)中的最大值或者最小值呢?查找數(shù)組(序列)中最大值或最小值的算法有很多,接下來我們以{3,7,2,1}

序列為例講解兩種查找最值的算法,一種是普通算法,另一種是借助分治算法解決。普通算法普通算法的解決思路是:創(chuàng)建兩個(gè)變量max和min分別記錄數(shù)組中的最大值和最小值,它們的初始值都是數(shù)組中的第一個(gè)數(shù)字。從第2個(gè)數(shù)字開始遍歷數(shù)組,每遇到一個(gè)比max大的數(shù)字,就將它存儲(chǔ)到max變量中;每遇到一個(gè)比min小的數(shù)字,就將它存儲(chǔ)到min變量中。直到遍歷完整個(gè)數(shù)組,max記錄的就是數(shù)組中的最大值,min記錄的就是數(shù)組中的最小值。下面的動(dòng)畫,演示了找最大值的過程:數(shù)組中找最大值的過程找最小值的過程和上圖類似,這里不再給出具體的動(dòng)畫演示?!缦率瞧胀ㄋ惴▽?yīng)的偽代碼:輸入num[1...n]//輸入n個(gè)數(shù)字max<-num[1]//將第1個(gè)數(shù)字賦值給max(表示最大值)min<-num[1]//將第1個(gè)數(shù)字賦值給min(表示最小值)fori<-2ton://從第2個(gè)數(shù)字開始遍歷ifnum[i]>max://如果max小于遍歷到的數(shù)字,則更新max的值max<-num[i]ifnum[i]<min://如果min小于遍歷到的數(shù)字,則更新min的值min<-num[i]Printmax,min//輸出max和min的值實(shí)現(xiàn)過程非常簡單,感興趣的讀者可以自行閱讀源碼。分治算法下圖展示了用分治算法查找{3,7,2,1}中最大值的實(shí)現(xiàn)過程:分治算法找最大值分治算法的實(shí)現(xiàn)思路是:不斷地等分?jǐn)?shù)組中的元素,直至各個(gè)分組中元素的個(gè)數(shù)≤2。由于每個(gè)分組內(nèi)的元素最多有2個(gè),很容易就可以找出其中的最值(最大值或最小值),然后這些最值再進(jìn)行兩兩比較,最終找到的最值就是整個(gè)數(shù)組中的最值。上圖所示,借助“分而治之”的思想,我們將“找{3,7,2,1}中最值”的問題轉(zhuǎn)換成了:先找出{3,7]、[2,1}中各自的最值,找出的最值再進(jìn)行兩兩比較,最終就可以找到整個(gè)數(shù)組中的最值?!种嗡惴ㄕ易畲笾捣种嗡惴ǖ膶?shí)現(xiàn)思路是:不斷地等分?jǐn)?shù)組中的元素,直至各個(gè)分組中元素的個(gè)數(shù)≤2。由于每個(gè)分組內(nèi)的元素最多有2個(gè),很容易就可以找出其中的最值(最大值或最小值),然后這些最值再進(jìn)行兩兩比較,最終找到的最值就是整個(gè)數(shù)組中的最值。上圖所示,借助“分而治之”的思想,我們將“找{3,7,2,1}中最值”的問題轉(zhuǎn)換成了:先找出{3,7]、[2,1}中各自的最值,找出的最值再進(jìn)行兩兩比較,最終就可以找到整個(gè)數(shù)組中的最值。——————————————————如下是分治算法求數(shù)組中最大值的偽代碼:輸入arr[1...n]//輸入n個(gè)數(shù)字arr_max(x,y)://設(shè)計(jì)一個(gè)遞歸函數(shù),[x,y]用來限定查找最大數(shù)的范圍ify-x≤1://如果y-x的值小于等于1,則比較arr[x]和arr[y]的值,大的就是最大值returnmax(arr[x],arr[y])else://將[x,y]區(qū)域劃分為[x,?(x+y)/2?]和[?(x+y)/2+1?,y]兩個(gè)區(qū)域,求出兩個(gè)區(qū)域內(nèi)各自的最大值max1=arr_max(x,?(x+y)/2?)max2=arr_max(?(x+y)/2+1?,y)returnmax(max1,max2)//比較兩個(gè)區(qū)域的最大值,最終找出[x,y]中的最大值——————————————————————分治算法實(shí)現(xiàn)“求數(shù)組中最大值”的C語言程序如下:#include<stdio.h>//自定義函數(shù),其中[left,right]表示arr數(shù)組中查找最大值的范圍intget_max(int*arr,intleft,intright){intmax_left=0,max_right=0,middle=0;//如果數(shù)組不存在if(arr==NULL){return-1;}//如果查找范圍中僅有一個(gè)數(shù)字if(right-left==0){returnarr[left];}//如果查找范圍中有2個(gè)數(shù)字,直接比較即可if(right-left<=1){if(arr[left]>=arr[right]){returnarr[left];}returnarr[right];}//等量劃分成2個(gè)區(qū)域middle=(right-left)/2+left;//得到左側(cè)區(qū)域中的最大值max_left=get_max(arr,left,middle);//得到右側(cè)區(qū)域中的最大值max_right=get_max(arr,middle+1,right);//比較左、右兩側(cè)的最大值,找到[left,right]整個(gè)區(qū)域的最大值if(max_left>=max_right){returnmax_left;}else{

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論