在2d数组中查找第一行和对角线的总和

时间:2014-03-26 03:24:54

标签: c algorithm matrix

我需要找到第一行中所有整数的总和以及对角线中所有数字的总和。我的代码给了我一个巨大的错误数字,有人能指出我正确的方向吗?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
int i,j, matrix [10][10], sum_row[10];
srand(time(NULL));
for (i = 0; i <10;++i)
{
    printf("\n\n");
    for (j = 0; j <10; ++j)
    {
        matrix [i][j] = rand()%10;
        printf("%d\t", matrix[i][j]);
    }
}
printf("\n\n");
matrix[i][j]= rand()%10;
for (i = 0; i<10; ++i)
{
    for (j = 0; j<10; ++j)
    {
       sum_row[i] += matrix[i][j];
    }
}
printf("%d", sum_row);
return 0;
}

4 个答案:

答案 0 :(得分:1)

你没有初始化sum_row,自动变量不是零初始化,它们的值是不确定的。因此sum_row元素的初始值是不确定的。所以在这一行:

sum_row[i] += matrix[i][j];

您要将值添加到不确定的初始值,这将导致不确定的结束值。您可以将声明更改为:

sum_row[10] = {0}

将零初始化为所有元素。

这一行看起来像是一个错字:

printf("%d", sum_row);

可能意味着:

printf("%d\n", sum_row[0]);
                      ^^^

您还应该删除最终版本:

matrix[i][j]= rand()%10;

在初始循环之后,因为它将对ij使用无效索引。

要获得对角线的总和,您只需要一个初始化为零的新变量,并且只在最终for循环中i == j时向该总和添加一个元素。

答案 1 :(得分:0)

试试这个

为了找到连续的总和,保持i为常数并改变j

为了找到对角线元素的总和,保持i = j。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
int i,j, matrix [10][10], sum_row=0, sum_diag=0;
srand(time(NULL));
for (i = 0; i <10;++i)
{
    printf("\n\n");
    for (j = 0; j <10; ++j)
    {
        matrix [i][j] = rand()%10;
        printf("%d\t", matrix[i][j]);
    }
}
printf("\n\n");
    for (j = 0; j<10; ++j)
    {
    /* i = 0 indicates row 0 */
       sum_row += matrix[0][j];
    /* i = j indicates diagnoal */
       sum_diag += matrix[j][j];
    }
printf("row sum: %d, diag sum: %d", sum_row, sum_diag);
return 0;
}

答案 2 :(得分:0)

在您的代码中,您没有计算对角线元素的总和。您只计算了行元素的总和。因为它似乎有3个错误。

  1. 你还没有初始化sum_row [10]。在使用之前,您必须将其初始化为零。
  2. printf(&#34;%d&#34;,sum_row);此语句尝试打印sum_row []数组的地址。如果您想要打印该值,请使用sum_row [&#39;某些索引&#39;]。
  3. matrix [i] [j] = rand()%10;这个陈述可能会给出错误b&#39; caz你已经将矩阵声明为一个大小为10 * 10的数组但是你试图访问矩阵[10] [10]这是11 * 11元素
  4. 要计算对角线元素的总和,请将一些变量称为sum,将其初始化为零,并在计算行元素总和时递增它。如下所示

    总和= 0;

    sum_row [10] = {0};

    表示(i = 0; i <10; ++ i)

    {

    for (j = 0; j<10; ++j)
    
    {
    
       sum_row[i] += matrix[i][j];
    
       if(i==j)
    
       sum+=matrix[i][j];
    
    }
    

    }

    printf(&#34;对角元素之和:%d \ n&#34;,sum);

    为(I = 0; I&LT; 10;我++)

    printf(&#34;行%d中的元素总和为%d&#34;,i + 1,sum_row [i]);

答案 3 :(得分:0)

您没有初始化

sum_row[10] = { 0 };

如果您使用过i ++,那么您可以跳过该行

 matrix[i][j]= rand()%10;    // then second one

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

 printf(%d\n, sum_row[i]);