c语言 求二维数组的鞍点

2025-03-16 15:47:44
推荐回答(5个)
回答1:

#include<stdio.h>

#define N 3

#define M 4

int main()

{

int i,j,k,max,min;

int array[N][M];

printf("请输入数组元素:\n");

for(i=0;i<N;i++)

{

for(j=0;j<M;j++)

scanf("%d",&array<i>[j]);

}

printf("数组有:\n");

for(i=0;i<N;i++)

{

for(j=0;j<M;j++)

printf("%-5d\t",array<i>[j]);

printf("\n");

}

for(i=0;i<N;i++)

{

max=array<i>[0];//用列来进行当前行来比较

for(j=0;j<M;j++)

{

if(max<array<i>[j])

max=array<i>[j];

k=j;//记录下当前一行中最大的小标

}

min=array[0][k];

for(j=0;j<N;j++)//用行来进行列比较

{

if(min>array<i>[k])//若在该列中有更小的,则赋值与min

min=array<i>[k];

}

if(min==max)

{

printf("小标为%d,%d,鞍点为:%d",i+1,k,max);

}

}

printf("搜索结束\n");

return;

}

扩展资料:

define作用

被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。

宏定义的作用范围仅限于当前文件,即file1.c中定义#define PI 3.14,在file2.c中该宏定义不起作用;

通过将#define PI 3.14定义在common.h中,file1.c和file2.c分别#include"common.h"的方式,该宏定义在file1.c和file2.c中都起作用。

在C或C++语言中,“宏”分为有参数和无参数两种。

参考资料:

百度百科——define(计算机专业用语)

回答2:

这是我思考后的程序代码,能够运行,还可以进一步精简变量的(如果有这个想法的话)

#include

#define N 3

int main()//行最大,列最小 

{

int a[N][N],i,j,k,t;//

for(i=0;i

for(j=0;j

scanf("%d",&a[i][j]);//按行对数组进行输入

int temp,b,c,min,flag=0;

for(i=0;i

{ temp=a[i][0];

   for(j=0;j

    {if(a[i][j]>temp)

     temp=a[i][j],b=j,c=i;//每行的最大值,保留行最大值的列号b、行号a 

    for(k=0,min=a[0][b];k

if(a[k][b]

    min=a[k][b],t=k;

}     

    if(t==c)//判断行最大与列最小是否共同指向一个数 

flag=1,printf("%d ",min);//输出该鞍点 

}

if (flag==0)

printf("该二维数组没有鞍点");

 } 

回答3:

#include
int
main()
{
int
a[4][5],i,j,i1,j1=0,max,s=1;
int
i2;/*i和j是行和列的循环变量,i1和j1是一行中横向最大值所在的行标和列标,s是鞍点是否存在的标示量*/
for(i=0;i<=3;i++)
{
for(j=0;j<=4;j++)
scanf("%d",&a[i][j]);
}
printf("输入的数组:\n");
for(i=0;i<=3;i++)
{
for(j=0;j<=4;j++)
printf("%5d",a[i][j]);
printf("\n");
}
printf("\n");
for(i=0;i<=3;i++)
{
i1=i;
max=a[i1][j1];
for(j=1;j<=4;j++)
{
if(max{
max=a[i][j];
j1=j;
}
}
for(i2=0;i2<=3;i2++)
if(max>a[i2][j1])break;
if(i2>3)
{
printf("a[%d][%d]=%d\n",i1,j1,max);
s=0;
}
}
if(s)
printf("不存在鞍点.\n");
return
0;
}
/******************程序在VC++6.0里运行成功********************************/
说明:我定义了一个整形变量i2。
循环体里最好不要出现循环变量,因为随时会改变循环

回答4:


#include 

#include 

#include  //添加随机数需要的头文件

#define N 3   //预处理设置N的值


int main()

{

srand((unsigned int) time (NULL)); //设置随机数种子为时间

int array[N][N];

int i,j,k;

int point,max,min,flag=0;

for (i=0;i

{

{

for (j=0;j

{

array[i][j]=rand();

printf("%d\t",array[i][j]); //用随机数初始化数组

}

putchar('\n');

}

}

for (i=0;i

{

max=0;

for (j=0;j

{

if (array[i][j]>array[i][max]) //行内比较大小

max=j;

}

min=i;

for (j=0;j

{

if (array[j][max]

min=j;

}

if (min==i)

{

printf("鞍点为array[%d][%d] = %d\n",min,max,array[min][max]); //若有鞍点,输出,并改变flag的值

flag=1;

}

}

if (flag==0)

printf("此二维数组无鞍点!\n"); //若无鞍点,提示

getchar(); //等待键入结束


}

回答5:

#include
int main()
{
int a[4][5],i,j,i1,j1=0,max,s=1;
int i2;/*i和j是行和列的循环变量,i1和j1是一行中横向最大值所在的行标和列标,s是鞍点是否存在的标示量*/
for(i=0;i<=3;i++)
{
for(j=0;j<=4;j++)
scanf("%d",&a[i][j]);
}
printf("输入的数组:\n");
for(i=0;i<=3;i++)
{
for(j=0;j<=4;j++)
printf("%5d",a[i][j]);
printf("\n");
}
printf("\n");
for(i=0;i<=3;i++)
{
i1=i;
max=a[i1][j1];
for(j=1;j<=4;j++)
{
if(max {
max=a[i][j];
j1=j;
}
}
for(i2=0;i2<=3;i2++)
if(max>a[i2][j1])break;
if(i2>3)
{
printf("a[%d][%d]=%d\n",i1,j1,max);
s=0;
}
}
if(s)
printf("不存在鞍点.\n");
return 0;
}

/******************程序在VC++6.0里运行成功********************************/
说明:我定义了一个整形变量i2。
循环体里最好不要出现循环变量,因为随时会改变循环