【C语言】利用数组处理批量数据(一维数组和二维数组)
前言:在前面学习的程序中使用的变量都属于基本类型,例如整型、字符型、浮点型数据,这些都是简单的数据类型。对于简单的问题,使用这些简单的数据类型就可以了。但是对于有些需要处理的数据,只用以上简单的数据类型是不够的,难以反映出数据的特点,也难以有效的进行处理。
💖 博主CSDN主页:卫卫卫的个人主页 💞
👉 专栏分类:C程序设计谭浩强版本 👈
💯代码仓库:卫卫周大胖的学习日记💫
💪关注博主和博主一起学习!一起努力!
目录
- 怎样定义和引用一维数据
- 怎样定义一维数组
- 怎样引用一维数组
- 一维数组的初始化
- 一维数组程序举例
- 怎样定义和引用二维数组
- 怎样定义二维数组
- 二维数组在内存中存放的顺序
- 怎样引用二维数组
- 二维数组的初始化
- 二维数组程序举例
怎样定义和引用一维数据
- 一维数组是数组中最简单的,它的元素只需要用数组名加一个下标,就能唯一的地确定。
- 数组是一组有序数据的集合
- 数组中的每一个元素都属于同一个数据类型
- C语言规定用方括号中的数字表示下标,如S[15]表示第15个元素
怎样定义一维数组
要使用数组,必须在程序中先定义数组,即通知计算机:由哪些数据组成数组,数组中有多少元素,属于哪个数据类型。否则计算机不会自动的把一批数据作为数组处理。例如,下面是对数组的定义:
int a[10] ; 它表示定义了一个整型数组, 数组名是a,此数组包含了 10个元素。数组的一般形式为:
类型说明符 数组名[常量表达式]
说明:
- 数组名的命名规则和变量名相同,遵循标识符命名规则。
- 在定义数组时莫须有指定数组中元素的个数,方括号中的常量表达式用来表示元素的个数,即数组的长度。
- 常量表达式中可以包括常量和符号常量,如 int a[3 + 5]是合法的的。
- 用 “int a[10];”定义了数组后a后,在内存中划出了一片存储空间(下图所示),存放了一个有10个整型元素的数组,可以看到,用一个 “int a[10];”就相当于定义了10个简单的整型变量,显然简单方便。

怎样引用一维数组
在定义数组并对其各个元素赋值后,就可以引用数组中的元素。应注意:只能引用数组元素而不能一次整体调用整个数组全部元素的值。
引用数组元素的表示形式为:数组名[下标]
例题: 对10个数组元素一次赋值为0,1,2,3 … 8,9,要求逆序输出。
int main()
{int i = 0;int arr[10] = { 0 };for (i = 0; i < 10; i++){arr[i] = i;//赋值}for (i = 9; i >= 0; i--){printf("%d ", arr[i]);//打印}printf("\n");return 0;
}
运行结果:

一维数组的初始化
- 在定义数组时对全部数组元素赋予初值。例如:
int a[10] = {0,1,2,3,4,5,6,7,8,9);
- 也可只给数组中的一部分元素赋值。例如:
int a[10] = {0,1,2,3,4};
//定义a数组有10个元素,但花括号内只提供5个元素的初始值,
//系统自动给后面5个元素的初始值赋值为0
- 如果想一个数组中全部元素为0,可以写成:
int a[10] = {0};
- 在对全部数组元素赋初始值时,由于数据的个数已经确定,因此可以不指定数组长度。例如:
int a[5] = {1,2,3,4,5};
//或者
int a[] = {1,2,3,4,5};
一维数组程序举例
例题1:用数组来处理求Fibonacci(斐波那契数列)问题。这个数列有以下特点:第1,2两个数为1,1。从第3个数开始,该数是其前面两个数之和。即该数列为1,1,2,3,5,8,13…,求其前20个数。
int main()
{int i = 0;int arr[20] = {1,1};//前俩项赋值为1for (i = 2; i < 20; i++){arr[i] = arr[i - 1] + arr[i - 2];}for (i = 0; i < 20; i++){printf("%d ", arr[i]);}printf("\n");return 0;
}
运行结果:
例题2(冒泡排序):有10个地区的面积,要求对它们按由小到大的顺序排序。
int main()
{int area[10] = { 0 };int i = 0;int j = 0;int min = 0;printf("请分别输入10个田地的面积\n");for (i = 0; i < 10; i++){scanf("%d", &area[i]);}for (i = 0; i < 9; i++)//排升序(趟数){for (j = 0; j < 9 - i; j++)//两两交换{if (area[j] > area[j + 1]){min = area[j + 1];//将较小的放临时变量中area[j + 1] = area[j];//将两交换位置area[j] = min;//将较小值赋值给较大值}}}for (i = 0; i < 10; i++){printf("%d ", area[i]);}printf("\n");return 0;
}
运行结果:
怎样定义和引用二维数组
前面已经提到,有的问题需要用二维数组来处理。例如3个小分队,每队有6名队友,需要把这些队友的工资用数组保存起来以备查。这就需要用到二维数组(如下图)。如果建立一个数组Pay,它应当是二维的,第一维用来表示第几个分队,第二维用来表示第几个队员。
二维数组通常称为 矩阵 。把二维数组写成行(row)和列(column)的排列形式,可以有助于形象化的理解二维数组的逻辑结构。
怎样定义二维数组
怎样定义二维数组呢? 其基本概念与方法和一维数组相似。如:
例如: float a[3][4],b[5][10];
C语言对二维数组采用这样的定义方式,使得二维数组可以被看作一种特殊的一维数组:它的元素又是一个一维数组。例如可以把a看作一个一维数组,它有3个元素:a[0],a[1],a[2],每个元素又是一个包含4元素的一维数组,如图所示
我们可以把a[0],a[1], a[2]看成三个一维数组的名字。上面定义的二维数组可以理解为定义了3个一维数组,即相当于:float a[0][4],a[1][4],a[2][4] 此处把a[0],a[1],a[2]看作一维数组名。C语言的这种处理方法在数组初始化和用指针表示时显得很方便,这在以后的使用中各位会经常体会到。
二维数组在内存中存放的顺序
C语言中,二维数组中元素排放的顺序是按行存放的,即在内存中先顺序存放第一行的元素,接着存放第2行的元素。如下图所示:

怎样引用二维数组
二维数组元素的表示形式为:
二维数组的初始化
- 分行给二维数组赋初始值。 这种赋初始值的方式比较直观,把第一个花括号内的数据给第1行的元素,第2个花括号内的值给第2行的元素。例如:
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
- 可以将所有数据写在一个花括号内,按数组元素在内存中的排列顺序对各元素赋初始值。例如:
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12,};
- 可以对部分元素赋初始值,例如:
int a[3][4] = {{1},{5},{9}};
二维数组程序举例
例题:有一个3 * 4的矩阵,要求编写程序求出求字最大的那个元素的值,以及其所在的行号和列号。
int main()
{int arr[3][4] = { {1,2,3,4},{5,55,7,8},{9,55,11,12} };int i = 0;int j = 0;int max = 0;//最大值int col = 0;//列坐标int row = 0;//行坐标for (i = 0; i < 3; i++){for (j = 0; j < 4; j++){if (max < arr[i][j])//将数组中的每一个元素和它进行比较找出最大的{max = arr[i][j];row = i;col = j;}}}printf("row = %d col = %d max = %d \n", row,col,max);return 0;
}
运行结果:

