我需要找到第一行中所有整数的总和以及对角线中所有数字的总和。我的代码给了我一个巨大的错误数字,有人能指出我正确的方向吗?
#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;
}
答案 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;
在初始循环之后,因为它将对i
和j
使用无效索引。
要获得对角线的总和,您只需要一个初始化为零的新变量,并且只在最终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个错误。
要计算对角线元素的总和,请将一些变量称为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]);