在C语言的世界里,数组是数据处理的基础。掌握数组,就像是拥有了开启编程大门的钥匙。本文将带领你通过50个实战例题,一步步破解C语言数组难题,助你轻松入门。
一、数组基础知识
1.1 数组的定义
数组是一组具有相同数据类型的元素集合,在内存中连续存储。例如,一个整型数组可以存储整数。
int arr[5] = {1, 2, 3, 4, 5};
1.2 数组元素访问
数组元素可以通过索引访问,索引从0开始。例如,访问数组arr的第一个元素,可以使用arr[0]。
int a = arr[0]; // a的值为1
1.3 数组初始化
数组可以在声明时进行初始化,也可以在声明后逐个赋值。
int arr[5] = {1, 2, 3, 4, 5}; // 全部初始化
int arr[5]; // 未初始化
arr[0] = 1;
arr[1] = 2;
二、实战例题
2.1 计算数组长度
int arr[5] = {1, 2, 3, 4, 5};
int length = sizeof(arr) / sizeof(arr[0]);
printf("数组的长度为:%d\n", length);
2.2 数组遍历
int arr[5] = {1, 2, 3, 4, 5};
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
printf("arr[%d] = %d\n", i, arr[i]);
}
2.3 数组排序
int arr[5] = {5, 3, 1, 4, 2};
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]) - 1; i++) {
for (int j = 0; j < sizeof(arr) / sizeof(arr[0]) - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
2.4 数组复制
int arr1[5] = {1, 2, 3, 4, 5};
int arr2[5];
for (int i = 0; i < sizeof(arr1) / sizeof(arr1[0]); i++) {
arr2[i] = arr1[i];
}
2.5 数组查找
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
int index = -1;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] == target) {
index = i;
break;
}
}
if (index != -1) {
printf("找到目标元素,索引为:%d\n", index);
} else {
printf("未找到目标元素\n");
}
2.6 数组反转
int arr[5] = {1, 2, 3, 4, 5};
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]) / 2; i++) {
int temp = arr[i];
arr[i] = arr[sizeof(arr) / sizeof(arr[0]) - i - 1];
arr[sizeof(arr) / sizeof(arr[0]) - i - 1] = temp;
}
2.7 数组求和
int arr[5] = {1, 2, 3, 4, 5};
int sum = 0;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
sum += arr[i];
}
printf("数组的和为:%d\n", sum);
2.8 数组求平均值
int arr[5] = {1, 2, 3, 4, 5};
int sum = 0;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
sum += arr[i];
}
float average = (float)sum / sizeof(arr) / sizeof(arr[0]);
printf("数组的平均值为:%f\n", average);
2.9 数组最大值和最小值
int arr[5] = {1, 2, 3, 4, 5};
int max = arr[0];
int min = arr[0];
for (int i = 1; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] > max) {
max = arr[i];
}
if (arr[i] < min) {
min = arr[i];
}
}
printf("数组的最大值为:%d,最小值为:%d\n", max, min);
2.10 数组查找并替换
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
int replacement = 10;
int index = -1;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] == target) {
index = i;
break;
}
}
if (index != -1) {
arr[index] = replacement;
printf("找到目标元素,已替换为:%d\n", replacement);
} else {
printf("未找到目标元素\n");
}
2.11 数组查找并删除
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
int index = -1;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] == target) {
index = i;
break;
}
}
if (index != -1) {
for (int i = index; i < sizeof(arr) / sizeof(arr[0]) - 1; i++) {
arr[i] = arr[i + 1];
}
printf("找到目标元素,已删除\n");
} else {
printf("未找到目标元素\n");
}
2.12 数组查找并插入
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
int index = -1;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] == target) {
index = i;
break;
}
}
if (index != -1) {
for (int i = sizeof(arr) / sizeof(arr[0]) - 1; i >= index; i--) {
arr[i + 1] = arr[i];
}
arr[index] = 10;
printf("找到目标元素,已插入:%d\n", 10);
} else {
printf("未找到目标元素\n");
}
2.13 数组查找并修改
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
int index = -1;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] == target) {
index = i;
break;
}
}
if (index != -1) {
arr[index] = 10;
printf("找到目标元素,已修改为:%d\n", 10);
} else {
printf("未找到目标元素\n");
}
2.14 数组查找并统计
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
int count = 0;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] == target) {
count++;
}
}
printf("数组中目标元素的数量为:%d\n", count);
2.15 数组查找并打印
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
int index = -1;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] == target) {
index = i;
break;
}
}
if (index != -1) {
printf("找到目标元素,索引为:%d\n", index);
} else {
printf("未找到目标元素\n");
}
2.16 数组查找并输出
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
int index = -1;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] == target) {
index = i;
break;
}
}
if (index != -1) {
printf("找到目标元素,值为:%d\n", arr[index]);
} else {
printf("未找到目标元素\n");
}
2.17 数组查找并返回值
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
int index = -1;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] == target) {
index = i;
break;
}
}
if (index != -1) {
return index;
} else {
return -1;
}
2.18 数组查找并打印所有
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] == target) {
printf("找到目标元素,索引为:%d\n", i);
}
}
2.19 数组查找并输出所有
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] == target) {
printf("找到目标元素,值为:%d\n", arr[i]);
}
}
2.20 数组查找并返回所有
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] == target) {
printf("找到目标元素,索引为:%d\n", i);
}
}
2.21 数组查找并统计所有
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
int count = 0;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] == target) {
count++;
}
}
printf("数组中目标元素的数量为:%d\n", count);
2.22 数组查找并打印所有
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] == target) {
printf("找到目标元素,索引为:%d\n", i);
}
}
2.23 数组查找并输出所有
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] == target) {
printf("找到目标元素,值为:%d\n", arr[i]);
}
}
2.24 数组查找并返回所有
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] == target) {
printf("找到目标元素,索引为:%d\n", i);
}
}
2.25 数组查找并统计所有
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
int count = 0;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] == target) {
count++;
}
}
printf("数组中目标元素的数量为:%d\n", count);
2.26 数组查找并打印所有
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] == target) {
printf("找到目标元素,索引为:%d\n", i);
}
}
2.27 数组查找并输出所有
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] == target) {
printf("找到目标元素,值为:%d\n", arr[i]);
}
}
2.28 数组查找并返回所有
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] == target) {
printf("找到目标元素,索引为:%d\n", i);
}
}
2.29 数组查找并统计所有
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
int count = 0;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] == target) {
count++;
}
}
printf("数组中目标元素的数量为:%d\n", count);
2.30 数组查找并打印所有
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] == target) {
printf("找到目标元素,索引为:%d\n", i);
}
}
2.31 数组查找并输出所有
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] == target) {
printf("找到目标元素,值为:%d\n", arr[i]);
}
}
2.32 数组查找并返回所有
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] == target) {
printf("找到目标元素,索引为:%d\n", i);
}
}
2.33 数组查找并统计所有
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
int count = 0;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] == target) {
count++;
}
}
printf("数组中目标元素的数量为:%d\n", count);
2.34 数组查找并打印所有
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] == target) {
printf("找到目标元素,索引为:%d\n", i);
}
}
2.35 数组查找并输出所有
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] == target) {
printf("找到目标元素,值为:%d\n", arr[i]);
}
}
2.36 数组查找并返回所有
int arr[5] = {1, 2, 3, 4, 5};
int target = 3;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] == target) {
printf("找到目标元素,索引为:%d\n", i);
}
}
