二维数组中对角线的总和

时间:2011-03-02 08:09:09

标签: c arrays

for (row=0; row<SIZE; row++)
    {
        for (col=0; col<SIZE; col++)
        {
            if (row == 0 && col == 0) {
                answer+=my_data[row][col];
            }
            else if ((row)/(col) == 1) //1 is slope of array
            {
                answer+=my_data[row][col];
            }
        }
    }
    printf("The diagonal sum of the 8x8 array is: %i\n",answer);

[0,0]开始到[8,8]

结束
  

“求和中的对角线值   8x8数组从[0,0]“

开始

我意识到我可以做一个单循环,因为形状只是1:1,但是如果我需要将对角线8x10数组相加,我该怎么办呢?

6 个答案:

答案 0 :(得分:7)

对角线元素和主对角线仅为方形矩阵定义。

if rowcount == colcount
  sum = 0
  for i = 0 to rowcount
    sum += matrix[i][i]
  end-for
else
  print Diagonal sum not defined
end-if

对于非方形矩阵,如果要对具有相同行数和列数的位置的元素求和,则可以执行以下操作:

sum = 0
for i = 0 to min(rowcount,colcount)
  sum += matrix[i][i]
end-for
print sum

答案 1 :(得分:1)

取决于如何定义对角线元素。如果我们将对角元素定义为 - 单元格,对角线通过该单元格靠近单元格的中心,那么矩阵的对角元素:

enter image description here

(0,0);(1,0);(2,1);(3,1);(4,2);(5,2)将完全有效。

答案 2 :(得分:0)

这里主要关注的是,如果对角线元素不是方形矩阵,它的定义是什么。如果它是方形矩阵,那么它应该是RowCount == ColCount。但如果它不是方阵呢?

答案 3 :(得分:0)

codaddict是对的;只有方形矩阵有对角线元素。 我想你想要在rownum == colnum?

中添加元素

答案 4 :(得分:0)

我的猜测是忽略多余的行或列,如果它是非正方形的;这似乎是最合理的方法,虽然这只是一个猜测,因为非方形矩阵的对角线没有定义,但由于你问的是2-dim数组而不是矩阵,我假设的是问题是编程任务,而不是线性代数。

要做到这一点,你可以得到行的最小长度&amp;列,然后从0迭代到最小长度:

diag_len = min (row_size, col_size);

for (int i = 0; i < /* or <= */ diag_len; i++) {
  answer += my_data[i][i];
}

这适用于方形和有损非方形情况。当你知道你只关心row == col的情况时,你的示例代码最终会考虑每个单元格的坐标是浪费的。 (当行&amp; col都为0 避免除法时,它也不需要特殊情况,这是一个比加法更慢的CPU操作。)

答案 5 :(得分:-2)

包括

int main(){

int a [10] [10],i,j,sum = 0,m,n;

printf(“\ n输入矩阵的行和列:”);   scanf(“%d%d”,&amp; m,&amp; n);

printf(“\ n输入矩阵的元素:”);