注:
- 本题仅作为面试有限参考
- 为节省版面,省去所有
#include
指令- 题目难度与序号无关
- 若无特殊声明,均假设在
Linux x86_64 GCC
编译器环境下
相比于2022年和2021年的小组面试题,此题难度较低,故只做代码层次的解读。相关知识点请移步 西邮Linux兴趣小组2022纳新试题题解 和 西邮Linux兴趣小组2021纳新试题题解 。
@[toc]
1. 请试着解释其输出。
1 |
int main(int argc, char *argv[]) { |
解读:
1 |
|
2. 下面代码的运行输出结果是什么,并说说你的理解。
1 |
int main(int argc, char *argv[]) { |
解读:
1 |
|
3. 这段代码的输出结果是什么?为什么会出现这样的结果?
1 |
int i = 2; |
解读:
1 |
|
4. 下面程序会出现什么结果?为什么会出现这样的结果?
1 |
int main(int argc, char * argv[]) { |
解读:
1 |
|
5. 下面代码的运行输出结果是什么,并说说你的理解。
1 |
int main(int argc, char *argv[]) { |
解读:
1 |
|
6. 下列程序的功能是什么?有什么问题,你能找出问题并解决它吗?
1 |
int* get_array() { |
解读:
1 |
|
7. 下面代码的运行输出结果是什么,并说说你的理解。
1 |
int main(int argc, char *argv[]) { |
解读:
1 |
|
8. 如下程序,根据打印结果,你有什么思考?
1 |
int add(int *x, int y) { |
解读:
1 |
|
9. 在下段程序中,我们可以通过第一步打印出a
的地址,假如在你的机器上面打印结果是0x7ffd737c6db4
;我们在第二步用scanf
函数将这个地址值输入变量c
中;第三步,随机输入一个数字,请问最终输出了什么结果,你知道其中的原理吗?
1 |
void func() { |
解读:
1 |
// It's totally about the basic concept of pointers |
10. 请问一个C语言程序从源代码到可执行文件中间会进行哪些过程,你能简单描述一下每个环节都做了什么事情吗?
编辑:创建和修改C程序的源代码
编译:将源代码转换为机器语言
链接:链接器将源代码由编译器产生的各种模块组合起来,再从C语言提供的程序库中添加必要的代码模块,将它们组成一个可执行的文件
执行:运行程序
11. 请解释一下这行代码做了什么?
1 |
puts((char*)(int const[]){ |
解读:
1 |
|
12. 请随机输入一串字符串,你能解释一下输出结果吗?
1 |
int main(int argc, char *argv[]) { |
这个程序使用选择排序对字符串进行了排序。
13. 用循环和递归求Fibonacci
数列,你觉得这两种方式那种更好?说说你的看法。如果让你求Fibonacci
数列的第100项,你觉得还可以用常规的方法求解吗?请试着求出前100项的值(tip大数运算)。
1 |
|
14. Linux 实操题
请通过命令创建一个目录,在该目录中创建几个后缀为
.Linux
的文件,然后通过命令查询这几个文件的基本属性信息(如文件大小,文件创建时间等),之后使用命令查看该目录下文件名含有“.Linux
”的文件的数量(不包括子目录下的文件),把得到的数字写入到一个文件中,最后删除此目录。
1 |
mkdir mydir |