概述
题目:
请编程找出一个M*N矩阵中的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。如果矩阵中没有鞍点,则输出“No saddle point!”
已知函数原型:
void FindSaddlePoint(int a[][N], int m, int n);
在该函数中输出有无鞍点的信息。
程序运行结果示例1:
Input m,n:
3,3↙
Input matrix:
1 2 3
4 5 6
7 8 9
a[0][2] is 3
程序运行结果示例2:
Input m,n:
3,4↙
Input matrix:
3 4 7 5
0 1 8 2
9 3 2 6
No saddle point!
解析:由于二维数组作为函数形参时,必须显示地指定数组第二维(列)的长度,因此程序在定义符号常量N时,N必须与主函数中定义的二维数组a的第二维(列)长度一致,否则将出现错误。也就是说当二维数组a的列数变化时,必须修改程序中对符号常量N的定义。为了避免这个问题,使程序能适应二维数组列数的变化,应使用二维数组的列指针(*p)作为函数形参,在主函数向其传递二维数组的第0行第0列元素的首地址(*a)。
定义列指针:*p
初始化列指针:p=a[0],p=*a,p=&a[0][0](三种方式等价)
#include <stdio.h>
void FindSaddlePoint(int *a,int m,int n);
void FindSaddlePoint(int *a,int m,int n)
{
int i,j,t,flag=0;
int x,y,x1;
for(i=0;i<m;i++)
{
x=i;
y=0;
for(j=0;j<n;j++)
{
if(a[x*n+j]>a[x*n+y])
y=j;
}
x1=x;
for(t=0;t<m;t++)
{
if(a[t*n+y]<a[x*n+y])
x1=t;
}
if(x==x1)
{
flag=1;
printf("a[%d][%d] is %d",x,y,a[x*n+y]);
}
}
if(!flag)
printf("No saddle point!");
}
int main()
{
int m,n,i,j;
scanf("%d %d",&m,&n);
int a[m][n];
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
FindSaddlePoint(*a,m,n);
//向函数传递二维数组的第0行第0列的地址
//可替换为: FindSaddlePoint(a[0],m,n);
//可替换为: FindSaddlePoint(&a[0][0],m,n);
}
最后
以上就是哭泣汽车为你收集整理的真题演练-矩阵的鞍点的全部内容,希望文章能够帮你解决真题演练-矩阵的鞍点所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复