①.)问题出在minmax函数,这个函数找到的最大值和最小值没有返回.
void?get_min_max(int?*a,?int?l,?int*min,?int?*max)
{?
int?i;
*min?=?*max?=?a[0];
for(i?=?1;?i?l;?i?++)
{
if(a[i]?*max)?*max?=?a[i];
if(a[i]*min)?*min?=?a[i];?
}?
int?main()
int?min,?max;
get_min_max(a,?10,?min,?max);
printf("min?=?%d,?max?=%d\n",?min,?max);
return?0;??
}
首先,你的数组mark没有初始化,其中存储的可能是随机值; 然后你在读入数据时可能不够10个,但在你的minmax函数中却在10个数中找,这就有可能把无效的值纳入比较中,这样min和max都可能是错的.
初始化数组用 double mark[10]={0.0};
如果数组中数据可能不满,另外传入参数count表征数组有效大小:
void?minmax(double?mark[],?double?min,?double?max,?int?count)
min=max=mark[0];
for(int?i=1;?icount;?i++)
if(mark[i]max)
max?=?mark[i];
else?if(mark[i]min)
min?=?mark[i];
用指针的函数类似, 注意函数的第一行,这样可以避免数组中有负数时导致的问题.
①.、分治法不是用来求最大值最小值的.在计算机科学中,分治法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题......直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并.这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序).
分治法的精髓:
分--将问题分解为规模更小的子问题;
治--将这些规模更小的子问题逐个击破;
合--将已解决的子问题合并,最终得出"母"问题的解.
#includestdio.h
int?main()?
int?max,?min;
max?=?min?=?a[0];?//假设第1个元素即是最大值也是最小值.
int?max_pos?=?0,?min_pos?=?0;
//遍历数组,找出数组a中的最大数和最小数
for?(int?inx=0;?inx!=sizeof(a)?/?sizeof(int);?++inx)?{
if?(a[inx]?max)?max?=?a[inx],?max_pos=inx;
else?if?(a[inx]?min)?min?=?a[inx],?min_pos=inx;
printf("最大数:%d\t最小数:%d\n",?max?,min?);
return?0;
以上就是土嘎嘎小编为大家整理的minmax函数c语言相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!