实验内容与步骤:1、求矩阵鞍点,若矩阵某位置上的元素在该行上为最小,而在该列上为最大,则称该位置(即行列号)为矩阵的鞍点。2、输出给定矩阵中的所有鞍点。

zhen66zhen 2009-05-05 09:09:36
实验具体要求如下:
(1)编制一个通用的输出给定矩阵中所有鞍点的函数andian(a,m,n),其中a为二维数组,表示m行n列的矩阵。
(2)针对各种情况(无鞍点、只有一个鞍点、有多个鞍点)分别编制主函数调用(1)中的函数。其中矩阵的阶数可以各不相同。
说明一下:要求用C语言中的数组与函数知识编写程序这是一道数组与函数的综合练习题,急求解答,谢谢!
...全文
1243 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mahatmaff4 2009-05-08
  • 打赏
  • 举报
回复
楼上是马甲!····
sonofthesea 2009-05-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mahatmaff4 的回复:]
楼上是马甲!····
[/Quote]

为什么这么说
sonofthesea 2009-05-07
  • 打赏
  • 举报
回复
其实还不完美,输入{
111
111
111
}
仅输出3个鞍点
sonofthesea 2009-05-06
  • 打赏
  • 举报
回复

#include<stdio.h>
#define M 3
#define N 3
struct index{
int x,y;
};
static index ss[100];
int count = 0;

int min(int t[],int n)
{
int temp=30000,flag;
for(int i=0;i<n;i++)
if(t[i]<temp)
{temp=t[i];flag=i;}
return flag;
}

void andian(int a[M][N],int m,int n)
{
int tmp;int k;
for(int i=0;i<m;i++)
{
int flg=1;
k=min(a[i],n);
tmp=a[i][k];
for(int j=0;j<m;j++)
if(tmp<a[j][k])
flg=0;
if(flg==1)
{
ss[count].x=i;
ss[count].y=k;
count++;
}
}

}

void main()
{
for(int i=0;i<100;i++)
ss[i].x=-1;
int A[M][N];
// int A[M][N]={4,5,6
// ,1,0,1,
// 1,1,1};
printf("请输入%d*%d矩阵:\n",M,N);
for(int p=0;p<M;p++)
for(int q=0;q<N;q++)
scanf("%d",*(A+p)+q);
andian(A,M,N);
int f=0;
if(ss[f].x==-1) printf("无鞍点\n");
else
while(ss[f].x!=-1)
{ printf("鞍点:A[%d,%d]=%d\n",ss[f].x,ss[f].y,A[ss[f].x][ss[f].y]); f++;}
printf("鞍点数为%d\n",count);
}


结果:


请输入3*3矩阵:
3 4 5
2 1 3
2 2 1
鞍点:A[0,0]=3
鞍点数为1
Press any key to continue



69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