c程序编写求三个数的最大值和最小值c函数应用_第1页
c程序编写求三个数的最大值和最小值c函数应用_第2页
c程序编写求三个数的最大值和最小值c函数应用_第3页
c程序编写求三个数的最大值和最小值c函数应用_第4页
c程序编写求三个数的最大值和最小值c函数应用_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C++程序编写求三个数的最大值和最小值,C++函数应用有一个很基础的算法在做嵌入式开发中经常会使用到,那就是找最值,最常见的是以下两个宏:#definemax(a,b)((a)>(b)?(a):(b))#definemin(a,b)((a)<(b)?(a):(b))max和min宏分别比较两个值谁大谁小,然后予以返回,很简单。但如果是比较多个数据的数值,我们就需要对数组里的元素进行比较了,来看看程序实现:find_buffer_max_min.c#include<stdio.h>#include<unistd.h>#include<stdlib.h>#defineNR(x)(sizeof(x)/sizeof(x[0]))#defineu32unsignedint

#defineu8

unsignedchar//找数组的最小值

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

//先设置一个比较的范围值u32min=buffer_value_min;//遍历数组size个字节

for(count=0;count<size;count++){//比较当前数组的索引值是否小于当前设定的最小值

//如果是的话,将该值赋值给min,依次通过for循环遍历,直到找到最小值

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

returnmin;

}//找数组的最大值

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

u32max=buffer_value_max;//遍历数组size个字节

for(count=0;count<size;count++){//比较当前数组所在的索引值是否大于当前设定的最大值

//如果是的话,将该值赋值给max,依次通过for循环遍历,直到找到最大值

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语言丨如何查找数组中的最大值或者最小值?程序中,我们经常使用数组(列表)存储给定的线性序列(例如{1,2,3,4}),那么如何查找数组(序列)中的最大值或者最小值呢?查找数组(序列)中最大值或最小值的算法有很多,接下来我们以{3,7,2,1}

序列为例讲解两种查找最值的算法,一种是普通算法,另一种是借助分治算法解决。普通算法普通算法的解决思路是:创建两个变量max和min分别记录数组中的最大值和最小值,它们的初始值都是数组中的第一个数字。从第2个数字开始遍历数组,每遇到一个比max大的数字,就将它存储到max变量中;每遇到一个比min小的数字,就将它存储到min变量中。直到遍历完整个数组,max记录的就是数组中的最大值,min记录的就是数组中的最小值。下面的动画,演示了找最大值的过程:数组中找最大值的过程找最小值的过程和上图类似,这里不再给出具体的动画演示。—————————————如下是普通算法对应的伪代码:输入num[1...n]//输入n个数字max<-num[1]//将第1个数字赋值给max(表示最大值)min<-num[1]//将第1个数字赋值给min(表示最小值)fori<-2ton://从第2个数字开始遍历ifnum[i]>max://如果max小于遍历到的数字,则更新max的值max<-num[i]ifnum[i]<min://如果min小于遍历到的数字,则更新min的值min<-num[i]Printmax,min//输出max和min的值实现过程非常简单,感兴趣的读者可以自行阅读源码。分治算法下图展示了用分治算法查找{3,7,2,1}中最大值的实现过程:分治算法找最大值分治算法的实现思路是:不断地等分数组中的元素,直至各个分组中元素的个数≤2。由于每个分组内的元素最多有2个,很容易就可以找出其中的最值(最大值或最小值),然后这些最值再进行两两比较,最终找到的最值就是整个数组中的最值。上图所示,借助“分而治之”的思想,我们将“找{3,7,2,1}中最值”的问题转换成了:先找出{3,7]、[2,1}中各自的最值,找出的最值再进行两两比较,最终就可以找到整个数组中的最值。——————————————————分治算法找最大值分治算法的实现思路是:不断地等分数组中的元素,直至各个分组中元素的个数≤2。由于每个分组内的元素最多有2个,很容易就可以找出其中的最值(最大值或最小值),然后这些最值再进行两两比较,最终找到的最值就是整个数组中的最值。上图所示,借助“分而治之”的思想,我们将“找{3,7,2,1}中最值”的问题转换成了:先找出{3,7]、[2,1}中各自的最值,找出的最值再进行两两比较,最终就可以找到整个数组中的最值。——————————————————如下是分治算法求数组中最大值的伪代码:输入arr[1...n]//输入n个数字arr_max(x,y)://设计一个递归函数,[x,y]用来限定查找最大数的范围ify-x≤1://如果y-x的值小于等于1,则比较arr[x]和arr[y]的值,大的就是最大值returnmax(arr[x],arr[y])else://将[x,y]区域划分为[x,⌊(x+y)/2⌋]和[⌊(x+y)/2+1⌋,y]两个区域,求出两个区域内各自的最大值max1=arr_max(x,⌊(x+y)/2⌋)max2=arr_max(⌊(x+y)/2+1⌋,y)returnmax(max1,max2)//比较两个区域的最大值,最终找出[x,y]中的最大值——————————————————————分治算法实现“求数组中最大值”的C语言程序如下:#include<stdio.h>//自定义函数,其中[left,right]表示arr数组中查找最大值的范围intget_max(int*arr,intleft,intright){intmax_left=0,max_right=0,middle=0;//如果数组不存在if(arr==NULL){return-1;}//如果查找范围中仅有一个数字if(right-left==0){returnarr[left];}//如果查找范围中有2个数字,直接比较即可if(right-left<=1){if(arr[left]>=arr[right]){returnarr[left];}returnarr[right];}//等量划分成2个区域middle=(right-left)/2+left;//得到左侧区域中的最大值max_left=get_max(arr,left,middle);//得到右侧区域中的最大值max_right=get_max(arr,middle+1,right);//比较左、右两侧的最大值,找到[left,right]整个区域的最大值if(max_left>=max_right){returnmax_left;}else{

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论