#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(计算机专业用语)
这是我思考后的程序代码,能够运行,还可以进一步精简变量的(如果有这个想法的话)
#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("该二维数组没有鞍点"); }
#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。
循环体里最好不要出现循环变量,因为随时会改变循环
#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(); //等待键入结束 }
#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。
循环体里最好不要出现循环变量,因为随时会改变循环