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

4.数组与基本数学函数

一、数组

1.概念

数组是存放相同类型对象的容器,数组中存放的对象没有名字,而是要通过其所在的位置访问。数组中的每一个元素都相当于一个普通的变量,可以和普通变量一样进行赋值操作。

数组可以帮助我们批量地处理相同数据类型的相关数据,大大地简化了代码,几乎是我们后续所有学习的基础,是一个非常重要的工具。

数组的大小是固定的,不能随意改变数组的长度。后续我们会学到 STL 为我们提供的 vector 动态数组,它将是可以动态改变长度的。

2.定义数组

数组的声明形如 a[len],其中,a 是数组的名字,len 是数组中元素的个数。在编译时,len 应该是已知的,也就是说,len 应该是一个整型的表达式。通常使用常量或者宏定义,也可以是变量,但一般不建议使用。

unsigned int len1 = 42;
const int len2 = 42;
int a1[len1];
int a2[len2];

注意不能将一个数组直接赋值给另一个数组,只有数组的元素可以进行赋值:

int arr1[3];
int arr2 = arr1;  // 错误
arr2 = arr1;      // 错误

应该尽量将较大的数组定义为全局变量。因为局部变量会被创建在栈区中,过大的数组会爆栈,进而导致 RE(run time error)。如果将数组声明在全局作用域中,就会在堆中创建数组。

3.初始化

(1)直接初始化

如果定义的数组是全局变量,那么将会自动初始化,而局部变量则不会。

int a[2]={0,3};
int a[100]={0};

2.memset初始化

memset可以按字节进行赋值操作,所以需要注意选择的值。

#include <cstring>
memset(a,0,sizeof(dp));

4.访问数组元素

可以通过下标运算符 [] 来访问数组内元素,数组的索引,或者说下标 i n d e x index index (即方括号中的值) 应当满足 0 ≤ i n d e x < l e n 0\leq index<len 0index<len,如果下标越界,则会产生不可预料的后果,如段错误(Segmentation Fault),或者修改预期以外的变量。以一个包含 10 个元素的数组为例,它的索引为 0 到 9,而非 1 到 10。

但在 OI 中,为了使用方便,我们通常会将数组开大一点,不使用数组的第一个元素,从下标 1 开始访问数组元素,并且会多开 10 的空间以防出现一些意外情况。

5.两个简单例子

例 1:从标准输入中读取一个整数 n n n,再读取 n n n 个数,存入数组中。其中, n ≤ 1000 n\leq1000 n1000

#include <iostream>
using namespace std;int arr[1010];// 数组 arr 的下标范围是 [0,1009),但只使用 [1,1000]
int main()
{int n;cin >> n;for (int i = 1; i <= n; i++){cin >> arr[i];}return 0;
}

例 2:求和数组 arr 中的元素,并输出和。满足数组中所有元素的和小于等于 2 31 − 1 2^{31}-1 2311

#include <iostream>
using namespace std;int arr[1010];
int main()
{int n;cin >> n;for (int i = 1; i <= n; i++){cin >> arr[i];}int sum = 0;for (int i = 1; i <= n; i++){sum += arr[i];}cout << sum << endl;return 0;
}

6.多维数组

多维数组的实质是「数组的数组」,即外层数组的元素是数组。一个二维数组需要两个维度来定义:数组的长度和数组内元素的长度。访问二维数组时需要写出两个索引:

int arr[3][4];  // 一个长度为 3 的数组,它的元素是「元素为 int 的长度为的 4 的数组」
arr[2][1] = 1;  // 访问二维数组

我们经常使用嵌套的 for 循环来处理二维数组。

例:从标准输入中读取两个数 n n n m m m,分别表示黑白图片的高与宽,满足 n , m ≤ 1000 n,m\leq 1000 n,m1000。对于接下来的 n n n 行数据,每行有用空格分隔开的 m m m 个数,代表这一位置的亮度值。现在我们读取这张图片,并将其存入二维数组中。

#include <iostream>
using namespace std;const int maxn = 1010;
int pic[maxn][maxn];
int n, m;
int main()
{cin >> n >> m;for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)cin >> pic[i][j];return 0;
}

我们还可以用同样的方式定义三维、四维,以及更高维的数组。

int a[maxn][maxn][maxn];
int b[maxn][maxn][maxn][maxn];

二、常用数学函数

1.pow指数函数

pow 函数可以进行指数运算,格式是pow(a,n),用于计算 a n a^n an 。需要注意的是,pow 函数的返回值类型是 d o u b l e double double,不仅存在精度问题,还无法进行取余操作。所以即便它可以计算很大的数据范围,我们一般都不会使用,后续我们会学习快速幂的写法,彻底淘汰它。

