求矩阵最大元素

任务描述

本关任务:编写一个能求出矩阵最大元素的小程序。

相关知识

为了完成本关任务,你需要掌握数组的声明和使用。

数组

数组是一种连续存储的数据结构。声明数组,只需在声明变量的基础上,在变量名的后面加上一对方括号([]),然后在其中填上元素数量即可。

例如:

  1. int a[10]; // 声明一个有 10 个 int 元素的数组
  2. char b[1]; // 声明一个有 1 个 char 元素的数组

在声明数组的同时,可以使用花括号({})对其进行初始化,例如:

 
  1. int a[2] = {1,2}; // 有两个元素的数组,分别为 1 和 2

花括号中的实际元素数量可以少于方括号中指定的数量,这样的话没有被指定的元素将会是这种类型的默认值,例如:

  1. int a[3] = {1}; // 只指定了第一个元素,其他的都是默认值 0,即{1,0,0}

如果使用了花括号进行初始化,那么方括号中的元素数量也可以不写,编译器会根据花括号中的元素数量自动计算,例如:

  1. int a[] = {1,2}; // 编译器自动计算为 int a[2]
  2. char b[] = {0}; // 编译器自动计算为 char b[1]
二维数据

二维数组本质上是以数组作为数组元素的数组,即“数组的数组”。二维数组又称为矩阵,行列数相等的矩阵称为方阵。

二维数组的声明与一维数组的声明同理,只需在变量名后面加多个方括号就行。

例如:

  1. int a[3][2]; // 可以看做是 3 个元素的数组,每个元素是一个 2 个元素的数组

二维数组也可以用花括号进行初始化,不过它的用法就更为灵活了,例如:

int a[3][2] = {{1,1},{2,2},{3,3}};
/*
  嵌套花括号,内部的一个花括号代表 a 数组的一个元素,即:
  {1,1}
  {2,2}
  {3,3}
*/
int b[3][2] = {1,2,3};
/*
  平铺成一个 6 个元素的数组,即:
  {1,2}
  {3,0}
  {0,0}
*/

 

数组的使用

要访问数组的某个元素,只需在数组变量的后面加上方括号,在方括号中填上从0开始的索引即可。

例如:

  1. int a[5];
  2. a[0] = 1; // 访问数组第一个元素,索引为 0
  3. a[1] = a[0]; // 访问数组第二个元素,索引为 1

二维数组也是同理:

  1. int a[3][2];
  2. a[0][0] = 1;
  3. a[1][0] = 2;
  4. a[0][1] = 2;

与普通变量不同的是,数组变量之间不能赋值,但是可以将数组变量赋值给它的类型退化成的指针类型。所谓退化,就是将数组最左边一个维度变成指针(也可以说是指向第一个元素的指针)。

例如:

  1. int a[2]; // 一维数组,退化后成 int* 类型
  2. int *aptr = a; // 正确
  3. int b[3][2]; // 二维数组,退化后是int (*)[2],即指向一个 2 个元素的数组的指针
  4. int (*bptr)[2] = b; // 正确
  5. int (*bptr2)[3] = b; // 错误,bptr2 的类型是指向一个 3 个元素的数组的指针

但当数组作为函数的参数类型时,编译器会将它变成它的退化类型,因此只要退化后的类型相同的数组变量都可以传递给这个参数,例如:

void F(int a[2])
{}
void F2(int a[3][2])
{}
int main()
{
    int a[3],b[5];
    F(a);     // 正确,退化后的类型相同
    F(b);     // 正确,退化后的类型相同
    int c[4][2],d[5][2];
    F2(c);     // 正确,退化后的类型相同
    F2(d);     // 正确,退化后的类型相同
}

 既然编译器会退化数组类型,那么参数声明中最左边一个维度的数量也就可以省略了,上面的函数 F ,F2 可以写成如下方式:

void F(int a[])     // 不写数量
{}
// 或者直接写成指针 void F(int *a){}
void F2(int a[][2])
{}
//或者 void F2(int (*a)[2]){}
编程要求

在右侧编辑器中的Begin-End之间补充代码,补充函数int MaxEle(int a[3][2],int *r,int *c),函数的功能是找出并返回矩阵 a(一个3行2列的矩阵)中最大的元素,并将它的行、列号通过后两个指针参数 r ,c 返回。

注意:行、列号均从 1 开始。同时,为了结果稳定,矩阵中保证不会有相同元素。

测试说明

平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:

测试输入:1 2 3 4 5 6 预期输出:6 3 2

测试输入:9 2 3 4 5 6 预期输出:9 1 1



int MaxEle(int a[3][2],int *r,int *c)
{
    /********* Begin *********/
    //返回最大元素和它所在的行、列号
     int max = a[0][0];
     int r1,c1;
     int i,j;
     for (i = 0; i < 3; i++){
         for (j = 0; j < 2; j++){
             if (max < a[i][j]){
                 r1 = i;
                 c1 = j;
                 max = a[i][j];
             }
         }
       
     }
    
     //  *r += r1;
        //  *c += c1;
        *r = r1 + 1;
        *c = c1 + 1;
        return max;
    /********* End *********/
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式Dora

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值