C++知识总结-薛老师主讲

C语言数组精典案例

c语言数组经典例题及详解

‌C语言数组经典例题及详解‌包括以下几个经典问题:‌12

一维数组的循环左移和右移‌:

循环右移‌:例如,数组元素为1, 2, 3, 4, 5,经过循环右移后数组元素将会变成 2, 3, 4, 5, 1。实现方法是先将第一个元素保存,然后将数组中的元素逐个向左移动,最后将保存的第一个元素放到数组的末尾。

1. 循环右移数组

#include <stdio.h>
#include <string.h>

void rightRotate(int arr[], int n, int k) {
    k = k % n;  // 处理k大于n的情况
    int first = arr[0];
    for (int i = 0; i < n - 1; i++) {
        arr[i] = arr[i + 1];
    }
    arr[n - 1] = first;

    // 如果需要右移k次,可以取消上面的直接右移一次,使用下面的循环
    /*
    for (int i = 0; i < k; i++) {
        int first = arr[0];
        for (int j = 0; j < n - 1; j++) {
            arr[j] = arr[j + 1];
        }
        arr[n - 1] = first;
    }
    */
}

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int n = sizeof(arr) / sizeof(arr[0]);
    int k = 1;  // 右移1位
    rightRotate(arr, n, k);
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

查找数组元素‌:前提是原数组元素必须是有序的(升序或降序),使用折半查找法可以高效地查找元素。算法通过不断缩小查找范围来逼近目标值。

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};
    int n = sizeof(arr) / sizeof(arr[0]);
    int target = 3;
    int index = binarySearch(arr, n, target);
    if (index != -1) {
        printf("Element found at index: %d\n", index);
    } else {
        printf("Element not found.\n");
    }
    return 0;
}

二维数组的最大元素及其位置‌:

‌题目‌:有一个3×4的二维数组,求该二维数组中的最大元素及其所在的行和列。
‌解析‌:首先定义并初始化一个3×4的二维数组。然后使用嵌套的for循环遍历整个数组,对于每个元素,如果它大于当前的最大元素,则更新最大元素的值为该元素的值,并记录其行和列索引。最后输出最大元素及其位置。

3. 二维数组的最大元素及其位置

#include <stdio.h>

int main() {
    int arr[3][4] = {
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12}
    };
    int max = arr[0][0];
    int maxRow = 0, maxCol = 0;

    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            if (arr[i][j] > max) {
                max = arr[i][j];
                maxRow = i;
                maxCol = j;
            }
        }
    }

    printf("Maximum element: %d\n", max);
    printf("Position: Row %d, Column %d\n", maxRow, maxCol);
    return 0;
}

计算数组元素的和、查找最大值和最小值‌:

计算和‌:编写程序计算给定数组中所有元素的和。使用sizeof运算符计算数组的总大小,然后遍历数组计算和。
查找最大值和最小值‌:编写程序查找给定数组中的最大值和最小值。同样使用sizeof运算符计算数组的总大小,然后遍历数组找到最大值和最小值。
反转数组元素的顺序‌:

程序‌:编写程序反转给定数组的元素顺序。使用一个临时变量来交换首尾元素,然后逐步向中间移动,直到整个数组被反转。
这些例题涵盖了C语言中数组的基本操作,包括定义、初始化、遍历、查找、排序等,是学习C语言数组操作的基础。