有一个M*N的二维数组,求其每列上的最小值,并将该值放入一个新的一维数组。要求:设计一个函数,实现该功能。主函数中先将二维数组显示,然后调用函数,最后将结果输出。
#define M 3
#define N 4
void fun(int tt[M][N],int pp[N])
{
int i,j;
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
if(tt[j][i]<pp[i])
pp[i]=tt[j][i];
}
}
void main()
{
int t[M][N]={{22,45,56,30},{19,33,45,38},{20,22,66,40}};
int p[N],i,j,k;
printf("the original data is:\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
printf("%6d",t[i][j]);
printf("\n");
}
fun(t,p);
printf("\nthe result is:\n");
for(k=0;k<N;k++)
printf("%4d",p[k]);
printf("\n");
}
#include <stdio.h>
#include <stdlib.h>
#define M 2
#define N 3
void getMin(int (*a)[N],int *b)
{
int i,j,min;
for(i=0;i<M;i++)
{
min=a[i][0];
for(j=1;j<N;j++)
{
if(a[i][j]<min)
min=a[i][j];
}
b[i]=min;
}
}
int main(void)
{
int i,j;
int b[M],a[M][N]={{4,3,2},{8,3,7}};
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
printf("%d ",a[i][j]);
printf("\n");
}
getMin(a,b);
for(i=0;i<M;i++)
printf("%d ",b[i]);
return 0;
}
一个实现,供参考:
#include <stdio.h>
#define M 3
#define N 3
int main(void){
int arr[M][N]={{9,1,5},{4,6,3},{2,7,8}}; //初始化二维数组,可也以用循环获取一个二维数组的输入
int i,j;
//打印二维数组的元素
printf("M*N数组的元素为:\n");
for(i=0;i<M;i++){
for(j=0;j<N;j++){
printf("%d ",arr[i][j]);
}
printf("\n");
}
int min[N];
//计算每一列的最小值
for(i=0;i<N;i++){
min[i]=arr[0][i]; //把每一列的最小值先赋值为第一行相应列的值
for(j=0;j<M;j++){
//如果当前列的此行最小值比其他行的大,则把这列小的值赋值给最小值数组元素 ,实现求此列最小值的目的
if(min[i]>arr[j][i]){
min[i]=arr[j][i];
}
}
}
//打印每一列最小值的结果
for(i=0;i<N;i++){
printf("第%d列的最小值是%d.\n",i+1,min[i]);
}
return 0;
}