10min快速回顾C++语法

Posted timerring

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了10min快速回顾C++语法相关的知识,希望对你有一定的参考价值。

⭐写在前面的话:本系列文章旨在短时间内回顾C/C++语法中的重点与易错点,巩固算法竞赛与写题过程中常用的语法知识,精准地解决学过但有遗忘的情况,为算法刷题打下坚实的基础。

C++的语法基础(四)

七、数组

7.1 一维数组

7.1.1 数组的定义

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

这里需要注意的一点是:

  • main函数内部定义的数组会放在栈空间内,而(本地编译器)栈空间默认为1M,因此如果数组开的过大后,超过栈空间的容量,会报错TLE。
  • 为了避免这种现象,需要将数组定义在全局(main函数外部),这样是保存在堆空间内。基本没有限制。

栈通常是用来运行指令的,堆用来存储数据。

#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;

7.1.2 数组的初始化
  • 在main函数内部,未初始化的数组中的元素是随机的。
  • 而main函数外部,未初始化的数组中的元素全是0。

堆中的空间不会真的开辟出来,申请数组之后,用的时候用一块内存开一块,会提前标记为0,形成零页,使用时再进行赋值。

#include <iostream>
#include <algorithm>

using namespace std;

int main()

int a[3] = 0, 1, 2; // 含有3个元素的数组,元素分别是0, 1, 2
int 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;

7.1.3 访问数组元素

通过下标访问数组。

  • 数组下标从0开始。
  • 注意数组访问最好不要越界,越界就有可能报错"Segmentation Fault"。
#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;

7.2 程序练习

练习题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;
fot(int i = 0;i<n;i++)cin>>a[i];
while(k--)

int t =a[n-1];
for(int i =n-2;i>=0;i--)
a[i+1] = a[i];
a[0] = t;

for(int i = 0;i<n;i++)cout<<a[i]<< ;
return 0;

方法二:

巧妙做法:

10min快速回顾C++语法(四)_C++

#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:计算 22 的 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;

7.3 多维数组

多维数组就是数组的数组。

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;

7.4 程序练习

输入一个 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;


以上是关于10min快速回顾C++语法的主要内容,如果未能解决你的问题,请参考以下文章

10min快速回顾C++语法

算法基础| 高精度算法详解

算法基础| 二分图解及代码模板

算法基础| 差分算法及模板详解

算法基础:差分算法及模板应用

算法基础| 前缀和算法及模板详解