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

news/2024/11/19 18:23:52/

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

  • 引言
  • 一、一维数值数组
    • 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;
}

在这里插入图片描述


http://www.ppmy.cn/news/89135.html

相关文章

Shell运维实战2-条件判断与函数

目录 Shell 条件测试与比较脚本条件测试文本测试表达式字符串测试表达式整数二元比较操作符逻辑操作符区别总结 if 语句Shell 函数基础执行 Shell 条件测试与比较 脚本条件测试 # -f判断文件是否存在&#xff0c;如果存在返回真&#xff0c;反之为假 # 一下结构类似于三元运算…

C Primer Plus第六章编程练习答案

学完C语言之后&#xff0c;我就去阅读《C Primer Plus》这本经典的C语言书籍&#xff0c;对每一章的编程练习题都做了相关的解答&#xff0c;仅仅代表着我个人的解答思路&#xff0c;如有错误&#xff0c;请各位大佬帮忙点出&#xff01; 1.编写一个程序&#xff0c;创建一个包…

28所示范性微电子院校占地面积排名,中山大学第一!

01中山大学13725 中山大学简称中大&#xff0c;现有广州、珠海和深圳三校区五校园&#xff0c;占地面积共计13725亩。1924年&#xff0c;孙中山亲手将广州地区多所高校整合创立国立广东大学。1926年定名为国立中山大学。如今该校由1952年院系调整后分设的中山大学和中山医科大学…

C++【实现AVL树】

文章目录 一、AVL树的概念及性能二、AVL树结点的创建三、AVL树的插入四、四种旋转&#xff08;1&#xff09;LL-左单旋&#xff08;2&#xff09;RR-右单旋&#xff08;3&#xff09;LR-左右旋&#xff08;4&#xff09;RL-右左旋 五、判断AVL树六、测试结果七、源代码(1) AVL_…

电源大师课-初阶

第一课 电源系统构成和基础原理 1-电源效率 总的Pout除以Pin 2-输出电压调整率 源调整率(输入电压变化时&#xff0c;输出稳定程度) 负载调整率(输出负载变化时&#xff0c;输出稳定度) 温度调整率(工作环境温度在极限情况下&#xff0c;输出的稳定度) 3-纹波测试(20MHz、最…

Day52【动态规划】300.最长递增子序列、674.最长连续递增序列、718.最长重复子数组

300.最长递增子序列 力扣题目链接/文章讲解 视频讲解 1、确定 dp 数组下标及值含义 本题中&#xff0c;正确定义dp数组的含义十分重要 dp[i]&#xff1a;下标 i 表示以 nums[i] 结尾的最长递增子序列&#xff0c;dp[i] 的值表示该子序列长度的 2、确定递推公式 要求 d…

【Flutter 工程】003-钩子函数:Flutter Hooks

【Flutter 工程】003-钩子函数&#xff1a;Flutter Hooks 文章目录 【Flutter 工程】003-钩子函数&#xff1a;Flutter Hooks一、概述1、前言2、Flutter Hooks 概述 二、useState 基本使用0、计数器官方 demo1、安装 flutter_hooks2、代码改造3、运行结果4、神奇的事情 三、使用…

HTTP中 Connection: keep-Alive与TCP中中keepalive有什么区别?

有小伙伴不明白keep-Alive和keepalive有什么区别&#xff1f;今天写这篇文章详细讲清楚&#xff01; HTTP是请求响应模型也就是客户端发起了请求&#xff0c;服务端才会返回响应&#xff0c;一来一回。 由于 HTTP 是基于 TCP 传输协议实现的&#xff0c;客户端与服务端要进行 H…