结语:今天的内容就到这里吧,谢谢各位的观看,如果有讲的不好的地方也请各位多多指出,作者每一条评论都会读的,谢谢各位。
相关文章:
【C语言】利用数组处理批量数据(一维数组和二维数组)
前言:在前面学习的程序中使用的变量都属于基本类型,例如整型、字符型、浮点型数据,这些都是简单的数据类型。对于简单的问题,使用这些简单的数据类型就可以了。但是对于有些需要处理的数据,只用以上简单的数据类型是不够的&#x…...
WPF中, 如何将控件的触发事件绑定到ViewModel
在DataGrid 等控件中, 有很多这种带闪电符号的触发事件. 如果用传统的事件驱动, 则直接在后台中建立 一个private PropertyChanged(Sender s, EventAgars Args) 即可. 但是如果需要绑定到ViewModel的话? 应该怎么做? 带闪电符号的触发事件 实现viewModel绑定前端触发事件的…...
解决Qt msvc编译器 中文显示乱码问题
第一步:代码文件选择用utf8编码带bom。第二步:在有中文汉字的代码文件顶部加一行(一般是cpp文件) #pragma execution_character_set(“utf-8”) 可以考虑放在head.h中,然后需要的地方就引入head头文件就行,…...
JAVA面经整理(7)
一)什么是AQS? 1)AQS也被称之为是抽象同步队列,它是JUC包底下的多个组件的底层实现,Lock,CountDownLatch和Semphore底层都使用到了AQS AQS的核心思想就是给予一个等待队列和同步状态来实现的,它的内部使用一个先进先出…...
CentOS7使用技巧
1、防火墙相关 关闭防火墙 systemctl stop firewalld 关闭防火墙开机自启 systemctl disable firewalld.service 查看防火墙状态 systemctl status firewalld...
Nature Machine Intelligence | “化学元素知识+功能提示”双驱动,探索分子预测新方法
论文题目:Knowledge graph-enhanced molecular contrastive learning with functional prompt 论文链接:https://doi.org/10.1038/s42256-023-00654-0 项目地址:GitHub - HICAI-ZJU/KANO: Code and data for the Nature Machine Intelligence…...
CppCheck静态代码检查工具教程【Windows和Linux端】
目录 1、背景 2、特性介绍 2.1、检查结果 2.2、检查范围 2.3、支持的检查规则(列举一些): 2.4、自定义规则 3、linux 端 4、windows 端 1、背景 最近调研了几款 c/c 代码静态检查工具,包括 cppcheck、cpplint、cppdepend、splint、ts…...
W25Q128芯片手册精读
文章目录 前言1. 概述2. 特性3. 封装类型和引脚配置3.1 8焊盘WSON 8x6 mm3.2其他封装 4. 引脚描述4.1 片选4.2 串行数据输入输出4.3 写保护4.4 保持脚4.5 时钟 5. 块图6. 功能描述6.1 SPI功能6.1.1 标准SPI6.1.2 双通道SPI6.1.3 四通道SPI6.1.4 保持功能 6.2 写保护6.2.1 写保护…...
QT商业播放器
QT商业播放器 总体架构图 架构优点:解耦,采用生产者消费者设计模式,各个线程各司其职,通过消息队列高效协作 这个项目是一个基于ijkplayer和ffplayer.c的QT商业播放器, 项目有5部分构成: 前端QT用户界面 后端是集成了…...
Python的函数
近期遇到了一个没怎么看懂的Python函数的形式。 def twoSum(self, nums: List[int], target: int) -> List[int]: 后来上网查了资料。...
【物联网】STM32的中断机制不清楚?看这篇文章就足够了
在嵌入式系统中,中断是一种重要的机制,用于处理来自外部设备的异步事件。STM32系列微控制器提供了强大的中断控制器,可以方便地处理各种外部中断和内部中断。本文将详细介绍STM32中断的结构和使用方法。 文章目录 1. 什么叫中断2. 中断优先级…...
深入剖析红黑树:优雅地平衡二叉搜索树
目录 一.红黑树的概念二.插入操作三.与AVL树的比较 一.红黑树的概念 在之前的学习中,我们了解了二叉搜索平衡树,AVL树通过控制每个结点中的平衡因子的绝对值不超过1,实现了一个高性能的树。而相较于AVL的高度平衡,红黑树觉得AVL为…...
C10K问题:高并发模型设计
一、循环服务器模型 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <unistd.h> #include <signal.h> #include <sys/types.h> #include <sys/socket.h> //*******// #include &l…...
哈希/散列--哈希表[思想到结构][==修订版==]
文章目录 1.何为哈希?1.1百度搜索1.2自身理解1.3哈希方法/散列方法1.4哈希冲突/哈希碰撞1.5如何解决?哈希函数的设计 2.闭散列和开散列2.1闭散列/开放定址法2.2开散列/链地址法/开链法1.概念2.容量问题3.字符串问题4.开散列性能测试5.开散列与闭散列比较 3.代码实现[配备详细…...
成都建筑模板批发市场在哪?
成都作为中国西南地区的重要城市,建筑业蓬勃发展,建筑模板作为建筑施工的重要材料之一,在成都也有着广泛的需求。如果您正在寻找成都的建筑模板批发市场,广西贵港市能强优品木业有限公司是一家值得关注的供应商。广西贵港市能强优…...
亨元模式 结构型模式之六
1.定义 享元模式是一种结构型设计模式, 它允许你在消耗少量内存的情况下支持大量对象。 2.滑滑梯问题 在说明亨元模式之前,我们先看看关于滑滑梯的程序设计。小区的楼下只有三个滑滑梯,但是想玩的小朋友却非常多。怎么设计计滑滑梯资源的管理…...
面试题: Spring中Bean的实例化和Bean的初始化有什么区别?
Spring中Bean的实例化和Bean的初始化有什么区别? 背景答案扩展知识什么是实例化什么是初始化 个人评价我的回答 背景 想换工作, 看了图灵周瑜老师的视频想记录一下, 算是学习结果的一个输出. 答案 Spring 在创建一个Bean对象时, 会先创建出一个Java对象, 会通过反射来执行…...
阻塞队列,生产者消费者模型
目标: 1. 认识与使用阻塞队列 2. 认识与实现消费者模型 目录 阻塞队列的特点 生产者消费者模型 生产者消费者模型的优点 阻塞队列实现该模型 阻塞队列的特点 1. 线程安全 2. 带有阻塞特性 (1)如果队列为空,继续出队列&a…...
【RCRL充放电时间相关计算】
一. 基础知识 L、C元件称为“惯性元件”,即电感中的电流、电容器两端的电压,都有一定的“电惯性”,不能突然变化。充放电时间,不光与L、C的容量有关,还与充/放电电路中的电阻R有关。RC电路的时间常数:τRC…...
C++ primer plus--输入、输出和文件
17 输入、输出和文件 17.1 C 输入和输出概述 C 把输入和输出看做字节流。输入时,程序从输入流中抽取字节;输出时,程序将字节插到输出流中。 缓冲区是内存中的临时存储区域,是程序与文件或其他 I/O 设备之间的桥梁。 17.2 使用…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
FFmpeg avformat_open_input函数分析
函数内部的总体流程如下: avformat_open_input 精简后的代码如下: int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...
嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...
Linux基础开发工具——vim工具
文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…...
深入理解 React 样式方案
React 的样式方案较多,在应用开发初期,开发者需要根据项目业务具体情况选择对应样式方案。React 样式方案主要有: 1. 内联样式 2. module css 3. css in js 4. tailwind css 这些方案中,均有各自的优势和缺点。 1. 方案优劣势 1. 内联样式: 简单直观,适合动态样式和…...



