pangzhenyu 发表于 2019-11-1 23:08:40

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:24:36

本帖最后由 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]
查看完整版本: s1e20习题