【013】C++数组之一维数值数组和二维数值数组

一维数值数组和二维数值数组

  • 引言
  • 一、一维数值数组
    • 1.1、概念
    • 1.2、一维数值数组的定义
    • 1.3、一维数值数组的初始化
    • 1.4、一维数值数组的元素操作
    • 1.5、使用示例
  • 二、二维数值数组
    • 2.1、概述
    • 2.2、二维数值数组的初始化
    • 2.3、二维数值数组的元素操作
    • 2.4、使用示例
  • 总结

引言


💡 作者简介:专注于C/C++高性能程序设计和开发,理论与代码实践结合,让世界没有难学的技术。包括C/C++、Linux、MySQL、Redis、TCP/IP、协程、网络编程等。
👉
🎖️ CSDN实力新星,社区专家博主
👉
🔔 专栏介绍:从零到c++精通的学习之路。内容包括C++基础编程、中级编程、高级编程;掌握各个知识点。
👉
🔔 专栏地址:C++从零开始到精通
👉
🔔 博客主页:https://blog.csdn.net/Long_xu


🔔 上一篇:【011】

一、一维数值数组

1.1、概念

用一段连续的空间存放相同类型的变量,这样的容器(结构)叫做数组。

在C++中,一维数值数组是一种由相同类型的元素组成的线性数据结构。每个元素都可以通过下标访问,并且所有元素按照它们在数组中出现的顺序排列。

在C++中声明一维数值数组的语法如下:

type arrayName[arraySize];

其中,type表示数组元素类型,arrayName为数组名称,arraySize表示数组大小。

例如,可以声明一个包含5个整型元素的一维数值数组:

int arr[5];

这将创建一个名为arr的整型数组,其大小为5。我们可以通过下标访问每个元素,例如:

arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
arr[4] = 50;

这样就把1到5分别赋值给了这个整型数组的前五个元素。
在这里插入图片描述

需要注意的是,在C++中数组下标从0开始而不是从1开始。也就是说,第一个元素对应下标0,第二个对应下标1,以此类推。

1.2、一维数值数组的定义

步骤:

  1. 数组名和 [] 表示数组。
  2. 将数组的个数放入[]中。
  3. 用元素类型定义一个变量。

数组的大小定义时必须指定,并且不可更改。

以下是定义一维数值数组的示例代码:

int arr[5]; // 定义一个包含5个整型元素的数组
float floatArr[10]; // 定义一个包含10个单精度浮点型元素的数组
double doubleArr[] = {1.2, 3.4, 5.6, 7.8}; // 不指定数组大小,直接用花括号赋值
char charArr[100] = "Hello World"; // 定义一个包含100个字符元素的数组,并初始化为字符串"Hello World"

以上示例中,第一个和第二个示例分别定义了一个整型和单精度浮点型的一维数值数组。第三个示例使用了花括号对数组进行初始化,编译器会自动计算出该数组大小为4。最后一个示例定义了一个包含100个字符元素的一维字符数组,并将其初始化为字符串"Hello World"。

需要注意的是,在定义一维数值数组时,如果未对其进行初始化,则其中每个元素都将被默认初始化为其类型的默认值。例如,对于整型而言,默认值为0。

在这里插入图片描述

1.3、一维数值数组的初始化

(1)全部元素初始化。

int arr[5]={10,20,30,40,50};

如果数组的全部元素都初始化,可以省略[]的数值。如果省略[]中的数字,数组元素个数就由初始化元素个数确定,例如:

int arr[]={10,20,30};// 三个元素

(2)部分元素初始化。未初始化的部分自动补0。

int arr[5]={10,20,30};//10,20,30,0,0

(3)建议将数组的所有元素初始化为0。

int arr[5]={0};// 将第一个元素初始化为0,其他元素自动补0

(4)指定元素初始化。

int arr[5]={[1]=10,[3]=20};// 0,10,0,20,0

1.4、一维数值数组的元素操作

在数组中,每个元素都是按照顺序编号的,并且可以通过下标访问它们。以下是一些常用的一维数组元素操作:

  1. 定义数组。定义一个包含n个元素的整型数组arr,可以使用如下代码:
int arr[n];
  1. 初始化数组。定义数组之后,可以对其进行初始化。有两种方式:
  • 手动初始化:依次给每个元素赋值。
int arr[5] = {1, 2, 3, 4, 5};
  • 自动初始化:如果只给部分元素赋值,则未赋值的元素会自动被初始化为0。
int arr[5] = {1, 2}; // 前两个元素为1和2,后三个元素自动初始化为0
  1. 访问数组元素

可以使用下标(从0开始)访问数组中指定位置的元素。

