C++学习笔记 数组

news/2024/12/12 10:09:37/文章来源:https://www.cnblogs.com/zydow/p/18601690

1. 一维数组

1.1 数组的定义

数组的定义方式和变量类似。

#include <iostream>
#include <algorithm>using namespace std;int main()
{int a[10], b[10];float f[33];double d[123];char c[21];return 0;
}

1.2 数组的初始化

在main函数内部,未初始化的数组中的元素是随机的。

#include <iostream>
#include <algorithm>using namespace std;int main()
{int a[3] = {0, 1, 2};           // 含有3个元素的数组,元素分别是0, 1, 2int b[] = {0, 1, 1};            // 维度是3的数组int c[5] = {0, 1, 2};           // 等价于c[] = {0, 1, 2, 0, 0}char d[3] = {'a', 'b', 'c'};    // 字符数组的初始化return 0;
}

1.3 访问数组元素

通过下标访问数组。

#include <iostream>
#include <algorithm>using namespace std;int main()
{int a[3] = {0, 1, 2};  // 数组下标从0开始cout << a[0] << ' ' << a[1] << ' ' << a[2] << endl;a[0] = 5;cout << a[0] << endl;return 0;
}

练习题1: 使用数组实现求斐波那契数列的第 N 项。

#include <iostream>
#include <algorithm>using namespace std;int main()
{int n;int f[100];cin >> n;f[0] = 0, f[1] = 1;for (int i = 2; i <= n; i ++ ) f[i] = f[i - 1] + f[i - 2];cout << f[n] << endl;return 0;
}

练习题2:输入一个 n ,再输入 n 个整数。将这 n 个整数逆序输出。

#include <iostream>
#include <algorithm>using namespace std;int main()
{int n;int a[100];cin >> n;for (int i = 0; i < n; i ++ ) cin >> a[i];for (int i = n - 1; i >= 0; i -- ) cout << a[i] << ' ';cout << endl;return 0;
}

练习题3:输入一个 n,再输入 n 个整数。将这个数组顺时针旋转 k(k≤n) 次,最后将结果输出。

旋转一次是指:将最左边的数放到最右边。

#include <iostream>
#include <algorithm>using namespace std;int main()
{int n, k;int a[100];cin >> n >> k;for (int i = 0; i < n; i ++ ) cin >> a[i];reverse(a, a + k);reverse(a + k, a + n);reverse(a, a + n);for (int i = 0; i < n; i ++ ) cout << a[i] << ' ';cout << endl;return 0;
}

练习题4:输入 n 个数,将这 n 个数按从小到大的顺序输出。

#include <iostream>
#include <algorithm>using namespace std;int main()
{int n;int a[100];cin >> n;for (int i = 0; i < n; i ++ ) cin >> a[i];for (int i = 0; i < n; i ++ )for (int j = i + 1; j < n; j ++ )if (a[i] > a[j])swap(a[i], a[j]);for (int i = 0; i < n; i ++ ) cout << a[i] << ' ';cout << endl;return 0;
}

练习题5:计算 2 的 N 次方。N≤10000

#include <iostream>
#include <algorithm>using namespace std;int main()
{int a[10000], size = 1, n;a[0] = 1;cin >> n;while (n -- ){int t = 0;for (int i = 0; i < size; i ++ ){t += a[i] * 2;a[i] = t % 10;t /= 10;}if (t) a[size ++ ] = t;}for (int i = size - 1; i >= 0; i -- ) cout << a[i];cout << endl;return 0;
}
  1. 多维数组
    多维数组就是数组的数组。
int a[3][4]; // 大小为3的数组,每个元素是含有4个整数的数组。int arr[10][20][30] = {0}; // 将所有元素初始化为0
// 大小为10的数组,它的每个元素是含有20个数组的数组
// 这些数组的元素是含有30个整数的数组
#include <iostream>
#include <algorithm>using namespace std;int main()
{int b[3][4] = {         // 三个元素,每个元素都是大小为4的数组{0, 1, 2, 3},       // 第1行的初始值{4, 5, 6, 7},       // 第2行的初始值{8, 9, 10, 11}      // 第3行的初始值};return 0;
}

练习题:输入一个 n 行 m 列的矩阵,从左上角开始将其按回字形的顺序顺时针打印出来。

#include <iostream>
#include <algorithm>using namespace std;int main()
{int n, m;int arr[50][50];cin >> n >> m;for (int i = 0; i < n; i ++ )for (int j = 0; j < m; j ++ )cin >> arr[i][j];bool st[50][50] = {false};int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};int d = 1, x = 0, y = 0;for (int i = 0; i < n * m; i ++ ){int a = x + dx[d], b = y + dy[d];if (a < 0 || a >= n || b < 0 || b >= m || st[a][b]){d = (d + 1) % 4;a = x + dx[d], b = y + dy[d];}cout << arr[x][y] << ' ';st[x][y] = true;x = a, y = b;}cout << endl;return 0;
}

作者:yxc
链接:https://www.acwing.com/file_system/file/content/whole/index/content/3589284/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hex文件格式解析

