1. 引言
数组是C语言中一种非常重要的数据结构,它允许程序员以连续的内存空间存储一系列相同类型的数据。在实验六中,我们将深入探讨数组的各种应用,包括动态内存分配、二维数组的操作以及数组的排序与搜索等。
2. 动态内存分配与数组
在C语言中,动态内存分配是管理数组的一种有效方式。通过使用malloc、calloc和realloc函数,我们可以根据需要分配和调整数组的大小。
2.1 使用malloc分配内存
#include <stdio.h>
#include <stdlib.h>
int main() {
int *array;
int size = 10; // 假设我们需要一个大小为10的数组
array = (int *)malloc(size * sizeof(int)); // 分配内存
if (array == NULL) {
printf("Memory allocation failed!\n");
return 1;
}
// 使用数组
for (int i = 0; i < size; i++) {
array[i] = i * 2;
}
// 释放内存
free(array);
return 0;
}
2.2 使用calloc分配内存
calloc函数与malloc类似,但它会自动初始化分配的内存为零。
#include <stdio.h>
#include <stdlib.h>
int main() {
int *array;
int size = 10;
array = (int *)calloc(size, sizeof(int)); // 分配内存并初始化为零
if (array == NULL) {
printf("Memory allocation failed!\n");
return 1;
}
// 使用数组
for (int i = 0; i < size; i++) {
array[i] = i * 2;
}
// 释放内存
free(array);
return 0;
}
2.3 使用realloc调整内存大小
realloc函数可以调整已分配内存的大小。
#include <stdio.h>
#include <stdlib.h>
int main() {
int *array;
int size = 5;
array = (int *)malloc(size * sizeof(int)); // 分配内存
if (array == NULL) {
printf("Memory allocation failed!\n");
return 1;
}
// 使用数组
for (int i = 0; i < size; i++) {
array[i] = i * 2;
}
// 调整内存大小
array = (int *)realloc(array, size * 2 * sizeof(int));
// 使用调整后的数组
for (int i = 0; i < size * 2; i++) {
array[i] = i * 2;
}
// 释放内存
free(array);
return 0;
}
3. 二维数组的操作
二维数组是数组的数组,它在内存中是连续存储的。下面是一个二维数组的示例,我们将演示如何初始化、访问和修改它。
3.1 初始化二维数组
#include <stdio.h>
int main() {
int array[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
// 访问和打印二维数组
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", array[i][j]);
}
printf("\n");
}
return 0;
}
3.2 修改二维数组
#include <stdio.h>
int main() {
int array[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
// 修改二维数组
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
array[i][j] *= 2;
}
}
// 打印修改后的二维数组
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", array[i][j]);
}
printf("\n");
}
return 0;
}
4. 数组的排序与搜索
排序和搜索是数组操作中常见的任务。下面是一些常用的排序算法和搜索算法的示例。
4.1 冒泡排序
#include <stdio.h>
void bubbleSort(int *array, int size) {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (array[j] > array[j + 1]) {
// 交换元素
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
int main() {
int array[] = {64, 34, 25, 12, 22, 11, 90};
int size = sizeof(array) / sizeof(array[0]);
bubbleSort(array, size);
// 打印排序后的数组
for (int i = 0; i < size; i++) {
printf("%d ", array[i]);
}
printf("\n");
return 0;
}
4.2 二分搜索
#include <stdio.h>
int binarySearch(int *array, int size, int value) {
int low = 0;
int high = size - 1;
while (low <= high) {
int mid = low + (high - low) / 2;
if (array[mid] == value) {
return mid;
} else if (array[mid] < value) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1; // 未找到
}
int main() {
int array[] = {2, 3, 4, 10, 40};
int size = sizeof(array) / sizeof(array[0]);
int value = 10;
int result = binarySearch(array, size, value);
if (result != -1) {
printf("Element is present at index %d", result);
} else {
printf("Element is not present in array");
}
return 0;
}
5. 结论
通过实验六的深入解析,我们了解了C语言中数组的多种应用。从动态内存分配到二维数组的操作,再到排序和搜索算法,这些技能对于C语言程序员来说至关重要。通过实际操作和实践,您可以更好地掌握数组的编程技巧。
