s1e20习题
#include <stdio.h>int main(){
int i,j;
int a = {
{1,2,3,4,5},
{6,7,8,9,10},
{11,12,13,14,15},
{16,17,18,19,20}
};
for (i=0;i<4;i++)
{
for (j=0;j<5;j++)
{
printf("%2d ",a);
if(i+j=3){
printf("\n");
}
}
}
return 0;
}
怎么实现换行的??? 本帖最后由 jackz007 于 2019-11-2 00:31 编辑
在内存中,任何多维数组实际都是以一维数组的形式呈现的,例如,二维数组 a ,与一维数组 aa 是完全一样的:
int a = {{ 1 ,2 ,3 ,4 ,5},
{ 6 ,7 ,8 ,9 , 10},
{11 , 12 , 13 , 14 , 15},
{16 , 17 , 18 , 19 , 20}} ;
int aa[] = { 1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 , 10 , \
11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20} ;
通过这种转换可以看出,把多维数组视为一维数组,每个元素的先后顺序保持不变。多维数组不过就是对一维数组分了一下组而已。
懂得了这种转换关系,事情就变得好办了。二维数组 a 的每行有 5 个元素,所以,二维下标与一维下标的换算关系为:
a = aa
根据代码:
if(i + j == 3)printf("\n") ;
在 i + j = 3 的时候,会输出一个回车符,就二维数组 a 而言,与一维数组 aa 之间存在以下对应关系:
a->aa[ 3]
a->aa[ 7]
a->aa
a->aa
所以,程序会在输出完 a、a、a、a 后,各输出一个回车符,也就是说,对全部 5 × 4 = 20 个元素一共输出 5 行,每输出 4 个元素就输出一个回车。
页:
[1]