操作系统的功能是( )。
考点:操作系统功能(A1)。
(A1)考点:操作系统是控制和管理计算机系统硬件与软件资源使用的系统软件——管 CPU 调度、内存分配、文件与设备,是所有程序运行的平台。(2020 年 CSP-S 单选真题考法)
解析:外设交换、故障诊断是具体部件或工具的职责;编译是编译器的职责——它们都运行在操作系统之上。
排除法:选"外设与主机信息交换"的人描述的是接口/驱动层面;选"诊断故障"的人把诊断工具当成了 OS;选"编译源程序"的人把编译器(A2)当成了操作系统。
编译器的功能是( )。
考点:编译器功能(A2)。
(A2)考点:编译器把一种语言(通常高级语言)翻译成另一种语言(通常低级语言)——C++ 编译器把源代码翻译成机器可执行的代码。(2019 年 CSP-S 单选真题考法)
解析:翻译方向是高级→低级;逐句边翻译边执行的叫解释器(A3)。
排除法:选"低级翻高级"的人方向反了(那是反编译);选"源程序重新组合"的人没说清翻译本质;选"翻译成自然语言"的人——自然语言不供机器执行。
关于编译与解释,正确的是( )。
考点:编译与解释(A3)。
(A3)考点:编译先整体翻译成可执行文件再运行(C++);解释边翻译边执行、不生成可执行文件(如早期 BASIC、Python 常规执行)。编译型通常运行更快。
解析:分界在"是否生成独立的可执行文件";C++ 选手的证据链就是 g++ 出 a.out 再 ./a.out。
排除法:选"C++ 是解释型"的人没见过 a.out;选"完全一回事"的人混淆两类语言处理方式;选"解释一定更快"的人恰好说反——省了翻译存档的解释型每次都要重翻。
下列关于 Windows 与 Linux 差异的说法正确的是( )。
考点:Windows 与 Linux 差异(A4)。
(A4)考点:Windows 路径分隔符是 \,Linux 是 /——这是两者最常打交道的差异;Linux 严格区分大小写、原生多用户、不靠扩展名定类型。
解析:脚本和命令跨平台时第一个坑就是分隔符;C++ 代码里的 #include "a/b.h" 在 Linux 天然成立。
排除法:选"Linux 不区分大小写"的人恰好反了(A5);选"Windows 多用户而 Linux 不是"的人方向反了;选"都必须用扩展名"的人不了解 Linux 的类型观(B7)。
Linux 系统中,Main.cpp、main.cpp、MAIN.cpp 三个文件名( )。
考点:大小写敏感(A5)。
(A5)考点:Linux 文件名严格区分大小写:Main.cpp、main.cpp、MAIN.cpp 是三个互不相干的文件。
解析:编译命令 g++ main.cpp 找不到实际叫 Main.cpp 的文件会直接报错——大小写敏感是命令行第一课(H6 展开事故)。
排除法:选"同一个文件"的人带着 Windows 的习惯;选"只有前两个相同"的人没有抓住规则的全称量词;选"自动转小写"的人臆造了系统的行为。
关于 Linux 的用户,正确的是( )。
考点:多用户与 root(A6)。
(A6)考点:Linux 是多用户系统:每个用户有自己的家目录与权限;root 是权限最高的管理员账户,普通用户只能动自己有权限的文件。
解析:多用户是 Linux 的设计基因——文件权限体系(可读/可写/可执行)围绕它建立;竞赛中普通账户足够,误以为需要 root 反而危险。
排除法:选"只能单用户"的人不了解多用户传统;选"root 是普通用户默认名"的人把最高账户看扁了;选"权限完全相同"的人否定了整个权限体系。
关于 Linux,下列说法正确的是( )。
考点:开源与发行版(A7)。
(A7)考点:Linux 内核开源;发行版(Ubuntu、Debian、NOI Linux 等)在内核之上集成工具与桌面形成完整系统。
解析:内核+Shell+工具+桌面 = 一个可用的发行版;命令体系(ls/cd/g++)各发行版高度一致,学一处处处能用。
排除法:选"闭源收费"的人与事实相反;选"命令互不兼容"的人夸大了差异;选"只能装服务器"的人忽略了桌面发行版与竞赛环境。
在图形界面里打开"终端"(Terminal)窗口后,接收你输入的命令并执行的程序是( )。
考点:终端与 shell(A8)。
(A8)考点:终端窗口里接待你命令的是 shell(命令解释器):读取一行命令、解析、启动对应程序——是用户与内核之间的"传令兵"。
解析:内核管理一切但不直接面向人的敲键;shell(如 bash)才是那层"听得懂命令"的界面。(大纲未明列 shell 概念,属系统环境基本功)
排除法:选"内核直接接待"的人跳过了中间层;选壁纸程序/浏览器的人把不相关的组件当成了命令入口。
NOI 系列竞赛(含 CSP-S 复赛)采用的评测环境是( )。
考点:NOI Linux 环境(A9)。
(A9)考点:NOI 系列竞赛(含 CSP 复赛)评测基于 NOI Linux——官方定制的 Linux 环境,选手须熟练终端、编辑器(vim 等)与 g++ 编译。
解析:平时就用同样的工作流练(vim 编辑、g++ 编译、./ 运行),赛场上零适应成本——这正是本卷存在的意义。
排除法:选 CMD/macOS/安卓的人与竞赛环境不符。
在终端里运行 ./a.out 时,系统里随之产生的东西是( )。
考点:进程初步(A10)。
(A10)考点:程序是磁盘上的文件;进程是运行中的程序实例——敲下 ./a.out,系统为其创建进程、分配资源、调度执行。
解析:"文件与运行实例"的区分是 time/GDB 一切度量的对象:time 量的是进程耗时,GDB 挂住的也是进程。(大纲未明列进程概念,系统环境基本功)
排除法:选"新硬盘分区/新源文件/文件夹"的人把运行时概念错配成了存储概念。
下列属于图像文件格式的是( )。
考点:图像格式辨析(B1)。
(B1)考点:JPEG 是图像格式;MPEG、WMV、AVI 都是视频格式。(2019 年 CSP-S 单选真题原考法)
解析:图像=静态画面(JPEG/PNG/BMP/GIF);视频=动态帧序列(MPEG/AVI/WMV/MP4)——两组别混。
排除法:选 MPEG 的人被"J"与"M"的字面相似带偏——MPEG 是 Moving Pictures 专家组,做的是视频;选 WMV、AVI 的人同样把视频当成了图像。
下列全部属于视频文件格式的一组是( )。
考点:视频格式(B2)。
(B2)考点:MP4、AVI、WMV 全是视频格式;JPEG/PNG/BMP 是图像,MP3/WAV/OGG 是音频。
解析:按"表现内容"给格式分类是文件常识的主线:图、声、像、压、文五大类各记一组代表。
排除法:选图像组的人类别看错;选音频组的人把声音当画面;选 TXT/PDF/DOC 组的人把文档类当成了视频。
下列属于音频文件格式的是( )。
考点:音频格式(B3)。
(B3)考点:MP3 是音频格式(WAV、OGG 同类);MP4 是视频、PNG 是图像、HTML 是网页。
解析:MP3 与 MP4 只差一个数字,一个是声一个是像——高频混淆点,记"3 声 4 像"。
排除法:选 PNG 的人把图像当音频;选 MP4 的人中了"数字相邻"的圈套;选 HTML 的人把网页文档当成了声音。
一个 C++ 工程里有 main.cpp 和 iostream 相关声明,下列说法正确的是( )。
考点:源文件与头文件(B4)。
(B4)考点:.cpp 是源文件(自己写的代码);iostream 是标准库头文件(库功能的声明),经 #include 在预处理阶段展开进源码。
解析:头文件是"声明清单"不是机器码;自己写的 .h 与库头文件机制相同(F2 展开预处理)。
排除法:选"cpp 是头文件"的人两种文件角色颠倒;选"头文件存机器码"的人把它当成了目标文件;选"随意互换后缀"的人忽略了编译器按扩展名区分处理方式。
g++ main.cpp 编译出的 a.out 没有 .exe 之类的扩展名,这是因为( )。
考点:可执行文件无扩展名(B5)。
(B5)考点:Linux 不靠扩展名判断可执行性——a.out 没有任何扩展名照样运行:可执行是文件权限属性。
解析:与 Windows 的 .exe 文化对比鲜明;判断"能不能运行"看权限位(ls -l 的 x),不看名字。
排除法:选"编译出错"的人以 Windows 度 Linux;选"不允许带扩展名"的人——可以带,只是不必要;选"a.out 是文本"的人——它是机器码。
下列属于压缩包格式的是( )。
考点:压缩包格式(B6)。
(B6)考点:zip 是压缩包格式(tar.gz/tar.bz2/7z 同类);AVI 是视频、MP3 是音频、PNG 是图像。
解析:压缩包=把多个文件打包并缩小的容器;赛题数据常以 zip 发布。
排除法:选 AVI、MP3、PNG 的人分别把视频、音频、图像错认成了压缩格式。
在 Linux 中把一张图片 photo.jpg 改名为 photo.txt,结果是( )。
考点:扩展名不决定类型(B7)。
(B7)考点:Linux 中扩展名只是名字的一部分,不决定文件类型:photo.jpg 改名 photo.txt,内容一个字节不变,还是那张图。
解析:类型判断看内容(文件头魔数);扩展名只是给人看的提示——Windows 用它关联打开方式,Linux 从制度上就不依赖它。
排除法:选"变成文本"的人以为改名会转换内容;选"损坏"与"拒绝改名"的人都臆造了不存在的机制。
papers.tar.gz 这个文件名说明( )。
考点:双层扩展 tar.gz(B8)。
(B8)考点:papers.tar.gz 是两层处理:先用 tar 把一批文件打包成一个包,再用 gz 压缩该包——扩展名从右往左读,记录的是工序。
解析:解压时也按层来(先解 gz 再解 tar,一条命令可代劳);同类的还有 tar.bz2。
排除法:选"单一格式与 tar 无关"的人不了解工序链;选"两个文件"的人把一个文件名拆成了两个;选"目录名"的人混淆了文件与目录。
Linux 中以 . 开头的文件(如 .bashrc)是( )。
考点:隐藏文件(B9)。
(B9)考点:以 . 开头的文件是隐藏文件(多为配置,如 .vimrc、.bashrc):普通 ls 不显示,ls -a 才列出。
解析:隐藏≠加密≠禁访——权限正常时可直接编辑;. 与 ..(C4)也是这条命名法则的一部分。
排除法:选"损坏/禁止访问/空文件"的人都把"隐藏"误读成了贬义状态——它只是不主动亮相。
下列扩展名中,通常表示纯文本文件的是( )。
考点:文本类扩展名(B10)。
(B10)考点:txt 是纯文本;png 是图像、mp4 是视频、gz 是压缩包。
解析:纯文本=可直接 cat 出可读内容的字节流;源代码 .cpp 本质也是纯文本。
排除法:选 png/mp4/gz 的人把图像、视频、压缩包错认成了文本。
同一目录下能否同时存在 a.cpp 和 a.out 两个文件( )。
考点:同名不同扩展(B11)。
(B11)考点:Linux 里**完整文件名(含扩展名)**才是身份:a.cpp 与 a.out 是两个文件,同目录共存毫无问题——"源文件+它的可执行文件"正是编译后的常态。
解析:扩展名是主名的一部分而非属性标签;a.cpp a.h a.out 三兄弟并排是每个工程的日常。
排除法:选"名字被占用"的人把主名当成了唯一身份;选"out 覆盖 cpp"的人臆造了覆盖;选"取决于大小"的人——与大小无关。
data.TXT 与 data.txt 在 Linux 中( )。
考点:扩展名大小写(B12)。
(B12)考点:data.TXT 与 data.txt 是两个不同文件;惯例扩展名一律小写——大写扩展名常让脚本与工具找不到文件。
解析:大小写敏感(A5)同样适用于扩展名那段;规范命名是省坑不是装饰。
排除法:选"同一文件"的人又用了 Windows 直觉;选"第二个非法"的人——不非法,只是不合惯例;选"警告并合并"的人臆造了系统行为。
Linux 文件系统的组织方式是( )。
考点:根目录(C1)。
(C1)考点:Linux 整个文件系统是一棵以 / 为根的倒挂树:所有文件、目录、设备、挂载的磁盘都从根长出,全局唯一一棵。
解析:没有"C 盘 D 盘"的概念——新磁盘挂到树的某个节点上;/home、/etc 等目录各司其职。
排除法:选"每分区独立树"的人带着 Windows 多盘符的直觉;选"网状"的人把文件系统与图混为一谈;选"无层次平铺"的人否认了目录树。
绝对路径 /home/oi/solve.cpp 的含义是( )。
考点:绝对路径(C2)。
(C2)考点:以 / 开头的路径是绝对路径:从根出发的完整坐标(/home/oi/solve.cpp),与当前所在目录无关、到哪都指同一个文件。
解析:开头有没有 / 是绝对/相对的分界线;脚本里引用系统文件用绝对路径最稳。
排除法:选"从当前目录出发"的人那是相对路径(C3);选"家目录下"的人把 /home/oi 的展开当成了规则本身;选"网址"的人把路径与 URL 混淆。
当前目录是 /home/oi,命令 cat a.cpp 中的 a.cpp 是( )。
考点:相对路径(C3)。
(C3)考点:不以 / 开头的路径是相对路径:以当前目录为起点拼出目标——在 /home/oi 下 cat a.cpp 就是读 /home/oi/a.cpp。
解析:相对路径省事但依赖"你现在在哪";换目录后同一相对路径可能指向别处——这是排错时要检查的第一项。
排除法:选"绝对路径"的人没看开头无 /;选"根目录下"的人把省略起点当成了根;选"家目录上一级"的人随意嫁接了家目录。
路径中的 . 和 .. 分别表示( )。
考点:当前与上级(C4)。
(C4)考点:. 表示当前目录自身,.. 表示上一级(父)目录——它们是每个目录里真实存在的两个特殊条目。
解析:cd .. 逐级上爬,爬到根为止;路径 /home/oi/./a.cpp 与 /home/oi/a.cpp 等价(H5 展开)。
排除法:选"隐藏文件与删除标记"的人把它们当成了普通文件名;选"根目录和家目录"的人混淆了 . 与 /、~;选"通配符和连接符"的人张冠李戴。
符号 ~ 在 Linux 路径中表示( )。
考点:家目录(C5)。
(C5)考点:~ 代表当前用户的家目录(如 /home/oi):cd ~ 一键回家、~/a.cpp 即家目录下的文件。
解析:每个用户一个家目录,互不干扰(A6 多用户的体现);~ 是 shell 的缩写,展开后仍是普通绝对路径。
排除法:选"根目录"的人混淆了 ~ 与 /;选"任意目录"的人把它当成了通配;选"临时目录"的人——临时文件另有去处,与 ~ 无关。
在 Linux 系统中,显示当前工作目录路径的命令是( )。
考点:pwd(C6)。
(C6)考点:pwd(print working directory)显示当前工作目录的绝对路径。(2024 年 CSP-S 单选真题考法)
解析:迷路时第一反应 pwd——搞清"我在哪",相对路径才有意义(C3)。
排除法:选 cd 的人答成了"去某处"而不是"问在哪";选 ls 的人答成了"看有什么";选 echo 的人把输出文本当成了查路径。
在 Linux 系统终端中,用于切换工作目录的命令为( )。
考点:cd(C7)。
(C7)考点:cd(change directory)切换工作目录:cd /home/oi 去绝对处、cd src 进子目录、cd .. 上一级。(2022 年 CSP-S 单选真题考法)
排除法:选 ls 的人答成了列目录(2021 年考的是它,别串);选 cp 的人答成了复制;选 all 的人——不存在的命令,真题经典陪跑项。
cd .. 与 cd - 的作用分别是( )。
考点:cd 返回上一次(C8)。
(C8)考点:cd .. 回上一级目录;cd - 回刚才所在的目录——在两个目录间往返切换的快捷键。
解析:- 记成"往返键":A→B 后 cd - 回 A,再 cd - 又到 B。
排除法:选"回家/到根"的人把 ..、- 与 ~、/ 搅在一起;选"删除/创建"的人把 cd 与 rmdir/mkdir 混淆;选"完全相同"的人没分清父目录与上一位置。
在 Linux 系统终端中,用于列出当前目录下所含的文件和子目录的命令为( )。
考点:ls(C9)。
(C9)考点:ls 列出当前目录下的文件和子目录。(2021 年 CSP-S 单选真题考法)
解析:ls 目录名 列别处、ls -a 连隐藏文件一起列(C10)——它是"看"的命令,不改变位置。
排除法:选 cd 的人"看"与"去"不分;选 cp 的人看错了复制;选 all 的人又一次被不存在的命令带偏。
ls 看不到自己知道的配置文件 .vimrc,能看到它的命令是( )。
考点:ls -a(C10)。
(C10)考点:-a(all)让 ls 连点开头的隐藏文件一起列出——.vimrc 平时看不见,就是被默认藏起来的。
解析:ls、ls -a、ls -l(长格式带权限与时间)是三档常用亮度;选项加在命令后、空格分隔。
排除法:选 ls . 的人列的还是当前目录、依旧不含隐藏项;选 cd .vimrc 的人把文件当目录进;选 ls -rm 的人拼凑了不存在的选项组合。
在 Linux 系统终端中,以下哪个命令用于创建一个新的目录( )。
考点:mkdir(C11)。
(C11)考点:mkdir 目录名 创建新目录(make directory)。(2023 年 CSP-S 单选真题考法)
解析:make-dir 两个词根拼出命令名——Linux 命令多是英文缩写,记词根好过死记;已存在同名目录会报错。
排除法:选 newdir/create/mkfolder 的人都在"发明命令"——真题四个选项三个是编的,认准 mkdir。
rmdir tmp 执行失败,最可能的原因是( )。
考点:rmdir(C12)。
(C12)考点:rmdir 只能删除空目录——目录里还有文件就拒绝执行;想连内容一起删须先清空或用 rm -r(H1 展开)。
解析:这个"只删空"的设计是安全阀:防止顺手抹掉一整树东西。
排除法:选"只能删文件"的人角色反了;选"目录名不存在这个命令"的人——命令存在、条件不满足;选"一次只能删两个"的人臆造了参数规则。
把 a.cpp 复制一份命名为 backup.cpp 的命令是( )。
考点:cp 复制(D1)。
(D1)考点:cp 源 目标 复制文件:cp a.cpp backup.cpp 得到内容相同的两份,原文件仍在。
解析:参数顺序口诀"从谁 到谁"——与 mv 一致,顺序记反会南辕北辙。
排除法:选 mv 的人用移动顶替了复制(原文件会消失);选 cp backup.cpp a.cpp 的人方向反了(把备份复制回来覆盖原文件);选 copy 的人——Linux 命令是 cp 不是 copy。
把文件 a.cpp 移动到子目录 src 里的命令是( )。
考点:mv 移动(D2)。
(D2)考点:mv a.cpp src/ 把文件移动到目录 src 里——原位置不再有它(与 cp 的本质区别)。
解析:mv 也可以跨目录改名一步完成:mv a.cpp src/b.cpp;参数顺序同样是"从谁 到谁"。
排除法:选 cp 版的人移动后原文件还在,不合题意;选 mv src a.cpp 的人方向颠倒,变成把目录改名成文件名;选 move 的人又用了 Windows 的命令名。
把 old.cpp 改名为 new.cpp(仍在本目录)应使用( )。
考点:mv 重命名(D3)。
(D3)考点:同目录内的移动就是重命名:mv old.cpp new.cpp 一条命令完成,不需要"复制再删除"。
解析:改名=换路径名;跨目录的重命名=移动+改名一步到位——mv 一个命令三种用法(移动/改名/移动兼改名)。
排除法:选"cp 后删旧"的人多此一举且分两步;选"rename 后须重启"的人臆造了流程;选 touch 的人——touch 只建空文件,不动别人的名字。
删除文件 wrong.cpp 的命令是( )。
考点:rm 删除(D4)。
(D4)考点:rm 文件名 删除文件(remove);Linux 终端的 rm 没有回收站,删了基本找不回(H7)。
解析:删前默念一遍文件名;del 是 Windows 的命令,Linux 认 rm。
排除法:选 del 的人带着 CMD 习惯;选 rmdir 的人那是删空目录的;选 mv wrong.cpp 的人 mv 缺目标参数,什么也删不了。
删除整个目录 build 及其内部所有内容,应使用( )。
考点:rm 递归(D5)。
(D5)考点:rm -r 目录名 递归删除目录及其内部全部内容(-r = recursive)——非空目录的删除正道。
解析:-r 是"连锅端"开关:目录、子目录、文件一并清除,威力大、不可逆,路径要对准再回车。
排除法:选 rm build 的人没加递归,rm 拒绝删目录;选 rmdir 的人只能删空目录;选 rm -a 的人——没有这个选项,是 ls -a 的串味。
快速创建一个空文件 note.txt 的命令是( )。
考点:touch 新建(D6)。
(D6)考点:touch 文件名 快速创建空文件(已存在则更新其时间戳)——开新源文件、占位文件的一步法。
解析:touch 本义"碰一下";比开编辑器再保存快得多;空文件随后用 vim 填内容。
排除法:选 mkdir 的人建的是目录不是文件;选 new 的人发明的命令;选 ls 的人——列出内容,不创建任何东西。
把文本文件 readme.txt 的全部内容一次性输出到屏幕的命令是( )。
考点:cat 查看(D7)。
(D7)考点:cat 文件名 把文本文件全部内容一次性输出到屏幕(concatenate 的缩写)。
解析:小文件看内容首选;大文件配管道 cat x | head -5 只取前几行(D12/I4)。
排除法:选 dog 的人被 cat 的反义词逗笑但命令不存在;选 cp/mv 的人复制移动不看内容。
想看一个很长日志文件的最后 行,最合适的命令是( )。
考点:head 与 tail(D8)。
(D8)考点:head 文件 默认看前 10 行,tail 文件 默认看后 10 行——长文件的"掐头去尾"查看法。
解析:日志最新的记录在末尾,追最新用 tail;head 查文件开头(如表头)。
排除法:选 head 的人看的是头不是尾;选"cat 从头翻"的人方法可行但最笨拙;选 touch 的人碰了时间戳没看内容。
命令 echo hello 的作用是( )。
考点:echo 输出(D9)。
(D9)考点:echo 内容 把内容原样输出到屏幕——常用于提示、配合重定向写文件(echo hi > a.txt)。
解析:echo 是"回声":给它什么它显示什么;与重定向(D10)组合就变成简易写文件工具。
排除法:选"删除/创建目录/进入模式"的人都把显示命令错配成了操作命令。
./a.out > out.txt 中 > 的作用是( )。
考点:覆盖重定向(D10)。
(D10)考点:> 把命令的输出写入文件:文件不存在则创建、已存在则整体覆盖(旧内容清零)。
解析:箭头方向=数据流向(屏幕→文件);覆盖性是它最大的坑(H2 事故现场)。
排除法:选"读输入"的人方向看反(那是 <);选"追加到末尾"的人那是 >>(D11);选"编译"的人把它与 -o 混了。
想把每次运行的输出接在文件末尾而不是冲掉旧内容,应使用( )。
考点:追加重定向(D11)。
(D11)考点:>> 把输出追加到文件末尾,旧内容原样保留——多次运行的结果依次累积的正确姿势。
解析:一个箭头覆盖、两个箭头追加;做实验记录、日志累积都靠 >>。
排除法:选 > 的人会冲掉旧数据(正是本细节的反面);选 | 的人把管道当成了写文件;选 -o 的人那是编译选项。
命令 cat long.txt | head -5 中 | 的作用是( )。
考点:管道(D12)。
(D12)考点:| 是管道:把左侧命令的输出直接作为右侧命令的输入——cat long.txt | head -5 即"输出全文、只取前五行"。
解析:数据像水流过水管:cat 出水、head 接水;多个命令可串成长流水线(I4)。(大纲未明列管道,终端基本功)
排除法:选"逻辑或"的人把它当成了 C++ 的 ||;选"head 发给 cat"的人水流方向反了;选"并行执行"的人——是串联不是并行。
用 vim 打开(不存在则新建)main.cpp 进行编辑,应输入( )。
考点:vim 打开(E1)。
(E1)考点:vim 文件名 打开文件编辑;文件不存在则新建一个空缓冲,保存时才真正落盘。
解析:vim 后直接跟文件名,无空格以外的参数;竞赛机上它几乎总在。
排除法:选 open/edit 的人发明的命令;选 vim --run 的人臆造了选项。
vim 的三种基本模式是( )。
考点:三模式(E2)。
(E2)考点:vim 三种基本模式:普通模式(移动与命令操作,刚打开时的默认态)、插入模式(输入文本)、命令行模式(执行 : 开头的命令)。
解析:模式间靠按键切换(E3/E4);"现在处于哪个模式"是 vim 一切操作的前提——左下角 INSERT 是插入态的标志。
排除法:选"输入/输出/删除"的人按功能乱分组;选"编辑/编译/运行"的人把 vim 当成了 IDE 流程;选"用户/管理员/访客"的人那是账户体系。
刚打开 vim 时处于普通模式,此时直接敲字母 hello 会发现根本输不进文本。开始输入代码应先按( )。
考点:进入插入(E3)。
(E3)考点:普通模式按 i 进入插入模式(左下角出现 INSERT),之后敲的才是文本。
解析:刚打开就打字满屏乱跳是每个新手的第一课——vim 把"按键当命令"与"按键当文本"严格分开。
排除法:选 Ctrl+H 的人用了 Windows 联想;选回车的人回车只是换行不换模式;选 :insert 的人——命令行模式没有这条命令。
在插入模式输完一段代码后,想执行 :wq 保存退出,应先( )。
考点:返回普通(E4)。
(E4)考点:插入模式按 Esc 回到普通模式——: 命令(如 :wq)只在普通模式下敲才有效。
解析:完成输入先 Esc 再下命令,是 vim 的呼吸节奏:输入(i)→ 呼气(Esc)→ 命令(:wq)。
排除法:选"直接输冒号"的人——插入态下冒号会被当成文本打进去;选 i 的人反而进了插入模式;选 Ctrl+S 的人那是图形软件的保存。
vim 中保存文件并退出的命令是( )。
考点:保存退出(E5)。
(E5)考点:普通模式下 :wq 保存并退出(write + quit)。
解析:w 写盘、q 退出,两字母连打;:x 是等价简写(本题干扰项之一即它的变体描述)。
排除法:选 :q! 的人不保存就跑(E6);选"任意字母组合"的人把命令当成了随意输入;选 Ctrl+Q 的人又是 Windows 直觉。
改乱了一个配置文件又不想保存任何修改,退出 vim 应使用( )。
考点:强制退出(E6)。
(E6)考点::q! 放弃全部修改、强制退出——文件保持打开前的原样,改坏的东西一个字都不会留下。
解析:! 是"强制":明知有未保存修改也要退;救火场景:改乱了配置,最稳的就是 :q! 从头来过。
排除法:选 :wq 的人会把烂修改存进去(与目的相反);选"直接关终端"的人——效果粗暴且可能留下交换文件干扰下次打开;选 :rm 的人——不存在的命令。
普通模式下按 dd 的作用是( )。
考点:删行(E7)。
(E7)考点:普通模式下 dd 删除光标所在的一整行(两个 d 连打)。
解析:vim 的"加倍"惯例:d 删字符级的动作,dd 翻倍成整行;删掉的行进入缓冲可供 p 粘贴(E8)。
排除法:选"删一个字符"的人那是 x 键;选"删整个文件"的人把一行放大成了全部;选"下移十行"的人把它当成了移动命令。
想把光标所在行复制一份粘贴到下面,普通模式下的按键序列是( )。
考点:复制行与粘贴(E8)。
(E8)考点:普通模式 yy 复制(yank)光标所在行,p 粘贴到光标下方——组合成"复制一行"。
解析:yy 与 dd 是一对:一个抄、一个剪,都靠 p 落位;Ctrl+C/V 在 vim 里不适用。
排除法:选 Ctrl+C/V 的人 Windows 习惯带进了 vim;选 dd+p 的人那是剪切粘贴(行没了);选 cp/mv 的人用文件命令冒充编辑动作。
在普通模式下输入 /main 再回车,vim 会( )。
考点:vim 查找(E9)。
(E9)考点:普通模式 /关键词 回车即向后查找,按 n(next)跳到下一个匹配处。
解析:找函数名、找 bug 关键字比肉眼扫快得多;? 则是向前找。
排除法:选"改名/新建文件/退出打开别的文件"的人都把查找键误当成了别的操作。
关于 Linux 下的文本编辑工具,正确的是( )。
考点:nano 与 IDE(E10)。
(E10)考点:nano 是入门简单的终端编辑器(底部列快捷键,^O 保存 ^X 退出);vim 功能强大但需练习;图形界面还可用 Code::Blocks 等 IDE——竞赛环境三者都该会基本操作。
解析:考场上 nano 救急、vim 高效、IDE 顺手,各有场景;大纲 §44 列的正是"常见文本编辑工具的使用"。
排除法:选"vim 唯一可用"的人不了解工具生态;选"nano 功能更强"的人恰好反了——nano 胜在简单不是强大;选"IDE 不能编辑"的人把 IDE 只当调试器。
C++ 源程序变成可执行文件要经历的四个阶段依次是( )。
考点:编译四阶段(F1)。
(F1)考点:源程序到可执行文件的四个阶段:预处理 → 编译 → 汇编 → 链接——一条 g++ 命令背后流水线全跑。
解析:四阶段各有产物(展开源码、汇编代码、目标文件、可执行文件);知道分段才能看懂报错发生在哪段(I6)。
排除法:选"编辑编译运行调试"的人那是开发流程不是编译流水线;选"扫描解析生成优化"的人套了别的术语;选"压缩加密打包安装"的人完全是软件安装流程。
编译的第一阶段"预处理"主要做的是( )。
考点:预处理(F2)。
(F2)考点:预处理处理 # 开头的指令:展开 #include(头文件内容贴进来)、替换 #define 宏——产物是不含 # 指令的展开源码。
解析:#include <iostream> 为什么能让 cin 可用?因为它的声明被原样贴进了你的源文件——这是第一阶段的全部工作。
排除法:选"翻译成机器码"的人跳到了后两段;选"拼 .o 文件"的人那是链接;选"检查运行时错误"的人——预处理不运行程序。
"编译"与"汇编"两个阶段的产物分别是( )。
考点:汇编与机器码(F3)。
(F3)考点:编译阶段把展开源码翻译成汇编代码;汇编阶段再把汇编代码翻成机器码(目标文件 .o)。
解析:"编译"在狭义(单阶段)与广义(全流程)两层都用——本题取狭义;两步连看:C++→汇编→机器码。
排除法:选"都是可执行文件"的人跳过了链接;选"机器码、汇编代码"的人两阶段产物写反;选"头文件、源文件"的人那是输入不是产物。
链接阶段(linking)做的事情是( )。
考点:链接(F4)。
(F4)考点:链接把目标文件与所用库(标准库等)拼装成完整可执行文件——用了库函数却没有实现,就在这一步报 undefined reference。
解析:你的代码只写了调用,实现在库里——链接负责"对上号";多文件工程(F13)也靠它合体。
排除法:选"删注释"的人那是预处理前后的事;选"加扩展名"的人——Linux 不靠扩展名;选"检查拼写"的人那是编译器前端。
用 g++ 编译 main.cpp 最简单的命令是( )。
考点:g++ 基本用法(F5)。
(F5)考点:g++ 源文件 即编译:g++ main.cpp 成功后得到缺省命名的可执行文件。
解析:g++ 是 GCC 家族的 C++ 编译器驱动,一条命令跑完四阶段;后续选项都是给它加要求。
排除法:选 run/compile 的人发明了命令;选 g++ run main.cpp 的人多了个词——g++ 后直接跟文件名。
执行 g++ main.cpp(不带 -o)成功后,目录里新生成的文件是( )。
考点:缺省 a.out(F6)。
(F6)考点:不带 -o 时,g++ 的输出名固定为 a.out(汇编器输出的历史缺省名)。
解析:目录里突然出现的 a.out 就是它;下次编译同样覆盖——想留多个版本必须 -o 起名(F7/I2)。
排除法:选 main.exe 的人 Windows 缺省名串了台;选 main.o 的人——.o 是中间目标文件,且不会留在目录里;选 a.cpp 的人——源文件不动。
以下哪个命令能将名为 main.cpp 的 C++ 源文件编译并生成一个名为 main 的可执行文件( )。
考点:-o 指定输出名(F7)。
(F7)考点:-o 名字 指定输出文件名:g++ -o main main.cpp 生成 main。-o 紧跟输出名,源文件另列——顺序写反会拿源文件当输出覆盖掉(H4 事故)。(2023 年 CSP-S 单选真题考法)
解析:真题四选项全是 -o 与两个名字的排列——认准"-o 后面那个是输出"这一条即可秒杀。
排除法:其余三个选项全把输出名与源文件名放反或把 main.cpp 当输出——都会破坏源文件,正是本题要防的事故。
编译出的 a.out 就在当前目录,运行它的命令是( )。
考点:运行可执行文件(F8)。
(F8)考点:运行当前目录下的可执行文件要写 ./文件名——./a.out;光敲 a.out 找不到(G1 展开原理)。
排除法:选 a.out 裸名的人撞上 PATH 机制;选 run a.out 的人发明命令;选 g++ a.out 的人把编译器当运行器。
想用 GDB 调试程序,编译时应加的选项是( )。
考点:-g 调试信息(F9)。
(F9)考点:-g 在可执行文件里加入调试信息(源码行号、变量名)——GDB 按行设断点、按名看变量的前提。
解析:没有 -g 的程序 GDB 只能看到裸地址;竞赛本地调试编译加 -g、提交编译加 -O2,是标准双配置(F10)。
排除法:选 -O2 的人那是优化(还会让单步跳行,反而不利调试);选 -Wall 的人那是警告;选 -o 的人那是命名。
g++ -O2 main.cpp -o main 中 -O2 的作用是( )。
考点:-O2 优化(F10)。
(F10)考点:-O2 开二级优化:编译器多花编译时间换更快的代码——评测时限紧,正式提交标配。
解析:O 大写(Optimize);调试期别开(执行顺序可能与源码错位),发布期必开。
排除法:选"输出两个文件"的人把 O2 看成了数量;选"打开警告"的人那是 -Wall;选"编译两遍"的人望文生义。
-Wall 选项的作用是( )。
考点:-Wall 警告(F11)。
(F11)考点:-Wall 打开常用警告集:未使用变量、类型转换可疑、可能未初始化等——把隐患提前亮出来。
解析:很多 bug 的第一声警报来自 -Wall;"error 才管、warning 无视"是危险习惯(F14 展开)。
排除法:选"关闭提示"的人方向反了;选"警告变错误"的人——那是更激进的 -Werror;选"生成墙纸"的人在被选项逗笑的同时记住:Wall=Warnings all。
g++ -std=c++14 main.cpp 中 -std=c++14 的作用是( )。
考点:-std 标准(F12)。
(F12)考点:-std=c++14 指定按哪个 C++ 标准编译——新语法(auto、结构化绑定等)需要相应标准支持,否则报错。
解析:评测机编译器默认标准可能偏旧,用到新特性就显式声明;c++14/c++17 按需选。
排除法:选"时间戳/运行 14 秒/链接 14 个库"的人都在数字上胡乱发挥——std 是 standard。
工程含 main.cpp 与 lib.cpp 两个源文件,一起编译成程序 app 的命令是( )。
考点:多文件编译(F13)。
(F13)考点:多源文件列在同一条 g++ 命令里:g++ main.cpp lib.cpp -o app——各文件分别编译再链接成一个程序。
解析:只编 main.cpp 会缺 lib.cpp 里的函数实现,链接报 undefined reference(F4);文件名与 -o 的位置可换,语义不变。
排除法:选"只编主文件"的人会链接失败;选"app 放最前当输入"的人把输出名当成了源文件;选"不能一次编译"的人——恰恰可以。
关于编译错误(error)与警告(warning),正确的是( )。
考点:错误与警告(F14)。
(F14)考点:错误(error)阻止编译成功、没有可执行文件;警告(warning)不阻止但暗示隐患——应当清零而非无视。
解析:竞赛常见惨案:带着"未初始化"警告提交,考场数据恰好踩中;-Wall + 消警告是最便宜的保险(F11)。
排除法:选"都会阻止"的人高估了警告;选"警告更严重"的人恰好反了;选"必须带警告运行"的人把病当成常态。
运行当前目录下的 main 必须写 ./main 而不能只写 main,原因是( )。
考点:点斜杠执行(G1)。
(G1)考点:裸敲程序名时系统按环境变量 PATH 列出的目录找它,当前目录默认不在 PATH 里;./main 用相对路径明确指到当前目录下的文件。
解析:./ 不是仪式而是地址:点=当前目录、斜杠=里面的;这条机制换来了"不会误运行当前目录下同名假程序"的安全。
排除法:选"main 是保留字"的人方向错了;选"只是习惯"的人没意识到背后是 PATH 查找规则;选"提速"的人无中生有。
运行 ./a.out input.txt,程序中 argc 的值是( )。
考点:argc(G2)。
(G2)考点:argc 是命令行参数个数(含程序名自身):./a.out input.txt 有程序名+1 个参数,argc = 。
解析:argc 至少为 (只有程序名);数参数时"把自己也算上"是唯一易错点。
排除法:选 的人忘了程序名占一个;选 的人多数(把什么当成了第三个?没有第三个);选 的人——程序名永远在 argv[0]。
运行 ./a.out input.txt 时,argv[0] 与 argv[1] 分别是( )。
考点:argv(G3)。
(G3)考点:argv[0] 是程序名本身(./a.out),argv[1] 起才是真正的参数(input.txt)。
解析:argv 是字符串数组,下标从 0 起;处理输入文件名就是读 argv[1]——竞赛读文件模板的第一行。
排除法:选"顺序对调"的人把参数与程序名换位;选"空串与程序名"的人臆造了 argv[0] 为空;选"行数与大小"的人把参数当成了统计值。
time ./a.out 输出的三行 real、user、sys 依次表示( )。
考点:time 三行(G4)。
(G4)考点:time 输出三行:real=实际经过(墙上时钟)时间;user=用户态 CPU 时间;sys=内核态 CPU 时间。
解析:三者口径不同:秒表量 real、CPU 忙碌量 user+sys(2022 年 CSP-S 真题整题就考这三行)。
排除法:选"三次运行"的人——是一次运行的三种口径;选"输入计算输出"的人按流程分段、与实际含义不符;选"最优平均最坏"的人套了复杂度分析的词。
time 输出中 real 0m10.000s 的含义是( )。
考点:real(G5)。
(G5)考点:real 是墙上时钟时间:从命令启动到结束真实经过的时间,含一切等待(输入输出、睡眠)。
解析:人在旁边掐秒表对上的就是 real——它可能大于 CPU 时间(程序在等待)。
排除法:选"占用了 秒 CPU"的人那是 user+sys 的口径;选"还剩 秒"的人把记录当成了倒计时;选"运行了 次"的人无中生有。
time 输出中 user 统计的是( )。
考点:user(G6)。
(G6)考点:user 是程序自己的代码在用户态消耗的 CPU 时间——你的循环、你的计算都在这里。
解析:用户态=跑你写的逻辑;调用系统服务的时间算到 sys(G7)。
排除法:选"OS 全部时间"的人那是 sys 的领地;选"敲键盘时间"的人——敲键不算程序 CPU 时间;选"墙上时钟"的人那是 real。
time 输出中 sys 统计的是( )。
考点:sys(G7)。
(G7)考点:sys 是程序请求内核服务(读写文件、分配内存等)时代内核替它干活消耗的 CPU 时间。
解析:user+sys 才是程序真正占用的 CPU 总量;文件操作多的程序 sys 占比高。
排除法:选"开机总时间"的人把系统全局账算到了一个进程头上;选"用户思考"的人幽默但不对;选"睡眠时间"的人——睡眠不占 CPU,也不计入任何一项。
程序在单核 CPU 上运行,time 输出 real 0m30.721s、user 0m24.579s、sys 0m6.123s。用秒表对此程序计时,最接近的时长是( )。
考点:秒表对应 real(G8)。
(G8)考点:秒表计时对上的是 real: 最接近 ——不管 CPU 忙不忙,墙上时钟照走。(2022 年 CSP-S 单选真题数据)
解析:(user)、(sys)都是 CPU 分项, 是无中生有;此题数据里 user+sys≈real 恰好接近,但口径上秒表只认 real。
排除法:选 的人把 user 当成了全程;选 的人在数字间凑差值;选 的人只拿了内核时间。
time 输出 real 0m30.721s、user 0m24.579s、sys 0m6.123s,程序总共消耗的 CPU 时间(用户态+内核态)约为( )。
考点:CPU 时间(G9)。
(G9)考点:程序消耗的 CPU 总时间 = user + sys = 。
解析:real 恰好也约 是本题数据的巧合(单核满负荷);原理上 CPU 时间与 real 互不包含——I7 专门用差值拆开考。
排除法:选 的人把 real 又加了一遍;选 的人只用 user 丢了 sys;选 的人只拿了 sys。
用 GDB 调试已带调试信息编译出的 main,启动命令是( )。
考点:gdb 启动(G10)。
(G10)考点:gdb ./可执行文件 启动调试(程序须带 -g 编译,F9)。
解析:进入 GDB 后停在其命令行((gdb) 提示符),程序尚未运行——等 run 才启动(G12)。
排除法:选 -run 选项的人臆造了参数;选 ./main --gdb 的人把调试器当成了程序参数;选 debug 的人发明命令。
在 GDB 中给 main.cpp 第 行设断点,命令是( )。
考点:断点(G11)。
(G11)考点:break(简写 b)设断点:b main.cpp:10 按文件行号、b 函数名 按函数入口。
解析:断点=让程序跑到这里暂停,是"停在哪看"的坐标;行号与源码对齐依赖 -g。
排除法:选 stop/pause 的人发明命令;选 run 10 的人把设断点与启动运行混了。
GDB 中 run(r)与 continue(c)的区别是( )。
考点:run 与 continue(G12)。
(G12)考点:run(r)从程序起点开始运行、到首个断点停;continue(c)从当前暂停处继续、到下一断点或结束。
解析:一始一续:r 是"从头来",c 是"接着走";循环里设断点时反复 c 逐轮观察。
排除法:选"完全相同"的人没分清起点与续点;选"run 结束调试"的人反了;选"单步/打印"的人把 n 和 p 的职责搬来了。
GDB 中 next(n)与 step(s)的区别是( )。
考点:next 与 step(G13)。
(G13)考点:next(n)与 step(s)都单步一行;差别在遇函数调用时:next 整个调用一步执行完不进入,step 钻进函数内部继续逐行。
解析:自己的函数可疑用 s 进去看;库函数(如 sort)没得看用 n 跨过去——"怀疑谁才进谁"。
排除法:选"没有区别"的人没遇到函数调用就以为一样;选"后退/前进"的人方向瞎猜;选"只在汇编层"的人臆造限制。
程序在断点处暂停,查看变量 cnt 当前值的 GDB 命令是( )。
考点:print(G14)。
(G14)考点:print 名字(简写 p)打印变量当前值——断点停下后第一件事就是 p 关键变量。
解析:能 p 表达式(p a[i]);配合 n/c 的"走走停停看看"就是 GDB 调试的呼吸。
排除法:选 show/echo/cout 的人分别在发明命令、串 shell、串 C++。
目录 tmp 里有 个文件,下列能删掉整个 tmp 的是( )。
考点:rmdir 与 rm 递归(H1)。
(H1)考点:非空目录只能 rm -r 连内容递归删除;rmdir 只认空目录、rm 裸命令不认目录。
解析:三个"删"的分工:rmdir=空目录、rm=文件、rm -r=目录带内容;递归删除不可逆,先 ls 看清再下手。
排除法:选 rmdir 的人被"只删空"拦下;选 rm 裸命令的人 rm 不加 -r 拒删目录;选 rmdir -a 的人拼凑了不存在选项。
out.txt 里已有 行结果,误用 ./a.out > out.txt 再次运行,后果是( )。
考点:覆盖与追加(H2)。
(H2)考点:> 是覆盖:旧 行整体丢失、只剩本次输出;累积必须 >>。
解析:这是最常见的一类"无报错事故"——命令执行得开开心心,数据没了;重要输出文件先备份或直接用 >>。
排除法:选"接在第 行后"的人那是 >>;选"内容不变"的人以为失败会保护文件——覆盖成功得很彻底;选"生成 out1.txt"的人臆造了自动改名。
vim 里改了文件,想"保留本次修改再退出"应按一组键、"放弃本次修改直接退出"应按另一组,正确搭配是( )。
考点:两种退出(H3)。
(H3)考点:保留修改退出 = Esc 后 :wq;放弃修改退出 = Esc 后 :q!——先回普通模式再下命令。
解析:w 写 q 退、! 强制弃改;两个命令一存一弃,方向千万别反(反了就是"想保存的丢了、想丢的存了")。
排除法:选"保留用 :q!、放弃用 :wq"的人两向全反;选 Ctrl+S/Z 的人 Windows 直觉带进 vim;选"都用 :q 看大小"的人——:q 遇未保存修改会拒绝退出,与大小无关。
想生成可执行文件 main,误敲成 g++ -o main.cpp main,结果是( )。
考点:-o 写反(H4)。
(H4)考点:g++ -o main.cpp main 把 -o 后的 main.cpp 当输出名、把 main 当源文件——编译产物顶掉源文件,代码全毁。
解析:-o 永远紧跟输出名(F7);本题是 F7 的"事故版":不是编译失败,而是"成功地把源文件覆盖了",比报错可怕。
排除法:选"报语法错误什么都没发生"的人以为系统会兜底——不会;选"完全等效"的人没看参数位置;选"生成两个可执行文件"的人——一次编译一个输出。
执行 cd . 之后,当前目录( )。
考点:cd 到自身(H5)。
(H5)考点:cd . 目标就是当前目录自身——原地不动,不报错也不换地。
解析:.(C4)在路径里常被省略:./a.out 的点=当前目录、cd .=去当前目录,均合法但后者无效果。
排除法:选"回根目录"的人把 . 看成了 /;选"回上一级"的人那是 cd ..;选"报错退出"的人——合法命令,终端稳如泰山。
源文件实际叫 Main.cpp,却执行了 g++ main.cpp,结果是( )。
考点:大小写混淆(H6)。
(H6)考点:文件实际叫 Main.cpp 却敲 g++ main.cpp,报 No such file or directory——Linux 大小写敏感(A5)的现场事故。
解析:排错三步:ls 看真名、改命令、或 mv 统一小写;-Wall 等也大小写敏感(大写 O、小写 o 含义不同)。
排除法:选"自动找到"与"大小写不敏感"的人仍在 Windows 语境;选"编译 Windows 版"的人脑洞与实践不符。
在 Linux 终端执行 rm wrong.cpp 成功后,想找回该文件,正确的认识是( )。
考点:删除不可恢复(H7)。
(H7)考点:终端 rm 没有回收站:删除即释放存储,基本无法找回——删前核对路径与文件名是唯一保险。
解析:图形界面的回收站是桌面环境的功能,终端命令绕过它;rm -r 更要三思(H1)。
排除法:选"回收站一定有"的人把桌面体验套到了终端;选"Ctrl+Z 撤销"的人——终端没有这层撤销;选"重启恢复"的人把系统想成了存档机。
同学说"这个 flag.txt 肯定是文本,直接 cat 没问题",从 Linux 文件类型的角度评价这句话( )。
考点:扩展名误信(H8)。
(H8)考点:扩展名不保证内容类型(B7 的防骗应用):flag.txt 可能是任何内容的改名产物,重要场合看内容或用工具判型。
解析:安全与排错意识:不轻信名字,cat 前先想内容可能很大或是二进制;file 命令可报真实类型。
排除法:选"完全正确"的人把 Windows 关联文化的习惯当成了 Linux 的制度;选"只对 root"的人——与用户无关;选"一定是病毒"的人走向另一个极端。
在 NOI Linux 终端完成"编辑→编译→运行"的完整流程,命令序列正确的是( )。
考点:完整工作流(I1)。
(I1)考点:竞赛标准工作流:vim 编辑并 :wq 保存 → g++ main.cpp -o main 编译 → ./main 运行——三步一条龙。
解析:顺序是"先有代码才有得编、先编出程序才有得跑";每一步的产物(源文件、可执行文件)是下一步的原料。
排除法:先编译后编辑的人编了个寂寞;先运行的人跑了个不存在的文件;选"必须装别的软件"的人低估了标配环境。
同学执行 g++ a.cpp 后在目录里找不到名为 a 的可执行文件,原因及对策是( )。
考点:忘记 -o(I2)。
(I2)考点:不带 -o 的输出叫 a.out(F6):要么 ./a.out 运行它,要么下次 -o 起名——不存在名为 a 的文件,也没出任何错。
解析:看到"找不到 a"先 ls 一下——a.out 就躺在那;把它误当编译失败是新手常见误诊。
排除法:选"重装系统"的人反应过度;选"找 a.exe"的人换了个平台找错名字;选"被杀毒删了"的人——Linux 竞赛环境没有这出戏。
把程序输出保存到 result.txt 供赛后查看(覆盖旧内容),命令是( )。
考点:输出存文件(I3)。
(I3)考点:./a.out > result.txt 把程序输出覆盖写入 result.txt——屏幕安静、文件留档。
解析:箭头指向文件;想看留档内容随后 cat result.txt;追加累积用 >>(D11/H2)。
排除法:选 < 的人方向反了(那是把文件喂给程序当输入);选 cat result.txt ./a.out 的人把两个文件串着打印;选 vim 版的人进编辑器看不了实时输出。
统计目录下有多少个文件,可以用( )。
考点:管道组合(I4)。
(I4)考点:ls | wc -l:ls 列出目录内容(每行一个名),管道喂给 wc -l 数行数——行数即条目数。
解析:管道思维="让每个命令只做一件小事,串起来干大事";wc -l 专职数行。
排除法:选 ls - sum 的人拼凑了不存在的选项;选 count ls 的人发明命令;选 wc ls -l 的人参数顺序错乱——wc 要接输入流不是接 ls 这个词。
当前在 /home/oi/work,执行 cd .. 再执行 cd notes 后,所在目录是( )。
考点:目录导航(I5)。
(I5)考点:/home/oi/work → cd .. 到 /home/oi → cd notes 进子目录 → 终点 /home/oi/notes。
解析:每步先算出"现在在哪"再拼接下一段;.. 剥一层、子目录名进一层——导航题就是路径的加减法。
排除法:选 /home/oi/work/notes 的人忘了先退一级;选 /home/notes 的人多剥了一层;选 /notes 的人剥到了根。
编译时屏幕出现 main.cpp:5:12: error: expected ';' before 'return',从中能直接读出的信息是( )。
考点:报错定位(I6)。
(I6)考点:编译报错自带坐标:文件:行:列: error: 描述——main.cpp:5:12 直指第 行第 列附近缺分号,按坐标直达现场。
解析:报错三要素=文件、行号、描述——坐标 $5$ 行第 $12$ 列 附近找分号;修第一个错误后重编(后面的错常是它的连锁)。
排除法:修错先按坐标找第 行第 列。选"内存不够"的人完全不搭;选"链接器找不到 main"的人那是 undefined reference 类错误(F4);选"权限不足"的人那是运行阶段另一类报错。
time 输出 real 0m12.000s、user 0m8.000s、sys 0m2.000s。下列说法正确的是( )。
考点:time 计算(I7)。
(I7)考点:real 、user 、sys :秒表≈ 秒;CPU 时间 秒;差的 秒在等输入输出等非 CPU 环节。
解析:real ≥ 活跃期的 CPU 占用未必成立的一般式:CPU 时间可以小于 real(在等待)、单核上也不会超过 real 太多——分项相加与总口径分开算。
排除法:选"秒表 秒、CPU 秒"的人两口径对调;选"三种必须相等"的人没见过等待;选"sys 是 秒"的人把 real 认成了 sys。
下列说法错误的是( )。
考点:综合判断(I8)。
(I8)考点:选错误项:rm 删除不进回收站(H7),随时可恢复的说法错;其余三项(ls -a 看隐藏、-g 供 GDB、cd - 往返)皆真。
排除法:选 A 的人否定了 -a 的功能;选 B 的人忽略了调试信息的来源;选 D 的人否定了往返键——三真一假里只有"回收站"是编出来的安心。
下列属于图像文件格式的有( )
编译器的功能是( )
操作系统的功能是( )。
在 Linux 系统终端中,用于列出当前目录下所含的文件和子目录的命令为( )。
在 Linux 系统终端中,用于切换工作目录的命令为( )。
你同时用 time 命令和秒表为某个程序在单核 CPU 上的运行计时。假如 time 命令的输出如下:
real 0m30.721s user 0m24.579s sys 0m6.123s
以下最接近秒表计时的时长为( )。
在 Linux 系统终端中,以下哪个命令用于创建一个新的目录?( )
以下哪个命令能将一个名为 main.cpp 的 C++ 源文件编译并生成一个名为 main 的可执行文件?( )
在 Linux 系统中,如果你想显示当前工作目录的路径,应该使用哪个命令?( )