西邮Linux兴趣小组2020纳新试题题解

感谢 Zhilu 重新录入题目原件。好人一生平安。

注:

  1. 本题仅作为面试有限参考
  2. 为节省版面,省去所有#include指令
  3. 题目难度与序号无关
  4. 若无特殊声明,均假设在Linux x86_64 GCC编译器环境下

1. 请试着解释其输出。

int main(int argc , char *argv[]) {unsigned char a = 255;char ch = 128;a -= ch;printf("a = %d ch = %d\n", a, ch);
}

result

a = 127 ch = -128

solution

ASCII码包括0-127,128无定义输出不明意义的字符

2. 下面代码的运行输出结果是什么,并说说你的理解。

int main(int argc, char *argv[]) {char *str = "Xi You Linux Group 20";printf("%d\n", printf(str));return 0;
}

result

Xi You Linux Group 2021

solution

printf()函数的返回值为参数的字符个数

3. 这段代码的输出结果是什么?为什么会出现这样的结果?

int i = 2;
void func() {if(i != 0) {static int m = 0;int n = 0;n++;m++;printf("m = %d, n = %d\n", m, n);i--;func();} else {return;}
}
int main(int argc, char *argv[]) {func();return 0;
}

result

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

solution

static 定义静态变量,效果类似于全局变量,即出块时还保留,但只作用于本块。

4. 下面程序会出现什么结果?为什么会出现这样的结果?

int main(int argc, char * argv[]) {char ch = 'A';int i = 65;unsigned int f = 33554433;*(int *)&f >>= 24;*(int *)&f = *(int *)&f + '?';printf("ch = %c i = %c f = %c\n", ch, i, *(int *)&f);return 0;
}

result

ch = A i = A f = A

solution

字符存放的其实为ASCII值,65对应’A’,同样f进行运算时使用ASCII码值,输出代表的字符。

5. 下面代码的运行输出结果是什么,并说说你的理解。

int main(int argc, char *argv[]) {int a[2][2];printf("&a = %p\t&a[0] = %p\t&a[0][0] = %p\n", &a, &a[0], &a[0][0]);printf("&a+1 = %p\t&a[0]+1 = %p\t&a[0][0]+1= %p\n", &a+1, &a[0]+1, &a[0][0]+1);return 0;
}

result

&a = 0x7ffdd8cf8fb0     &a[0] = 0x7ffdd8cf8fb0  &a[0][0] = 0x7ffdd8cf8fb0
&a+1 = 0x7ffdd8cf8fc0   &a[0]+1 = 0x7ffdd8cf8fb8        &a[0][0]+1= 0x7ffdd8cf8fb4

solution

&a进行运算对象为整个数组,&a[0]进行运算对象为第0行数组,&a[0][0]进行运算对象为第0行第0个元素。

6. 下列程序的功能是什么?有什么问题,你能找出问题并解决它吗?

int* get_array() {int array[1121]; for (int i = 0; i < sizeof(array) / sizeof(int); i++) {array[i] = i;}return array;//返回局部变量的地址,错误
}
int main(int argc, char *argv[]) { int *p = get_array();
}

solution

int array[1121];//将array定义为全局变量
int* get_array() {for (int i = 0; i < sizeof(array) / sizeof(int); i++) {array[i] = i;}return array;
}
int main(int argc, char *argv[]) { int *p =get_array();
}

7. 下面代码的运行输出结果是什么,并说说你的理解。

int main(int argc, char *argv[]) {char str[] = "XiyouLinuxGroup"; char *p = str; char x[] = "XiyouLinuxGroup\t\106F\bamily";printf("%zu %zu %zu %zu\n", sizeof(str), sizeof(p), sizeof(x), strlen(x));return 0;
}

result

16 8 25 24

solution

sizeof(str)结果计算末尾的’\0’,sizeof§结果得到指针的大小,sizeof(x)结果计算末尾的’\0’,\t \106 \b为转义字符,只占一个字符大小,strlen(x)结果不计算末尾的’\0’

