XiyouLinux兴趣小组2021纳新试题详解

前言

现在是暑假留校近一个月的一个下午。两周时间里,我们草草完成了聊天室的项目,一周时间里就在改bug、写博客。在这个百无聊赖的下午,突然想起来去年的总结小组面试题的任务还一直拖欠着,我也就趁着今天下午的时间,把小组近三年来的面试题总结一下。希望来年可以给新生提供一点点参考。


2021年纳新试题

1
输出:

a = 127 ch = -128

解析:
char类型是有符号类型,表示范围为 -128~+127
因此,a = 127;
b = 128,二进制表示为 1000 0000,由于高阶位是1,表示该值为负值,再由二进制补码转化得出b的绝对值,即:

1 0000 0000 - 1000 0000 = 1000 0000	(128)

因此,ch = -128。
详细可参考《c primer plus》 15.1.2 有符号整数

2
输出:

Xi You Linux Group 2021

解析:
本题考察printf()函数的返回值,查看man手册我们可以知道:Upon successful return, printf() return the number of characters printed.(成功返回后,printf() 返回打印的字符数。)
manual
即printf()函数返回打印的字符数。"Xi You Linux Group 20"有21个字符(包括空格),则先打印str,后打印返回值21

3
输出:

m = 1, n = 1
m = 2, n = 1

解析:
本题重点在于两个变量:m、n
其中:m是具有静态存储期的块作用域变量,n是具有自动存储期的块作用域变量
所谓具有静态存储期,其实就是指该变量储存在静态内存中,它从程序被载入到程序结束期间都存在。

本题考察《c primer plus》 12.1 存储类别相关内容

4
输出:

ch = A i = A f = A

解析:
本题考察移位运算符 >>/<<与ascii码的理解,重难点在变量f

*(int *)&f,考察取地址、强制类型转换以及解引用的知识。

在进行位移运算之前,先将f转化为二进制,然后再按位右移:

	10000000000000000000000001 ==> 00000000000000000000000010 (2)

'?'的ascii码为63,63(?) + 2 = 65(A)

5
输出:

&a = 0x7fff604b9900     &a[0] = 0x7fff604b9900  	&a[0][0] = 0x7fff604b9900
&a+1 = 0x7fff604b9910   &a[0]+1 = 0x7fff604b9908    &a[0][0]+1 = 0x7fff604b9904

解析:
本题考察对数组名的理解。注意,输出的结果为16进制,因此9900在加16字节之后变为9910。

6
作用:

给数组赋值,大小为数据下标的大小。
即array[0] = 0, array[1] = 1, array[100] = 100

问题:

函数get_array()返回的array是一个局部变量的地址
在函数get_array()结束之后,该地址内存上的数据被清除
即返回的是一个垃圾地址

修改:
fix

7
输出:

16 8 25 24

解析:
本题考察对转义字符的理解

其中%zu输出size_t即unsigned int;
字符数组x中:\t表示移到下一个水平制表位,\b将当前位置移到前一列,\106表示’F’,106在ascii码中表示八进制的’F’。

8
输出:

XiyouLinuxGroup2021
Waiting for y0u!

解析:
本题考察C按位运算符,具体可参考:
《c primer plus》 15.3

9
输出:

第二个sacnf()输入的值

解析:
这道题考察对函数scanf()的理解。
scanf()是将读取到的数据存入一个内存地址中
第一个scanf()将变量a的地址赋值给变量c,这时变量c的内存存储的值为变量a的内存地址;
我们注意到:第二个scanf()没有取地址符’&’,因此,scanf()将输入的值赋值给地址&a

10
参考https://blog.csdn.net/no_compare_no_harm/article/details/89601004

11
输出:

XiyouLinuxGroup2021

解析:
本题考察大小端的内容
大端存储:就是把一个数的低位字节序的内容存放到高地址处,高位字节序的内容存放在低地址处。
小端存储:就是把一个数的低位字节序的内容存放到低地址处,高位字节序的内容存放在高地址处。

本题还有一个较难理解的点是(int const[ ]),int const[ ]可以抽象成int const *,而int const *与const int *没有任何区别,即指向一个整形常量的指针。
详细可参考https://blog.csdn.net/huangchijun11/article/details/72725463

这时将十六进制的ASCII码大端存储的方式存放到内存中,将其强转为字符串类型((char *))并输出(puts)

12

本题考察一个简单的选择排序

输入:edcba
输出:abcde

13
Fibonacci数列第100项为3.542248e20
关于大数加法,可以参考https://blog.csdn.net/binxxi/article/details/111460452

除开大数加法,我们还可以使用一个非常简单的方法来求解。那就是双精度变量double
Fibonacci


后记

还记得去年面试的时候我问了学长一个问题,“为什么我们明明是2020届的新生,但纳新题里总出现的是’XiyouLinuxGroup2021’呢?难道是你们为了凑字符数硬改成的2021?”
其实这是历史原因,因为小组以前是在下半学期才开始纳新,新入学的大一们在寒假过完之后就已经到了下一年了。

去年第一次来面试的那个早上下了很大的雪,拿着准备得并不充分的面试题就来到了实验室。

马上我们也要进入大二来迎接学弟学妹们了,我们要给出纳新试题,我们要在2021年秋季举办“XiyouLinuxGroup2022纳新宣讲会”,我们要在入冬之后开始面试。总之,欢迎大家的到来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值