C 语言(6):一维数组入门,选择排序
2026/7/22 3:39:10 网站建设 项目流程

一、为什么需要数组?

在实际编程中,如果需要统计全班同学的成绩并算平均分,逐个定义变量非常不方便:

int score1; int score2; int score3; ... int score1000; // 定义1000个变量,显然不现实

数组正是为了解决"大量同类型变量定义"的问题。数组是有序数据的集合,可以一次性批量定义多个变量。


二、一维数组的定义

定义方式:

类型说明符 数组名[常量表达式];

三个部分的含义:

部分说明
类型说明符数组中每个变量的类型,如intfloatchar
数组名一组变量集合的标识符,命名规则与变量名一致
[常量表达式]数组的长度,即数组中变量(元素)的个数,必须是整型

示例:

int score[1000]; // 定义了一个int型数组,包含1000个int型变量

注意:C99 标准之后,方括号内也可以使用变量(可变长数组),但此时不能初始化

int n; scanf("%d", &n); int a[n]; // 可变长数组,不能初始化

三、数组的初始化与赋值

初始化方式
// 1. 全部初始化 int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 2. 部分初始化 —— 值依次给到前面的元素,后面未初始化的元素默认为 0 int a[10] = {1, 2, 3, 4, 5}; // 3. 不初始化 —— 数组中是随机值(垃圾值) int a[10]; // 4. 初始化成全 0 int a[10] = {0}; // 5. 省略数组长度 —— 长度由初始化值的个数推算 int a[] = {1, 2, 3, 4}; // 最终长度为 4
赋值方式

数组不能整体赋值,必须给到具体的元素:

// 错误写法 int a[10]; a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 不对! // 正确写法 —— 逐个元素赋值 a[0] = 2; a[1] = 5; // ... 配合 for 循环批量赋值

四、数组元素的引用

通过下标(编号)来访问数组中的每个变量:

数组名[下标]
  • 下标的本质是相对于首元素的偏移量
  • 下标取值范围:[0, 数组长度-1]
  • 超出合法范围即为数组越界,编译器不会检查,需要程序员自己注意

五、数组的三大特点

特点说明
连续性数组在内存中占用一片连续的空间
单一性数组中存放的是同一类型的数据
有序性第一个元素后面紧跟着第二个,依次排列

内存示例:

0x7fc30194190: a[0] = 1 0x7fc30194194: a[1] = 2 0x7fc30194198: a[2] = 3 0x7fc3019419c: a[3] = 4 ...

六、数组名的含义

  • 类型角度:数组名代表了对应的数组类型
  • 数值角度:数组名代表的是数组首元素的地址

七、经典练习

练习 1:找出数组中能被 3 整除的数
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; for (int i = 0; i < 10; i++) { if (a[i] % 3 == 0) printf("%d ", a[i]); }
练习 2:从键盘输入 10 个值,求累加和
int a[10], sum = 0; for (int i = 0; i < 10; i++) { scanf("%d", &a[i]); sum += a[i]; } printf("sum = %d\n", sum);
练习 3:找出最大值
int max = a[0]; // 擂台法,先假设第一个元素最大 for (int i = 1; i < 10; i++) { if (a[i] > max) max = a[i]; }
练习 4:数组逆序

核心思路:交换下标为i数组长度-1-i的元素

原始: 1 2 3 4 5 6 7 8 9 10 逆序: 10 9 8 7 6 5 4 3 2 1 交换关系: i <-> (长度-1-i) i=0 <-> 9 i=1 <-> 8 i=2 <-> 7 i=3 <-> 6 i=4 <-> 5
int len = 10; int temp; for (int i = 0; i < len / 2; i++) { temp = a[i]; a[i] = a[len - 1 - i]; a[len - 1 - i] = temp; }

八、选择排序

算法说明
选择排序核心思想:给合适的位置选择合适的数
冒泡排序相邻元素两两比较,逐步"冒泡"
插入排序将元素插入到已排序部分的正确位置
快速排序需要用到指针

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询