C 语言(6):一维数组入门,选择排序

📅 2026/7/22 3:39:16
C 语言(6):一维数组入门,选择排序
一、为什么需要数组在实际编程中如果需要统计全班同学的成绩并算平均分逐个定义变量非常不方便int score1; int score2; int score3; ... int score1000; // 定义1000个变量显然不现实数组正是为了解决大量同类型变量定义的问题。数组是有序数据的集合可以一次性批量定义多个变量。二、一维数组的定义定义方式类型说明符 数组名[常量表达式];三个部分的含义部分说明类型说明符数组中每个变量的类型如int、float、char数组名一组变量集合的标识符命名规则与变量名一致[常量表达式]数组的长度即数组中变量元素的个数必须是整型示例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) i0 - 9 i1 - 8 i2 - 7 i3 - 6 i4 - 5int 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; }八、选择排序算法说明选择排序核心思想给合适的位置选择合适的数冒泡排序相邻元素两两比较逐步冒泡插入排序将元素插入到已排序部分的正确位置快速排序需要用到指针