谁能帮我详细解释一下这道题怎么做

(30)以下函数findmax拟实现在数组中查找最大值并作为函数值返回,但程序中有错导致不能实现预定功能,造成错误的原因是(D )。
#define MIN -2147483647
int findmax(int x[], int n)
{ int i, max;
for(i=0; i<n; i++)
{ max=MIN;
if(max<x[i]) max=x[i];
}
return max;
}
A)定义语句int i, max;中max未赋初值
B)赋值语句max=MIN;中,不应给max赋MIN值
C)语句if(max<x[i] ) max=x[i]; 中判断条件设置错误
D)赋值语句max=MIN; 放错了位置

第1个回答  推荐于2016-05-06
这么想,根据题意,需要找最大值。怎么找呢?
1)只有一个数的数组,那么最大值就是它自己
2)如果数组中加入一个新的数,就需要比较,哪个较大哪个就是最大值
3)如果数组中已经有最大值了,又加入新的数,那么就拿已有的最大值和新数进行比较,如果新来的比较大,就把最大值改成新数。
这个过程类似打擂台。
看程序,果然,max就是擂主。初始值为-2147483647,然后数组中的数一个个与max比较,比max大就把max变成这个数。

问题:max初始值应当出现在循环之前。所以,选择D,初始值赋值语句放错了位置。正确位置在for语句之前。本回答被提问者采纳
第2个回答  2014-09-17
一般从数组中找最大值就需要边遍历整个数组,在这个过程中一般假设数组的第一个元素是最大值,开始遍历,如果发现比现在的最大值还大的数,就予以替换,一直遍历完整个数组这是基本思路,
上边程序的思路是先把当前的最大值赋值一个最小数(当前的整数类型可以表示的最小数),之后的过程是相同的。
看程序,你会发现,max变量在for的每一次循环中都进行了赋值,也就是说max=MIN;
这是一个比任何整型数都小的数,因此每一次循环都被相应的x[i]进行取代,以此类推只有数组的最后一个元素成为了max,这就是错误的,不是最大值,因此需要把max=MIN;这一句移动到for循环之外,这一句可以使用max=x[0]取代,道理同上。本回答被网友采纳
相似回答