改了三四遍,非要写那么多才行吗?🏳️
目录
C 语言数组知识详解
一、数组的运算
(一)数组的查找
在数组操作中,查找特定元素是极为常见的任务。在 C 语言里,常见的查找算法包含线性查找与二分查找。
- 线性查找
线性查找,也被称作顺序查找。其执行方式是从数组的首个元素开始,逐个对元素进行检查,直至找到目标元素或者遍历完整个数组。
示例代码如下:
#include <stdio.h>
int LinearSearch(int arr[], int size, int target) {
for (int i = 0; i < size; i++) {
if (arr[i] == target) {
return i;
}
}
return -1;
}
int main() {
int target;
printf("请输入要查找的数:");
scanf("%d", &target);
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int size = sizeof(arr) / sizeof(arr[0]);
int result = LinearSearch(arr, size, target);
if (result == -1) {
printf("目标元素不存在\n");
} else {
printf("目标元素是数组的第%d个元素\n", result + 1);
}
return 0;
}
case1
case2
- 在上述代码中,LinearSearch函数接收一个数组arr、数组的长度size以及要查找的目标元素target
- 函数通过遍历数组,逐一比较每个元素与目标元素,若找到则返回元素的索引,若遍历结束仍未找到则返回 -1
2. 二分查找
二分查找对数组有特定要求,即数组必须是有序的。
其核心思想是每次将查找范围缩小一半。通过比较数组中间元素与目标元素的大小,来决定下一步的查找范围。
在有序数组的查找场景中,二分查找在效率上显著优于线性查找。
示例代码如下:
#include <stdio.h>
int binarySearch(int arr[], int n, int target) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
int main() {
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int target;
int n = sizeof(arr) / sizeof(arr[0]);
printf("请输入要查找的目标元素: ");
scanf("%d", &target);
int result = binarySearch(arr, n, target);
if (result != -1) {
printf("元素 %d 在数组中的索引为 %d\n", target, result);
} else {
printf("元素 %d 未在数组中找到\n", target);
}
return 0;
}
case1
case2
在这段代码中,binarySearch函数利用while循环不断缩小查找范围,每次循环计算中间元素的索引mid,将中间元素与目标元素进行比较,若相等则返回索引,若中间元素小于目标元素则将查找范围缩小到右半部分,反之则缩小到左半部分。
(二)集成初始化时的定位
在 C 语言中,数组初始化时可借助定位来指定特定元素的值。例如:
int arr[5] = {[2] = 20};
上述代码中,arr[2] = 20明确表示数组arr的第三个元素(下标从 0 开始,所以下标为 2 的元素是第三个)被赋值为 20。而未明确指定值的其他元素,会自动被初始化为 0。
(三)数组的大小
在 C 语言中,我们能够运用sizeof运算符来计算数组的大小。sizeof运算符返回的是数组所占用的字节数。通过将数组占用的总字节数除以单个元素占用的字节数,就能得出数组中元素的个数。例如:
int arr[] = {10, 20, 30, 40, 50};
int size = sizeof(arr) / sizeof(arr[0]);
在上述代码中,sizeof(arr)得出数组arr占用的总字节数,sizeof(arr[0])得出数组中单个元素占用的字节数,两者相除得到数组arr的元素个数,并将结果存储在变量size中。
二、二维数组是什么
二维数组在 C 语言中可被视为数组的数组,常用于表示矩阵这类数据结构。对于具备线性代数基础的开发者而言,理解二维数组相对容易。
(一)二维数组的定义格式
二维数组的定义格式如下:
数据类型 数组名[行数][列数];
“数据类型” 代表数组中每个元素的数据类型,常见的有int(整型)、float(浮点型)、char(字符型)等;
“数组名” 是二维数组的名称,需遵循 C 语言标识符的命名规则;
“行数” 指的是二维数组中包含的一维数组的数量;
“列数” 是每个一维数组中包含的元素的数量。
例如:
int a[3][4];
上述代码定义了一个名为a的二维数组,该数组有 3 行 4 列,总共能够存储3 * 4 = 12个int类型的元素。
小结
本文深入探讨了 C 语言中(一维)数组的进阶知识,涵盖数组的查找(线性查找与二分查找)、集成初始化时的定位以及数组大小的计算,同时初步介绍了二维数组的概念与定义格式。希望通过这些内容,能帮助读者更全面、深入地掌握 C 语言数组相关知识,为后续的编程学习与实践打下坚实基础。