数组是C语言中存储相同类型数据的集合。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 函数声明
void printArray(int arr[], int size);
void bubbleSort(int arr[], int size);
int binarySearch(int arr[], int size, int target);
void rotateArray(int arr[], int size, int k);
void mergeArrays(int arr1[], int size1, int arr2[], int size2, int result[]);
void findDuplicates(int arr[], int size);
void findMissingNumber(int arr[], int size);
void reverseArray(int arr[], int size);
void printSpiral(int matrix[][4], int rows, int cols);
void transposeMatrix(int matrix[][4], int rows, int cols);
int main() {
// 一维数组示例
printf("一维数组示例:\n");
int numbers[] = {5, 2, 8, 1, 9, 3, 7, 4, 6};
int size = sizeof(numbers) / sizeof(numbers[0]);
printf("原始数组:");
printArray(numbers, size);
// 数组排序
printf("\n排序后数组:");
bubbleSort(numbers, size);
printArray(numbers, size);
// 二分查找
printf("\n二分查找示例:\n");
int target = 7;
int index = binarySearch(numbers, size, target);
if (index != -1) {
printf("找到%d,位置在:%d\n", target, index);
} else {
printf("未找到%d\n", target);
}
// 数组旋转
printf("\n数组旋转示例:\n");
int arr[] = {1, 2, 3, 4, 5};
int arrSize = sizeof(arr) / sizeof(arr[0]);
printf("原始数组:");
printArray(arr, arrSize);
rotateArray(arr, arrSize, 2);
printf("旋转2位后:");
printArray(arr, arrSize);
// 数组合并
printf("\n数组合并示例:\n");
int arr1[] = {1, 3, 5, 7};
int arr2[] = {2, 4, 6, 8};
int size1 = sizeof(arr1) / sizeof(arr1[0]);
int size2 = sizeof(arr2) / sizeof(arr2[0]);
int result[size1 + size2];
mergeArrays(arr1, size1, arr2, size2, result);
printf("合并后数组:");
printArray(result, size1 + size2);
// 查找重复元素
printf("\n查找重复元素示例:\n");
int duplicates[] = {1, 2, 3, 4, 2, 5, 6, 3, 7};
int dupSize = sizeof(duplicates) / sizeof(duplicates[0]);
printf("原始数组:");
printArray(duplicates, dupSize);
findDuplicates(duplicates, dupSize);
// 查找缺失数字
printf("\n查找缺失数字示例:\n");
int missing[] = {0, 1, 3, 4, 5, 6, 7, 8, 9};
int missSize = sizeof(missing) / sizeof(missing[0]);
printf("原始数组:");
printArray(missing, missSize);
findMissingNumber(missing, missSize);
// 数组反转
printf("\n数组反转示例:\n");
int reverse[] = {1, 2, 3, 4, 5};
int revSize = sizeof(reverse) / sizeof(reverse[0]);
printf("原始数组:");
printArray(reverse, revSize);
reverseArray(reverse, revSize);
printf("反转后数组:");
printArray(reverse, revSize);
// 二维数组示例
printf("\n二维数组示例:\n");
int matrix[4][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}
};
printf("原始矩阵:\n");
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
printf("%3d ", matrix[i][j]);
}
printf("\n");
}
// 螺旋打印
printf("\n螺旋打印矩阵:\n");
printSpiral(matrix, 4, 4);
// 矩阵转置
printf("\n矩阵转置:\n");
transposeMatrix(matrix, 4, 4);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
printf("%3d ", matrix[i][j]);
}
printf("\n");
}
return 0;
}
// 函数定义
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
void bubbleSort(int arr[], int size) {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int binarySearch(int arr[], int size, int target) {
int left = 0;
int right = size - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
return mid;
}
if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
void rotateArray(int arr[], int size, int k) {
k = k % size;
int temp[k];
// 保存后k个元素
for (int i = 0; i < k; i++) {
temp[i] = arr[size - k + i];
}
// 移动前size-k个元素
for (int i = size - 1; i >= k; i--) {
arr[i] = arr[i - k];
}
// 将保存的元素放到前面
for (int i = 0; i < k; i++) {
arr[i] = temp[i];
}
}
void mergeArrays(int arr1[], int size1, int arr2[], int size2, int result[]) {
int i = 0, j = 0, k = 0;
while (i < size1 && j < size2) {
if (arr1[i] <= arr2[j]) {
result[k++] = arr1[i++];
} else {
result[k++] = arr2[j++];
}
}
while (i < size1) {
result[k++] = arr1[i++];
}
while (j < size2) {
result[k++] = arr2[j++];
}
}
void findDuplicates(int arr[], int size) {
printf("重复元素:");
for (int i = 0; i < size; i++) {
for (int j = i + 1; j < size; j++) {
if (arr[i] == arr[j]) {
printf("%d ", arr[i]);
break;
}
}
}
printf("\n");
}
void findMissingNumber(int arr[], int size) {
int expectedSum = (size * (size + 1)) / 2;
int actualSum = 0;
for (int i = 0; i < size; i++) {
actualSum += arr[i];
}
printf("缺失的数字是:%d\n", expectedSum - actualSum);
}
void reverseArray(int arr[], int size) {
for (int i = 0; i < size / 2; i++) {
int temp = arr[i];
arr[i] = arr[size - i - 1];
arr[size - i - 1] = temp;
}
}
void printSpiral(int matrix[][4], int rows, int cols) {
int top = 0, bottom = rows - 1;
int left = 0, right = cols - 1;
while (top <= bottom && left <= right) {
// 打印上边
for (int i = left; i <= right; i++) {
printf("%d ", matrix[top][i]);
}
top++;
// 打印右边
for (int i = top; i <= bottom; i++) {
printf("%d ", matrix[i][right]);
}
right--;
// 打印下边
if (top <= bottom) {
for (int i = right; i >= left; i--) {
printf("%d ", matrix[bottom][i]);
}
bottom--;
}
// 打印左边
if (left <= right) {
for (int i = bottom; i >= top; i--) {
printf("%d ", matrix[i][left]);
}
left++;
}
}
printf("\n");
}
void transposeMatrix(int matrix[][4], int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = i + 1; j < cols; j++) {
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
}