C语言数组学习

news2024/9/22 6:35:43

C语言中的数组是非常重要的一个概念,它允许我们存储一组相同类型的数据。通过系统学习数组的基本概念、定义、使用方法及常见操作,能够帮助你更好地掌握它。我们将从数组的基础知识开始,逐步深入,提供练习与示例。

1. 数组的概念

  • 数组是一种数据结构,用来存储一组相同类型的元素。每个元素在内存中是连续存储的,且可以通过数组的下标进行访问。
  • 数组的大小是在定义时确定的,不能在程序运行时改变。
一维数组

一维数组是最基础的数组形式,表示一个线性的元素列表。

语法

type array_name[array_size];

例如,定义一个包含5个整数的一维数组:

int numbers[5];  // 定义一个可以存储5个整数的数组

也可以在定义时初始化数组:

int numbers[5] = {1, 2, 3, 4, 5};
二维数组

二维数组可以看作是表格形式的数据结构,即行和列的组合。

语法

type array_name[rows][columns];

例如,定义一个3行4列的二维数组:

int matrix[3][4];

也可以在定义时初始化:

int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
数组下标

数组的元素是通过下标访问的。数组的下标是从0开始的,数组的第一个元素的下标是0,最后一个元素的下标是数组大小 - 1

例如,访问numbers[5]中的第三个元素:

int third_element = numbers[2];  // 下标从0开始,访问第三个元素

2. 数组的常见操作

数组的常见操作包括遍历、查找、排序等。在数组上进行操作时,通常需要使用循环来访问每个元素。

(1) 遍历数组

可以使用for循环遍历数组中的每个元素。

#include <stdio.h>

int main() {
    int numbers[5] = {1, 2, 3, 4, 5};
    
    // 遍历数组
    for (int i = 0; i < 5; i++) {
        printf("%d ", numbers[i]);
    }
    return 0;
}
(2) 查找数组中的最大值或最小值

查找最大值或最小值是一个经典问题。通过遍历数组并记录当前的最大或最小值,可以很容易实现。

#include <stdio.h>

int main() {
    int numbers[5] = {1, 22, 3, 44, 5};
    int max = numbers[0];  // 假设第一个元素是最大值
    
    for (int i = 1; i < 5; i++) {
        if (numbers[i] > max) {
            max = numbers[i];  // 更新最大值
        }
    }
    
    printf("数组中的最大值是: %d\n", max);
    return 0;
}
(3) 数组元素的交换

在处理数组时,有时需要交换两个元素的值。可以使用一个临时变量来实现交换操作。

#include <stdio.h>

int main() {
    int a = 10, b = 20;
    int temp;

    temp = a;
    a = b;
    b = temp;

    printf("交换后的a = %d, b = %d\n", a, b);
    return 0;
}
(4) 反转数组

通过遍历数组并交换对称位置的元素,可以反转数组的内容。

#include <stdio.h>

int main() {
    int numbers[5] = {1, 2, 3, 4, 5};
    int n = 5;

    // 反转数组
    for (int i = 0; i < n / 2; i++) {
        int temp = numbers[i];
        numbers[i] = numbers[n - i - 1];
        numbers[n - i - 1] = temp;
    }

    // 输出反转后的数组
    for (int i = 0; i < n; i++) {
        printf("%d ", numbers[i]);
    }

    return 0;
}

3. 多维数组

C语言支持多维数组。除了常见的二维数组,还可以定义三维或更高维的数组。

例如,定义一个2x3x4的三维数组:

int array[2][3][4];

在多维数组中,使用多个下标来访问元素。例如,访问array[1][2][3]

int value = array[1][2][3];  // 访问第二个组的第三行第四列

4. 数组和函数

数组可以作为参数传递给函数,通常传递的是数组的指针(即数组的首地址)。你可以通过函数修改数组的内容。

数组作为函数参数
#include <stdio.h>

void printArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main() {
    int numbers[5] = {1, 2, 3, 4, 5};
    printArray(numbers, 5);  // 将数组和大小传递给函数
    return 0;
}
修改数组元素

因为数组传递的是指针,所以可以通过函数修改数组的内容。

#include <stdio.h>

void modifyArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        arr[i] = arr[i] * 2;  // 修改数组中的每个元素
    }
}

int main() {
    int numbers[5] = {1, 2, 3, 4, 5};
    modifyArray(numbers, 5);  // 修改数组的内容
    
    // 输出修改后的数组
    for (int i = 0; i < 5; i++) {
        printf("%d ", numbers[i]);
    }
    return 0;
}

5. 动态数组

在C语言中,数组的大小是固定的,但有时我们希望在程序运行时动态分配数组。可以使用malloc()函数从堆内存中动态分配空间。

#include <stdio.h>
#include <stdlib.h>

