定义一个二维数组,用C语言调用一个函数输出其马鞍点,怎样写程序

如题所述

#include<stdio.h>

void bigsmall(int (*a)[256],int n,int m)
{
int i,j,k, l, minn, maxx, flag ;

flag = 0;
printf("马鞍点输出(输出该点所在的行数与列数):\n");
for( i = 0; i < n ;i++)
{
for( j = 0; j < m; j++)
{
minn = a[i][j];
for( k = 0 ;k < m; k++)
{
if( minn > a[i][k])
break;
}
if( k == m)
{
maxx = a[i][j];
for( l = 0; l < n; l++)
{
if( maxx < a[l][j])
break;
}
if( l == n)
{
printf("%d %d\n",i , j);
flag = 1;
}
}
}
}
if( flag == 0)
printf("此矩阵没有马鞍点");
printf("\n");
}

int main()
{
int n,m,i,j,b[256][256];
printf("请输入矩阵的行列数:\n");
scanf("%d %d",&n,&m);
printf("请输入与行列数相符的矩阵:\n");
for( i =0 ;i < n ;i++)
for( j =0 ;j < m; j++)
scanf("%d",&b[i][j]);
bigsmall(b,n,m);
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-01-01
#include <stdlib.h>
#include <stdio.h>

int main(void)
{
int num[20][20], i, j, data1, data2, m, n, larger, small;

printf("Please input m and n:");
scanf("%d%d", &m, &n);
printf("Please input a juZhen(%d hang, %d lie):\n", m, n);
for (i =0; i < m; i++)//输入二维矩阵
{
for (j = 0; j < n; j++)
{
scanf("%d", &num[i][j]);
}
}
for (j = 0; j < m; j++)//寻找鞍点
{
larger = num[j][0];
data1 = 0;
for (i = 1; i < n; i++)//寻找行最大值的列标
{
if (larger < num[j][i])
{
larger = num[j][i];
data1 = i;
}
}
small = num[0][data1];
data2 = 0;
for (i = 0; i < m; i++)//在行最大值的列标处寻找该列上的最小值行标
{
if (small > num[i][data1])
{
small = num[i][data1];
data2 = i;
}
}
if (data2 == j)//判断是不是鞍点
{
printf("\nyou an dian, wei: juZhen[%d][%d]=%d\n", data2, data1, num[data2][data1]);
exit(0);//是鞍点则结束程序
}
}
printf("mei you an dian\n");
return 0;
}