8. 如下程序,根据打印结果,你有什么思考?

int add(int *x, int y) {return *x = (*x^y) + ((*x&y)<<1);
}
int a;
int main(int argc, char *argv[]) {int b = 2020;if(add(&b, 1) || add(&a, 1)) {printf("XiyouLinuxGroup%d\n", b);printf("Waiting for y%du!\n", a);}if(add(&b, 1) && a++) {printf("XiyouLinuxGroup%d\n", b);printf("Waiting for y%du!\n", a);
}return 0;
}

result

XiyouLinuxGroup2021
Waiting for y0u!

solution

逻辑运算从左向右计算,满足条件即停止

9. 在下段程序中,我们可以通过第一步打印出a的地址,假如在你的机器上面打印结果是0x7ffd737c6db4;我们在第二步用scanf函数将这个地址值输入变量c中;第三步,随机输入一个数字,请问最终输出了什么结果,你知道其中的原理吗?

void func() { int a = 2020;unsigned long c;printf("%p\n", &a);printf("我们想要修改的地址:");scanf("%lx", &c);printf("请随便输入一个数字:");scanf("%d", (int *)c);printf("a = %d\n", a);
}

solution

改变地址存的值

10. 请问一个C语言程序从源代码到可执行文件中间会进行哪些过程,你能简单描述一下每个环节都做了什么事情吗?

solution