BIN文件和HEX文件是两种常见的文件格式,尤其在嵌入式系统和软件开发领域有广泛应用。以下是对这两种文件的详细介绍以及它们之间的区别:一、介绍 BIN文件和HEX文件是两种常见的文件格式,尤其在嵌入式系统和软件开发领域有广泛应用。以下是对这两种文件的详细介绍以及它们之间…

升级易优EyouCms到1.6.9时提示“其中失败多少文件,请从升级包目录data--”,如何解决?

在升级易优EyouCms到1.6.9时,如果遇到提示“其中失败多少文件,请从升级包目录data--”的错误,通常是由于目录权限限制或服务器安全软件(如反篡改系统加固)导致的。以下是详细的解决步骤和注意事项,帮助您顺利解决这一问题: 解决步骤:检查目录权限:登录服务器:使用SSH…

php网站前端页面修改,如何更新PHP网站前端页面

更新PHP网站的前端页面是提升用户体验和优化设计的重要步骤。以下是详细的修改步骤:确定需要修改的页面:列出需要更新的页面,如首页、产品页、关于我们页等。备份文件:在进行任何修改之前,请确保备份网站的所有文件和数据库,以防出现问题时能够恢复。编辑HTML文件:找到需…

ServiceMesh 5:异常重试和超时保护提升服务可用性

★ ServiceMesh系列 1 背景 在复杂的互联网场景中,不可避免的会出现请求失败或者超时的情况。 从程序的的响应结果来看,一般是Response返回5xx状态的错误;从用户的角度去看,一般是请求结果不符合预期,即操作失败(如转账失败、下单失败、信息获取不到等)。 偶发的不可避免…

免费领900元鸿蒙先锋权益,抢先体验原生应用焕然一新

华为Mate品牌盛典上正式发布了华为Mate 70系列,用户新机到手即可升级HarmonyOS NEXT并免费领取价值高达900元“鸿蒙有礼”先锋权益,体验焕然一新的鸿蒙原生应用。近日,在华为发布的鸿蒙原生应用创意视频中,生动展现了原生应用的高品质内容体验。此外,原生应用还带来全场景…

转载:【AI系统】模型剪枝

本文将介绍模型剪枝的概念、方法和流程,这是一种通过移除神经网络中的冗余或不重要参数来减小模型规模和提高效率的模型压缩技术。 剪枝不仅可以减少模型的存储和计算需求,还能在保持模型性能的同时提高模型的泛化能力。我们将探讨剪枝的定义、分类、不同阶段的剪枝流程,以及…

转载:【AI系统】训练后量化与部署

本文将会重点介绍训练后量化技术的两种方式:动态和静态方法,将模型权重和激活从浮点数转换为整数,以减少模型大小和加速推理。并以 KL 散度作为例子讲解校准方法和量化粒度控制来平衡模型精度和性能。 训练后量化的方式 训练后量化的方式主要分为动态和静态两种。 动态离线量…

转载:【AI系统】EfficientNet 系列

本文主要介绍 EfficientNet 系列,在之前的文章中,一般都是单独增加图像分辨率或增加网络深度或单独增加网络的宽度,来提高网络的准确率。而在 EfficientNet 系列论文中,会介绍使用网络搜索技术(NAS)去同时探索网络的宽度(width),深度(depth),分辨率(resolution)对模型准确…

转载:【AI系统】轻量级CNN模型新进展

在本文会接着介绍 CNN 模型的小型化,除了第二篇文章提到的三个模型外,在本文会继续介绍 ESPNet 系列,FBNet 系列,EfficientNet 系列和 GhostNet 系列。 ESPNet 系列 ESPNetV1 ESPNet V1:应用在高分辨图像下的语义分割,在计算、内存占用、功耗方面都非常高效。主要贡献在于…

人工智能大语言模型起源篇(一),从哪里开始

序言:许多人最初接触人工智能都是在ChatGPT火热之际,并且大多停留在应用层面。对于希望了解其技术根源的人来说,往往难以找到方向。因此,我们编写了《人工智能大语言模型起源篇》,旨在帮助读者找到正确的学习路径,了解大型语言模型的大致起源。本文将分为三个部分,介绍当…

火焰监测识别摄像机

火焰识别摄像机是一种可以监测环境中火焰的摄像设备,具有广泛的应用场景,包括但不限于工业厂区、商业建筑、森林防火等领域。这种摄像机可以通过对火焰的热辐射进行识别和分析,及时发现火源并采取相应措施,可以有效减少火灾带来的损失,提高安全性和管理效率。火焰识别摄像…

【最优化方法】第六次要点整理

目录拟牛顿法的思想拟牛顿法的条件拟牛顿法的步骤校正矩阵的确定SR1 校正(对称秩 1 校正)DFP 校正BFGS 算法 拟牛顿法的思想 牛顿法的迭代方程为: \[d_k = - (\nabla^2 f(x_k))^{-1} \nabla f(x_k) \]牛顿法的优缺点:优点:局部二阶收敛,速度快。 缺点:每步都要计算 Hess…