第5章 数组

  1. 引言。
    1. 数组是一种组合类型的数据,数组中的每个成员称为“数组元素”,每个数组元素都可以当做单个变量来使用。
    2. 同一个数组中的所有元素的数据类型必须是相同的,可以是基本数据类型,也可以是指针型、结构型等其它数据类型。
    3. 数组元素的类型就是数组的类型。
  2. 一维数组。
    1. 一维数组的定义。
      1. 一维数组的元素常用“数组名[下标]”来表示,下标从0开始。
      2. 一维数组的定义语句格式:
        【格式】数据类型符 数组名1[长度1], 数组名2[长度2], ...;
      3. 数组名是按“标识符”规则构成。
      4. 长度是一个“整型常量表达式”,通常是一个整型常量。
      5. 可以同时定义多个数组和变量。
    2. 一维数组元素的引用。
      1. 数组名[下标]
      2. 其中的“下标”是一个整型表达式,其合法值的范围是0~长度-1。
      3. 任何一个数组元素的引用都可以看成一个变量。
      4. 分配的内存单元是连续的,并按照元素顺序依次排列,单元数组=数组长度×每个元素占用的字节数。
      5. 引用数组元素时,系统并不检查下标是否越界。
    3. 一维数组的初始化。
      1. 数组元素和变量一样,可以在定义数组时赋予初值,称为数组的初始化。
        【格式】数据类型符 数组名1[长度1]={初值表1}, ...;
      2. 对某个一维数组赋初值的方法可以有下列两种:
        1. 对全部元素赋初值:元素[0]初值, 元素[1]初值, ..., 元素[长度-1]初值
        2. 对前k个元素赋初值:元素[0]初值, 元素[1]初值, ..., 元素[k-1]初值
      3. 对某个一维数组的所有元素赋初值,数组长度可以省略,其长度等于初值表中初值的个数。
      4. 若只对元素的前若干个元素赋初值,则没有给出初值的元素的默认值对于数值型数组是0,对于字符型数组是''(ASCII代码值为0)。若没有对数组赋初值,则数组中所有元素的值都是不确定的。
    4. 一维数组程序设计举例。
      1. 求斐波拉契(qi)数列的前20项并输出。(1,1,2,3,5,8,13,21,...)
      2. 输入10个数,求其最小数。
      3. 用“选择排序法”对一维数组中的整数排序。选择排序法的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的元素排完。
  3. 二维数组。
    1. 二维数组的定义与数组元素的引用。
      1. 若数组元素的下标在两个或两个以上,这样的数组称为多维数组。
      2. 二维数组的定义
        【格式】数据类型 数组名[行长度][列长度], ...;
      3. 二维数据的引用
        数组名[行下标][列下标]
      4. 二维数组在C语言中是按行、同一行中按列的顺序依次排列。
      5. 一个二维数组可以看成若干个一维数组。
      6. 二维数组同样需要注意下标越界会造成结果不可预料的问题。
    2. 二维数组的初始化。
      1. 分行给二维数组所有元素赋初值。例如:int a[2][3] = {{1,2,3},{4,5,6}};
      2. 不分行给多维数组所有元素赋初值。用这种方式时,是先按行、后按列的顺序进行的。例如:int a[2][3] = {1,2,3,4,5,6};
      3. 只对每行的若干个元素赋初值,未赋初值的数组元素均获得零值。例如:int a[2][3] = {{1},{4,5}};
      4. 只对前若干行的若干个元素赋初值。
      5. 若给所有元素赋初值,行长度可以省略。
      6. 若分行给所有行的前若干个元素赋初值,行长度可以省略。
    3. 二维数组程序设计举例。
      1. 矩阵转置。
  4. 字符数组与字符串。
    1. 字符数组。
      1. “字符数组”就是定义时的数据类型符是“char”的数组。
      2. 定义语句:
        char 数组名1[长度] = {初值表}, 数组名2[行长度][列长度] = {{初值表},{初值表},...{初值表}},...;
    2. 字符串与字符数组。
      1. 字符串是由若干个字符组成的,其最后一个字符是字符串结束标记符('')。字符型变量只能存放单个字符,不能存放字符串。
      2. 用来存放字符串的字符数组的定义方法和普通的字符数组的定义方法相同,而赋初值的方式有两种。
        1. 第一种是按单个字符的方式赋初值,必须有一个字符是字符串的结束标记符''。
        2. 第二种方式是直接在初值表中写一个字符串常量。比如注意数组长度至少要比字符串中有效字符数多1,以便存放字符串结束标记符''。例如:char s1[3] = {"12"};char s2[] = {"12"};
        3. 关于格式化输入/输出函数中字符串的输入和输出,C语言规定:使用“%s”格式,从键盘向字符数组中输入字符串时,回车换行符或空格均表示字符串输入结束;输出时,只输出到字符串结束标记前的所有有效字符。
        4. scanf()函数和printf()函数调用时应写字符数组名。
        5. 字符串比较大小。
    3. 字符串处理的常用系统函数。
      1. 字符串输出函数。
        【调用格式】puts(字符数组)
        【功能】输出字符串,结束标记转换成回车换行符输出。
        【说明】使用“%s”格式的printf()函数,“字符串结束标记符”不输出。
      2. 字符串输入函数。
        【调用格式】gets(字符数组)
        【功能】从键盘接受一个字符串(仅以回车换行符作为结束标记),存入指定字符数组。
        【说明】使用“%s”格式的scanf()函数,“回车换行符”或“空格符”都可看成字符输入的结束。
      3. 使用以上两个函数时,应在程序的开头写上命令“#include <stdio.h>”。
      4. 测试字符串长度函数。strlen(字符串)
      5. 字符串复制函数。strcpy(字符串数组, 字符串, 整型表达式)
      6. 字符串比较函数。strcmp(字符串1, 字符串2)
      7. 字符串连接函数。strcat(字符数组, 字符串)
    4. 字符数组程序设计举例。

发表评论

电子邮件地址不会被公开。 必填项已用*标注