进阶的阵法(数组)学习、初识二维阵法

改了三四遍,非要写那么多才行吗?🏳️

目录

C 语言数组知识详解

一、数组的运算

(一)数组的查找

(二)集成初始化时的定位

(三)数组的大小

二、二维数组是什么

(一)二维数组的定义格式

小结


C 语言数组知识详解

一、数组的运算

(一)数组的查找

在数组操作中,查找特定元素是极为常见的任务。在 C 语言里,常见的查找算法包含线性查找与二分查找。

  1. 线性查找

线性查找,也被称作顺序查找。其执行方式是从数组的首个元素开始,逐个对元素进行检查,直至找到目标元素或者遍历完整个数组。

示例代码如下:

#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 = 12int类型的元素。

小结

本文深入探讨了 C 语言中(一维)数组的进阶知识,涵盖数组的查找(线性查找与二分查找)、集成初始化时的定位以及数组大小的计算,同时初步介绍了二维数组的概念与定义格式。希望通过这些内容,能帮助读者更全面、深入地掌握 C 语言数组相关知识,为后续的编程学习与实践打下坚实基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值