为什么这个算出来的答案是8
#include <stdio.h>
int main()
{
int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int i,j;
int sum=0;
for(i=0;i<3;i++)
{
if(arr[i][j]%2==1)
sum +=arr[i][j];
}
printf("对角线元素之和是:%d\n",sum);
return 0;
}
#include <stdio.h>
int main()
{
int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int i,j;
int sum=0;
for(i=0;i<3;i++)
{
if(arr[i][j]%2==1)
sum +=arr[i][j];
}
printf("对角线元素之和是:%d\n",sum);
return 0;
}
2018-05-23
你没有给j赋初值,这样只有代表行的“i”在动,代表列的“j”根本“不存在”。
简单来说就是你这样没有做到遍历数组,而且因为j没有赋初值所以j的值是计算机随即分配的。要记住一点是:计算机的内存内在你没有声明变量的时候也是有数值的,你声明变量(如int i;)只是让计算机把这个内存空间分配给你的i,但里面是有一个内存里本来的数的,这个数没人知道是多少。你要i的数值,就要先给他赋值,比如i=0;否则直接用来打印i结果是一堆乱数。
如果还不明白,你可以试试在自己的编译器上int i,j,k;然后直接printf打印i,j,k。出来的数绝对不是你想的0.
明白计算机如何存储数据对编程很重要,建议你买教材去看看。推荐国外的 c prime plus,国内教材一般写的比较乱,如果有老师教可以用,自学的话就不太好用了。
举报