信奥赛一轮CSP初赛知识清单(一)

发布于:2023-01-17 ⋅ 阅读:(448) ⋅ 点赞:(0)

这个清单主要针对一些要参加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换行符的,

好了,今天的干货就到这里,明天继续,拜拜!

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到