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 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