当前位置: 首页 > news >正文

【C语言】利用数组处理批量数据(一维数组和二维数组)

前言:在前面学习的程序中使用的变量都属于基本类型,例如整型、字符型、浮点型数据,这些都是简单的数据类型。对于简单的问题,使用这些简单的数据类型就可以了。但是对于有些需要处理的数据,只用以上简单的数据类型是不够的,难以反映出数据的特点,也难以有效的进行处理。


💖 博主CSDN主页:卫卫卫的个人主页 💞
👉 专栏分类:C程序设计谭浩强版本 👈
💯代码仓库:卫卫周大胖的学习日记💫
💪关注博主和博主一起学习!一起努力!这里是引用


目录

    • 怎样定义和引用一维数据
      • 怎样定义一维数组
      • 怎样引用一维数组
    • 一维数组的初始化
      • 一维数组程序举例
    • 怎样定义和引用二维数组
      • 怎样定义二维数组
      • 二维数组在内存中存放的顺序
      • 怎样引用二维数组
      • 二维数组的初始化
      • 二维数组程序举例


怎样定义和引用一维数据

  • 一维数组是数组中最简单的,它的元素只需要用数组名加一个下标,就能唯一的地确定。
  • 数组是一组有序数据的集合
  • 数组中的每一个元素都属于同一个数据类型
  • C语言规定用方括号中的数字表示下标,如S[15]表示第15个元素

怎样定义一维数组

要使用数组,必须在程序中先定义数组,即通知计算机:由哪些数据组成数组,数组中有多少元素,属于哪个数据类型。否则计算机不会自动的把一批数据作为数组处理。例如,下面是对数组的定义:

int a[10] ;
它表示定义了一个整型数组, 数组名是a,此数组包含了 10个元素

数组的一般形式为:

类型说明符 数组名[常量表达式]

说明:

  1. 数组名的命名规则和变量名相同,遵循标识符命名规则。
  2. 在定义数组时莫须有指定数组中元素的个数,方括号中的常量表达式用来表示元素的个数,即数组的长度。
  3. 常量表达式中可以包括常量和符号常量,如 int a[3 + 5]是合法的的。
  4. “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;
}

运行结果:
在这里插入图片描述


一维数组的初始化

  1. 在定义数组时对全部数组元素赋予初值。例如:
int a[10] = {0,1,2,3,4,5,6,7,8,9);
  1. 也可只给数组中的一部分元素赋值。例如:
int a[10] = {0,1,2,3,4};
//定义a数组有10个元素,但花括号内只提供5个元素的初始值,
//系统自动给后面5个元素的初始值赋值为0
  1. 如果想一个数组中全部元素为0,可以写成:
int a[10] = {0};
  1. 在对全部数组元素赋初始值时,由于数据的个数已经确定,因此可以不指定数组长度。例如:
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 pay[3][6]
以上定义了一个float类型的二维数组,第1维有3个元素,第2维有6个元素。每一维的长度分别用一对方括号扩起来。 二维数组的一般定义形式如下: 类型说明符 数组名[常量表达式][常量表达式]

例如: 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行的元素。如下图所示:
在这里插入图片描述

怎样引用二维数组

二维数组元素的表示形式为:

数组名[下标][下标]
例如:a[2][3]表示a数组中序号为2的行中序号为3的列元素。下标应是整型表达式,如 a[2 - 1][2 * 2 - 1]形式。 数组元素可以出现在表示中也可以被赋值。

二维数组的初始化

  1. 分行给二维数组赋初始值。 这种赋初始值的方式比较直观,把第一个花括号内的数据给第1行的元素,第2个花括号内的值给第2行的元素。例如:
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
  1. 可以将所有数据写在一个花括号内,按数组元素在内存中的排列顺序对各元素赋初始值。例如:
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12,};
  1. 可以对部分元素赋初始值,例如:
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语言】利用数组处理批量数据(一维数组和二维数组)

