C++考研复试学习小结
CCgicol Lv1

C++考研复试小结

主要总结一些专用于考研的C++的知识,由于本人主要使用的语言不是C++所以这里只针对考研复试应试要求,不做过深的探讨。

本人编程基础,大学学的人工智能,python精通,C,C++都有课程,都学过一学期,但是长时间不用导致很多遗忘,加上之前学的也不咋地,这里做的类似复习,内容简短但是够用,看完应该可以做到刷leetcode的程度。

本文主要使用代码块加注释块的方式书写,主要看相关注释的解释,看懂代码基本就学会了C++的最基础部分。

需要的链接:

B站相关教程:本文主要参考的就是这个视频。

菜鸟教程:基础的操作这边都有,将初级教程看完就可以,高级的部分不需要看。

C++编译器网站:用这个网站可以学习这些基础的操作。

Cppreference:最全文档,啥都有,Cpp的百科全书。

变量的输入与输出

变量

定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
using namespace std;

int main()
{
int a;
a = 1; //整数类的数,可以定义与赋值不是在同一条语句内完成,也可以类似下面的同一条语句完成定义。
float b = 3.145643; //小数类的数,如果给整数类赋值小数的话会产生舍入。
char c = 'C'; //字符类的变量,通常一个字符,需要用单引号括起来
string d = "Hello World"; //字符串类的变量,用双引号括起来
bool e = true; //布尔类的变量,true false两种类行,输出时为1 or 0

cout << "a = "<< a << endl; //在运行符号前一般需要空格来让代码阅读更为流畅。
cout << "b = "<< b << endl;
cout << "c = "<< c << endl;
cout << "d = "<< d << endl;
cout << "e = "<< e << endl;

int f = 10,g = 100; //同一行可以定义多个变量,用英文逗号隔开

const int h = 100; //只读变量不可以做修改

auto i = "sadsad";
auto j = 70;
auto k = false //auto可以代表所有的数据类型。一般不使用
return 0;
}

运算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;

