0. 提交要求
- 使用 Git 管理代码,并使用 SynX GitLab 托管平台账号提交答案。自行组织 Git 仓库的结构。
- 每个 Git 仓库都应有一个 README 文档,其中包括该仓库的基本内容以及题目与目录结构的对应关系。也可以参考如下 README 文档模板写出更漂亮的 README。
- 对于问答题,请使用 Markdown 格式的文档提交答案;对于编程题,在提交代码的基础上,为其编写Markdown 格式的文档,写出该题目的基本思路及运行结果;对于实验题,请结合实验步骤与实验过程的屏幕截图编写Markdown 格式的文档。
- 不要求做完所有题目,欢迎对软件工程感兴趣或学有余力的同学积极探究。无法完全解答的题展示思路即可。
1. Git 基础
Git 在当前应用开发中和项目合作中起到举足轻重的作用,目前主流上都采用了Git进行公司内部的项目管理。请查阅相关资料并回答以下两个小问题。
1.1 Git 初识
回答:Git 是什么?它有什么用?为什么要用 Git?请用自己的语言解释 Git 的含义和 Git 的优缺点。
1.2 Git 实战
现在你已经明白了 Git 是什么,也意识到了 Git 的好,那么就让我们来实践一下吧!
- 首先请新建一个分支 A,本题代码不与其他题目代码提交在同一个分支下
- 产品经理希望你使用 C 语言写一个猜拳小游戏,并将其命名为 finger-guessing.c,赢一次以后即退出游戏。完成后,请将其推送到远程仓库(注意远程仓库应当也提交到分支 A)。
- 产品经理觉得这个游戏过于简单,他希望增加一个计时功能,限时10秒内获得胜利,否则直接退出游戏。完成后,请将其推送到远程仓库。
- 倒霉的产品经理在第999次失败后愤怒地要求取消计时功能,可是我们的代码已经改得一团糟了,难道我们要从头开始检查吗?并不。请通过 git 版本控制回退到添加计时功能以前的版本。完成后,请将其推送到远程仓库。
- 一次就退出太短了,产品经理希望增加到五局三胜制,平局不记录,请注意输出胜局情况。完成后,请将其推送到远程仓库。
- 输了很多次的产品经理希望拥有一个作弊功能,如果输入 zzz 则进入每把必赢的作弊模式。但是,鬼知道产品经理还会提出多少功能,所以请新建一个分支 B,在 B 分支中添加该功能,并将修改后的文件推送到远程仓库(注意远程仓库此时应提交到分支 B)。
- 产品经理想对五局三胜做出一些修改,请转到分支 A,将五局三胜改为三局两胜,并将修改后的文件推送到远程仓库(注意远程仓库此时应提交到分支 A)。
- 产品经理终于满意了,她决定上线这款产品。请合并 A 和 B,同时保留三局两胜制和作弊模式两个功能。完成后,请将其推送到远程仓库。
2. Linux 基础
2.1 Linux 发行版
Linux 可以指 Linux 操作系统内核,也可以指基于 Linux 内核的一系列操作系统的统称。请尝试使用任意方法,包括但不限于虚拟机、云服务器、WSL,获取一个 Linux 环境,请在文档中写出获取该 Linux 环境的方法,以及选择某一发行版的原因,并回答:
- Linux 内核与各发行版之间的关系是什么?
- Linux 各发行版之间有哪些异同?
2.2 Linux 命令基础
请尝试使用命令行界面实现如下操作:
- 创建目录、列出某一目录下的文件列表。
- 创建/删除/查看文本文件。
- 编辑文本文件。
- 通过包管理器或其他方式安装 GCC 工具(C 语言编译器)。
- 创建
main.c
文件并编写 Hello World! 程序。 - 使用 GCC 编译
main.c
文件并运行。
请给出使用的命令及命令执行的结果。
3. C 语言基础
3.1 字符串简单操作
写一个能够实现如下功能的函数:
输入:字符串a和字符串b,a和b中只包含小写字母
输出:a和b中都包含的字母
例如:a-->"cdebb" b-->"b" 则输出字符"b"
3.2 链表
给定一个链表,请写一个程序判断链表中有没有环。
前置知识:结构、指针
//链表节点定义为
typedef struct node {
ElemType data;
struct node *next;
} Node, *NodePtr, LinkList, *LListPtr;
//你要完成的函数:
bool if_circle(LlistPtr){
}
//如果有环则返回true,否则返回false
3.3 导弹拦截(选做)
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入导弹依次飞来的高度,计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。
输入:一行,若干个整数,中间由空格隔开
输出:两行,每行一个整数,第一个数字表示这套系统最多能拦截多少导弹,第二个数字表示如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。
示例:
INPUT:
389 207 155 300 299 170 158 65
OUTPUT:
6
5
3.4 代码补全
补全下面的代码块,要求如下:
- 分配一个初始大小为 5 的整数数组
- 在输入的数据量不超过系统允许的最大内存限制的情况下,输入一系列不为 -1 的整数,当程序输入 -1 时停止输入。
- 每当数组满了时重新分配内存
- 考虑分配时所有可能的情况
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr = NULL;
int size = 5, count = 0;
int input;
/*
TODO
*/
for (int i = 0; i < count; i++)
printf("%d ", arr[i]);
free(arr);
return 0;
}
4. Python 基础
- 文件 I/O:编写一个 Python 脚本,该脚本的作用是在同文件夹下创建一个 txt 文件并写入
"hello world"
。 - 斐波那契数列:编写一个 Python 函数,这个函数能返回斐波那契数列中第 n 个数的值。尝试用图示表示该函数的运算流程。
- 列表操作:编写一个 Python 函数,这个函数接收一个列表,将列表中所有大于 0 的数删除,并且在打印被删除的数在原列表中的下标。
- 矩阵相乘:请尝试编写函数,通过循环的方法计算两个矩阵相乘,例如:
\left[ \begin{matrix} 1 & 2 & 3 \end{matrix} \right] \cdot \left[ \begin{matrix} 1 \\ 2 \\ 3 \end{matrix} \right] \\ \left[ \begin{matrix} 1 \\ 2 \\ 3 \end{matrix} \right] \cdot \left[ \begin{matrix} 1 & 2 & 3 \end{matrix} \right] \\ \left[ \begin{matrix} 1 & 2 \\ 3 & 4 \end{matrix} \right] \cdot \left[ \begin{matrix} 1 & 2 \\ 3 & 4 \end{matrix} \right]
- PIP 包管理器:PIP 是 Python 的一个包管理工具,请你用 PIP 下载 NumPy 包并熟悉 NumPy 的用法。请给出下载过程及对 NumPy 包功能的理解,并使用 NumPy 计算上述矩阵乘法。
0 条评论