第一阶段: 刷题 基础学过:灌输,笔记(纸质) 考级:前四章都刷完了,做考级的题(90分以上) 第二阶段:数据结构部分(概念、题型、答题架构) 挑题做题 第三阶段:算法部分(背) 9月初赛过了,10月份复赛【9-10专门练算法】 -------- 程序的基本概念: 标识符(变量名):定义规则。通常会考cin、cout、scanf、printf能否做标识符,可以。 关键字:https://noicode.online/a/jichuyufa/20240504/112.html 常量: const 代表不能改变 const int a=5; #define a 5; 预处理a,值为5,不能改变 变量: 字符串: char c[10] string 末尾有'\0' 不占位 字符数组函数 字符串函数 char c[5]="hello"; //报错,'\0'占位 表达式:操作数和运算符组合的公式,可以计算出一个值(不限类型) 编辑:在编辑器中写代码的过程 编译:将源代码转化成机器语言或字节码(让计算机能够执行) 解释:python、javascript这些事解释型语言,自带翻译,自己解释之后,电脑就能执行了 调试:观察程序执行的过程,内存和变量的状态。 -------- 基本数据类型:整数、小数、字符、布尔 字节数: int 4Byte=32bit long long 8Byte=64bit float 4B double 8B char 1B [ascii码表:背0~9,A~Z,a~z]:https://noicode.online/a/jichuyufa/20240511/233.html bool 1B 值只有true和false 类型转换: 隐式: int a=5; double b=a;//自动转 bool c=a; int d=c; cout<<d;//1 显式:强制类型转换 double d=10.5; int i=(int)(d);//正统 int i=(int)d; int i=int(d); int i=static_cast<int>(d); 如果大区间转小区间,可能会数据丢失 long long d; int a=d;//内存空间不足,可能会丢失 double d; long long b=d;//double存在整数区和小数区,long long没有小数区,所以小数部分会丢失。 字符型在使用进行数学运算时,以ascii值进行计算 char c='a';//97 cout<<c*2;//194 ------- cin>>a; cin>>a>>b;//空格隔开 string s; cin>>s;//输入的第一个单词存放,空格后面的会忽略 getline(cin,s);//整行获取,包括空格 输入一个十六进制的数据,将它转换成十进制再输出 int num; cin>>hex>>num;//直接接收16进制数据进行转换。 cout<<num; hex代表基数是16进制 dec代表10进制 oct代表8进制 ------- cout 输出的内容一定是c++本身认识的 struct node{ int age; }; node a; a.age=10; cout<<a;//报错,node类型cout不认识 cout<<a.age; endl//换行 fixed//显示小数 setprecision(n)//保留精度 setw(n)//设置最小宽度 int a=10; cout<<setw(5)<<a;// 10 int b=123456789; cout<<setw(5)<<b;//123456789 如何让cout认识结构体类型 struct node{ int age; //重载运算符<< friend ostream& operator<<(ostream& os,const node& p){ return os<<p.age; } }; node a; cout<<a;//不报错 -------- scanf int a; //语法:scanf("输入的格式",赋值的位置); scanf("%d",&a);//已知需要输入的是整数,然后将输入的内容存入a的地址中 //%d 代表整数 &a 代表a的地址 double a,b; scanf("%lf %lf",&a,&b); //%lf 代表double //%ld 代表long long,%f 代表float,%c 代表char,%s代表char[] scanf使用时,前面的类型要与后面输入的一致 输入两个整数(用,隔开),输出他们的和 int a,b; scanf("%d,%d",&a,&b); cout<<a+b; 输入人名a喜欢地名b,格式为"a like b",输出"a come from b" lilei like china lilei come from china char c[1000],d[1000]; scanf("%s like %s",c,d);//因为数组名即地址,所以不需要& printf("%s come from %s",c,d); char c[1000]; scanf("%s",c);//i love china cout<<c;//i scanf("%999[^\n]",c);//i love china cout<<c;//i love china -------- printf 格式化输出 printf("格式化输出",变量);//不需要& "格式" %[标记][长度][.精度]字母 标记: 空格(默认) 0 填充0 + 显示正负符号 - 左对齐 printf("%8d",99);//" 99" printf("% 8d",99);//" 99" printf("%08d",99);//"00000099" printf("%+8d",99);//" +99" printf("%-8d",99);//"99 " 长度:代表的是最小宽度 .精度:代表保留多少位小数,需要跟%f或%lf搭配 printf("%.6lf",1.234);//1.234000 因为scanf和printf均是c语言功能,string是c++语言功能,所以正常情况下无法搭配使用 string s="hello world"; printf("%s",s);//不行,可能乱码 printf("%s",s.c_str());//正常输出 将字符串转换成字符数组 因为实际竞赛中,数据量较大,超过10万次的输入或输出,可能会导致程序超时。 默认情况下,scanf和printf的速度远高于cin和cout ------- 复合语句:指{}括起来的内容 涉及到可以使用的范围(作用域) { int a=10; { cout<<a;//10 int b=5; } cout<<b;//报错 } for(int i=0;i<5;i++){ cout<<i;//01234 } cout<<i;//报错 如果只有一行语句(以;结尾),可以省略{} int x=10,y=20,z=30; if(x>50) y=z;z=x; cout<<x<<y<<z;//10 20 10 因为if后面没有{},所以复合语句为{y=z;} int x=10,y=20,z=30; if(x>50){ y=z; } z=x; cout<<x<<y<<z;//10 20 10 ------ 赋值语句 名 = 值 从右往左读,将值赋值给名 赋值符号:= += -= *= /= %= &= |= ^= <<= >>= a%=b;//a=a%b; a&=b;//a=a&b; a>>=b;//a=a>>b; & | ^ << >> 二进制位运算【后面再详细学习】 赋值链 int b,c; b=c=5;//将5赋值给c,将c的值赋值给b ------ 条件语句 if(值){} else if(值){} else{} 条件不一定要bool类型 if(1){//正确 cout<<"hahaha"; } if(a=10){ } switch(值){ case 1: case 2: ... default: } switch通常会有case与break的搭配的使用方式,但是break并不是必须代码。 switch与if的区别 速度:switch(坐电梯) 远高于 if(走楼梯) 使用场景:if可以进行复杂的区间判断或逻辑判断,switch只能判断值 执行过程:if符合某一个条件执行完会退出条件结构,switch匹配值以后有穿透效果,直到遇到break或执行完。 ------- 循环结构 for while 没有任何区别的,可以任意替换 循环次数0~无数次 for(1;2;3) 1 2 3均可以省略,其中如果2省略,代表死循环 while(条件) 条件不可以省略 通常循环会与continue(跳过)和break(跳出)搭配使用 int i=0; do{ cout<<i; i++; }while(i<10); do-while:循环次数1~无数次 在迭代数据或循环次数固定时,for更方便 循环次数受条件影响时,用while更方便 ------- 有哪些运算符: 赋值运算符 自增自减 算术运算符 逻辑运算符 比较运算符 成员访问运算符 a.b a[b] *a &a a->b a->*b a.*b 其他运算符 a?b:c a,b a() 运算符的优先级 -------- https://noicode.online 注册会员,把会员账号发给我 目前刷题数:24,每天30 54,84,114,144,174,204 |