简单程序不适用于负数数组

simple program doesn't work with negative array numbers

刚开始学C语言。到目前为止,我已经掌握了非常基础的知识。目前,我正在根据我的大学给定的练习编写一些非常简单的程序。

我目前的练习是:编写一个程序,在 n 个元素数组 (2 ≤ n ≤ 10) 中找到两个最大的元素,并输出这两个元素的和。

问题是我编写的代码只适用于正数数组,不适用于负数。

当前代码:

#include <stdio.h>

int main() {
    int seka[] = {0,0,0,0,0,0,0,0,0,0}; //array in lithuanian = seka
    int k; //variable to determine array size
    int m = seka[0];
    int n = seka[0];
    int y = 0;

    scanf ("%d",&k);
    for(int i = 0; i < k; ++i){
        scanf ("%d",&seka[i]);
    }

    for(int j = 0; j < k; ++j){
        if (seka[j] > m)
            m = seka[j];
    }

    for(int o = 0; o < k; ++o){
        if (seka[o] == m)
            y = y + 1;
    }

    if(y >= 2){
        n = m;
    }
    else
    {
        for(int l = 0; l < k; ++l){
            if(seka[l] != m)
                if (seka[l] > n)
                    n = seka[l];
        }
    }

    printf ("%d", m + n);
    return 0;
}

使用的输入:

5
4 9 5 6 3

得到的输出:

15

但是如果输入有负数:

6
-5 -8 -6 -2 -5 -8

输出为:

0

我知道这不是解决给定问题的最有效方法,但我仍在学习,希望您能帮助我找到问题的根源。

在你的帮助下修复了我的代码,现在可以正常工作了。

固定码:

#include <stdio.h>

int main() {
    int seka[] = {0,0,0,0,0,0,0,0,0,0}; //array in lithuanian = seka
    int k; //variable to determine array size
    int y = 0;

    scanf ("%d",&k);
    for(int i = 0; i < k; ++i){
      scanf ("%d",&seka[i]);
    }
    int m = seka[0];
    for(int j = 1; j < k; ++j){
        if (seka[j] > m)
        m = seka[j];
    }

    for(int o = 0; o < k; ++o){
        if (seka[o] == m)
        y = y + 1;
    }

    int n;

    for(int l = 0; l < k; ++l){
        if(seka[l] != m)
        if (seka[l] < n)
        n = seka[l];
    }

    if(y >= 2){
        n = m;
    }
    else
    {   
        for(int l = 0; l < k; ++l){
        if(seka[l] != m)
        if (seka[l] > n)
        n = seka[l];
    }
    }

    printf ("%d", m + n);
    return 0;
  }

你用

更新最大值
for(int j = 0; j < k; ++j){
  if (seka[j] > m)
      m = seka[j];
}

但是你用

初始化它
 m = seka[0];

问题是seka[0]还没有被用户设置,所以它的值为0,所以最大值不能小于0。


为了修复它,只需用数组的第一个元素初始化最大值,但 用户输入之后。然后从索引 1 开始循环:

m = seka[0];
for(int j = 1; j < k; ++j){
    if (seka[j] > m)
        m = seka[j];
}