2015-11-06 63 views
1

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

#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; 

} 
+4

不要使用单字母'#define's。 – Olaf

回答

1

您需要刷新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 
} 
1

编写函数int smallestInColumn(int array[M][M], int k)其中k是要检查的列。在那里,只需运行i循环。

(然后重构int smallest在循环结束时调用该函数,超过k)。

顺便说一下,使用% 21产生一个随机数将引入统计偏差,除非你的随机数发生器的周期性是21的倍数,这是不太可能的。

+0

我知道%21不是生成-10到10之间数字的好方法,但它是最简单的方法。可能是我会尽力让它更加正确。 – iWorld

0

你可以这样做这样的事情

//... 

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); 

    //... 
} 
相关问题