精华内容
下载资源
问答
  • 【C++】定义和引用二维数组

    千次阅读 2016-01-27 22:45:36
    1、二维数组的一般形式为: 类型名 数组名 [常量表达式] [常量表达式] float a[3] [4] 定义a为3x4(3行4列)的单精度数组。 2、引用二维数组的元素 一般格式为: 数组名 [下标] [下标] 3、二维数组的...

    具有两个下标的数组称为二维数组。

    1、二维数组的一般形式为:

    类型名 数组名 [常量表达式] [常量表达式]

    float a[3] [4]

    定义a为3x4(3行4列)的单精度数组。


    2、引用二维数组的元素

    一般格式为:

    数组名 [下标] [下标]


    3、二维数组的初始化

    1)按行给二维数组全部元素赋初值。

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

    (2)可以将所有数据写在一个花括号内。

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

    (4)如果对全部元素都赋初值,则定义数组时对第1维的长度可以不指定,但第2维的长度不能省。
    展开全文
  • C语言二维数组的定义和引用

    千次阅读 2016-11-06 22:15:49
    二维数组的定义二维数组定义的一般形式是:  类型说明符 数组名[常量表达式1][常量表达式2] 其中常量表达式1表示第一维下标的长度,常量表达式2 表示第二维下标的长度。例如: 复制格式化复制 int a[3]...
    二维数组的定义二维数组定义的一般形式是:
        类型说明符 数组名[常量表达式1][常量表达式2]
    其中常量表达式1表示第一维下标的长度,常量表达式2 表示第二维下标的长度。例如:
    1. int a[3][4];
    int a[3][4];
    说明了一个三行四列的数组,数组名为a,其下标变量的类型为整型。该数组的下标变量共有3×4个,即:
        a[0][0], a[0][1], a[0][2], a[0][3]
        a[1][0], a[1][1], a[1][2], a[1][3]
        a[2][0], a[2][1], a[2][2], a[2][3]

    二维数组在概念上是二维的,即是说其下标在两个方向上变化,下标变量在数组中的位置也处于一个平面之中,而不是象一维数组只是一个向量。但是,实际的硬件存储器却是连续编址的,也就是说存储器单元是按一维线性排列的。如何在一维存储器中存放二维数组,可有两种方式:一种是按行排列, 即放完一行之后顺次放入第二行。另一种是按列排列, 即放完一列之后再顺次放入第二列。

    在C语言中,二维数组是按行排列的。即,先存放a[0]行,再存放a[1]行,最后存放a[2]行。每行中有四个元素也是依次存放。由于数组a说明为int类型,该类型占两个字节的内存空间,所以每个元素均占有两个字节。

    二维数组元素的引用

    二维数组的元素也称为双下标变量,其表示的形式为:
        数组名[下标][下标]
    其中下标应为整型常量或整型表达式。例如:
        a[3][4]
    表示a数组三行四列的元素。

    下标变量和数组说明在形式中有些相似,但这两者具有完全不同的含义。数组说明的方括号中给出的是某一维的长度,即可取下标的最大值;而数组元素中的下标是该元素在数组中的位置标识。前者只能是常量,后者可以是常量,变量或表达式。

    【例7-6】一个学习小组有5个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩。
    --
    Math 80 61 59 85 76
    C 75 65 63 87 77
    Foxpro 92 71 70 90 85

    可设一个二维数组a[5][3]存放五个人三门课的成绩。再设一个一维数组v[3]存放所求得各分科平均成绩,设变量average 为全组各科总平均成绩。编程如下:
    1. #include <stdio.h>
    2. int main(void){
    3. int i,j,s=0,average,v[3],a[5][3];
    4. printf("input score\n");
    5. for(i=0;i<3;i++){
    6. for(j=0;j<5;j++){
    7. scanf("%d",&a[j][i]);
    8. s=s+a[j][i];
    9. }
    10. v[i]=s/5;
    11. s=0;
    12. }
    13. average =(v[0]+v[1]+v[2])/3;
    14. printf("math:%d\nc languag:%d\ndbase:%d\n",v[0],v[1],v[2]);
    15. printf("total:%d\n", average );
    16. return 0;
    17. }
    #include <stdio.h>
    int main(void){
        int i,j,s=0,average,v[3],a[5][3];
        printf("input score\n");
        for(i=0;i<3;i++){
            for(j=0;j<5;j++){
                scanf("%d",&a[j][i]);
                s=s+a[j][i];
            }
            v[i]=s/5;
            s=0;
        }
        average =(v[0]+v[1]+v[2])/3;
        printf("math:%d\nc languag:%d\ndbase:%d\n",v[0],v[1],v[2]);
        printf("total:%d\n", average );
        return 0;
    }
    程序中首先用了一个双重循环。在内循环中依次读入某一门课程的各个学生的成绩,并把这些成绩累加起来,退出内循环后再把该累加成绩除以5送入v[i]之中,这就是该门课程的平均成绩。外循环共循环三次,分别求出三门课各自的平均成绩并存放在v数组之中。退出外循环之后,把v[0]、v[1]、v[2]相加除以3即得到各科总平均成绩。最后按题意输出各个成绩。

    二维数组的初始化

    二维数组初始化也是在类型说明时给各下标变量赋以初值。二维数组可按行分段赋值,也可按行连续赋值。

    例如对数组a[5][3]:
    • 按行分段赋值可写为:
      int a[5][3]={ {80,75,92}, {61,65,71}, {59,63,70}, {85,87,90}, {76,77,85} };
    • 按行连续赋值可写为:
      int a[5][3]={ 80,75,92,61,65,71,59,63,70,85,87,90,76,77,85};
    这两种赋初值的结果是完全相同的。

    【例7-7】求各科平局分和总成绩平均分。
    1. #include <stdio.h>
    2. int main(void){
    3. int i,j,s=0, average,v[3];
    4. int a[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};
    5. for(i=0;i<3;i++){
    6. for(j=0;j<5;j++)
    7. s=s+a[j][i];
    8. v[i]=s/5;
    9. s=0;
    10. }
    11. average=(v[0]+v[1]+v[2])/3;
    12. printf("math:%d\nc languag:%d\ndFoxpro:%d\n",v[0],v[1],v[2]);
    13. printf("total:%d\n", average);
    14. return 0;
    15. }
    #include <stdio.h>
    int main(void){
        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:%d\nc languag:%d\ndFoxpro:%d\n",v[0],v[1],v[2]);
        printf("total:%d\n", average);
        return 0;
    }


    对于二维数组初始化赋值还有以下说明:
    1) 可以只对部分元素赋初值,未赋初值的元素自动取0值。例如:
    1. int a[3][3]={{1},{2},{3}};
    int a[3][3]={{1},{2},{3}};
    是对每一行的第一列元素赋值,未赋值的元素取0值。 赋值后各元素的值为:
        1  0  0
        2  0  0
        3  0  0
    1. int a [3][3]={{0,1},{0,0,2},{3}};
    int a [3][3]={{0,1},{0,0,2},{3}};
    赋值后的元素值为:
        0  1  0
        0  0  2
        3  0  0

    2) 如对全部元素赋初值,则第一维的长度可以不给出。例如:
    1. int a[3][3]={1,2,3,4,5,6,7,8,9};
    int a[3][3]={1,2,3,4,5,6,7,8,9};
    可以写为:
    1. int a[][3]={1,2,3,4,5,6,7,8,9};
    int a[][3]={1,2,3,4,5,6,7,8,9};

    3) 数组是一种构造类型的数据。二维数组可以看作是由一维数组的嵌套而构成的。设一维数组的每个元素都又是一个数组,就组成了二维数组。当然,前提是各元素类型必须相同。根据这样的分析,一个二维数组也可以分解为多个一维数组。C语言允许这种分解。

    如二维数组a[3][4],可分解为三个一维数组,其数组名分别为:
        a[0]
        a[1]
        a[2]
    对这三个一维数组不需另作说明即可使用。这三个一维数组都有4个元素,例如:一维数组a[0]的元素为a[0][0],a[0][1],a[0][2],a[0][3]。必须强调的是,a[0],a[1],a[2]不能当作下标变量使用,它们是数组名,不是一个单纯的下标变量。
    展开全文
  • 二维字符数组一般用于存储和处理多... //定义了一个3行10列的二维字符数组c由于该二维数组的每一行 c[0]、c[1]、c[2] 均是含有 10 个元素的一维字符数组,即二维数组的每一行均可表示一个字符串。二维字符数组的初始...

    二维字符数组一般用于存储和处理多个字符串,二维字符数组中的每一行均可存储表示一个字符串。

    二维字符数组的定义

    二维字符数组的定义格式为:

    char 数组名[第一维大小][第二维大小];

    如:

    char c[3][10]; //定义了一个3行10列的二维字符数组c

    由于该二维数组的每一行 c[0]、c[1]、c[2] 均是含有 10 个元素的一维字符数组,即二维数组的每一行均可表示一个字符串。

    二维字符数组的初始化

    通常情况下,二维数组的每一行分别使用一个字符串进行初始化。 例如:

    char c[3][8]={{"apple"},{"orange"},{"banana"}};

    等价于:

    char c[3][8]={"apple","orange","banana"};

    以上两条初始化语句中,二维数组的第一维大小均可省略。数组 c 的逻辑结构如下所示:

    0

    1

    2

    3

    4

    5

    6

    7

    c[0]

    a

    p

    p

    l

    e

    \0

    \0

    \0

    c[1]

    o

    r

    a

    n

    g

    e

    \0

    \0

    c[2]

    b

    a

    n

    a

    n

    a

    \0

    \0

    二维字符教组的引用

    可以使用行下标和列下标引用二维字符数组中的每个元素(字符),例如:

    char c[][10]={"apple","orange","banana"};

    以下均是对二维字符数组元素的合法引用:

    printf ("%c",c[1][4]); //输出1行4列元素'g'字符

    scanf ("%c",&c[2][3]); //输入一个字符到2行3列元素中

    c[2][0]='B'; //把字符赋值给2行0列元素

    printf ("%s",c[1]); //c[1]为第2行的数组名(首元素地址),输出 orange

    scanf ("%s",c[2]); //输入字符串到c[2]行,从c[2]行的首地址开始存放

    以下是对二维字符数组元素的非法引用:

    c[0][0]="A"; //行、列下标表示的为字符型元素,不能使用字符串赋值

    printf ("%c",c[2]); //c[2]为第3行的首地址,不是字符元素,故不能用%c

    【例 1】 分析以下程序,输出其运行结果。

    #include

    int main (void)

    {

    char c[3][5] = {"Apple","Orange","Pear"};

    int i;

    for(i=0;i<3;i++)

    printf ("%s\n",c[i]);

    return 0;

    }

    分析:本题主要考查二维数组的逻辑结构和存储结构的区别。二维数组在逻辑上是分行分列的,但其存储结构却是连续的。

    字符串 "Apple" 的长度为 5,加上结束符 "\0" 共 6 个字符,前 5 个字符分别从 c[0] 行的首元素 c[0][0] 开始存放,到 c[0][4],第 6 个字符 '\0' 只能保存到 c[1] 行的首元素 c[1][0]。

    字符串 "Orange" 的长度为 6,该字符串的前 5 个字符分别从 c[1] 行的首元素 c[1][0] 开始存放,到 c[1][4],第 6 个字符及结束符 '\0' 顺序存到 c[2][0] 和 c[2][1]。

    字符串 "Pear" 的长度为 4,该字符串的 5 个字符(包含 '\0')分别从 c[2] 行的首元素 c[2][0] 开始存放,到 c[2][4]。

    故该数组各元素中的值如下所示。

    0

    1

    2

    3

    4

    c[0]

    A

    p

    p

    l

    e

    c[1]

    O

    r

    a

    n

    g

    c[2]

    P

    e

    a

    r

    \0

    由上述可以发现,该二维字符数组空间仅有一个字符串结束符 '\0',而 printf("%s",地址); 的功能是输出一个字符串,该串是从输出列表中的地址开始,到第一次遇到为止之间的字符组成的串。

    c[0] 为 c[0] 行的首地址,即 &c[0][0]。

    printf ("%s\n",c[0]); //输出AppleOrangPear

    printf ("%s\n",c[1]); //输出OrangPear

    printf ("%s\n",c[2]); // Pear

    运行结果为:

    AppleOrangPear

    OrangPear

    Pear

    注意,本例题仅是为了说明数组的逻辑结构和存储结构的区别,程序设计时,应避免这种情况。

    展开全文
  • 数组的下标越界

    千次阅读 2018-07-11 22:59:33
    引用二维数组的格式为:数组名[行下标] [列下标],下标都是从零开始。假设int a[10]是一个名为a的一维数组,它包含十个元素,则内存为数组分配的空间也是10,数组下标范围为0~9,如果不小心将数组最后一个元素a[9]写...

    《数组下标越界》

    数组定义的一般形式为:类型说明符 数组名[常量表达式] [常量表达式]这两个常量表达式分别指定了二维数组的行数和列数,程序编译时据此向内存申请空间。

    引用二维数组的格式为:数组名[行下标] [列下标],下标都是从零开始。

    假设int a[10]是一个名为a的一维数组,它包含十个元素,则内存为数组分配的空间也是10,数组下标范围为0~9,如果不小心将数组最后一个元素a[9]写成a[10],成为第十一个元素,内存没有为它分配内存,它就会占用内存中其他的单元格,这就是我们所说的越界,越界会造成一些很严重的后果。

    例:

    #include<stdio.h>

    int main()

    {

    int i;

    int arr[10];

    for(i=1;i<=10;i++)

    {

    if(i==10)//软件在每个相邻的内存上有炸弹

    {

    i+=2;

    }

    arr[i]=0;

    printf("%d\n",i);

    }

    return 0;

    }


     

     

     

    程序陷入死循环

     

    i=9的时候,a[9]=0,i=10的时候,系统把值赋给他相邻的单元格,赋给ii9变成0i永远都不可能大于10,所以陷入死循环。

    展开全文
  • 数组总结

    2019-12-23 00:14:59
    第五单元数组总结 第一课一维数组的定义 格式:类型标识符 数组名[常量表达式]; 注意:例如①int a[50];注意共有50个元素,它们的编号从0开始到49 ②值必须在数组定义的下标...第课 一维数组的输入与输出 采...
  • JAVA数组和递归

    2019-10-09 19:35:02
    文章目录数组一维数组二维数组递归Java中内存分配以及栈和堆区别:栈堆方法区本地方法区寄存器区(CPU使用) 数组 可以理解一个容器,可以存储多个相同数据类型数据。 既可以存储基本类型数据,也可以...
  • linux C 数组与指针

    2018-03-20 17:09:00
    定义一维数组的一般格式为:类型标识符 数组名[常量表达式]。例如:int a[10];它表示数组名为a,此数组为整型,有10个元素。这里可以先开辟内存空间,不赋值,如第一种。也可以像第种一样直...
  • •定义二维数组的语法: •type[ ] [ ] arrName; TestTwoDimension 我们可以得到一个结论: 二维数组是一维数组,其数组元素是一维数组;三维数组也是一维数组,其数组元素是二维数组;四维数组还是一维数...
  • 第五单元数组总结

    2019-12-24 17:37:17
    知识点总结: 第一课 1.数组就是一组相同类型变量,他们往往都是为了表示同一批对象统一属性。数组可以是一维,也可以是二维或多维。 2.在c++中使用一组数组时,一般是从零...4.引用格式为数组名[下标...
  •  6.2.2怎样引用二维数组的元素  6.2.3二维数组的初始化  6.2.4二维数组程序举例  6.3.字符数组 6.3.1怎样定义字符数组  6.3.2字符数组的初始化  6.3.3怎样引用字符数组中的元素  6.3.4字符串和字符串结束标志...
  • 6.2.2怎样引用二维数组的元素151 6.2.3二维数组的初始化152 6.2.4二维数组程序举例153 6.3字符数组155 6.3.1怎样定义字符数组155 6.3.2字符数组的初始化156 6.3.3怎样引用字符数组中的元素156 6.3.4字符串和字符串...
  • C程序设计(第四版).谭浩强.扫描版

    热门讨论 2011-05-31 10:02:13
    6.2.2怎样引用二维数组的元素150 6.2.3二维数组的初始化151 6.2.4二维数组程序举例152 6.3字符数组154 6.3.1怎样定义字符数组154 6.3.2字符数组的初始化155 6.3.3怎样引用字符数组中的元素155 6.3.4字符串和字符串...
  • 6.2.2 怎样引用二维数组的元素 6.2.3 二维数组的初始化 6.2.4 二维数组程序举例 6.3 字符数组 6.3.1 怎样定义字符数组 6.3.2 字符数组的初始化 6.3.3 怎样引用字符数组中的元素 6.3.4 字符串和字符串结束标志 6.3.5 ...
  • C程序设计(第四版)【谭浩强】

    热门讨论 2011-05-25 15:55:43
    6.2.2怎样引用二维数组的元素150 6.2.3二维数组的初始化151 6.2.4二维数组程序举例152 6.3字符数组154 6.3.1怎样定义字符数组154 6.3.2字符数组的初始化155 6.3.3怎样引用字符数组中的元素155 6.3.4字符串和字符串...
  • 指针指针含义直接访问变量和间接访问变量直接访问间接访问指针变量指针变量定义格式例如例题指针变量作为函数参数例题例题函数返回值方式通过return方式返回值通过指针或者数组方式“返回”值通过指针引用...
  • 12.1 二维数组的定义和引用 132 12.1.1 二维数组的定义 132 12.1.2 二维数组的引用 132 12.2 二维数组的初始化 133 12.3 二维数组应用举例 134 12.4 多维数组的定义和引用 136 习题 136 第13章 选择结构 138 ...
  • 7.2 二维数组的定义和引用 86 7.2.1 二维数组的定义 86 7.2.2 二维数组元素的引用 86 7.2.3 二维数组的初始化 87 7.2.4 二维数组程序举例 89 7.3 字符数组 89 7.3.1 字符数组的定义 89 7.3.2 字符数组的初始化 89 ...
  • 7.2 二维数组的定义和引用 86 7.2.1 二维数组的定义 86 7.2.2 二维数组元素的引用 86 7.2.3 二维数组的初始化 87 7.2.4 二维数组程序举例 89 7.3 字符数组 89 7.3.1 字符数组的定义 89 7.3.2 字符数组的初始化 89 ...
  •  二维数组的元素也称为双下标变量,其表示的形式: 数组名[下标][下标] 其中下标应整型常量或整型表达式。例如: a[3][4] 表示a数组三行四列的元素。下标变量和数组说明在形式中有些相似,但这两者具有完全不同...
  • 4.5.3 M 文件的一般结构 4.5.4 匿名函数、子函数、私有函数与私有目录 4.5.6 重载函数 4.5.6 eval、feval 函数和内联函数 4.5.7 内联函数 4.5.8 向量化和预分配 4.5.9 函数的函数 4.5.10 P 码文件 ...
  • c++ 程序设计

    2019-01-20 22:53:37
    5.3 二维数组的定义和引用 5.3.1 定义二维数组 5.3.2 二维数组的引用 5.3.3 二维数组的初始化 5.3.4 二维数组程序举例 5.4 用数组名作函数参数 5.5 字符数组 5.5.1 字符数组的定义和初始化 5.5.2 字符数组的赋值与...
  •  1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,什么sizeof取不到数组的大小?  声明问题  1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。  1.26 main的正确定义是什么...
  • 你必须知道495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    6.18 当我向一个接受指针的指针的函数传入二维数组的时候,编译器报错了。 6.19 我怎样编写接受编译时宽度未知的二维数组的函数? 6.20 我怎样在函数参数传递时混用静态和动态多维数组? 数组的大小 6.21 当...
  • 1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,什么sizeof取不到数组的大小? 声明问题 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 1.26 main的正确定义是什么?void ...
  • 1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,什么sizeof取不到数组的大小? 42 声明问题 43 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 43 *1.26 main的正确定义...
  • 1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,什么sizeof取不到数组的大小? 42 声明问题 43 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 43 *1.26 main的正确定义...
  • 6.18 当我向一个接受指针的指针的函数传入二维数组的时候,编译器报错了。  6.19 我怎样编写接受编译时宽度未知的二维数组的函数?  6.20 我怎样在函数参数传递时混用静态和动态多维数组?  数组的大小  6.21...

空空如也

空空如也

1 2 3 4
收藏数 69
精华内容 27
关键字:

引用二维数组的一般格式为