如何获取每列中的最小元素并将它们分配到C中的新数组中?
我有一个C程序,它生成随机数并填充数组5X5。 如何从每列中获取最小元素并填充新数组? 我的程序只从整个数组矩阵中找到最小的数如何获取每列中的最小元素并将它们分配到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));
#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之间的数字的好方法,但它是最简单的方法。也许我会尝试使它更正确。