2 mr none Mr_None 于 2017.01.02 10:33 提问

C语言求数组最大元素出现的问题

#include

#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 j=S[0];
int i;
for(i=0;i {
if(S[i] j=S[i+1];
else j=S[i];
}
return j;
}
以上代码输出的是数组最后一个元素,是哪个地方出错了?而下面的代码去掉else语句后又是正确的
#include

#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 j=S[0];
int i;
for(i=0;i<N;i++)
{
if(S[i]<S[i+1])
j=S[i+1];
}
return j;
}

2个回答

shadowfromsun
shadowfromsun   2017.01.02 13:12
已采纳
ElementType Max( ElementType S[], int N )
{
ElementType j=S[0];
int i;
for(i=0;i {
if(S[i] j=S[i+1];
else j=S[i];
}
return j;
}

该段 不知道 你的 if 括号都没有不知道怎么看了!帮你格式化了一下自己看:

ElementType Max( ElementType S[], int N )
    {
        ElementType j=S[0];
        int i;
        for(i=0;i 
        {   
            if(S[i] 
                j=S[i+1];
            else 
                j=S[i];
        }
        return j;
    }

然后你修改后的是这个样子的

 ElementType Max( ElementType S[], int N )
    {
        ElementType j=S[0];
        int i;
        for(i=0;i<N;i++)
        {
            if(S[i]<S[i+1])
                j=S[i+1];
        }
        return j;
    }

我大致对对比了一下 发现你的 else内的意思是想
如果新的ElementType 即 s[i] < s[i+1] 时把 s[i+1] 保存到 j; 否则就保存 s[i];
大致的思路是对的,但是他会一直向后遍历,而且你最后一次循环是 s[i+1]是不存在的,会造成数组越界。
导致无法得到正确的答案。 而 ElementType 的初始值 应该是很小的一个数,所以,按照你的要求,数组的最后一个存到了j,
至于这里没有提示你数组的问题,是你使用的语言造成的,若你使用Java来写的话,在运行的时候,它肯定会提示你数组越界。

至于正确的答案:楼上回答的就很好,这里我和他还是有点不同的下方有解释:

``` ElementType Max(ElementType S[], int N)
{
ElementType j = S[0];
int i;
for (i = 1; i < N; i++) {
if (S[i] > j)
j = S[i];
}
return j;
}


在这里和你原来不同的地方在于比较那里,你的最大值保存在  j,所以你每一次都应该与 j 比较,而不是自身的数组。
你的初始化就很对,不过因为你已经初始化 s[0] 是最大值, 所以没必要在重复一次 s[0]的比较,直接从1开始。


guwei4037
guwei4037   Ds   Rxr 2017.01.02 10:52

Max函数改造成如下即可。假设数组0最大,则逐一比较。

 ElementType Max(ElementType S[], int N)
{
    ElementType j = S[0];
    int i;
    for (i = 0; i < N; i++) {
        if (S[i] > j)
            j = S[i];
    }
    return j;
}
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!