int main()
{
int a = 10;
int b = 3;
int c = a/b; //完成+-*/的相关运算,除法这个有个小特例,会有一个类型转换,就是舍入的一个过程
cout << c <<endl;

int a = 10;
float b = 3;
float c = a/b; //当c是float类型时,a与b中只要有一个是float类型就可以得到float类型的结果,当ab全是int时,即使c是float类型,返回的结果也是int
cout << c <<endl;
printf("%.2f",c); //保留两位小数 printf函数的相关特性
int d = a%b; //取余操作

char e = 'e';
char f = e+1;
cout << f; //char型变量有ASCII码的对应值,加减可以得到上下浮动的字符。

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;

int main()
{
string a = "50";
string b = "100000";
cout << a+b <<endl; //这种属于字符串的相加减,与正常运算不符,字符串延长,输出是“50100000”,正确输出需要强制类行转换。
int aa = stoi(a);
int bb = stoi(b); //强制类行转换函数。
cout << aa+bb <<endl; //可以正确输出

string aaa = to_string(aa);
string bbb = to_string(bb);
cout << aaa+bbb <<endl; //使用to_string函数完成从其他类型到字符串类型的转换
}

标准输出流(cout)

1
2
3
4
5
6
7
8
#include <iostream>
using namespace std;

int main( )
{
char str[] = "Hello C++";
cout << "Value of str is : " << str << endl; //可以实现连续打印,流插入运算符 << 在一个语句中可以多次使用,如上面实例中所示,endl 用于在行末添加一个换行符。
}

标准输入流(cin)

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;

int main( )
{
char name[50];
int age;

cout << "请输入: ";
cin >> name >> age; //流提取运算符 >> 在一个语句中可以多次使用,如果要求输入多个数据,回车或者空格都可以实现连续输入。

}

循环语句与判断语句

if判断语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
using namespace std;

int main()
{
int score;
cin >> score;
if(score>100 || score < 0){ // ||或运算符 &&且运算符 !=非运算符
cout << "输入异常";
}
else if(score == 100){ // 双等号才是判断语句,单个等号是赋值语句
cout << "满分";
}
else if(score >= 80){ //判断语句是层层判断,中间有一个符合就在此中断,所以不用担心100也>=80的情况,但是在写代码的时候需要注意相关流程。
cout << "优秀";
}
else if(score >= 60){
cout << "及格";
}
else{ // 最后这个判断不需要if
cout << "不及格";
}

return 0;
}

while循环

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
using namespace std;

int main()
{
int a = 1;
while(a<=8){
if (a == -1 && b == -1)break; //break是终止最靠近的那一层的循环的代码,终止代码可以在客户端用ctrl+c来完成。
cout << a++ <<endl; //a++是先使用再++,而++a是先加再使用a
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;


int main()
{
int N;
cin >> N; //循环控制变量,控制循环次数
int backup = N;
float sum = 0; //最后求平均值时需要float类型,全局变量,在循环前进行定义
while(N){
float a; //局部变量,只在循环内生效,定义成float型方便对sum进行累加
cin >> a;
sum += a; //每次对sum进行累加
N--; //循环控制,while生效是>=1,减到0时则完成,可以再做优化,让N--直接写到while内,就是while(N--)同样可以实现这个功能。边界判断这块看下文。
};
cout<<sum/backup<<endl;

return 0;
}

for循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;

int main()
{
int N;
cin >> N;
for (int i = 1;i<N;i++){ //for循环标准格式与python类似,需要对变量类型进行相关的定义。相关语句都可以修改,第一块是对初值进行修改,第二块是判断修改,第三块是自增修改,这三块都可以做相关的修改。
if(i&2==0)continue; //直接进入下一个循环,本次循环后面的语句不再执行
cout <<i<<endl;
}

return 0;
}

do while循环(不常用)

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
using namespace std;

int main()
{
int N = 3;
do{ //每次先进入循环运行,无论是否满足条件都会进入循环一次。
cout << N << endl;
}while(N--); //记得加分号
return 0;
}

边界判断问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;

int main()
{
int N = 3;
while(--N){ //每次先对N-1再进行循环判断,判断为0则不进入循环,所以输出的时候不会有0。
cout << N << endl; //输出为:2,1
}

int M = 3;
while(M--){ //每次先判断M是否>0,再进入循环,然后再对M-1运行循环内语句,这样输出会有0。
cout << M << endl; //输出为:2,1,0
}

int j = 3;
do{ //每次先进入循环运行,无论是否满足条件都会进入循环一次。
cout << N << endl; //输出为:3,2,1,0
}while(j--);
return 0;

}

字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
using namespace std;

int main()
{
string s1 = "asdasc"; //字符串的定义加减什么的在变量那节有讲。
cout << s1.size() << endl; //.size()函数可以求出字符串的长度。
if(s1.empty())cout<<"空"; //empty()函数可以返回字符串是否为空,进入判断语句中做判断。
else cout <<"非空";
cout << s1[2] <<endl; //索引方式进行输出,输出第3个字符,字符下标从0开始。
int pos = s1.find("d"); //找到对应的子串,字符串匹配,kmp算法。找不到返回-1,找到第一个匹配得到的子串的下标。
cout << pos << endl;

s1.replace(0,2,"k"); //字符串替换,左闭右开,0,2是替换0,1这俩下标的子串,用后面的替换
cout << s1 << endl;

string s2;
s2 = s1.substr(0,2); //字符串提取,参数是0是代表起始下标,2代表从0开始后面几个字符,把这些元素提取到字符串s2中。超出范围的话从起始下标截取全部子串。
cout << s2 <<endl;



return 0;

}
 请作者喝杯茶
微信支付
微信收款二维码
支付宝
支付宝收款二维码