为什么结果永远是0???
#include<stdio.h>
int main()
{
int a[10][10];
int row,sum=0;
int i,j;
scanf("%d",&row);
for(i=0;i<row;i++)
{
for(j=0;j<row;j++)
{
scanf("%d",&a[i][j]);
}
if((i==j)||(i+j==row-1))
{
sum=sum+a[i][j];
}
}
printf("%d\n",sum);
}
Description
求矩阵的两对角线上的元素之和
Input
矩阵的行数N
和一个N*N的整数矩阵a[N][N](N<=10)
Output
所输矩阵的两对角线上的元素之和
Sample Input
3
1 2 3
4 5 6
7 8 9
Sample Output
25
[解决办法]
i=0的时候,下面的循环里j变为row,i不会等于j,i+j也不会等于row-1。把循环的括号改下应该就行了
#include<stdio.h>
int main()
{
int a[10][10];
int row,sum=0;
int i,j;
scanf("%d",&row);
for(i=0;i<row;i++)
{
for(j=0;j<row;j++)
{
scanf("%d",&a[i][j]);
if((i==j)
[解决办法]
(i+j==row-1))
{
sum=sum+a[i][j];
}
}
}
printf("%d\n",sum);
}
[解决办法]
应该是没认真看清楚吧
[解决办法]
问题的解决,从格式化代码开始。
# include <stdio.h>
int main()
{
int a[10][10];
int row, sum = 0;
int i, j;
scanf("%d", &row);
for (i = 0; i < row; i++)
{
for (j = 0; j < row; j++)
{
scanf("%d", &a[i][j]);
}
if ((i == j)
[解决办法]
(i + j == row - 1))
{
sum = sum + a[i][j];
}
}
printf("%d\n", sum);
}
# include <stdio.h>
int main()
{
int a[10][10];
int row, sum = 0;
int i, j;
scanf("%d", &row);
for (i = 0; i < row; i++)
{
for (j = 0; j < row; j++)
{
scanf("%d", &a[i][j]);
if ((i == j)
[解决办法]
(i + j == row - 1))
{
sum = sum + a[i][j];
}
}
}
printf("%d\n", sum);
}
[解决办法]
请检查scanf的返回值。
[解决办法]
for(i=0;i<row;i++)
{
for(j=0;j<row;j++)
{
scanf("%d",&a[i][j]);
if((i==j)
[解决办法]
(i+j==row-1))
{
sum=sum+a[i][j];
}
}
}
[解决办法]
循环写的有问题
for(i=0;i<row;i++)
{
for(j=0;j<row;j++)
{
scanf("%d",&a[i][j]);
}
if((i==j)
[解决办法]
(i+j==row-1))
{
sum=sum+a[i][j];
}
}
这么写,内部循环执行完一遍,进入判断,这个时候j永远等于row,而且你这个程序判断只会执行row次,你的初衷应该是执行row*row次,所以才会得到错误结果,把判断写到内部循环就OK了
[解决办法]
for(i=0;i<row;i++)
{
for(j=0;j<row;j++)
{
scanf("%d",&a[i][j]); //这里错了,应该是每次输入后判断是否相加
if((i==j)
[解决办法]
(i+j==row-1))
{
sum=sum+a[i][j];
}
}
}