int a = arr[0]; // 访问第一个元素
arr[3] = 10;    // 将第四个元素赋值为10
  1. 获取数组长度

使用sizeof运算符可获取整个数组占用内存大小(单位为字节)。若要获取实际包含的数据量,需要将总字节数除以单个数据类型所占字节数。

int len = sizeof(arr) / sizeof(int); // 数组长度为5
  1. 遍历数组

可以使用for循环遍历整个数组。

for (int i = 0; i < n; i++) {
    cout << arr[i] << endl;
}

1.5、使用示例

从键盘中输入10个int数,求这10个数的最大值和最小值。

#include <iostream>
using namespace std;

int main()
{
	int arr[10];
	int n=sizeof(arr)/sizeof(arr[0]);
	int i=0;
	cout<<"请输入"<<n<<"个数值:";
	for(i=0;i<n;i++)
	{
		cin>>arr[i];
	}
	// 求最大值和最小值
	int min,max;
	min=max=arr[0];
	for(i=1;i<n;i++)
	{
		if(max<arr[i])
			max=arr[i];
		if(min>arr[i])
			min=arr[i];
	}
	cout<<"最大值:"<<max<<", 最小值:"<<min<<endl;
	return 0;
}

二、二维数值数组

2.1、概述

C++中的二维数组是一个由多个一维数组组成的矩阵结构,可以用来表示表格、图像等具有二维结构的数据。在二维数组中,每个元素都需要使用两个下标来确定其位置。例如,arr[i][j]表示第i行第j列的元素。
在这里插入图片描述
二维数值数组的特性:

  • 二维数组的总大小 = 行数 * 列数 * 每个元素的大小。即sizeof(arr)。
  • 行数=sizeof(arr)/sizeof(arr[0])。
  • 列数=sizeof(arr[0])/sizeof(arr[0][0])。

定义一个包含n行m列的整型二维数组arr,可以使用如下代码:

int arr[n][m];

2.2、二维数值数组的初始化

(1)分段初始化。

// 完全初始化
int arr[3][4]={{1,2,3,4},{1,2,3,4},{1,2,3,4}};
// 完全初始化也可以省略行数
int arr2[][4]={{1,2,3,4},{1,2,3,4},{1,2,3,4}};
// 部分初始化
int arr3[3][4]={{1,2,3},{1,2},{0}};

(2)连续初始化。

