在一个二维数组中,查找第一次出现的负数,并输出该数及其所在的行与列,c语言!!求大师!!!

如题所述

在这里这不是一个错误,但是一般不会写这样的程序。

首先应该理解语言中数组的存储结构。对二维数组,在内存中实际是按行存储的,也就是说二维数组中元素是按行依次存储在一片连续的的空间中。

取某个元素时,是先通过计算这个元素的地址,再通过计算得来的地址取得该元素的。依然以二维数组为例,设数组a[rows][cols](即有rows行,cols列),当访问a[i][j]的时候,是先通过i,j的值计算得到要取的元素的地址,再在这个地址上取得该值的。计算地址的方法是:

#include<stdio.h>

int NagativePos(int b[4][4])

{

int i,j;

for(i=0;i<4;i++)

{

for(j=0;j<4;j++)

{

if(a[i][j] < 0)

{

printf("第bai一个du负数zhi为第dao%d行,zhuan第%d列",i,j);

return 1;

}

}

}

return 0;

}

void main()

{

int a[4][4],i,j;

for(i=0;i<4;i++)

{

for(j=0;j<4;j++)

{

scanf("%d",&a[i][j]);

}

}

NagativePos(a);

}

扩展资料:

二维数组A[m][n],这是一个m行,n列的二维数组。设a[p][q]为A的第一个元素,即二维数组的行下标从p到m+p,列下标从q到n+q,按“行优先顺序”存储时则元素a[i][j]的地址计算为:

LOC(a[i][j]) = LOC(a[p][q]) + ((i − p) * n + (j − q)) * t

按“列优先顺序”存储时,地址计算为:

LOC(a[i][j]) = LOC(a[p][q]) + ((j − q) * m + (i − p)) * t

存放该数组至少需要的单元数为(m-p+1) * (n-q+1) * t 个字节

参考资料来源:百度百科-二维数组

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-11-21
这个不能再用i,要j。你的算法不好,可以初始化数组nArray[8][8],第7行7列存放最小值,第8行8列存放位置。那么扫描一遍矩阵,对每个元素nArray[i][,SXRiSX
第2个回答  2019-11-19
在这里这不是一个错误,但是一般不会写这样的程序。
首先应该理解语言中数组的存储结构。对二维数组,在内存中实际是按行存储的,也就是说二维数组中元素是按行依次存储在一片连续的的空间中。
取某个元素时,是先通过计算这个元素的地址,再通过计算得来的地址取得该元素的。依然以二维数组为例,设数组a[rows][cols](即有rows行,cols列),当访问a[i][j]的时候,是先通过i,j的值计算得到要取的元素的地址,再在这个地址上取得该值的。计算地址的方法是:
a
+
i*cols
+
j,
这里a就是数组名,它实际存放着上是这个数组的每一个元素的地址。
因此,对于您的问题,
可能计算得到a[2][-2]的元素地址为
a+2*4
+
(-2)
=
a
+
6
=
a
+
1*4
+
2
它的地址与元素a[1][2]的地址一样,也就是说a[2][-2]与a[1][2]实际上是同一个元素。因此输出6,这是正常的现象。

相关了解……

你可能感兴趣的内容

大家正在搜

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网