C 求二维数组中第一行和对角线的和

C 求二维数组中第一行和对角线的和,c,algorithm,matrix,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\

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

#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;
}
#包括
#包括
#包括
int main()
{
int i,j,矩阵[10][10],求和行[10];
srand(时间(空));

对于(i=0;i您没有初始化
sum_行
,自动变量没有初始化为零,它们的值是不确定的。因此
sum_行
元素的初始值是不确定的。因此在这一行:

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;
在初始循环之后,因为它将对
i
j
使用无效索引

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

试试这个

为了求一行中的和,保持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;
}
#包括
#包括
#包括
int main()
{
int i,j,矩阵[10][10],和行=0,和图=0;
srand(时间(空));

对于(i=0;i,您的代码中没有计算对角线元素的和。您只计算了行元素的和。在这方面,似乎有3个错误

  • 您尚未初始化sum_行[10]。必须在使用它之前将其初始化为零
  • printf(“%d”,sum_行);此语句尝试打印sum_行[]数组的地址。如果要打印值,请使用sum_行['some index']
  • 矩阵[i][j]=rand()%10;此语句可能会给出错误b'caz您已将矩阵声明为大小为10*10的数组,但您正在尝试访问矩阵[10][10],它是第11*11个元素
  • 要计算对角线元素之和,请取一些变量,比如sum,将其初始化为零,并在计算行元素之和时将其递增。如下所示

    总和=0

    求和行[10]={0}

    对于(i=0;i您没有初始化

    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]);
    
    matrix[i][j]=rand()%10;//然后是第二个
    
    对于(i=0;i您应该从尝试较小的矩阵开始,依此类推,
    printf(“\n\n”);
    之后的行应该被删除。它正在写入数组末尾以外的无效位置。
     matrix[i][j]= rand()%10;    // then second one
    
     for(i=0; i<10; i++)
    
     printf(%d\n, sum_row[i]);