C语言程序的功能

#include<stdio.h>
void main()
{int i,j,x=0;
static int a[8][8];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
a[i][j]=2*i+j;
for(i=0;i<8;i++)
x+=a[i][j];
printf("%d",x);
}可以帮我分析一下这段程序的功能吗?static在里面对程序的结果有影响吗?谢谢了!

这个程序的运行过程是这样的:首先定义一个静态数组 a[8][8];

然后通过循环
for(i=0;i<3;i++)
for(j=0;j<3;j++)
分别给
a[0][0] a[0][1] a[0][2]
a[1][0] a[1][1] a[1][2]
a[2][0] a[2][1] a[2][2]
赋值!

循环过后 j=3 。因此语句
for(i=0;i<8;i++)
x+=a[i][j];
是求 a[0][3]、a[1][3]、a[2][3]、a[3][3]、a[4][3]、a[5][3]、a[6][3]、a[7][3]、a[8][3] 的和!而这些元素没有重新赋值,所以都等于定义静态数组时赋予的初值 0 。所以它们的和 x = 0 !

这里的 static 很关键!因为静态数组在定义时会自动赋初值 0 。

如果不是静态数组,则本题没有赋值便求和就会出错!

如有疑问,可在线讨论!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-08-19
这个程序构造了一个4*4的矩阵,然后x是把矩阵所有元素内容求和

static对程序结果没有影响,因为一开始就被赋值了(其中4*4的区域每次都被赋值)
第2个回答  2010-08-19
#include<stdio.h>
void main()
{int i,j,x=0;
static int a[8][8];
for(i=0;i<3;i++)
for(j=0;j<3;j++)//j=3退出循环
a[i][j]=2*i+j;//给a[8][8]前3列3行赋值
for(i=0;i<8;i++)
x+=a[i][j];//j=3这时候x就是数组的第j列的值的和
printf("%d",x);
}