第一至五阶段必备知识点

xiamingdong 2024-11-22 17:19:27

第一阶段知识点整理

万能头文件:
#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.区分大小写,例如Aa是两个不同的变量名。

数据存储范围:

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+308308位)

 



5. cin  输入

cin 格式  :    cin>>变量1>>变量2>>变量3>>...>>变量n;



6. 写程序步骤:

①写程序结构

②分析有几个输入

③定义输入变量

④写cin输入值

⑤计算(没有计算跳过此步骤)

⑥输出结果








7. char  字符类型

常见字符asc码值:'a'  值97     'A' 值65   '0' 值48

大写加32变小写;小写减32变大写

字符加数字结果是:数字。将这个结果放入整形变量,整形变量存数字。将结果放入字符变量,字符变量存符号。


8. 不同数据类型变量之间的赋值转换

char 类型可以赋值给intint类型可以赋值给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

2fabs( ); //求双精度浮点数绝对值

        例如 :double a  = -1.2;

        double b = fabs(a);//求小数的绝对值 此时b的值1.2

3 labs(  ); //求长整型绝对值

        例如:long long a = -111;

        long long b = labs(a);//求长整形绝对值 b的值是111

4floor(  ); //向下取整

        例如 double a = 1.2;

        int b = floor(a);//向下取整  b的值是1

5ceil( );//向上取整 

        例如:double a = 1.2;

        int b = ceil(a);//向上取整  b的值是2

6sqrt( );//平方根

        例如 double a = 25;

        double b = sqrt(a);//求平方根 b的值是5

7pow( );//次方

        例如: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。


5. 计数器定义在循环上面,初始为0
int num = 0;
循环里面:num = num+1;
循环结束输出num。

6. 最大值变量定义在循环上面,初始为0
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); // 输出文件