C语言用函数实现找鞍点,并在主函数中显示结果

 #本篇文章创作灵感来自于今天的一次上机考试#
         考试之前已经知道了考试题目是找鞍点
但是看到考题之后有A B两种选择  
        如果选择用题目的方式去做 最高100(A)
        无函数实现则最高80(B)
        当时选择了第一种(A)
但是出机房发现做错了
现在捋清了思路 发一篇博客记录一下

#下面是正文部分#

大致思路就是 

1.定义一个全局变量的数组,来存放鞍点的行和列(只考虑了只存在一个鞍点的情况)

2.用一个返回类型是指针 的函数来完成(指针里面存放的是全局变量的首地址)

#include<stdio.h>

//定义全局变量,来存放鞍点的行和列
int b[2] = {-1,-1};

//进行函数的声明
int* my_found(int a[3][3]);


int main()
{
    int a[3][3];
    int i = 0;
    int j = 0;
    
    //1.开始输入数据
    for(i=0;i<3;i++)
    {
        printf("请输入第%d行的数据:>",i+1);
        for(j=0;j<3;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    
    int* p = my_found(a);
    if(*p==-1)
    {
        //数组b中存的本来都是-1
        //如果仍然是 -1 说明没有找到鞍点
        printf("not found\n");
    }
    else
    {
        printf("鞍点的行是%d\n",*p);
        printf("鞍点的列是%d\n",*(p+1));
    }
    
    return 0;
}


//函数的实现
int* my_found(int a[3][3])
{
    int i = 0;
    int j = 0;
    int k = 0;
    int t = 0;
    int* p = b;//这里p指向数组b的首地址
    int max = 0;
    for(i=0;i<3;i++)
    {   //开始逐行找
        max = a[i][0];//现在我们把 这一行的第一个数当作最大数
        for(j=0;j<3;j++)
        {
            if(a[i][j]>max)
            {
                max = a[i][j];
                t = j;//把列数存起来
            }
        }
        for(k=0;k<3;k++)
        {
            if(max>a[k][t])//当max比这一列的其他数字大时   他就不是鞍点了
            {
                break;
            }
        }
        if(k==3)
        {
            //这个时候循环结束 没有被break中止
            //说明没有找到更小的值 max就是这一列最小的值
            //此时的行和列就是下标了
            *p = i;
            *(p+1) = t;
        }
    }
    
    
    //无论如何最终都返回首地址
    return p;
}

示例1:

示例2:

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值