C语言求助,题目有图,希望过程详细一些? 。。。。
第一:对二维数组进行剖析
int a[8][8] 是一个两维数组:a[行数][列数] 就是8行,8列,
int a[8][8]={20,30,32,50,52,68,52,88, 72,78,61,89,1,4,101,24, 11,14,97,83};
int a[8][8]={{20,30,32,50,52,68,52,88}, {72,78,61,89,1,4,101,24},{11,14,97,83}};
上面两行 等效,第0、1行被完 完整初始化,第2行 部分初始化,没有被初始化的元素默认值为0.
第二:程序执行过程 剖析
#include<stdio.h>
void main(void)
{
int i;
int a[8][8]={20,30,32,50,52,68,52,88, 72,78,61,89,1,4,101,24, 11,14,97,83};
for(i=0;i<6;i++)
{
printf("%d",a[i++][1+i]);
}
}
1). 第一次执行
首先执行 for(i=0;i<6;i++) ,i=0,判断i<6 结果为TRUE 然后执行下面一行
printf("%d",a[i++][1+i]) 时i=0 , 输出的是 a[0][1]=30(0行,1列)
执行 printf("%d",a[i++][1+i]) 后i++,i=1
最后执行 for(i=0;i<6;i++) 中的i++,i=2
2)第二次循环
首先执行 for(i=0;i<6;i++) ,中的i<6 结果为TRUE(此时i=2)
printf("%d",a[i++][1+i]) 时 输出的是a[2][3]=83 (2行,3列)
输出完毕后 再 执行完毕 i++,i=3
最后执行 for(i=0;i<6;i++) 中的i++,i=4
3)第三次循环
首先执行 for(i=0;i<6;i++) 中的i<6 结果为TRUE(此时i=4)
printf("%d",a[i++][1+i]) 时 输出的是a[4][5]=0 (4行,5列)
输出完毕后 再 执行 i++,i=5
最后执行 for(i=0;i<6;i++) 中的i++,i=6
4)第四次循环
首先执行 for(i=0;i<6;i++) 中的i<6 结果为FALSE(此时i=6)
循环结束
所以最终的输出结果为:30830
int main()
{ int i;
int a[8][8]= {20,30,32,50,52,68,52,88,72,78,61,89,1,4,101,24,11,14,97,83};
for(i=0; i<6; i++)
printf("%d",a[i++][1+i]);
return 0;
}
这个程序运行后的输出是:
3200
就是把a[0][2]、a[2][4]、a[4][6]三个数字连接到一起。
a[0]={20,30,32,50,52,68,52,88};
a[1]={72,78,61,89,1,4,101,24};
a[2]={11,14,97,83,0,0,0,0};
a[3]={0,0,0,0,0,0,0,0};
……
a[7]={0,0,0,0,0,0,0,0};
其次 a[i++][1+i]中,会先进行取下标'[]'运算,再进行i++运算
即,printf("%d",a[i++][1+i]) 可以分为两条语句
printf("%d",a[i][1+i]);
i++;
相当于for循环的step是 每次i = i+2;
i=0时打印 a[0][1] = 30
i=2时打印a[2][3] = 83
i=4时打印a[4][5] = 0
最终结果是30830