C++语法基础
进入该阶段的学些需要完成C语言程序设计的入门。
框架
框架是每一个程序必须要写到的,也是要熟悉的。最基础的就包括一个头文件和一个main
函数:
#include <iostream>
using namespace std;
int main()
{
/* code */
return 0;
}
这就是一个最基础的框架。但是我们进入到后面算法学习会发现这个完全不够还要导入一些库,所以这里就可以记一个比较常用的:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
/* code */
return 0;
}
这一套就已经包含了很多的常用的函数像排序(sort
)一类的。还有一些需要自行导入。有一个常用的万能头也可以省很多事:
#include <bits/stdc++.h>
不推荐去用,毕竟还是自己清楚每一个库更好。
变量的定义及使用
在做题的时候需要定义一些变量。这些变量的定义又是一件很繁琐的事,建议按照题目的变量名来定义这样就不会因为代码里定义的变量太多把思绪打乱。变量的定义可以定义在主函数里面也可以定义在函数外面。定义在主函数里面的就是局部变量而定义在外面的就是全局变量:
#include <iostream>
using namespace std;
int a; // 定义全局变量
int main()
{
int b; // 定义局部变量
return 0;
}
定义在函数外面的变量是可以全局的访问的,定义的一些函数可以用到全局变量。
遇到数据范围很大的题目需要我们用long long
类型来定义我们可以对long long
取个别名。这样就更好写不用写一大坨影响美观:
#include <iostream>
using namespac std;
typedef long long LL; // 将long long简写为LL
LL a;
遇到需要定义数组的题目时一定要把数组的大小定大一点比题目大个10都行,可以用一个常量来当做数组大小:
#include <iostream>
using namespace std;
const int N = 100010;
int a[N];
数组一般都定义在函数外面。
循环及判断
首先我们要搞清楚判断:如果题目的判断条件在2个以内那么我们只需要一个if-else
超过的话我们可以加上else if
:
if (判断条件1)
{
/* code */
}
else if (判断条件2)
{
/* code */
}
else
{
/* code */
}
判断条件的逻辑符:
逻辑运算符 | 意思 | 使用 | |
---|---|---|---|
&& | 与 | 条件A && 条件B | 两个条件必须同时满足 |
|| | 或 | 条件A && 条件B | 两个条件满足一个即可 |
! | 取反 | !条件A | 将条件结果进行取反 |
循环有两个:while
跟for
前者一个条件判断,后者则需要填写3个条件可不写:
while (循环截止条件)
{
/* code */
}
for (初始化; 循环截止条件; 更新)
{
/* code */
}
循环截至条件与if是一样的,但返回的结果为false的时候就会结束循环。
for循环要搞清楚是从1开始还是从0开始
从1开始循环次数为1~n
从0开始循环次数为0~n-1
// 从0开始则不需要取等
for (int i = 0; i < n; i ++ )
{
/* code */
}
// 从1开始需要取到等
for (int i = 1; i <= n; i ++ )
{
/* code */
}
数组的读入与输出也是一样的:
#include <iostream>
using namespace std;
const int N = 100010;
int n;
int a[N];
int main()
{
cin >> n;
// 读入n个数
for (int i = 0; i < n; i ++ ) cin >> a[i];
// 输出
for (int i = 0; i < n; i ++ ) cout << a[i];
return 0;
}
在判断语句中0代表假的意思其他的都代表真。
对于有的题目有多组样例输入可以这样写:
#include <iostream>
using namespace std;
int n;
int main()
{
cin >> n;
while (n -- )
{
/* code */
}
return 0;
}
n--
代表递减每次在自身的基础上减1,n++
反之。遇到死循环需要推出则需要使用到一下命令:
break:推出当前循环
return:结束程序,在找到答案的情况下使用
经典题型
- 统计数组中每个元素出现的次数:
#include <iostream>
using namespace std;
const int N = 1000010;
int n;
int a[N], cnt[N]; // a:存储原数据 cnt:存储出现的次数
int main()
{
cin >> n;
fr (int i = 0; i < n; i ++ )
{
cin >> a[i];
cnt[a[i]] ++;
}
// cnt里面就存着每个数出现的次数
return 0;
}
- 在数组中找最小/最大值:
#include <iostream>
using namespace std;
const int N = 100010;
int n;
int a[N];
int mian()
{
cin >> n;
// 找大的值定小,找小值定大
// max跟min是关键字不能当作变量名
int maxn = 0, minn = 999999;
for (int i = 0; i < n; i ++ )
{
cin >> a[i];
maxn = max(maxn, a[i]); // 找最大
minn = min(minn, a[i]); // 找最小
}
cout << "最大的为: " << maxn << endl;
cout << "最小的为: " << minn << endl;
return 0;
}