C语言 求助
题目描述求矩阵的两对角线上的元素之和
输入
矩阵的行数N
和一个N*N的整数矩阵a(N<=10)
输出
所输矩阵的两对角线上的元素之和
样例输入
3
1 2 3
4 5 6
7 8 9
样例输出
25
我的代码
# include <stdio.h>
main ()
{
int a,b,c,d,e,s=0;
scanf("%d",&b);
for(c=0;c<b;c++) //输入数组
{
for(d=0;d<b;d++)
{
scanf("%d",&a);
}
}
for(c=0,d=0;c<b;c++) //求左上到右下斜线 和。
{
d=d+a;
}
c=0;e=b-1;
while(c<d && e>-1) //求右上到左下斜线 和
{
s=s+a;
c++;e--;
}
if(b%2 == 0) //和加并减去重复值
printf("%d\n",d+s);
else
printf("%d\n",d+s-a[(b-1)/2][(b-1)/2]);
}
我发现,和的结果是正数,那么答案正确,要是和结果是负数,答案就会错误。
比如 1 -9,结果就不是-9.为什么会这样,我不知道哪里错了,求指点。 1.这个命名看的太累人了啊~~~容易乱
2.或许你就是看变量名乱的
3.这个while里 c<b 不是c<d
while(c<d && e>-1) //求右上到左下斜线 和
{
s=s+a;
c++;e--;
} #include <stdio.h>
int main()
{
int n,i,j,sum=0;
scanf("%d",&n); //输入矩阵行数n
int a;
for(i=0;i< n;i++) //初始化矩阵
{
for(j=0;j<n;j++)
scanf("%d",&a);
}
for(i=0,j=0;i<n;i++,j++) //计算左上至右下对角的和
sum=sum+a;
for(i=0,j=n-1;i<n;i++,j--) //计算右上至左下对角的和
sum=sum+a;
if(n%2!=0) //如果矩阵行数是奇数,减去重复累加的元素值
sum=sum-a;
printf("%d",sum); //输出最终的和
return 0;
} dwer 发表于 2015-11-6 14:23
1.这个命名看的太累人了啊~~~容易乱
2.或许你就是看变量名乱的
3.这个while里 c
谢谢,的确是这里错了。 愣头小兵 发表于 2015-11-6 14:15
谢谢了,不过我想知道 自己的代码哪里错了,现在解决了,还是要谢谢你。
页:
[1]