预处理(处理#语句,生成.i)->编译(语法,生成.s) ->汇编(转换成汇编语言,生成.o)->链接(组合成可执行文件,.exe)

11. 请解释一下这行代码做了什么?

puts((char*)(int const[]){0X6F796958,0X6E694C75,0X72477875,
0X3270756F,0X313230,0X00000A
});

result

XiyouLinuxGroup2021

solution

定义一个指向数组的指针,并输出指针指向的内容

12. 请随机输入一串字符串,你能解释一下输出结果吗?

int main(int argc, char *argv[]) {char str[1121];int key;char t;fgets(str, 1121, stdin);for(int i = 0; i < strlen(str) - 1; i++) {key = i;for(int j = i + 1; j < strlen(str); j++) {if(str[key] > str[j]) {key = j;}} t = str[key];str[key] = str[i];str[i] = t;} puts(str);return 0;
}

solution

排序字符串

13. 用循环和递归求Fibonacci数列,你觉得这两种方式那种更好?说说你的看法。如果让你求Fibonacci数列的第100项,你觉得还可以用常规的方法求解吗?请试着求出前100项的值(tip大数运算)。

solution

//使用循环
int main(){int n;int a=1;int b=1;int sum=0;scanf("%d",&n);if(n<3){printf("1\n");}else {for(int i=3;i<=n;i++){sum=0;sum+=a+b;a=b;b=sum;}printf("%d",sum);}return 0;
}
//使用递归函数
int Fibonacci(int n){while(n>2){return Fibonacci(n-1)+Fibonacci(n-2);}return 1;
}
int main(){int n;scanf("%d",&n);int ret=Fibonacci(n);printf("%d",ret);return 0;
}
使用递归函数进行运算更复杂,需要时间多
使用循环则可以运算更大的数

14. Linux 实操题

请通过命令创建一个目录,在该目录中创建几个后缀为.Linux的文件,然后通过命令查询这几个文件的基本属性信息(如文件大小,文件创建时间等),之后使用命令查看该目录下文件名含有“.Linux”的文件的数量(不包括子目录下的文件),把得到的数字写入到一个文件中,最后删除此目录。

Xiyou Linux Group 2020相关推荐

  1. XUPT Linux Group 2020 2021 2022 note

    2020 1. 请试着解释其输出. int main(int argc , char *argv[]) {unsigned char a = 255;char ch = 128;a -= ch; pr ...

  2. Xiyou Linux Group 2017,2018,2019面试题

    西邮Linux2017纳新题 1. //分析下列程序的输出 int main(int argc, char *argv[]) {int t = 4; printf("%lu\n", ...

  3. Xiyou Linux Group 2021

    西邮Linux兴趣小组2021纳新面试题题解 感谢 Zhilu 重新录入题目原件.好人一生平安. 注: 本题目仅作西邮Linux兴趣小组2021纳新面试题的有限参考. 为节省版面本试题的程序源码中省略 ...

  4. 2013 2014 2015 2016 Xiyou Linux Group 免试题揭秘

    首先给出原来几届的免试题解析链接: 2013 Linux 兴趣小组免试题解析 2014 Linux 兴趣小组免试题解析 2015 Linux 兴趣小组免试题解析 目前2016 Linux 兴趣小组免试 ...

  5. Xiyou linux 2017 面试题基本知识点

    sizef int main() { int t=4; printf("%lu",sizeof(t–)); printf("%liiigviiilu",size ...

  6. Xiyou Linux兴趣小组2020纳新试题

    1.请试着解释其输出 int main(int argc , char *argv[]) { unsigned char a = 255; char ch = 128; a -= ch; printf ...

  7. Kali Linux发布2020.1a版本

    Kali Linux发布2020.1a版本 Kali Linux发布2020.1a版本.现在该版本暂时只能从cdimage.kali.org下载.该版本修复了2010.1不联网安装时,没有桌面的bug ...

  8. 2022-07-17 Linux group与user基础概念

    Linux group与user基础概念 概念 user 用户 group 用户组 Linux 命令使用 user 用户 useradd 添加用户 userdel 删除用户 usermod 修改账号 ...

  9. 理论与实践同行,宏观与细节比肩| The Open Group 2020年度大会进行时

    27日,The Open Group 2020年度线上大会迎来了第二场分享.六位专家,各具强辨识度行业背景,高区分度演讲风格,在大会组委会的融合编排之后,为我们呈现了一场可圈可点.教科书式的分享盛会. ...

最新文章

  1. FreeMarker标签介绍
  2. matlab简单程序实例_visual basic VB.NET实例系列教程第一节(简单实用抽奖程序)...
  3. Android Studio 打开提示Invalid Gradle JDK configuration found错误
  4. 电子到底为什么会干涉?
  5. 域名与转发服务器ip指向不一致_域名映射到家庭网络(无公网IP)
  6. 安装sqlserver时“试图执行未经授权的操作“的错误
  7. 从零写一个编译器(完结):总结和系列索引
  8. 如何批量查问PR值、百度权重、百度快照及收录量,用BlueCatTools批量网站查询工具
  9. Stateflow_状态动作与转移动作
  10. 硅谷程序员跳槽排行榜:最爱竟不是 Google 苹果 Facebook!
  11. python中np没有定义_第六篇:python中numpy.zeros(np.zeros)的使用方法
  12. Ubuntu配置Wine教程
  13. 外贸建站需要注意的地方
  14. js把HTML转成对象,将js对象转换为html
  15. Stata:gen命令中的group()函数的潜在风险
  16. java杨辉三角奇数_杨辉三角中的奇数与偶数
  17. htonl,htons 和 ntohs相关问题
  18. si446使用记录(二):使用WDS3生成头文件
  19. 考虑线程安全的List集合选择
  20. Bounding box regression RCNN系列网络中矩形框的计算

热门文章

  1. viper4android mx760,下一个MX500?MX760详尽分析评测+多图。
  2. 数据百问系列:“未知”数据该如何处理?
  3. frighting!!!
  4. 华为服务器移动硬盘,什么情况!华为也横插一刀如今移动硬盘界?
  5. Room of Windows【翻译】
  6. 数论概论(英文版.第4版)
  7. 17套FPGA开发板资料汇总 | 免费下载
  8. 架设Wikipedia的本地镜像
  9. 基于深度学习的智能问答
  10. OpenDaylight安装