一道C语言题:下面的程序段运行后,输出结果是

2024-11-20 13:30:14
推荐回答(4个)
回答(1):

答案是0;

int i,j,x=0;
static int a[8][8]; //定义的时候系统自动初始化,把数组中所有的元素都赋成0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
a[i][j]=2*i+j; //将数组右上角的3X3的子矩阵赋值;(注意,此时结束时j的值是3)
for(i=0;i<8;i++)
x+=a[i][j];//这里j的值是3,所以相当于把a[0][3] a[1][3] a[2][3]到a[7][3]累加到x上,而在上面的赋值中又没有给这些值赋值,所以这些值都是0;而x的初值也是0,所以最后输出的x应当为0;
printf("%d",x);

回答(2):

用static定义数组,就已经给数组初值了,即使所有的值均为0.
你用for在给数组赋值的时候,只给了a[0][0]至a[2][2]的值,即那些值现在已经有变化了.在经过两个for之后,j的值应该变为了3.
那么再经历下一个for,应该执行的语句就是x+=a[i][3],可想而知,不论你经历多少次循环,只要j是3,那么些a[n][3]就是0.因为第3列根本就没有变化过.值仍旧为0
所以结果为0

回答(3):

static int a[8][8], a中的每个元素都是0

第三个for的时候 j=3, a[i][3]都是0,所以结果是0

回答(4):

是0

E:\Case.Win\NASM>gcc z.c -o z.exe

E:\Case.Win\NASM>z
0
E:\Case.Win\NASM>

#include "stdio.h"
int 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);
}