用二维数组 c 找到最小数

find minimum number with 2d array c

我想在每一行中找到最小的数字..但是这里有什么问题...

#define NUM_EXAM    3
#define NUM_STUDENT 5

求最小函数:

int find_min(int score[NUM_EXAM][NUM_STUDENT]) {
    int exam;
    int least;
    int k, i, j;

    for (i = 0; i <= NUM_EXAM; i++)
        for (j = 0; j <= NUM_STUDENT; j++)
            least = j;

函数:

for (k = j + 1; k < NUM_STUDENT; k++)
            {
                if (score[j] < score[k])
                {
                    k = j;
                }
                exam = score[j];
                score[j] = least;
                score[least] = exam;
            }
    printf("%d", exam);
}

主要功能:

int main(void) {
    int score[NUM_EXAM][NUM_STUDENT] = { { 60, 80 ,43, 78, 93 } ,{ 75,59,81,77,81 } ,{ 83,74,97,73,81 } };
    find_min(score[NUM_EXAM][NUM_STUDENT]);

    return 0;
}

我注意到一些小事:

  • 已经提到,你需要将循环条件改为<而不是<=,否则你访问的是数组大小之外的元素
  • 调用函数时,只传数组名,不传数组大小。检查例如this
  • 因为我认为你的实现有一些开销,我试图减少它,如果我没有误解分配,下面的代码将为你提供所需的解决方案:

    #include <stdio.h>
    
    #define NUM_EXAM    3
    #define NUM_STUDENT 5
    
    void find_min(int score[NUM_EXAM][NUM_STUDENT]) {
        int exam;
        int least;
        int i, j;
    
        for (i = 0; i < NUM_EXAM; i++)
        {
            least = 0; 
            for (j = least; j < NUM_STUDENT; j++)
            {
                if (score[i][j] < score[i][least])
                {
                    least = j;
                } 
             }
    
             printf("%d\n", score[i][least]);
        }
    }
    
    int main(void) {
        int score[NUM_EXAM][NUM_STUDENT] = { { 60, 80 ,43, 78, 93 } ,{ 75,59,81,77,81 } ,{ 83,74,97,73,81 } };
        find_min(score);
    
        return 0;
    }