int main() {
    int n;
    printf("请输入数组大小: ");
    scanf("%d", &n);

    // 动态分配数组
    int *arr = (int*)malloc(n * sizeof(int));

    // 初始化并输出数组
    for (int i = 0; i < n; i++) {
        arr[i] = i + 1;
        printf("%d ", arr[i]);
    }

    // 释放动态分配的内存
    free(arr);

    return 0;
}

6. 数组专题练习

(1) 数组求和

编写一个程序,计算数组所有元素的和。

#include <stdio.h>

int main() {
    int numbers[5] = {1, 2, 3, 4, 5};
    int sum = 0;
    
    for (int i = 0; i < 5; i++) {
        sum += numbers[i];
    }
    
    printf("数组的和为: %d\n", sum);
    return 0;
}
(2) 找到数组中的最大和最小元素

编写一个程序,找到数组中的最大和最小值。

7. 学习总结

  • 从基础开始:先理解数组的基本概念,然后逐步学习一维数组、二维数组,再到更复杂的多维数组。
  • 多做练习:通过遍历、查找、排序等经典问题巩固数组操作。
  • 动态数组:在需要灵活处理内存时,学习使用动态数组。

通过这些知识,初学者能够逐步掌握数组的概念与操作。可以从简单的数组声明与遍历开始,然后挑战更复杂的多维数组与动态数组操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2154462.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python --PyAibote自动化

官文: https://www.pyaibote.com/ 下载安卓集成环境: 可以看到开发的一些信息

【AI视频】AI虚拟主播制作网站推荐

一、什么是AI虚拟主播&#xff1f; AI虚拟主播是一种利用人工智能技术打造的虚拟主持人&#xff0c;也被称为数字虚拟主持人。它们通常是由人工智能技术和三维建模技术结合而成&#xff0c;可以在各种平台上进行主持工作&#xff0c;如新闻报道、电商直播、综艺娱乐等。 AI虚…

华润电力最新校招社招润择认知能力测评:逻辑推理数字计算语言理解高分攻略

​ 尊敬的求职者们&#xff0c; 在您准备加入华润电力这个大家庭之前&#xff0c;了解其招聘测评的详细流程和要求是至关重要的。以下是我们为您整理的测评系统核心内容&#xff0c;希望对您的求职之旅有所帮助。 测评系统概览 华润电力的招聘测评系统旨在全面评估求职者的认…

【全网最全】2024年华为杯研赛B题成品论文获取入口(后续会更新)

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片&#xff0c;那是获取资料的入口&#xff01; 点击链接加入【2024华为杯研赛资料汇总】&#xff1a;https://qm.qq.com/q/hMgWngXvcQhttps://qm.qq.com/q/hMgWngXvcQ你是否在寻找数学建模比赛的突破点&a…

二叉树(二)深度遍历和广度遍历

一、层序遍历 广度优先搜索&#xff1a;使用队列&#xff0c;先进先出 模板&#xff1a; 1、定义返回的result和用于辅助的队列 2、队列初始化&#xff1a; root非空时进队 3、遍历整个队列&#xff1a;大循环while(!que.empty()) 记录每层的size以及装每层结果的变量&a…

Linux基础命令以及常识

镜像站点服务器&#xff08;相当于下载的网址&#xff09;也可叫软件源 vim /etc/apt/sources.list 索引文件(网络服务器在本地的缓存) 服务器软件源在本地列出来一个清单&#xff0c;以便于主机进行查询操作 cd /var/lib/apt/lists/ 下载软件包默认存放路径 cd /var/cache/a…

Linux_openEuler_24.03部署Oracle 19c部署安装实测验证(无图形桌面-RPM模式)

前言&#xff1a; 近期对openeuler有点兴趣&#xff0c;顺带在做个开发数据仓项目&#xff0c;那就正好安装个环境做个调测&#xff0c;做个记录放上来做个备录给到大家参考。 openEuler 24.03 LTS&#xff1a;四大升级&#xff0c; 首个AI原生开源操作系统正式发布 openEuler …

【医疗大数据】基于 B2B 的医疗保健系统中大数据信息管理的安全和隐私问题分析

基于 B2B 的医疗保健系统中大数据信息管理的安全和隐私问题分析 1、引言 1-1 医疗大数据的特点 10 V模型&#xff1a;在医疗领域&#xff0c;大数据的特点被描述为10 V&#xff0c;包括价值&#xff08;Value&#xff09;、体量&#xff08;Volume&#xff09;、速度&#xf…

C语言-文件操作-一些我想到的、见到的奇怪的问题

博客主页&#xff1a;【夜泉_ly】 本文专栏&#xff1a;【C语言】 欢迎点赞&#x1f44d;收藏⭐关注❤️ C语言-文件操作-一些我想到的、见到的奇怪的问题 前言1.在不关闭文件的情况下&#xff0c;连续多次调用 fopen() 打开同一个文件&#xff0c;会发生什么&#xff1f;1.1过…

