求N个集合元素S[]中的最大值,其中集合元素的类型为自定义的ElementType。

//已给的代码
#include <stdio.h>

#define MAXN 10
typedef float ElementType;

ElementType Max( ElementType S[], int N );

int main ()
{
ElementType S[MAXN];
int N, i;

scanf("%d", &N);
for ( i=0; i<N; i++ )
    scanf("%f", &S[i]);
printf("%.2f\n", Max(S, N));

return 0;

}

/* 你的代码将被嵌在这里 */
//我写的:
ElementType Max(ElementType S[],int N){
ElementType max;
for(int i=0;i<N;i++){
max=S[0];
if(S[i]>=max){
max=S[i];
}else max=max;
}
return max;
}
//运行显示部分正确
//完全正确的代码:
ElementType Max(ElementType S[],int N){
ElementType max=S[0];
for(int i=0;i<N;i++){
if(S[i]>=max){
max=S[i];
}else max=max;
}
return max;
}
//关键就在max的赋值是在循环里面还是外面,我试了好几次觉得应该是一样的吧,问题出在哪里?

你的代码在每次循环的时候,都把max重置为S[0]了,也就是把前面得到的max的值给覆盖掉了,你的代码需要加一个if语句就可以了,如下:

ElementType Max(ElementType S[], int N) {
    ElementType max;
    for (int i = 0; i < N; i++) {
        if(i==0) //增加这个if语句
            max = S[0];
        if (S[i] >= max) {
            max = S[i];
        }
        else max = max;
    }
    return max;
}

如果循环在里面,每次循环最大值max都被重新设置为数组S的第一个元素的值,而不是经过比较后得来的最大值,
但如果放在循环外面,则只默认设置第一个为最大值max的值,然后可以在循环里面经过遍历数组S后,用比他大的值来代替,
直到循环结束,就得出正确的最大值max了。

你这个代码明显有问题,你第一次循环,每次给max赋值了S[0],应该在循环外面给max赋值S[0],或者给max赋值0,通过比较大小得到最大的S[i]的i,另max等于这个i,然后返回

max放循环里面了,每次都重新赋值为0

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632