第一阶段知识点整理
万能头文件:#include<bits/stdc++.h>
1. 程序结构
#include<iostream>
using namespace std;
int main() {
return 0;
}
2. cout 输出
cout 格式: cout<<内容1<<内容2<<内容3<<...<<内容n;
如果内容是表达式,输出表达式的结果
如果内容加引号,输出引号内的内容
换行符:endl
3. 五则运算 + - * / %
整数和整数进行加减乘除求余运算结果还是整数
只有整数才能进行求余运算,小数不能进行求余运算
%(模,也叫求余) 第一个数除以第二个数,余下的就是求余结果
运算优先级 * / % 优于 + -
4. 变量定义
格式:类型标识符 变量名1,变量名2,变量名3, ... 变量名n;
常见数据类型 : int(整型) long long(长整型) short(短整型) float(单精度浮点型) double(双精度浮点型) char(字符型)
变量名命名规则:
1.变量名只能由数字,字母,下划线组成。
2.第一个字符不能是数字。
3.不能是c++关键字。即C++中已经定义好的有特殊含义的单词。
4.区分大小写,例如A和a是两个不同的变量名。
数据存储范围:
char:1位 -128 ~ +127
short:5位 -32768 ~ + 32767
int: 10位,21亿多 -2147483648 ~ +2147483647 (21亿多,10位)
long long: 19位 -9223372036854775808 ~ +9223372036854775807 (19位)
float: 38位 -3.4E-38~3.4E+38 (38位)
double: 308位 -1.7E-308~1.7E+308(308位)
5. cin 输入
cin 格式 : cin>>变量1>>变量2>>变量3>>...>>变量n;
6. 写程序步骤:
①写程序结构
②分析有几个输入
③定义输入变量
④写cin输入值
⑤计算(没有计算跳过此步骤)
⑥输出结果
7. char 字符类型
常见字符asc码值:'a' 值97 'A' 值65 '0' 值48
大写加32变小写;小写减32变大写
字符加数字结果是:数字。将这个结果放入整形变量,整形变量存数字。将结果放入字符变量,字符变量存符号。
8. 不同数据类型变量之间的赋值转换
char 类型可以赋值给int,int类型可以赋值给char
int,long long,short值可以赋值给float,double 值不丢失。
float,double 赋值给int,long long,short 小数点后面的会丢弃。
9. 输出固定位数小数 :只能针对小数类型的,整数没有小数点
引入头文件: #include<iomanip>
cout<<fixed<<setprecision(4)<<变量名 组合在一起可以实现输出固定位数
10. 常见数学函数的使用 引入头文件:#include<cmath>
(1) abs( ); //求整数绝对值
例如:int a = -1;
int b = abs(a); //求整数的绝对值, 此时b结果是1
(2)fabs( ); //求双精度浮点数绝对值
例如 :double a = -1.2;
double b = fabs(a);//求小数的绝对值 此时b的值1.2
(3) labs( ); //求长整型绝对值
例如:long long a = -111;
long long b = labs(a);//求长整形绝对值 b的值是111
(4)floor( ); //向下取整
例如 double a = 1.2;
int b = floor(a);//向下取整 b的值是1
(5)ceil( );//向上取整
例如:double a = 1.2;
int b = ceil(a);//向上取整 b的值是2
(6)sqrt( );//求平方根
例如 double a = 25;
double b = sqrt(a);//求平方根 b的值是5
(7)pow( );//求次方
例如:int a=2;
int b = 5;
int c = pow(a,b);//求a的b次方 c的结果是32
11. 自增自减
++放在后先取值,再自加;++放在前先自加,再取值。
--放在后先取值,再自减;--放在前先自减,再取值。
i++; 等价于 i=i+1;
i-- ; 等价于 i=i-1;
12. 复合运算符
s+=i; 等价于s = s+i;
s-=i; 等价于s = s-i;
s*=i; 等价于s = s*i;
s/=i; 等价于s = s/i;
s%=i; 等价于s = s%i;
13. ASC码表:
第二阶段知识点整理
1. 关系运算符 > >= < <= == !=
用关系运算符连接的叫关系表达式(也叫条件)
关系表达式的值是0或者1(也就是false或者true)
其中0等价于false,1等价于true;
在c++语言中将不是0的数字视为true; 例如: if(2) true
2. if的第1种格式:
if(条件) {
语句1;
}
3. if的第2种格式:
if(条件) {
语句1;
} else{
语句2;
}
4. 逻辑运算符
! 取反
&& 和 两边都满足整体才满足
|| 或 有一个满足就满足
5.表示在一段范围内
数字一段范围内条件写成 变量>=开头 && 变量<= 结束
字符在一段范围内也是 变量>=开头字符 && 变量<= 结束字符
(字符可以直接判断,例如判断是否是大写字母)
char a;
cin>>a;
if(a>='A' && a<='Z' ){
语句;
}
6.整除判断
能被整除想到%等于0,不能被整除想到%不等于0。
7. 运算优先级:从上到下
!
> >= < <=
== !=
&&
||
8. if的第三种格式
if(条件1) {
语句1;
} else if(条件2){
语句2;
}else if(条件3){
语句3;
} ...
else if(条件n){
语句n;
}else {
语句n+1;
}
9. switch语句格式:
switch(表达式) {
case 常量表达式1:语句组1;break;
case 常量表达式2:语句组2;break;
......
case 常量表达式n:语句组n;break;
default:语句组n+1;
}
10. 三目运算符
格式: 表达式1 ? 表达式2 : 表达式3
例如:num = a>b? a:b;//求a,b当中的最大值
11. 一个整数n拿到个位,十位,百位的方法
个位 = n%10;
十位 = n%100/10;
百位 = n%1000/100;
12.if嵌套格式:
if(条件1){
if(条件2){
语句2;
}else {
语句3;
}
} else {
if(条件3){
语句4;
}else {
语句5;
}
}
第三阶段知识点整理
1. for循环格式
for循环格式:
for(循环变量初始化;循环条件;循环变量增量){
循环体语句;
}
循环变量初始化:记为第1句话 , 循环从谁开始(开始端)
循环条件:记为第2句话 , 循环到谁结束(结束端条件)
循环变量增量:记为第3句话 , 相邻之间的变化
循环体语句:记为第4句话, 真正的重复的事情。
执行顺序:1243243243.......2 (直到条件2不满足条件退出for循环)
第一句话:可以没有,也可以由多句话用逗号隔开
第二句话:可以没有
第三句话:可以没有,也可以由多句话用逗号隔开
2. 写程序执行步骤的细节
1.赋值语句,等号左边写变量名,右边带入具体的值。
2.条件,直接把变量的值带入,不改变条件
3.变量的值,找最近一次给该变量赋值的语句。
4.遇到数组,数组名不变,下标带入具体的值。
5.遇到输入,假设一个值,然后将这个值赋值给输入变量。
6.遇到输出,直接输出变量中存储的值。
3. 如何尽快有扎实的通过第三阶段:
遇到不会的题目:写程序执行步骤, 写完程序执行步骤之后, 反过来删除代码,重写代码(不要看以前的代码,尽量不看程序执行步骤,卡住的地方,看看执行步骤)
4. 累加和定义在循环上面,初始为0
int sum = 0;
循环里面:sum = sum+值;
循环结束输出sum。
int num = 0;
循环里面:num = num+1;
循环结束输出num。
int max = 0;
循环里面在输入之后每次与max比较:
if(t>max){max=t;
}
循环结束输出max。
4. 变量作用范围: 先找变量定义的地方, 找包含这个定义的花括号 ,从定义的地方到结束的花括号都可以用这个变量 。变量定义在循环里面,包含定义的花括号是for的花括号
5. break : 退出当前循环
6. while循环格式:
while(条件){
语句;
}
条件:记为第1句话
语句:记为第2句话
执行顺序:121212.......1 (直到条件1不满足条件退出while循环)
7. while循环和for循环区别:
for循环知道要循环多少次。
while循环不知道循环多少次。
8. do-while循环格式:
do{
语句;
}while(条件);
语句:记为第1句话
条件:记为第2句话
执行顺序:121212.......2 (直到条件2不满足条件退出while循环)
9. while循环和do-while循环区别:
while循环先执行条件再执行语句。
do-while循环先执行语句再执行条件。
10. 输入n个数:循环n次每循环一次,输入一个值。
找最大值:最大值变量初始值很小
找最小值:最小值变量初始值很大
累加和:累加和变量初始值为0
计数器:计数器变量初始值为0
累乘积:初始值为1
11. 循环嵌套:for,while,do while三个循环可以互相嵌套。
12.先输入n再输入n个数。
int n;
cin>>n;
int x;
for(int i=1;i<=n;i++) {
cin>>x;
}
第四阶段知识点整理
万能头文件:#include<bits/stdc++.h>
1. 数组定义
类型名 数组名[元素个数];
例如:
int a[10];
float f[2];
int b = 20;
int a2;
2. 初始化:
int a[10]={0,1,2,3,4,5,6,7,8,9};
int a3[10] = {1,2} //只有第一、二个格子有值,其他格子没有值
3. 数组的引用 : 数组名[下标]
int a[10]={0,1,2,3,4,5,6,7,8,9};
int b = a[1]*2;//2
cout<<a[8];//8
int i=2;
int c = a[0+1]+a[i++];// 1+2
4. 数组越界
int d = a[10];
int e = a[-2];
5. 数组的下标从0开始到数组长度减一结束。
6. 二维数组定义:
类型 数组名[行的数量][列的数量];
例如
int a[10][10];
float f[2][2];
int b = 20;
int a2;
7. 二维数组初始化:
int a[2][2]={{0,1},{2,3}};
int a2[2][2] = {{0,1},{2}};//第一行两个格子有值,第二行第一个格子有值,第二个格子无
8. 二维数组的引用
数组名[行下标][列下标]
int a[2][2]={{0,1},{2,3}};
int b = a[1][1]*2;
cout<<b; //6
9. 二维数组越界
int d = a[2][3];
int e = a[-2][0];
10. 一直输入直到输入-1作为结束标志
int a[1000];
int in = 0;
int x;
cin>>x;
while(x!=-1){
a[in] = x;
in++;
cin>>x;
}
第五阶段知识点整理
1. 函数定义:
返回类型 函数名(参数列表){
函数体
}
说明:
参数列表相当于已知,是自变量;函数名相当于未知,是因变量
函数名是标识符;主函数名必须是main。
参数列表可以为空;也可以有多个。
返回类型可以是int,double,char等类型;也可以是void类型,无返回参数。
2. 函数调用:
有返回值:例如int a(int n);
a(3);
int b = a(2);
无返回值(void):例如 void print(int c);
print(1);
print(2);
3. 形式参数 实际参数:
#include<iostream>
using namespace std;
int add(int a,int b) { //a,b :形式参数
int v=a+b;
return v;
}
int main() {
int s = add(1,2); //1,2实际参数
cout<<s;
return 0;
}
4. 全局变量:定义在头部,所有函数里面都可以用,默认初始值为0
局部变量,定义在函数内部,只能在该函数内部使用,默认值是随机的。
5. 字符串类型:string。使用字符串类型需要引入头文件#include<string>
string s;
cin>>s;
cout<<s;
字符串长度受内存限制,可以输入中文。
定义并初始化:
string s(“abc”);
string s2(10,’*’);
string s3 = “edf”;
7. 字符类型常见函数说明:
string s=”abc”;
s.append(“de”); //追加内容
//追加内容 使用
s = s+"aa";
s = s+'c';
字符串变量可以直接加字符或者字符串
s.size(); //字符串长度
getline(cin,s);//读取一行内容放入s,可以输入空格,以换行作为输入结束
cout<<s;
string s2 = s.substr(3,2);//截取 第一个参数开始位置,第二个参数长度
s.find(“abc”);//查找子字符串“abc”,找到返回第一次出现的下标,找不到:-1。对于find函数返回值应该用int类型变量接收,不要直接判断,否则容易错误。
int in = s.find("abcc");
// find函数返回值用变量接收,不要直接输出
//cout<<s.find("abc"); //这样容易出错
s.replace(3,2,”aaaa”);//开始位置,长度,替换成的内容
s.insert(3,”bbb”);//开始位置,在开始下标的左边插入内容
s.erase(3,2);//开始位置,删除长度
s.compare(s2);//s大于s2返回大于等于1,相等返回0,小于返回值小于等于-1
8. 字符串可以当做一个字符数组来处理。s.size()就可以得到数组的长度。s[0]就是第一个字符,s[0]相当于一个字符变量。
补充:常用的字符串解题小技巧(“截删找”大法)。
例如:字符串s满足以某一特殊符号或字符或字符串作为其分割点
"a ab abc abcd"分割点为" "。
"a#bb#ccc#ddd"分割点为"#"。
"a=;ab=;abc=;abcd"分割点为"=;"。
可通过“截删找”大法进行操作,由于操作到最后,最后一段会无法截取到,所以会出现需要在循环外单独考虑最后一段这种情况,
为了避免这种情况,对字符串 s 做一下调整,多在后面追加一个分割点: s = s + "分割点":
"a ab abc abcd"变为"a ab abc abcd "。
"a#bb#ccc#ddd"变为"a#bb#ccc#ddd#"。
"a=;ab=;abc=;abcd"变为"a=;ab=;abc=;abcd=;"。
然后 int in = s.find("分割点");
while(in! = -1){
string s1 = s.substr(0, in);//截取每一个分割点前面的内容
s.erase(0, in+1);//将已截取的内容和后面的分割点一起删除
in = s.find("分割点");//重新找下一个分割点的位置,为下一次循环做准备
}
8. struct 结构体名称{
类型 属性1;
类型 属性2;
类型 属性3;
类型 属性4;
...
类型 属性n;
};
struct Student{
string name;
int num;
float china;
float math;
float english;
};
Student是我们自己定义的类型
9. 读取输入文件,输出到输出文件
freopen("input.in", "r", stdin); // 输入文件
freopen("output.out", "w", stdout); // 输出文件