【linux-Day4】linux的基本指令<下>

【linux-Day4】linux的基本指令<下> linux下的基本指令&#x1f4e2;date&#xff1a;显示时间&#x1f4e2;cal&#xff1a;显示公历日历&#x1f4e2;whereis &#xff1a; 查找指令->可执行文件/源代码/帮助手册所在的位置&#x1f4e2;find &#xff1a;在目录中搜…

C++ | Leetcode C++题解之第424题替换后的最长重复字符

题目&#xff1a; 题解&#xff1a; class Solution { public:int characterReplacement(string s, int k) {vector<int> num(26);int n s.length();int maxn 0;int left 0, right 0;while (right < n) {num[s[right] - A];maxn max(maxn, num[s[right] - A]);i…

色彩管理中的Gamma值的理解

目录 广义的Gamma值为什么要将输出和输入做Gamma运算&#xff1f;显示器的Gamma值什么是Gamma值为1.0线性响应?显示器的Gamma值标准是多少?为什么sRGB在Gamma0.45空间&#xff1f;打印机、印刷机Gamma值?印刷机Gamma与显示器的Gamma的比较参考文章 广义的Gamma值 Gamma值的…

YOLOv8改进,YOLOv8替换主干网络为VanillaNet( CVPR 2023 华为提出的全新轻量化架构),大幅度涨点

改进前训练结果: 改进后训练结果: 摘要 基础模型的核心理念是“更多即不同”,这一理念在计算机视觉和自然语言处理领域取得了惊人的成功。然而,变压器模型的优化挑战和固有复杂性呼唤一种向简化转变的范式。在本研究中,引入了VanillaNet,一种拥抱设计优雅的神经网络架构…

Ansible部署与应用基础

由于互联网的快速发展导致产品更新换代速度逐步增长&#xff0c;运维人员每天都要进行大量的维护操作&#xff0c;按照传统方式进行维护使得工作效率低下。这时部署自动化运维就 可以尽可能安全、高效的完成这些工作。 一、Ansible概述 1.什么是Ansible Ansible 是基于 Pytho…

Linux中使用cp命令的 -f 选项,但还是提醒覆盖的问题

问题&#xff1a; linux 在执行cp的命令的时候&#xff0c;就算是执行 cp -f 也还是会提醒是否要进行替换。 问题原因&#xff1a; 查看别名&#xff0c;alias命令&#xff0c;看到cp的别名为cp -i&#xff0c;那就是说cp本身就是自带覆盖提醒&#xff0c;就算我们加上-f 的…

《机器人SLAM导航核心技术与实战》第1季:第9章_视觉SLAM系统

视频讲解 【第1季】9.第9章_视觉SLAM系统-视频讲解 【第1季】9.1.第9章_视觉SLAM系统_ORB-SLAM2算法&#xff08;上&#xff09;-视频讲解 【第1季】9.1.第9章_视觉SLAM系统_ORB-SLAM2算法&#xff08;下&#xff09;-视频讲解 【第1季】9.2.第9章_视觉SLAM系统_LSD-SLAM算法…

TikTok提示“Network is out of reach”怎么处理?

当TikTok提示“Network is out of reach”时&#xff0c;意味着应用无法连接到互联网。导致这一问题的常见原因包括网络连接不稳定、地理限制或网络设置与应用不兼容等。解决方法有&#xff1a;拔除手机卡、关闭手机定位服务、切换至稳定的海外IP网络等。使用TikTok专用网络也可…

用户态缓存:链式缓冲区(Chain Buffer)

目录 链式缓冲区&#xff08;Chain Buffer&#xff09;简介 为什么选择链式缓冲区&#xff1f; 代码解析 1. 头文件与类型定义 2. 结构体定义 3. 宏定义与常量 4. 环形缓冲区的基本操作 5. 其他辅助函数 6. 数据读写操作的详细实现 7. 总结 8. 结合之前的内容 9. 具…

利用LRZ压缩与Base64编码实现高效文件上传

引言 在当今互联网时代&#xff0c;文件上传已成为众多在线服务不可或缺的一部分&#xff0c;尤其是在社交媒体平台上的照片分享和云存储服务中的文档管理等场景&#xff0c;高效且安全的文件上传机制对于保障用户体验至关重要。 为此&#xff0c;本文将介绍一种结合了LRZ压缩…

汇川AM400脉冲轴控制(轴控功能块ST源代码)

汇川AM400如何和编程软件通信连接 汇川AM400PLC如何和编程软件通信连接_汇川am400读取程序-CSDN博客文章浏览阅读159次。本文介绍了如何使用CODESYS编程软件与汇川AM400PLC进行通信连接,包括扫描网络、修改IP地址、刷新日志和下载监控程序的步骤。同时,文章提到了CODESYS编程…