int a = pow(2, 10);//a的值就为1024
int b = 3;
cout << pow(a, 3) <<endl;//输出27

2.absfabs绝对值函数

正数的绝对值为它自己,负数的绝对值为它的相反数。abs函数用来处理整型变量,而fabs函数用来处理浮点型变量。

cout<< abs(-2) <<endl;//2
cout<< fabs(-2.4) <<endl;//2.4
cout<< abs(3) <<endl;//3

3.三角函数

  • 正三角函数:sin正弦函数,cos余弦函数,tan正切函数
  • 反三角函数:asin反正弦函数,acos反余弦函数,atan反正切函数

它们都接受一个双精度浮点数值(指弧度)作为传入的参数,返回的则是对应的数学定义上的三角函数被应用在传入的浮点数值后的结果,类型也是双精度浮点数。

例如,tan(3.1415926535/4)的返回值是1.000000,acos(0.32696)的返回值是1.237711。

4.对数函数

a x = n a^x=n ax=n,则有 l o g a n = x log_an=x logan=x,这个 l o g log log 就是对数函数。

  • e e e 即自然对数为底的对数函数log(x)
  • 以 10 为底的对数函数log10(x)

5.取整函数

  • round(x),对 x x x 进行四舍五入
  • floor(x),对 x x x 进行向下取整
  • ceil(x),对 x x x 进行向上取整
cout << round(2.5) <<endl;//3
cout << floor(2.7) <<endl;//2
cout << ceil(2.1) <<endl;//3

6.sqrt平方根函数

数学库中还有一个平方根函数sqrt,它接受一个双精度浮点数值作为传入的参数,返回的也都是对应的数学定义上的浮点数结果。例如,sqrt(42.25)的结果会是 6.500000 6.500000 6.500000

三、作业

【入门4】数组

相关文章:

4.数组与基本数学函数

一、数组 1.概念 数组是存放相同类型对象的容器&#xff0c;数组中存放的对象没有名字&#xff0c;而是要通过其所在的位置访问。数组中的每一个元素都相当于一个普通的变量&#xff0c;可以和普通变量一样进行赋值操作。 数组可以帮助我们批量地处理相同数据类型的相关数据…...

python与深度学习(十六):CNN和宝可梦模型二

目录 1. 说明2. 宝可梦模型的CNN模型测试2.1 导入相关库2.2 加载模型2.3 设置保存图片的路径2.4 加载图片2.5 数据处理和归一化2.6 对图片进行预测2.7 显示图片 3. 完整代码和显示结果4. 多张图片进行测试的完整代码以及结果 1. 说明 本篇文章是对上篇文章宝可梦模型训练的模型…...

PTA 1030 Travel Plan

个人学习记录&#xff0c;代码难免不尽人意。 A traveler’s map gives the distances between cities along the highways, together with the cost of each highway. Now you are supposed to write a program to help a traveler to decide the shortest path between his/h…...

MFC、Qt、WPF?该用哪个?

MFC、Qt和WPF都是流行的框架和工具&#xff0c;用于开发图形用户界面&#xff08;GUI&#xff09;应用程序。选择哪个框架取决于你的具体需求和偏好。MFC&#xff08;Microsoft Foundation Class&#xff09;是微软提供的框架&#xff0c;使用C编写&#xff0c;主要用于Windows…...

使用logback记录日志

1. Pom引用依赖 <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.11</version> </dependency> 2. logback.xml <?xml version"1.0" encoding"U…...

企业工程项目管理系统源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理) em

​ 工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#…...

【安装】XMind2022XMind2020安装教程(资源)

Xmind是一个制作思维导图很便利的软件。 1.资源链接 Xmind2022: 链接&#xff1a;https://pan.baidu.com/s/1j4DFedxxX2YJ3HBy1-MpHw?pwdxmin 提取码&#xff1a;xmin Xmind2020: 链接&#xff1a;https://pan.baidu.com/s/1wNqMApuy0yoBF2CvpBDpDA?pwdxmin 提取码&#x…...

Windows下QT Creator安装MinGW 32bit编译器

前言 注&#xff1a;本作者是基于FFmpeg开发需要&#xff0c;故在Windows下QT Creator中安装MinGW 32bit编译器&#xff01;其它型号编译器参照此文章基本可以实现&#xff01; 一、下载需要的编译器 1、下载链接 链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/…...

