这个清单主要针对一些要参加CSP认证的人。这个认证涉及的知识面是非常大的,可以说是只要跟计算机有关的东西,这里都有。我去年也参加过CSP-J初级组的认证,那个题里的代码有时候会有100多行,所以要水平很高。
接下来我用上一轮CSP的经验,为大家整理了一份“干货清单”,可以方便学习。
以下是干货,请查收:
第一部分 数据类型
1.1 整形(int)
整形有两种方式:整形(int),占4字节,可以存到最多9位正负数;在C里表示为“%d”。
超长整形(long long),占8字节,可以存18为正负数。在C里表示为“%lld”。
1.2 实型
实型也有两种:float和double。
float,单精度实行,可存7位小数,占4字节,在C里表示为“%f”。
double,双精度实行,最常用的一个实型,竞赛常用。可存16位小数,占8字节,在C里表示为“%lf”。
1.3 字符型
字符型使用128个ascll编码,用单引号引起一个符号,占1字节。
常用的是char类型,在C里表示为“%c”。注意:+32大写转小写,-32小写转大写。
大A的编码是65,小a是97,0是48 。
1.4 布尔类型
bool,表示真假的类型(1或0,true或false),一般用来打标记,判断有没有符合条件,占1字节。
1.5 强制类型转换
一般形式是:(类型)(表达式),一般用于前后类型不一致时的数据转换。
他并没有对变量产生影响,只是通过临时转换产生一个新的值。
1.6 字符输入输出
gets(),puts(),getchar(),putchar()。
注意:gets()在noip是被禁用的。
第二部分 语法
2.1 顺序结构
从上往下,按照
2.2 选择结构
一般有两个分支,成立或不成立。常用语句有if()_else和switch()_case :break_default:。
这里会用到关系运算符(双目运算符),比如>=、<=等。
还会用到3个逻辑符号:&&与(两边全是满足的才为真),||或(两边一个满足就为真,比如我给你个苹果,前提是你做完工作或者干了家务),!非(相反的,是1就转成0)。
注意,选择结构语句可以互相嵌套。比如if套if,switch套switch等。
还有一种特殊的三目运算符:(表达式)?(成立操作):(不成立操作)。
2.3 循环结构
循环用于需要执行重复操作时,常用语句有for(),while(),do while()。
2.3.1 for()循环
基本格式:for(int i=初始值;判断结束的条件;i++正序/i--逆序)
表达式
应用于确定循环次数的场景。
2.3.2 while()循环
基本格式:
while(结束条件) 表达式
while是一种变相的死循环(while(1)),应用于不知道循环次数的场景。
2.3.3 do-while
基本格式:do
表达式
while(结束条件)
这个循环会先执行一次,在判断是否满足条件。
循环结构之间也是可以嵌套的,注意嵌套循环里的循环变量名字不能一样。
循环的中断也有两种:break和continue。
break直接结束所有循环,continue则是跳出当前这一次循环。
第三部分 数组
一维数组
把一串数照顺序排成一条线,基本格式是 数组名[数组的存储单元编号],定义为 类型 数组名[存储单元数量]。一位数组存储单元编号从0开始。数组的访问一般与循环结合。一维数组只用一个循环,遍历一条线。
那么数组怎么赋初值?
数组的初始化有3种:
1,int a[大小]={需要给每个单元赋的值},这个方法被称为“打表”。
2,在程序里初始化
3,memset
格式:memset(数组名,初始化的字符或数字,初始化长度(一般用sizeof()取到数组内存的范围))。这个语句省地方,但是时间复杂度大。注意memset只能把数组初始化为全0和全-1,或者0x7f这样很大的数。不过当你用memset给数组初始化为int的极限范围——0x7fffffff时,你的数组实际上的值是-1。这里有一个特性:如果你使用循环来赋这个值,那你的数组初始值就是这个极限值。
如果是多个数组清零,最好用for,因为memset运行的次数比for多了好几倍。
还有一个冷知识:当你在using namespace std外面定义数组时,他是每个函数都能用的,而当你把它定义在函数内,那他只能在这一个函数里用。
第四部分 字符串
4.1 基本知识
单个字符的输入可以用getchar,这个函数的作用是跟scanf一样的,他什么符号都读,比如
空格和换行。输出单个字符则是可以用putchar。注意只能输出单个字符。想输出整个字符串就得用puts。
那连续的多个字符呢?
这里就要用到字符串了。可以这么理解:字符串就是放了一堆字符的一个数组。但是它的元素要用单引号括起来。字符串在结尾处有个“\0”结束符,所以实际上能存的位置比全部位置少一个。
字符串的赋值要用到一个函数:strcpy()(string copy,拷贝字符串)。
基本格式:strcpy(接收数据方,发送数据方)。
还有一些特性:字符串常量不能赋值给一个变量,而且用双引号括起来的一个字符占两个字节。
4.2 表示形式
1,C表示的字符串,是指最后一位是“\0”的字符数组,通过字符指针管理。
2,C++的string类,直接用string 数组名来生成一个字符串。
4.3 函数
下面整理的是字符数组和字符串相关的函数:
1,memset(数组名,初始值,sizeof 数组名)
2,strlen(数组名) 计算数组的长度
3,strcmp(数组1,数组2) 比较大小
4,strlwr(数组名,下标)对应位置大写转小写
5,strupr(数组名,下标)对应位置小写转大写
6.strcat(数组1,数组2)或strcat(数组1,数组2,连接位置) 链接字符串
7.strstr(数组1,数组2)返回数组1中数组2首次出现的位置
8.getline(cin,字符串) 读入空格和回车的读入方式,注意是位于string类里的
9.字符串.size() 求字符串长度
10.s.empty()判断字符串是否为空
11,s.insert(字符串,字符串) 插入字符串
12,s.substr(字符串,字符串) 截取字符串
13.s.erase(字符串,长度) 删除对应长度的字符串
14.s.replace(字符串,位置) 替换当前位置字符串
15.s.find(字符串,位置) 在对应位置找到字符串
16.s.c_str() 返回一个C字符数组的临时指针
还有:字符数组可以很多种输出,但是string字符串除了单个字符输出,只能用cout。,而且输入不能用gets,只能用getline来读全部字符。这里还有一个特性:puts是自带endl换行符的,
好了,今天的干货就到这里,明天继续,拜拜!