• 数组05 零基础入门学习C语言27


    第六章:数组05

     

    让编程改变世界

    Change the world by program


     

    二维数组元素的引用和初始化

      数据类型 数组名 [常量表达式1][常量表达式2] ={ 初始化数据 };  

    我们有4种方法对二维数组初始化:

    (1) 直接分行给二维数组赋初值。 如:

    int a[3][4]={{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};

    (2) 可以将所有数据写在一个花括弧内, 按数组排列的顺序对各元素赋初值。 如:

    int a[3][4]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

    (3) 可以对部分元素赋初值。 如:

    int a[3][4]={{1}, {5}, {9}};

    有请直观图: [caption id="attachment_98" align="aligncenter" width="263"] 二维数组[/caption] 也可以对各行中的某一元素赋初值, 如:

    int a[3][4]={{1}, {0, 6}, {0, 0, 11}};

    有图有真相: [caption id="attachment_99" align="aligncenter" width="255"] 二维数组[/caption] 其实也可以只对某几行元素赋初值。 如:

    int a[3][4]={{1}, {5, 6}};

    有图有真相: [caption id="attachment_100" align="aligncenter" width="290"] 二维数组[/caption] (4) 如果对全部元素都赋初值, 则定义数组时对第一维的长度可以不指定, 但第二维的长度不能省。 如:

    int a[3][4]= {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

    它等价于:

    int a[][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

    在定义时也可以只对部分元素赋初值而省略第一维的长度, 但应分行赋初值。 如:

    int a[][4]={{0, 0, 3}, {}, {0, 10}};

    有图有真相: [caption id="attachment_101" align="aligncenter" width="288"] 二维数组[/caption] 例题:如图, 一个学习小组有5个人, 每个人有三门课的考试成绩。 将各个数据保存到二维数组a[5][3]中, 并求全组分科的平均成绩和总平均成绩。 [caption id="attachment_102" align="aligncenter" width="150"] 二维数组[/caption] 对数组a[5][3]: 1) 按行分段赋值可写为:

    int a[5][3]={ {80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85} };

    2) 按行连续赋值可写为:

    int a[5][3]={ 80,75,92,61,65,71,59,63,70,85,87,90,76,77,85};

    这两种赋初值的结果是完全相同的。   程序实现如下: [codesyntax lang="c"]
    #include <stdio.h>
    
    void main()
    {
        int i, j, s=0, average, v[3];
        int a[5][3] ={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};
    
        for(i=0; i < 3; i++)
        {
            for(j=0;j<5;j++)
            s = s + a[j][i];
            v[i] = s / 5;
            s = 0;
        }
        average = (v[0] + v[1] + v[2]) / 3;
    
        printf("math:%dnc languag:%dndFoxpro:%dn", v[0], v[1], v[2]);
        printf("total:%dn", average);
    }
    [/codesyntax]

    二维数组程序举例

     

    NO.1 将一个二维数组行和列元素互换, 存到另一个二维数组中。

    将数组a[2][3]转化为数组b[3][2] [caption id="attachment_103" align="aligncenter" width="300"] 二维数组举例[/caption] 化繁为简:无论多少维数组, 分解成一维的先进行转换! a[0][j] => b[j][0] a[i][0] => b[0][i] [codesyntax lang="c"]
    #include <stdio.h>
    void main()
    {
        int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
        int b[3][2], i, j;
    
        printf(″array a: n″);
        for(i=0;i<=1;i++)
        { 
            for(j=0;j<=2;j++)
            {                  
                printf(″%5d″, a[i][j]);
                b[j][i] = a[i][j];
            }
            printf(″n″);
        }
        printf(″array b:n″);
        for (i=0;i<=2;i++)
        {
            for(j=0;j<=1;j++)
            printf("%5d″, b[i][j]);
            printf(″n″);
        }                          
    }
    [/codesyntax]  

    NO.2 有一个3×4的矩阵, 要求编程序求出其中值最大的那个元素的值, 以及其所在的行号和列号。

    [caption id="attachment_104" align="aligncenter" width="300"] 二维数组举例[/caption]   代码清单: [codesyntax lang="c"]
    #include <stdio.h>
    
    void main()
    {
        int i, j, row=0, colum=0, max;
        int a[3][4] = {{1, 2, 3, 4}, {9, 8, 7, 6}, {-10, 10, -5, 2}};
    
        max = a[0][0];
        for (i=0;i<=2;i++)
        {
            for (j=0;j<=3;j++)
            {
                if (a[i][j]>max)
                {    
                    max = a[i][j];    
                    row = i;   
                    colum = j;
                }
            }
        }
        printf(″max=%d, row=%d, colum=%dn″, max, row, colum);
    }
    [/codesyntax]  

    NO.3 从键盘上输入9个整数, (对照九宫格的形式, 输入三行, 每行输入三个数) 保存在二维数组中, 按数组原来位置输出第一行和第一列的所有元素。

      [caption id="attachment_105" align="aligncenter" width="300"] 二维数组转换[/caption] [buy] 获得所有教学视频、课件、源代码等资源打包 [/buy] [Downlink href='http://kuai.xunlei.com/d/LNSMZKGJUDQD']视频下载[/Downlink]
  • 相关阅读:
    Android开发学习之路--UI之简单聊天界面
    Android开发学习之路--UI之ListView
    Android开发学习之路--UI之自定义布局和控件
    Android开发学习之路--UI之基本布局
    Android开发学习之路--UI之初体验
    Android开发学习之路--Activity之四种启动模式
    Android开发学习之路--Activity之生命周期
    初探linux子系统集之i2c子系统(二)
    deque双端队列容器
    multimap多重映照容器
  • 原文地址:https://www.cnblogs.com/LoveFishC/p/3846945.html
Copyright © 2020-2023  润新知