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数组相加,我该怎么办呢?
答案 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)
取决于如何定义对角线元素。如果我们将对角元素定义为 - 单元格,对角线通过该单元格靠近单元格的中心,那么矩阵的对角元素:
(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输入矩阵的元素:”);