### 多维数组介绍 #### 一、高维数组 在C语言中,数组是一种非常重要的数据结构,用于存储相同类型的数据元素集合。通常我们提到的数组是指一维数组,但在实际应用中,经常会遇到需要处理更为复杂的数据结构的情况,这时就需要使用到多维数组。 **1.1 二维数组** 二维数组可以被理解为由多个一维数组组成的数组。例如,要记录某消费中心第一季度三个月的收入数据时,可以使用二维数组来表示: ```c float array[3][8]; // 3个月,每个月8项收入 ``` 这个二维数组可以看作是由3个连续的一维数组构成,每个一维数组包含8个元素。这些元素在内存中是连续存储的,遵循“按行存储”的原则,即首先存储第一行的所有元素,然后是第二行,以此类推。 示例代码: ```c #include <stdio.h> int main() { int array[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int i, j; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { printf("%3d", array[i][j]); } printf("\n"); } return 0; } ``` **输出结果**: ``` 1 2 3 4 5 6 7 8 9 ``` 可以看出,二维数组元素是按行存储的。此外,可以通过循环对数组进行赋值: ```c #include <stdio.h> #include <stdlib.h> int main() { int array[3][3]; int i, j; for (j = 0; j < 3; j++) for (i = 0; i < 3; i++) { scanf("%d", &array[i][j]); } for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { printf("%3d", array[i][j]); } printf("\n"); } return 0; } ``` 如果输入`1 2 3 4 5 6 7 8 9 <回车>`,则输出结果为: ``` 1 4 7 2 5 8 3 6 9 ``` **1.2 高维数组** 数组不仅可以是二维的,还可以是三维甚至更高维度的。尽管C语言对数组的维度没有明确的限制,但处理高维数组往往较为复杂,一般建议避免使用四维或更高维度的数组。以下是一个三维数组的例子: ```c #include <stdio.h> int main() { int array[2][3][4]; int i, j, k; for (i = 0; i < 2; i++) for (j = 0; j < 3; j++) for (k = 0; k < 4; k++) { array[i][j][k] = i * 12 + j * 4 + k; } return 0; } ``` 这个三维数组可以看作是2个二维数组,每个二维数组又可以看作3个一维数组。可以在头脑中将其想象为两个平行平面,每个平面内有3*4个点,共24个元素。 #### 二、字符串数组 除了存放数值外,还有一种特殊的数组类型——字符串数组。字符串数组本质上也是一种二维数组,但由于其特殊用途,通常会被单独讨论。 **2.1 字符串数组的基本概念** 字符串数组主要用于处理字符串,每个元素都是一段字符串。例如: ```c #include <stdio.h> int main() { char s[10][10]; int i; for (i = 0; i < 10; i++) { scanf("%s", s[i]); } return 0; } ``` **2.2 字符串数组的输入** 使用`scanf()`函数输入字符串时需要注意,该函数无法正确处理包含空格的字符串。例如: ```c #include <stdio.h> int main() { char s[3][10]; int i; for (i = 0; i < 3; i++) { scanf("%s", s[i]); } for (i = 0; i < 3; i++) { printf("%s\n", s[i]); } return 0; } ``` 若输入`1111 <回车> 2222 3333 <回车> 4444 <回车>`,则实际输出结果为: ``` 1111 2222 3333 ``` 为了正确处理包含空格的字符串,可以使用`gets()`函数代替`scanf()`函数。`gets()`函数能够接收一行字符串,并且能够跳过其中的空格。 **2.3 字符串的结束标记** 在C语言中,字符串以`\0`作为结束标志。当定义了如`char s[3][10]`这样的字符串数组时,若输入的字符串长度小于10个字符,计算机会在字符串的末尾自动添加`\0`作为结束标志。 **2.4 字符串排序** 在C语言中,字符串之间的比较是基于字符的ASCII码值进行的。如果第一个字符相同,则比较第二个字符,依此类推。例如: ```c #include <stdio.h> int main() { char s1[6] = "addfgh"; char s2[5] = "asdlg"; int i; for (i = 0; s1[i] != '\0' && s2[i] != '\0'; i++) { if (s1[i] < s2[i]) { printf("s1 < s2\n"); exit(1); } else if (s1[i] > s2[i]) { printf("s1 > s2\n"); exit(1); } } if (s1[i] == '\0' && s2[i] != '\0') { printf("s1 < s2\n"); } else if (s1[i] != '\0' && s2[i] == '\0') { printf("s1 > s2\n"); } else { printf("s1 == s2\n"); } return 0; } ``` 这段代码将比较两个字符串`s1`和`s2`的大小,并根据比较结果输出相应的信息。
- 微枫19932013-06-15对于复习线代帮助挺大
- 粉丝: 17
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助