前言:在前面学习的程序中使用的变量都属于基本类型&#xff0c;例如整型、字符型、浮点型数据&#xff0c;这些都是简单的数据类型。对于简单的问题&#xff0c;使用这些简单的数据类型就可以了。但是对于有些需要处理的数据&#xff0c;只用以上简单的数据类型是不够的&#x…...

WPF中, 如何将控件的触发事件绑定到ViewModel

在DataGrid 等控件中, 有很多这种带闪电符号的触发事件. 如果用传统的事件驱动, 则直接在后台中建立 一个private PropertyChanged(Sender s, EventAgars Args) 即可. 但是如果需要绑定到ViewModel的话? 应该怎么做? 带闪电符号的触发事件 实现viewModel绑定前端触发事件的…...

解决Qt msvc编译器 中文显示乱码问题

第一步&#xff1a;代码文件选择用utf8编码带bom。第二步&#xff1a;在有中文汉字的代码文件顶部加一行&#xff08;一般是cpp文件&#xff09; #pragma execution_character_set(“utf-8”) 可以考虑放在head.h中&#xff0c;然后需要的地方就引入head头文件就行&#xff0c;…...

JAVA面经整理(7)

一)什么是AQS&#xff1f; 1)AQS也被称之为是抽象同步队列&#xff0c;它是JUC包底下的多个组件的底层实现&#xff0c;Lock&#xff0c;CountDownLatch和Semphore底层都使用到了AQS AQS的核心思想就是给予一个等待队列和同步状态来实现的&#xff0c;它的内部使用一个先进先出…...

CentOS7使用技巧

1、防火墙相关 关闭防火墙 systemctl stop firewalld 关闭防火墙开机自启 systemctl disable firewalld.service 查看防火墙状态 systemctl status firewalld...

Nature Machine Intelligence | “化学元素知识+功能提示”双驱动,探索分子预测新方法

论文题目&#xff1a;Knowledge graph-enhanced molecular contrastive learning with functional prompt 论文链接&#xff1a;https://doi.org/10.1038/s42256-023-00654-0 项目地址&#xff1a;GitHub - HICAI-ZJU/KANO: Code and data for the Nature Machine Intelligence…...

CppCheck静态代码检查工具教程【Windows和Linux端】

目录 1、背景 2、特性介绍 2.1、检查结果 2.2、检查范围 2.3、支持的检查规则&#xff08;列举一些&#xff09;: 2.4、自定义规则 3、linux 端 4、windows 端 1、背景 最近调研了几款 c/c 代码静态检查工具&#xff0c;包括 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商业播放器 总体架构图 架构优点&#xff1a;解耦&#xff0c;采用生产者消费者设计模式&#xff0c;各个线程各司其职&#xff0c;通过消息队列高效协作 这个项目是一个基于ijkplayer和ffplayer.c的QT商业播放器, 项目有5部分构成&#xff1a; 前端QT用户界面 后端是集成了…...

Python的函数

近期遇到了一个没怎么看懂的Python函数的形式。 def twoSum(self, nums: List[int], target: int) -> List[int]: 后来上网查了资料。...

【物联网】STM32的中断机制不清楚?看这篇文章就足够了

在嵌入式系统中&#xff0c;中断是一种重要的机制&#xff0c;用于处理来自外部设备的异步事件。STM32系列微控制器提供了强大的中断控制器&#xff0c;可以方便地处理各种外部中断和内部中断。本文将详细介绍STM32中断的结构和使用方法。 文章目录 1. 什么叫中断2. 中断优先级…...

深入剖析红黑树:优雅地平衡二叉搜索树

目录 一.红黑树的概念二.插入操作三.与AVL树的比较 一.红黑树的概念 在之前的学习中&#xff0c;我们了解了二叉搜索平衡树&#xff0c;AVL树通过控制每个结点中的平衡因子的绝对值不超过1&#xff0c;实现了一个高性能的树。而相较于AVL的高度平衡&#xff0c;红黑树觉得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.代码实现[配备详细…...

