C语言数组学习

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.xdnf.cn/news/146714.html

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

相关文章

EdgeRoute_镜像烧录

1. EdgeRouter 概述 EdgeRouter Lite 是由 Ubiquiti Networks 公司生产的一款高性能网络路由器&#xff0c;适用于家庭和小型办公环境。它的尺寸为200 x 90 x 30 mm&#xff0c;重量为345克&#xff0c;配备了双核500 MHz的MIPS64处理器&#xff0c;并带有硬件加速功能&#x…

《AI系统:原理与架构》于华为HC大会2024正式发布

2024年9月21日&#xff0c;《AI系统&#xff1a;原理与架构》新书发布会在上海世博馆华为HC大会顺利举办。本书由华为昇腾技术专家、B站AI科普博主ZOMI酱和哈工大软件学院副院长苏统华教授联合编写&#xff0c;是领域内AI系统方面填补空白的重磅之作。 发布会上&#xff0c;《A…

机器人学基础——旋转矩阵转四元数的C++程序实现

一、理论基础 1. 旋转矩阵 旋转矩阵通常是一个3x3矩阵&#xff0c;表示物体的旋转变换。一个标准的旋转矩阵 ( R ) 如下&#xff1a; R ( r 11 r 12 r 13 r 21 r 22 r 23 r 31 r 32 r 33 ) R \begin{pmatrix} r_{11} & r_{12} & r_{13} \\ r_{21} & r_{22} &am…

github demo网页制作

demo网页制作 1.创建一个空项目 2.上传编辑好的文件到本地服务器 3.申请一个token 4.本地项目夹下执行 git init git add --all git commit -m ‘first try’ git remote add origin https://github.com/username/reponame.git git push -u origin master 这个时候需要输入用…

在曲线图上最值和极值点位置进行适当标注

1、首先生成一组0-100的随机数&#xff0c;组内共有100个数据&#xff1b; yyrandi([0,100],[1,100]); 2、求这组数据的功率谱密度&#xff0c;并绘图&#xff1b; msize(yy,2); xdft fft(yy); % 计算功率谱密度 psd (1/m) * abs(xdft).^2; x1:m; loglog(x,psd,Linewid…

树及二叉树(选择题)

树 在树中&#xff0c;总结点数为所有结点的度和再加一 5、设一棵度为3的树&#xff0c;其中度为2&#xff0c;1.0的结点数分别为3&#xff0c;1&#xff0c;6。该树中度为3 的结点数为_。 二叉树 设二叉树的所有节点个数为N&#xff0c;度为零的结点&#xff08;叶子结点…

基于Java springboot+mybatis 家具城进销存管理系统 (1)

基于Java springbootmybatis 家具城进销存管理系统 一、系统介绍二、功能展示1.登记出库(销售员)2.出库记录&#xff08;销售员&#xff09;3.首页(仓库管理员)4.出库管理&#xff08;仓库管理员&#xff09;5.统计分析&#xff08;仓库管理员&#xff09;6.账号管理&#xff0…

8588 表达式求值

### 思路 1. **初始化栈**&#xff1a;创建两个栈&#xff0c;一个用于存储操作数&#xff0c;另一个用于存储操作符。 2. **遍历表达式**&#xff1a;逐个字符检查&#xff1a; - 如果是数字&#xff0c;读取完整数字并压入操作数栈。 - 如果是操作符&#xff0c;根据优…

asp.net门诊管理系统网站(含协同过滤算法)VS开发sqlserver数据库web结构c#编程web网页设计

一、源码特点 asp.net门诊管理系统网站是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语言 开发。 应用技术&#xff1a;asp.net c…

x-cmd pkg | bat: cat 命令现代化替代品,终端用户必备工具

目录 简介快速上手安装使用与第三方工具组合使用 功能特点竞品和相关作品进一步阅读 简介 bat 是由 github.com/sharkdp 用 Rust 开发的 cat 命令现代化替代品。它比 cat 命令扩展了更多的现代化功能&#xff0c;如语法高亮、自动分页、Git集成等&#xff0c;能为用户提供更为…

[001-02-001].第2节:java开发环境搭建

4.1.书籍推荐&#xff1a; 4.2.人机交互方式 1.图形化界面(Graphical User Interface GUI)这种方式简单直观&#xff0c;使用者易于接受&#xff0c;容易上手操作2.命令行方式(Command Line Interface CLI)&#xff1a;需要有一个控制台&#xff0c;输入特定的指令&#xff0c…

0基础跟德姆(dom)一起学AI 数据处理和统计分析06-数据组合和缺失值处理

* 数据组合 * concat * merge * join(了解) * 缺失值处理 * apply方法详解 --- 1.DataFrame数据组合-concat连接 * 概述 * 连接是指把某行或某列追加到数据中, 数据被分成了多份可以使用连接把数据拼接起来 * 把计算的结果追加到现有数据集&#xff0c;也可以使用连…

Netty源码-业务流程之构建连接

Netty基本介绍&#xff0c;参考 Netty与网络编程 1、Netty构建连接 构建连接的流程 1.1 我们知道客户端连接服务端都是通过NioEventLoop来处理请求&#xff0c;NioEventLoop是一个线程&#xff0c;连接进来首先进入run()方法。 所以我们需要启动服务端&#xff0c;然后再启动…

基于JAVA+SpringBoot+Vue的线上辅导班系统的开发与设计

基于JAVASpringBootVue的线上辅导班系统的开发与设计 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#…

《当人工智能考上名校》:拥抱变化,让自己无可替代

01 说起人工智能&#xff0c;你会想起什么呢&#xff1f; 2016年3月&#xff0c;谷歌&#xff08;Google&#xff09;旗下DeepMind公司人工智能机器人阿尔法狗&#xff08;AlphaGo&#xff09;与围棋世界冠军、职业九段棋手李世石进行围棋人机大战&#xff0c;以4比1的总比分获…

【Canvas与诗词】木兰辞节选

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>金边钢底徽章</title><style type"text/css">…

通信入门系列书籍推荐一:通信原理和通信原理学习辅导

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 本节目录 一、背景 二、通信原理 …

探秘 Web Bluetooth API:连接蓝牙设备的新利器

引言 随着物联网技术的快速发展&#xff0c;蓝牙设备在日常生活中扮演着越来越重要的角色。而在 Web 开发领域&#xff0c;Web Bluetooth API 的出现为我们提供了一种全新的方式来连接和控制蓝牙设备。本文将深入探讨 Web Bluetooth API 的使用方法和原理&#xff0c;帮助开发…

react:React Hook函数

使用规则 只能在组件中或者其他自定义的Hook函数中调用 只能在组件的顶层调用&#xff0c;不能嵌套在if、for、 其他函数中 基础Hook 函数 useState useState是一个hook函数&#xff0c;它允许我们向组件中添加一个状态变量&#xff0c;从而控制影响组件的渲染结果 示例1…

全面详尽的 PHP 环境搭建教程

目录 目录 PHP 环境搭建概述 在 Windows 上搭建 PHP 环境 使用集成环境 XAMPP 安装步骤 配置和测试 常用配置 手动安装 Apache、PHP 和 MySQL 安装 Apache 安装 PHP 安装 MySQL 配置 PHP 连接 MySQL 在 Linux 上搭建 PHP 环境 使用 LAMP 方案 安装 Apache 安装 …