// 完全初始化
int arr[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
// 完全初始化也可以省略行数
int arr2[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
// 部分初始化,其他自动补零
int arr[3][4]={1,2,3,4,5,6,7};

(3)从另一个角度上看,与一维数组类似,也可以分为手动或自动初始化一个二维数组。

  • 手动初始化:需要按行依次给每个元素赋值。
int arr[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
  • 自动初始化:如果只给部分元素赋值,则未赋值的元素会自动被初始化为0。
int arr[3][4] = {{1, 2}, {5}, {9}}; // 部分元素被赋值为非零值,其他自动初始化为0

2.3、二维数值数组的元素操作

  1. 访问二维数组元素。可以使用两个下标(从0开始)访问二位数组中指定位置的元素。
int a = arr[0][0]; // 访问第一行第一列的元素
arr[1][2] = 10;    // 将第二行第三列的元素赋值为10
  1. 获取二维数组的大小。可以使用sizeof运算符获取整个二维数组占用内存大小。要获取实际包含数据量,需要将总字节数除以单个数据类型所占字节数。
int size = sizeof(arr) / sizeof(int); // 数组大小为 n * m * sizeof(int)
  1. 遍历二维数组。可以使用双重循环遍历整个二维数组。
for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        cout << arr[i][j] << " ";
    }
    cout << endl;
}

2.4、使用示例

统计学生中每个人的平均成绩。
在这里插入图片描述

#include <iostream>
using namespace std;

int main()
{
	int arr[5][4]={
		{56,75,78,89},
		{89,98,76,67},
		{88,99,77,66},
		{67,78,89,90},
		{98,97,96,95}
	};
	int row=sizeof(arr)/sizeof(arr[0]);
	int col=sizeof(arr[0])/sizeof(arr[0][0]);

	int i=0,j=0;
	for(i=0;i<row;i++)
	{
		float sum=0.0f;
		for(j=0;j<col;j++)
		{
			sum+=arr[i][j];
		}
		cout<<"student "<<i+1<<" 的成绩总分:"<<sum<<endl;
		cout<<"student "<<i+1<<" 的成绩平均分:"<<sum/col<<endl;
	}
	return 0;
}

总结

C++中的数组是一种常用的数据结构,可以用来存储和操作多个相同类型的变量。在C++中,一维数组和二维数组是最常见的两种数组类型。

  1. 一维数组

一维数组是由一个固定长度的、连续的、相同类型的元素序列组成。它可以表示向量、字符串等单行单列的数据集合。

  • 定义:使用数据类型和元素个数定义一个数组。
int arr[5]; // 定义包含5个整型元素的一维数组
  • 初始化:手动或自动初始化一个数组。
int arr[5] = {1, 2, 3, 4, 5}; // 手动初始化
int arr[5] = {};              // 自动初始化为0
  • 访问:使用下标访问指定位置的元素。
int a = arr[0];    // 获取第一个元素
arr[1] = 10;       // 将第二个元素赋值为10
  • 遍历:使用循环遍历整个数组。
for (int i = 0; i < n; i++) {
    cout << arr[i] << " ";
}
  1. 二维数组

二维数组是由固定大小、连续的、相同类型的元素序列组成,它可以表示矩阵、表格等具有行列结构的数据集合。

  • 定义:使用数据类型和行列数定义一个二维数组。
int arr[3][4]; // 定义包含3行4列整型元素的二维数组
  • 初始化:手动或自动初始化一个二维数组。
int arr[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; // 手动初始化
int arr[3][4] = {};                                           // 自动初始化为0
  • 访问:使用两个下标访问指定位置的元素。
int a = arr[0][0];    // 获取第一行第一列的元素
arr[1][2] = 10;       // 将第二行第三列的元素赋值为10
  • 遍历:使用双重循环遍历整个二维数组。
for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        cout << arr[i][j] << " ";
    }
    cout << endl;
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows 安装 GCC

文章目录 GCC 是什么&#xff1f;GCC 和 gcc 什么关系&#xff1f;Windows 安装 GCC选型下载安装配置环境变量验证 参考文献 GCC 是什么&#xff1f; GCC&#xff08;GNU Compiler Collection&#xff09;是一个开源的编译器套件&#xff0c;由 GNU 项目开发和维护。 GNU 编译…

讯飞星火_VS_文心一言

获得讯飞星火认知大模型体验授权&#xff0c;第一时间来测试一下效果&#xff0c;使用申请手机号登录后&#xff0c;需要同意讯飞SparkDesk体验规则&#xff0c;如下图所示&#xff1a; 同意之后就可以进行体验了&#xff0c;界面如下&#xff1a; 讯飞星火效果体验 以下Promp…

数据结构【链表】看完还怕拿不下链表?

✨Blog&#xff1a;&#x1f970;不会敲代码的小张:)&#x1f970; &#x1f251;推荐专栏&#xff1a;C语言&#x1f92a;、Cpp&#x1f636;‍&#x1f32b;️、数据结构初阶&#x1f480; &#x1f4bd;座右铭&#xff1a;“記住&#xff0c;每一天都是一個新的開始&#x1…

“饶派杯”XCTF车联网安全挑战赛战队巡礼!

2023年5月31日&#xff0c;“饶派杯” XCTF车联网安全挑战赛将于江西省上饶市重磅开赛。本届大赛由江西省委网信办、江西省工信厅、上饶市人民政府主办&#xff0c;旨在深入贯彻落实国家网络强国和交通强国战略部署&#xff0c;推动智能网联汽车技术与产业发展、加快该领域人才…

React项目搭建

一、项目搭建&#xff08;不采用vite方式&#xff09; 使用create-react-app生成项目 npx create-react-app pc 进入根目录 cd pc 启动项目 npm start 调整项目目录结构 /src/assets 项目资源文件&#xff0c;比如&#xff0c;图片 等/components 通用组件/pag…

详细分析置换算法

对于操作系统而言&#xff0c;虚拟空间是非常大的&#xff0c;我们往往无法直接将如此大的空间装入内存&#xff0c;而即使我们采用多级页表与段页式存储即使&#xff0c;也仅仅只是节省了页表的大小&#xff0c;如此将如何多的物理页装进内存仍然是一个问题&#xff0c;为此科…

【MySQL学习】MySQL表的复合查询

文章目录 前言一、案例准备二、基本查询三、多表查询四、子查询4.1 单行子查询4.2 多行子查询4.3 多列子查询4.4 FROM子句中的子查询4.5 合并查询4.5.1 UNION4.5.2 UNION ALL 五、自连接六、内外连接6.1 内连接6.2 外连接6.2.1 左外连接6.2.2 右外连接 前言 对MySQL表的基本查…

【容器化应用程序设计和开发】2.7 云原生开发工具和框架

2.7 云原生开发工具和框架 今天我们就简单来讲一下云原生下用到的开发工具和一些基本的框架。云原生开发工具和框架是为了支持现代化的应用程序开发&#xff0c;能够简化云原生应用程序的构建、部署、管理和维护。下面是一些常见的云原生开发工具和框架&#xff1a; Kubernetes…

为什么别人家的ChatGPT比我家的更聪明?

文章目录 引子使用技巧技巧1&#xff1a;使用分隔符技巧2&#xff1a;结构化输出技巧3&#xff1a;整理操作步骤技巧4&#xff1a;做示范技巧5&#xff1a;给定具体的步骤技巧6&#xff1a;生成摘要技巧7&#xff1a;情感分析 好问题的三要素总结 引子 你有没有发现&#xff0…

python+Django音乐播放器网站系统0tr3w

音乐网站系统的后台开发目标是以信息管理系统的管理和开发方法&#xff0c;用目前现有的新技术进行系统开发&#xff0c;提供后台管理员高度友好的界面操作以及迅捷的信息处理。而前台的开发目标是以用户的需求作为主导&#xff0c;提供对用户而言非常友好的界面操作环境以及完…

2023年第十五届B题电工杯初步解题思路

第十五届“中国电机工程学会杯”全国大学生 电工数学建模竞赛题目 B题 人工智能对大学生学习影响的评价 人工智能简称AI&#xff0c;最初由麦卡锡、明斯基等科学家于1956年在美国达特茅斯学院开会研讨时提出。 2016年&#xff0c;人工智能AlphaGo 4:1战胜韩国围棋高手李世石…

(学习日记)AD学习 #2

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

航空公司预订票数学建模论文

航空公司预订票数学建模论文篇1 试谈机票订票模型与求解 一、概述 1. 问题背景描述 在激烈的市场竞争中&#xff0c;航空公司为争取更多的客源而开展的一个优质服务项目是预订票业务,本模型针对预订票业务&#xff0c;建立二元规划订票方案&#xff0c;既考虑航空公司的利润最大…

利用qsort排序

一、简单排序10个元素的一维数组 #define _CRT_SECURE_NO_WARNINGS #pragma warning(disable:6031) #include<stdio.h> #include<stdlib.h> void print_arr(int arr[], int sz) {int i 0;for (i 0; i < sz; i){printf("%d ", arr[i]);}printf("…

开源赋能 普惠未来|QUICKPOOL诚邀您参与2023开放原子全球开源峰会

QUICKPOOL算力调度系统的诞生和发展&#xff0c;为广大的算力领域从业者和技术开发者&#xff0c;提供了一条中国技术路线&#xff0c;并与IBM LSF、SLURM、PBS、SGE等产品&#xff0c;共同助力全球算力发展。QUICKPOOL算力调度系统成熟、稳定&#xff0c;具备“超算&智算”…

服务高可用保障:服务限流,Nginx实现服务限流

一、前言 1.1什么是限流&#xff1f; 限流存在于高可用服务中。 用于高可用的保护手段&#xff0c;主要包括&#xff1a;缓存&#xff0c;降级&#xff0c;限流 限流&#xff1a;只允许指定的事件进入系统&#xff0c;超过的部分将被拒绝服务&#xff0c;排队或者降级处理。 …

国内行业垂直型SaaS公司有哪些?发展前景如何?

01 国内行业垂直型SaaS公司有哪些&#xff1f; 根据艾瑞咨询测算&#xff0c;2021年中国企业级应用软件市场规模达到2592亿元&#xff0c;SaaS在其中占比达到28.1%。 在企业数字化转型的全景图中&#xff0c;SaaS扮演着应用场景层面的关键作用&#xff0c;往往是企业特定环节数…

ChatGPT系列学习(1)transformer基本原理讲解

文章目录 1. 简介1.1. 发展史 2. Transformer 整体结构3. 名词解释3.1. token 4. transformer输入4.1. 单词 Embedding4.2. 位置Embedding4.3. Transformer Embedding层实现 5. Attention结构5.1. 简介5.2. Self Attention&#xff08;自注意力机制&#xff09;5.2.1. 简介5.2.…

mysql 库的操作

文章目录 mysql 库的操作1. 创建数据库创建数据库案例 2. 字符集和校验规则查看系统默认的字符集合校验规则查看数据库支持的字符集查看数据库支持的字符集较验规则校验规则对数据库的影响 3. 操作数据库查看数据库显示创建语句修改数据库删除数据库查看数据库连接情况 mysql 库…

uniapp内使用 mescroll

前言 在使用uniapp开发项目的过程中&#xff0c;在很多场景里都需要下拉刷新和上拉加载&#xff0c;而 mescroll.js 则是一个非常精致的下拉刷新和上拉加载 js 框架。 官网地址&#xff1a;mescroll 介绍 mescroll.js 是在 H5端 运行的下拉刷新和上拉加载插件&#xff0c;时…