成都建筑模板批发市场在哪?

成都作为中国西南地区的重要城市&#xff0c;建筑业蓬勃发展&#xff0c;建筑模板作为建筑施工的重要材料之一&#xff0c;在成都也有着广泛的需求。如果您正在寻找成都的建筑模板批发市场&#xff0c;广西贵港市能强优品木业有限公司是一家值得关注的供应商。广西贵港市能强优…...

亨元模式 结构型模式之六

1.定义 享元模式是一种结构型设计模式&#xff0c; 它允许你在消耗少量内存的情况下支持大量对象。 2.滑滑梯问题 在说明亨元模式之前&#xff0c;我们先看看关于滑滑梯的程序设计。小区的楼下只有三个滑滑梯&#xff0c;但是想玩的小朋友却非常多。怎么设计计滑滑梯资源的管理…...

面试题: Spring中Bean的实例化和Bean的初始化有什么区别?

Spring中Bean的实例化和Bean的初始化有什么区别? 背景答案扩展知识什么是实例化什么是初始化 个人评价我的回答 背景 想换工作, 看了图灵周瑜老师的视频想记录一下, 算是学习结果的一个输出. 答案 Spring 在创建一个Bean对象时, 会先创建出一个Java对象, 会通过反射来执行…...

阻塞队列,生产者消费者模型

目标&#xff1a; 1. 认识与使用阻塞队列 2. 认识与实现消费者模型 目录 阻塞队列的特点 生产者消费者模型 生产者消费者模型的优点 阻塞队列实现该模型 阻塞队列的特点 1. 线程安全 2. 带有阻塞特性 &#xff08;1&#xff09;如果队列为空&#xff0c;继续出队列&a…...

【RCRL充放电时间相关计算】

一. 基础知识 L、C元件称为“惯性元件”&#xff0c;即电感中的电流、电容器两端的电压&#xff0c;都有一定的“电惯性”&#xff0c;不能突然变化。充放电时间&#xff0c;不光与L、C的容量有关&#xff0c;还与充/放电电路中的电阻R有关。RC电路的时间常数&#xff1a;τRC…...

C++ primer plus--输入、输出和文件

17 输入、输出和文件 17.1 C 输入和输出概述 C 把输入和输出看做字节流。输入时&#xff0c;程序从输入流中抽取字节&#xff1b;输出时&#xff0c;程序将字节插到输出流中。 缓冲区是内存中的临时存储区域&#xff0c;是程序与文件或其他 I/O 设备之间的桥梁。 17.2 使用…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

消息队列系统设计与实践全解析

文章目录 &#x1f680; 消息队列系统设计与实践全解析&#x1f50d; 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡&#x1f4a1; 权衡决策框架 1.3 运维复杂度评估&#x1f527; 运维成本降低策略 &#x1f3d7;️ 二、典型架构设计2.1 分布式事务最终一致…...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程

鸿蒙电脑版操作系统来了&#xff0c;很多小伙伴想体验鸿蒙电脑版操作系统&#xff0c;可惜&#xff0c;鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机&#xff0c;来体验大家心心念念的鸿蒙系统啦&#xff01;注意&#xff1a;虚拟…...

虚幻基础:角色旋转

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 移动组件使用控制器所需旋转&#xff1a;组件 使用 控制器旋转将旋转朝向运动&#xff1a;组件 使用 移动方向旋转 控制器旋转和移动旋转 缺点移动旋转&#xff1a;必须移动才能旋转&#xff0c;不移动不旋转控制器…...

【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录

#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…...

【题解-洛谷】P10480 可达性统计

题目&#xff1a;P10480 可达性统计 题目描述 给定一张 N N N 个点 M M M 条边的有向无环图&#xff0c;分别统计从每个点出发能够到达的点的数量。 输入格式 第一行两个整数 N , M N,M N,M&#xff0c;接下来 M M M 行每行两个整数 x , y x,y x,y&#xff0c;表示从 …...