初赛知识点合集
信竞赛事
IOI
汉名「国际信息学奥林匹克竞赛」。
首届 IOI 于 1989 年 5 月在保加利亚布拉维茨举办,第 12 届即 IOI 2000 在中国北京举行。
NOI
1984 年,邓希贤同志注4 提出「计算机的普及要从娃娃抓起」。当年 CCF 举办「全国青少年程序设计竞赛」,1989 年改名「全国青少年信息学奥林匹克竞赛」。
NOIP
「全国青少年信息学奥林匹克联赛」,自 1995 年至今。
CSP-J/S
「CCF非专业级软件能力认证」,创办于 2019 年,分为入门级和提高级。
计算机历史与组成
历史
- 第一台通用计算机: ENIAC(电子数值积分计算机,美国,1946 年)
- 第一位程序猿: Ada Lovelace(阿达·洛芙莱斯,英国)
- 计算机科学之父: Alan Turing(艾伦·图灵,英国)
- 计算机之父: John von Neumann(约翰·冯·诺依曼,美籍匈牙利)
- 计算机领域最高奖项: 图灵奖。姚期智(原美籍华人,现为中国国籍)获 2000 年图灵奖。
- 计算机发展
分代 | 时间 | 组成 |
---|---|---|
第一代 | 1946 年 | 电子管 |
第二代 | 1959 年 | 晶体管 |
第三代 | 1965 年 | 集成电路 |
第四代 | 1971 年 | 大规模、超大规模集成电路 |
计算机系统
- 计算机系统: 硬件系统 + 软件系统
- 冯·诺依曼结构(普林斯顿结构): 采用二进制逻辑、程序存储执行以及计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备)。
计算机硬件
- 中央处理单元(CPU): 运算器、控制器和少量存储器(寄存器、缓存)组成,是负责计算机运算、控制的核心部件。
- 随机存取内存(RAM): 可以随机读写,断电易失。
- 只读内存(ROM): 只能读取,不能写入,断电不丢失。
计算机软件
计算机软件,程序、资源文件、配置等的集合,分为操作系统、应用软件等种类。
操作系统: Microsoft Windows、UNIX(-like)、Linux、DOS 等。
计算机使用
文件系统
文件系统是计算机资源组织的方法。
常见的文件系统有 FAT*、NTFS、ext* 等。
- 文件(File): 资源管理的基本单位。
- 路径(Path): 指示文件的标识。
- 目录(Directory): 一种特殊的文件,记录了其他文件(包括目录)的索引。
Linux 使用
「Linux 系统」指使用 Linux Kernel 作为内核的一类操作系统。
Linux Kernel 由 Linus Benedict Torvalds(林纳斯·本纳第克特·托瓦兹,芬兰)由 1991 年首次发布,是一个「开源」软件。
文件系统
Linux 的文件系统将计算机的各种资源进行统一管理。
Linux 的文件系统呈树形结构,各个文件组成结点。
树根对应的文件(目录)叫做「根目录」,使用 /
表示。
一个文件的绝对路径为根节点到它所经过所有节点名称拼接(使用 /
间隔)。
(由此可见,一个绝对路径对应的文件是唯一的)
外壳程序
外壳程序(Shell)是 Linux 用户和系统内核之间的主要交互接口,ShellScript 是用户操作 shell 的语言。
SS 分为执行语句与流程控制语句,其中,执行语句符合以下格式(EBNF描述):
object = path | function
argument_list = [argument_list], argument
input_redirect_operator = ["0"], "<"
output_redirect_operator = ["1"|"2"], (">"|">>")
output_redirect = output_redirect_operator, path
input_redirect = input_redirect_operator, path
redirect = [output_redirect], input_redirect | output_redirect, [input_redirect]
here_document = "<<", ["-"], ("'", terminal_symbol, "'" | terminal_symbol)
here_document_redirect = [here_document], output_redirect | [output_redirect], here_document
command = object, [argument_list]
command_line = command, [[redirect], ["|", command_line] | here_document_redirect, ["|", command_line], context, terminal_symbol]
即类似以下格式:
prog a1 a2 ... > output < input | other_prog ...
流程控制语句
不考
常用指令
cat
用途: 连接并输出文件。
使用: cat [选项]... [文件]...
选项:
-n
显示行号
-E
在换行处\n
输出一个&\n
-T
在制表处\t
输出一个^I
-v
在控制字符(除了\n
)处输出其逸出序列
--version
显示版本
--help
显示帮助
用例:
a 文件
#include <stdio.h> int main (void) { puts("Hello world!");
b 文件
return 0; }
运行
cat a b
输出#include <stdio.h> int main (void) { puts("Hello world!"); return 0; }
cd
用途: 更改工作目录。
使用: cd [选项]... [路径]
选项:
-L
解链接
附录
ASCII 码表
控制字符
十六进制 | 十进制 | 逸出序列 |
转义表示 | 缩写 | 意义 注3 |
---|---|---|---|---|---|
00 |
000 |
^@ |
\0 |
NUL |
空字符 |
01 |
001 |
^A |
SOH |
标题开始 | |
02 |
002 |
^B |
STX |
报文开始 | |
03 |
003 |
^C |
ETX |
报文结束 | |
04 |
004 |
^D |
EOT |
传输结束 | |
05 |
005 |
^E |
ENQ |
请求 | |
06 |
006 |
^F |
ACK |
确认回复 | |
07 |
007 |
^G |
\a |
BEL |
振铃 |
08 |
008 |
^H |
\b |
BS |
退格 |
09 |
009 |
^I |
\v |
HT |
水平制表 |
0A |
010 |
^J |
\n |
LF |
换行 |
0B |
011 |
^K |
\t |
VT |
纵向制表 |
0C |
012 |
^L |
\f |
FF |
换页 |
0D |
013 |
^M |
\r |
CR |
回车 |
0E |
014 |
^N |
SO |
取消变换 | |
0F |
015 |
^O |
SI |
启用变换 | |
10 |
016 |
^P |
DLE |
跳出设备通讯 | |
11 |
017 |
^Q |
DC1 |
设备控制 1 | |
12 |
018 |
^R |
DC2 |
设备控制 2 | |
13 |
019 |
^S |
DC3 |
设备控制 3 | |
14 |
020 |
^T |
DC4 |
设备控制 4 | |
15 |
021 |
^U |
NAK |
确认失败回复 | |
16 |
022 |
^V |
SYN |
同步空闲 | |
17 |
023 |
^W |
ETB |
块传输结束 | |
18 |
024 |
^X |
CAN |
取消 | |
19 |
025 |
^Y |
EM |
连接介质中断 | |
1A |
026 |
^Z |
SUB |
替换 | |
1B |
027 |
^[ |
\e 注2 |
ESC |
逸出 |
1C |
028 |
^\ |
FS |
文件分割 | |
1D |
029 |
^] |
GS |
组分割 | |
1E |
030 |
^^ |
RS |
记录分割 | |
1F |
031 |
^_ |
US |
用户分割 | |
7F |
127 |
^? |
DEL |
删除 |
可打印字符
十六进制 | 十进制 | 字符 | 十六进制 | 十进制 | 字符 |
---|---|---|---|---|---|
20 |
032 |
|
50 |
080 |
P |
21 |
033 |
! |
51 |
081 |
Q |
22 |
034 |
" |
52 |
082 |
R |
23 |
035 |
# |
53 |
083 |
S |
24 |
036 |
$ |
54 |
084 |
T |
25 |
037 |
% |
55 |
085 |
U |
26 |
038 |
& |
56 |
086 |
V |
27 |
039 |
' |
57 |
087 |
W |
28 |
040 |
( |
58 |
088 |
X |
29 |
041 |
) |
59 |
089 |
Y |
2A |
042 |
* |
5A |
090 |
Z |
2B |
043 |
+ |
5B |
091 |
[ |
2C |
044 |
, |
5C |
092 |
\ |
2D |
045 |
- |
5D |
093 |
] |
2E |
046 |
. |
5E |
094 |
^ |
2F |
047 |
/ |
5F |
095 |
_ |
30 |
048 |
0 |
60 |
096 |
` |
31 |
049 |
1 |
61 |
097 |
a |
32 |
050 |
2 |
62 |
098 |
b |
33 |
051 |
3 |
63 |
099 |
c |
34 |
052 |
4 |
64 |
100 |
d |
35 |
053 |
5 |
65 |
101 |
e |
36 |
054 |
6 |
66 |
102 |
f |
37 |
055 |
7 |
67 |
103 |
g |
38 |
056 |
8 |
68 |
104 |
h |
39 |
057 |
9 |
69 |
105 |
i |
3A |
058 |
: |
6A |
106 |
j |
3B |
059 |
; |
6B |
107 |
k |
3C |
060 |
< |
6C |
108 |
l |
3D |
061 |
= |
6D |
109 |
m |
3E |
062 |
> |
6E |
110 |
n |
3F |
063 |
? |
6F |
111 |
o |
40 |
064 |
@ |
70 |
112 |
p |
41 |
065 |
A |
71 |
113 |
q |
42 |
066 |
B |
72 |
114 |
r |
43 |
067 |
C |
73 |
115 |
s |
44 |
068 |
D |
74 |
116 |
t |
45 |
069 |
E |
75 |
117 |
u |
46 |
070 |
F |
76 |
118 |
v |
47 |
071 |
G |
77 |
119 |
w |
48 |
072 |
H |
78 |
120 |
x |
49 |
073 |
I |
79 |
121 |
y |
4A |
074 |
J |
7A |
122 |
z |
4B |
075 |
K |
7B |
123 |
{ |
4C |
076 |
L |
7C |
124 |
| |
4D |
077 |
M |
7D |
125 |
} |
4E |
078 |
N |
7E |
126 |
~ |
4F |
079 |
O |
运算符(-std=c++14
)
优先级 | 运算符 | 描述 | 结合性 |
---|---|---|---|
\(1\) | a::b |
作用域解析 | 从左到右 |
\(2\) | a++ a-- |
后自增、后自减 | 从左到右 |
\(2\) | type(a) type{a} |
函数式强转类型 | 从左到右 |
\(2\) | a(...) |
函数调用 | 从左到右 |
\(2\) | a[b] |
下标访问 | 从左到右 |
\(2\) | a.b a->b |
成员访问 | 从左到右 |
\(3\) | ++a --a |
前自增、前自减 | 从右到左 |
\(3\) | +a -a |
正号、负号 | 从右到左 |
\(3\) | !a ~a |
逻辑取反、位取反 | 从右到左 |
\(3\) | (b)a |
C 风格强转类型 | 从右到左 |
\(3\) | *a &a |
解引用、取地址 | 从右到左 |
\(3\) | sizeof |
取类型/对象大小 | 从右到左 |
\(3\) | new new[] |
动态内存分配 | 从右到左 |
\(3\) | delete delete[] |
动态内存释放 | 从右到左 |
\(4\) | a.*b a->*b |
相对成员访问 | 从左到右 |
\(5\) | a*b a/b a%b |
乘法、除法、取模 | 从左到右 |
\(6\) | a+b a-b |
加法、减法 | 从左到右 |
\(7\) | a<<b a>>b |
按位左移、按位右移 | 从左到右 |
\(8\) | a<b a<=b a>b a>=b |
大小比较运算符 | 从左到右 |
\(9\) | a==b a!=b |
相等比较运算符 | 从左到右 |
\(10\) | a&b |
按位与 | 从左到右 |
\(11\) | a^b |
按位异或 | 从左到右 |
\(12\) | a|b |
按位或 | 从左到右 |
\(13\) | a&&b |
逻辑与 | 从左到右 |
\(14\) | a||b |
逻辑或 | 从左到右 |
\(15\) | a?b:c |
三元条件 注1 | 从右到左 |
\(15\) | throw |
抛出运算符 | 从右到左 |
\(15\) | a=b |
直接赋值 | 从右到左 |
\(15\) | a*=b a/=b a%=b |
乘法、除法、取模复合赋值 | 从右到左 |
\(15\) | a+=b a-=b |
加法、减法复合赋值 | 从右到左 |
\(15\) | a<<=b a>>=b |
按位左移、右移复合赋值 | 从右到左 |
\(15\) | a&=b a^=b a|=b |
按位与、异或、或复合赋值 | 从右到左 |
\(16\) | a,b |
逗号 | 从左到右 |
数据单位
汉文 | 英文 | 进率/Byte | 简称 |
---|---|---|---|
位 | bit | \(2^{-3}\) | b |
字节 | Byte | \(2^{0}\) | B |
千字节 | Kilobyte | \(2^{10}\) | KB |
兆字节 | Megabyte | \(2^{20}\) | MB |
吉字节 | Gigabyte | \(2^{30}\) | GB |
太字节 | Terabyte | \(2^{40}\) | TB |
拍字节 | Petabyte | \(2^{50}\) | PB |
艾字节 | Exabyte | \(2^{60}\) | EB |
泽字节 | Zetabyte | \(2^{70}\) | ZB |
尧字节 | Yottabyte | \(2^{80}\) | YB |
诺字节 | Brontobyte | \(2^{90}\) | BB |
刀字节 | NonaByte | \(2^{100}\) | NB |
馈字节 | DoggaByte | \(2^{110}\) | DB |
馈字节 | Corydonbyte | \(2^{120}\) | CB |
约字节 | Xerobyte | \(2^{130}\) | XB |
注1:
b
处被处理为(b)
,即认为?:
是一个括号。
注2:
\e
并非广泛支持,但 GCC 支持。
注3: 很多字符含义作者解释不清,也不考,请不要线下打扰作者。
注4: 吐槽博客园,连总设计师的名字都不过审。
注5: EBNF(扩展巴克斯—瑙尔范式)
真的有ザコ看不懂这个嘛?