C语⾔实现输出⼆维数组的鞍点
题⽬:编写程序,输出⼆维数组中⾏上为最⼤、列上为最⼩的元素(称为鞍点)及其位置(⾏、列下标)。如果不存在任何鞍点也输出相应信息。
1. ⾸先我们来认识⼀下鞍点,简单来说,鞍点就是⼆维数组中⾏最⼤元素所在列该元素最⼩的元素。
2. 举例:
例(1):假设图⽰数组为a,a[1][4]为所在⾏最⼤所在列最⼩的元素,因此该数组存在鞍点,且鞍点为a[1][4] = 5;
/*
0 0 0 0 6
1 2 3 4 5
0 0 0 0 7
0 0 0 0 8
0 0 0 0 9
*/
例(2):如下图所⽰数组没有⼀⾏的最⼤值等于该最⼤值所在列的最⼩值,因此没有鞍点;
/*
1 2 3 4 5
5 4 3 2 1
1 2 3 4 5
5 4 3 2 1
1 2 3 4 5
*/
怎么定义二维数组c语言
3.思路:出每⾏的最⼤值,再出⾏最⼤值所在列的列最⼩值,若⾏最⼤值等于该⾏最⼤值所在列的列最⼩值,鞍点存在。代码实现如下:
#define ROW 5
#define COL 5                          //ROW、COL分别为数组⾏、列元素的个数
#include<stdio.h>
#include<stdlib.h>
void init(int arr[][COL],int row,int col)
{
int i =0;
int j =0;//遍历数组时的循环变量
for(i =0; i < ROW; i++)
{
printf("请输⼊%d*%d数组第%d⾏:>", ROW, COL, i +1);
for(j =0; j < COL; j++)
{
scanf("%d",&arr[i][j]);
}
}
}
void print(int arr[][COL],int row,int col)
{
int i =0;
int j =0;//遍历数组时的循环变量
for(i =0; i < ROW; i++)
{
for(j =0; j < COL; j++)
{
printf("%-4d", arr[i][j]);
}
printf("\n");//打印⼀⾏换⾏
}
}
void saddle(int arr[][COL],int row,int col)
{
int i =0, j =0;//i,j为遍历⾏列时的循环变量
int max =0, min =0;//max,min分别记录⾏最⼤值、最⼩值
int m =0, n =0;//m,n分别记录⾏最⼤值所在元素⾏下标、列下表
int m =0, n =0;//m,n分别记录⾏最⼤值所在元素⾏下标、列下表
int flag =0;//判断鞍点是否存在的标志变量
for(i =0; i < ROW; i++)//外层循环控制⾏
{
max = arr[i][0];//假设第i⾏第0个元素为最⼩值
for(j =0; j < COL; j++)//出每⾏的最⼤值
{
if(arr[i][j]> max)
{
max = arr[i][j];
m = i;//记录⾏最⼤值所在⾏
n = j;//记录⾏最⼤值所在列
}
}
min = arr[0][n];//假设⾏最⼤值所在列(n列)的第⼀个元素为列最⼩值
for(j =1; j < COL; j++)//出⾏最⼤值所在列的列最⼩值
{
if(arr[j][n]<= min)
{
min = arr[j][n];
}
}
if(min == max)//⾏最⼤值等于该⾏最⼤值所在列的列最⼩值,鞍点存在
{
printf("鞍点存在,鞍点为a[%d][%d] = %d\n", m, n, min);
flag =1;
}
}
if(0== flag)//循环过程中没有进⼊过 if(min == max) 就出来了,证明鞍点不存在{
printf("鞍点不存在!\n");
}
}
int main()
{
int arr[ROW][COL]={0};
init(arr, ROW, COL);//初始化数组
print(arr, ROW, COL);//打印数组
saddle(arr, ROW, COL);//鞍点
system("pause");
return0;
}
4.结果如下图:
(1)数组存在鞍点:
(2)鞍点不存在:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。