Emacs之解决键值绑定冲突问题(一百二十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…...

瞄准产业应用,大模型加持的深兰科技AI虚拟数字人落地业务场景

伴随ChatGPT的问世&#xff0c;在技术与商业运作上都日渐发展成熟的AI数字人产业正持续升温。 目前的AI数字人不仅拥有超高“颜值”&#xff0c;同时还拥有更为丰富的、细腻的表情和动作。更有甚者&#xff0c;AI数字人已经具备自定义构建知识图谱、自主对话、不断学习成长的能…...

【网络基础进阶之路】基于MGRE多点协议的实战详解

PS&#xff1a;本要求基于华为的eNSP模拟软件进行 具体要求&#xff1a; 完成步骤&#xff1a; 1、根据上述要求&#xff0c;对各路由器进行地址安排&#xff0c;如下图。 2、进入各路由器&#xff0c;对每个端口进行地址设置。 R1路由器设置&#xff1a; ISP路由器设置&…...

Spark、RDD、Hive 、Hadoop-Hive 和传统关系型数据库区别

Hive Hadoop Hive 和传统关系型数据库区别 Spark 概念 基于内存的分布式计算框架 只负责算 不负责存 spark 在离线计算 功能上 类似于mapreduce的作用 MapReduce的缺点 运行速度慢 &#xff08;没有充分利用内存&#xff09;接口比较简单&#xff0c;仅支持Map Reduce功能…...

[运维]python 启用http 文件服务

要在Python中启用HTTP文件服务&#xff0c;您可以使用内置的http.server模块&#xff08;在Python 3中&#xff09;或SimpleHTTPServer模块&#xff08;在Python 2中&#xff09;。 在Python 3中&#xff1a; python -m http.server在Python 2中&#xff1a; python -m Simp…...

electron-builder 打包 exe 异常错误集锦

项目技术 vue-electron vue-router vuex vuex-electron element-ui echarts mysql 打包异常 Error: Unresolved node modules: vue Error: Unresolved node modules: vue at D:\Code\Demo\Vue\Voice\App\node_modules\_app-builder-lib20.44.4app-builder-lib\src\…...

14-5_Qt 5.9 C++开发指南_基于HTTP 协议的网络应用程序

文章目录 1. 实现高层网络操作的类2. 基于HTTP协议的网络文件下载3.源码3.1 可是化UI设计3.2 mainwindow.h3.3 mainwindow.cpp 1. 实现高层网络操作的类 Qt 网络模块提供一些类实现 OSI 7 层网络模型中高层的网络协议&#xff0c;如 HTTP、FTP、SNMP等&#xff0c;这些类主要是…...

Kotlin委托

委托 委托 代理 方法内的成员永远拿不到thisRef&#xff1a;官方委托和自定义委托-》方法里面没办法使用反射 委托只能类委托和属性委托 Kotlin委托 本文链接&#xff1a;https://blog.csdn.net/feather_wch/article/details/132095759 类委托 1、类委托 委托的是接口的方…...

分布式协议与算法——CAP理论、ACID理论、BASE理论

CAP理论 CAP理论&#xff0c;对分布式系统的特性做了高度抽象&#xff0c;比如抽象成了一致性、可用性和分区容错性&#xff0c;并对特性间的冲突&#xff08;也就是CAP不可能三角&#xff09;做了总结。 CAP三指标 CAP理论对分布式系统的特性做了高度抽象&#xff0c;形成了…...

接口测试 Jmeter 接口测试 —— 请求 Headers 与传参方式

一、 背景&#xff1a; 在使用 Jmeter 进行接口测试时&#xff0c;有些小伙伴不知道 Headers 和请求参数 (Parameters&#xff0c;Body Data) 的联系&#xff0c;本文主要讲 Content-Type 为 application/x-www-form-urlencoded 和 application/json 的场景。 1、使用 Parame…...

【redis】redis部署1主2从3哨兵demo搭建示例

redis版本为7&#xff0c;搭建的架构为1主2从3哨兵的架构。本文是对搭建的过程做一个回忆&#xff0c;过程可能遗漏了某些步骤&#xff0c;见谅。 首先&#xff0c;需要有一个已经安装了的redis。我们从redis源码目录中&#xff0c;找到一个redis.conf文件&#xff0c;这个文件…...

C++数据结构之平衡二叉搜索树(一)——AVL的实现(zig-zag/左右双旋/3+4重构)

目录 00.BBST——平衡二叉搜索树01.AVL树02.AVL的插入2.1单旋——zig 与 zag2.2插入节点后的单旋实例2.3手玩小样例2.4双旋实例2.5小结 03.AVL的删除3.1单旋删除3.2双旋删除3.3小结 04.34重构05.综合评价AVL5.1优点5.2缺点 00.BBST——平衡二叉搜索树 本文是介绍众多平衡二叉搜…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...

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

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