Mr_None 2017-01-02 02:33 采纳率: 100%
浏览 1466
已采纳

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 2017-01-02 05: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开始。
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决