有一个3行4列的矩阵,编程求出其中最大


任务描述

本关任务:有一个3行4列的矩阵,编程求出其中最大的那个元素的值,以及它所在的行号与列号。

相关知识

二维数组的定义

在实际问题中有很多变量是二维的或多维的,因此C语言允许构造多维数组。多维数组元素有多个下标,以标识它在数组中的位置,多维数组可由二维数组类推而得到。

二维数组定义的一般形式是:

类型说明符 数组名[常量表达式1][常量表达式2]

其中常量表达式1表示第一维下标的长度,常量表达式2表示第二维下标的长度。例如: int a[3][4]; 说明了一个 3 行 4 列的数组,数组名为a,其下标变量的类型为整型。该数组的数组元素共有3×4个,即: a[0][0],a[0][1],a[0][2],a[0][3] a[1][0],a[1][1],a[1][2],a[1][3] a[2][0],a[2][1],a[2][2],a[2][3]

二维数组在概念上是二维的,其下标在两个方向上变化,下标变量在数组中的位置也处于一个平面之中,但是,实际的硬件存储器却是连续编址的,也就是说存储器单元是按一维线性排列的。

如何在一维存储器中存放二维数组,可有两种方式:一种是按行存放, 即放完一行之后顺次放入第二行。另一种是按列存放,即存放完一列之后再顺次存储第二列。

在C语言中,二维数组是按行排列的。即先存放第1行,再存放第2行,最后存放第3行。每行中的元素也是依次存放。

上述二维数组的元素排列顺序为:

a[0][0]→a[0][1]→a[0][2]→a[0][3]→a[1][0]→a[1][1]→a[1][2]→a[1][3]→a[2][0]→a[2][1]→a[2][2]→a[2][3]

C语言还允许使用多维数组。有了二维数组的基础,再掌握多维数组是不困难的。例如,定义三维数组的方法如下:

 
  1. float a[2][3][4]; //定义三维数组a,它有2页,3行,4列

二维数组的引用

二维数组的元素的表示形式: 数组名[下标][下标]

注意:

  1. 下标可以是整数,也可以是整型表达式;
  2. 数组元素可以出现在表达式中,也可以赋值。
  3. 在使用数组元素时,应该注意下标值应在已定义的数组大小的范围内。

二维数组的初始化

  1. 分行给二维数组赋初值。如: int a[3][4]= {{1,2,3,4},{5,6,7,8},{9,10,11,12}};

  2. 可以将所有数据写在一个花括弧内,按数组排列的顺序对各元素赋初值。如: int a[3][4]= {1,2,3,4,5,6,7,8,9,10,11,12};

  3. 可以对部分元素赋初值。 如: int a[3][4]= {{1},{0,6},{0,0,11}};

  4. 如果对全部元素都赋初值(即提供全部初始数据),则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。如: int a[3][4]= {1,2,3,4,5,6,7,8,9,10,11,12};

与下面的定义等价: int a[ ][4]= {1,2,3,4,5,6,7,8,9,10,11,12};

在定义时,也可以只对部分元素赋初值而省略第一维的长度,但应分行赋初值。如: int a[ ][4]={{0,0,3},{ },{0,10}};

数组是一种构造类型的数据。二维数组可以看作是由一维数组的嵌套而构成的。设一维数组的每个元素都又是一个数组,就组成了二维数组。

当然,前提是各数组元素类型必须相同。一个二维数组也可以分解为多个一维数组。C语言允许这种分解,如二维数组a[3][4],可分解为三个一维数组,其数组名分别为:a[0]a[1]a[2]

对这3个一维数组不需另作说明即可使用。这3个一维数组都有4个元素,例如: 一维数组a[0]的元素为:a[0][0],a[0][1],a[0][2],a[0][3]

必须强调的是,a[0]a[1]a[2]不能当作数组元素使用,它们是数组名,不是单纯的数组元素。

编程要求

根据提示,在右侧编辑器补充代码,有一个3行4列的矩阵,求出其中最大的那个元素的值,以及它所在的行号与列号。

测试说明

平台会对你编写的代码进行测试:

测试输入: 55 8 74 66 32 12 1 36 94 45 65 88

预期输出: 55 8 74 66 32 12 1 36 94 45 65 88 max:94 row :3 colum :1

输入格式: 输入12个整数,用空格分隔。

输出格式: 前三行输出3行4列矩阵:每个数据间用Tab键隔开; 第四行输出最大值; 第五行输出最大值的行数; 第六行输出最大值的列数。


开始你的任务吧,祝你成功!

int main()
{  
    int a[M][N]; 
    int i,j,max,row=0,colum=0; 
    for(i=0; i<M; i++)              
      for(j=0; j<N; j++)           
      	{ 
            scanf("%d",&a[i][j]);  
       } 
    max=a[row][colum];
    for(i=0;i<M;i++)
    for(j=0;j<N;j++)
    {
        if(a[i][j]>max)
       {
            row=i;colum=j;
            max=a[row][colum];
       }
    }
	for(i=0; i<M; i++)             
	{  
       for(j=0; j<N; j++)         
       {  
        	printf("%d\t",a[i][j]);   
    	}
    	printf("\n"); 
  	}
 	 printf("max:%d\nrow:%d\ncolum:%d",max, row+1, colum+1); 
    return 0; 
}

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值