跳到主要内容

2023-2024学年上学期期末

2023-2024学年上学期期末试卷(A)(含答案)

一、选择题(每题 2 分)

  1. 现在最主流的源代码管理工具是哪个?

    A. SVN B. CVS C. git D. BitKeeper

    解:

    C

    git 是目前全球最主流的分布式版本控制系统。


  2. 下列哪些是主要的 Linux 发行版?(多选)

    A. RedHat Linux B. CentOS C. Debian D. Ubuntu

    解:

    ABCD

    这四个均为极具代表性的 Linux 发行版。


  3. 下列哪个不是 Linux 的基本命令?

    A. ls B. cd C. rm D. cmd

    解:

    D

    cmd 是 Windows 的命令提示符;Linux 对应的基本命令是终端或 shell。


  4. 下列符号链接相关的特点,哪个是错误的?

    A. 符号链接也被称为软链接 B. 符号链接是一个指向另一个文件路径的特殊文件 C. 如果删除了符号链接,原始文件也会被删除 D. 符号链接可以链接到目录

    解:

    C

    软链接类似于快捷方式,删除链接文件不会影响原始文件。


  5. 下列关于 Shell 说法错误的是哪一条?

    A. 当用户登录到系统时,有一个 shell 进程随之启动,并在用户注销时终止 B. 用户输入的命令是 shell 的输入 C. Shell 不能创建子进程 D. Shell 有很多种

    解:

    C

    Shell 的核心功能之一就是通过 fork 创建子进程来执行命令。


  6. 下列关于用户自定义 shell 变量的描述中错误的是?

    A. 变量名必须以字母开头,其他可以是数字和下划线,区分大小写 B. 变量类型可分为字符串类型和数字类型 C. 变量不需要提前声明 D. 如果有 VAR=100,可以通过 $VAR 引用变量

    解:

    B

    在基础 Shell 编程中,变量通常被视为字符串,不像 C 语言那样严格区分类型。


  7. 下列哪个通配符表达式的匹配内容中可以包含数字?(多选)

    A. \w B. [0-9] C. \W D. \d

    解:

    BD

    [0-9] 明确匹配数字,\d 在支持正则的工具中代表数字。


  8. 下列编程方式,哪些在本课程中介绍过?(多选)

    A. shell B. C C. perl D. awk

    解:

    ABCD

    通常该课程重点在于 Shell 脚本、C 语言以及 awk 文本处理。


  9. 下列编译文件编写方式,哪些在本课程中介绍过?(多选)

    A. 手写 Makefile B. 通过 autoconf 和 automake 工具 C. 使用 CMake 工具 D. 使用 ChatGPT 生成

    解:

    ACD

    Makefile 和 CMake 是工程实践中最基础和主流的构建方式。


  10. C 语言用哪个函数创建子进程?

    A. fork B. subprocess C. pthread_create D. new

    解:

    A

    fork() 是 Linux 下创建子进程的标准系统调用。


二、简答题(每题 5 分)

  1. "friday@LAPTOP-ECNU:~$ cat /etc/hosts" 中能看到这台计算机的主机名是什么?

    解:

    LAPTOP-ECNU

    提示符的格式通常是 用户名@主机名:当前目录$


  2. "date --set='2023/12/24 10:00:00'" 这条命令的作用是什么?

    解:

    将系统的日期和时间手动设置为 2023 年 12 月 24 日 10:00:00。


  3. "rm h*[0-9]" 能不能删除 helloworld0 这个文件?这条命令能删除的文件名有什么特点?

    解:

    能删除。

    特点:以字母 h 开头,中间包含任意长度字符(或空),且以数字 0-9 结尾的文件。


  4. echo "The current time is `date`" 会输出什么?

    解:

    The current time is [当前的系统时间]

    反引号 `date` 会执行命令并将结果嵌入字符串中。


  5. 重定向 >>> 的区别是什么?

    解:

    > 为覆盖重定向:如果文件已存在,会清空原内容再写入。

    >> 为追加重定向:在文件末尾添加新内容,不破坏原数据。


  6. "cat a.txt b.c > c.txt" 这条命令的作用是什么?

    解:

    a.txtb.c 的内容合并,并覆盖写入到 c.txt 文件中。


  7. "cat hello.txt | wc" 这条命令的作用是什么?

    解:

    统计 hello.txt 文件的行数、单词数和字节数。


  8. sed 命令格式为 "sed 'address action' files",那么 "sed '/^#/d' helloworld.c" 的作用大概是什么?

    解:

    删除(d)所有以 # 开头的行并输出剩余内容(通常用于过滤掉 C 语言源文件中的预处理指令或注释行)。


三、论述题(40 分)

  1. 请结合应用编程,谈谈你对开源软件与商业软件关系的认识。(200-500 字)

    解:

    题目:对开源软件与商业软件关系的认识

    在现代应用编程领域,开源软件与商业软件并非水火不容,而是一种互补与共生的关系。

    首先,开源软件是技术创新的引擎。通过代码共享,开发者可以“站在巨人的肩膀上”,利用 Linux 内核、Git 或各类开源库快速构建应用。开源保证了技术的透明度与自由度,降低了企业和个人的开发门槛。在应用编程中,我们调用的许多底层接口和工具链(如 GCC、CMake)都是开源精神的产物,这极大地推动了全球技术的标准化。

    其次,商业软件提供了稳定的服务保障与市场动力。商业软件(如 RedHat 的企业支持、各类商业套件)通过收费模式,为用户提供持续的技术支持、安全补丁和交互优化。商业利润进一步回馈社区,许多大型商业公司(如华为、谷歌)也是开源社区的主要贡献者。

    最后,两者往往采取“开源核心+商业服务”的混合模式。开源软件负责技术的广度与普及,商业软件负责应用深度与行业落地。对于开发者而言,学会利用开源工具进行高效开发,同时尊重商业版权与闭源产品的安全边界,是当代应用编程人员必备的素养。