如何获取每列中的最小元素并将它们分配到C中的新数组中?

如何获取每列中的最小元素并将它们分配到C中的新数组中?,c,arrays,C,Arrays,我有一个C程序,它生成随机数并填充数组5X5。 如何从每列中获取最小元素并填充新数组? 我的程序只从整个数组矩阵中找到最小的数 #include <stdlib.h> #include <stdio.h> #include <time.h> #define M 5 void print(int (*array)[M]); int smallest(int array[M][M]); int main() { srand(time(NULL));

我有一个C程序,它生成随机数并填充数组5X5。 如何从每列中获取最小元素并填充新数组? 我的程序只从整个数组矩阵中找到最小的数

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define M 5

void print(int (*array)[M]);
int smallest(int array[M][M]);

int main()
{
    srand(time(NULL));
    int array[M][M], minScore;
    for(int i=0; i<M; i++)
    {
        for(int k = 0; k<M; k++)
        {
            array[i][k] =-10 + rand() % 21;
        }
    }
    print(array);
    minScore = smallest(array);
    printf("Minimum is: %i\n", minScore);
    system("pause");
    return 0;
}

void print(int (*array)[M])
{
    for(int i=0;i<M;i++)
    {
        for(int k=0; k<M; k++)
        {
            printf("%d ",array[i][k]);
        }
        printf("\n");
    }
}

int smallest(int array[M][M])
{
    int minValue;

    minValue = array[0][0];

    for(int i = 0; i < M; i++)
    {
        for(int k = 0; k < M; k++)
        {
            if ( array[i][k] < minValue)
                minValue = array [i][k];
        }
    }
    return minValue;

}
#包括
#包括
#包括
#定义M 5
无效打印(整数(*数组)[M]);
最小整数(整数数组[M][M]);
int main()
{
srand(时间(空));
int数组[M][M],minScore;

对于(int i=0;i您需要在遍历每一列之后刷新
minValue
,并将它们分配给每一列之后的数组。因为,必须对每一列执行此操作

for(int i = 0; i < M; i++)
{
    minValue = array[0][i];
    for(int k = 0; k < M; k++)
    {
        if ( array[k][i] < minValue) 
            //here we are using array[k][i] and not array[i][k] since you need to traverse column wise
            minValue = array [k][i];
    }
    //--> here assign the minValue to the array you want
}
for(int i=0;i在这里,将最小值指定给所需的数组
}

编写一个函数
intsmallestincolumn(intarray[M][M],intk)
其中
k
是要检查的列。在该函数中,只需运行
i
循环即可

(然后重构
int
,在
k
上循环时调用该函数)


顺便说一下,使用
%21
生成随机数会引入统计偏差,除非随机数生成器的周期是21的倍数,这是不可能的。

您可以这样做

//...

int smallest( int a[M][M], int column )
{
    int minValue = a[0][column];

    for ( int i = 1; i < M; i++ )
    {
        if ( a[i][column] < minValue ) minValue = a[i][column];
    }

    return minValue;
}

int main( void )
{
    int a[M][M];
    int b[M];

    //...

    for ( int i = 0; i < M; i++ ) b[i] = smallest( a, i );

    //...
} 
/。。。
最小整数(整数a[M][M],整数列)
{
int minValue=a[0][column];
对于(int i=1;i
不要使用单字母
#define
s。我知道%21不是生成-10到10之间的数字的好方法,但它是最简单的方法。也许我会尝试使它更正确。