西邮linux兴趣小组2023面试题

① 本题目只作为西邮 Linux 兴趣小组 2023 纳新面试的有限参考。
② 为节省版面,本试题的程序源码省去了#include 指令。
③ 本试题中的程序源码仅用于考察 C 语言基础,不应当作为 C 语言「代码风格」的范例。
④ 所有题目编译并运行于 x86_64 GNU/Linux 环

0.鼠鼠我啊,要被祸害了

有 1000 瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水,24 小时后就会准时死亡。
至少要多少只小白鼠才能在 24 小时内鉴别出哪瓶水有毒?

首先举个例子,4瓶水,给其编号00 01 10 11,两个小鼠,分别喝第一位为1的水,第二位为1的水,就可以判断出哪一瓶有毒,,8瓶水000 001 010 011 100 101 110 111,以此类推,需要三只小鼠,即2的10次方,需要10只小鼠。

1.先预测一下~

按照函数要求输入自己的姓名试试~

char *welcome() {
   
 // 请你返回自己的姓名
}
int main(void) {
   
 char *a = welcome();
 printf("Hi, 我相信 %s 可以面试成功!\n", a);
 return 0;
}

第一种

  
char *welcome() {
     
    return "张三";  
}  
  
int main(void) {
     
    char *a = welcome();  
    printf("Hi, 我相信 %s 可以面试成功!\n", a);  
    return 0;  
}

第二种

  
char *welcome() {
     
    char *arr="zhangsan";
    return "zhangsan" ;  
}  
  
int main(void) {
     
    char *a = welcome();  
    printf("Hi, 我相信 %s 可以面试成功!\n", a);  
    return 0;  
}

2.欢迎来到 Linux 兴趣小组

有趣的输出,为什么会这样子呢~

int main(void) {
   
 char *ptr0 = "Welcome to Xiyou Linux!";
 char ptr1[] = "Welcome to Xiyou Linux!";
 if (*ptr0 == *ptr1) {
   
 printf("%d\n", printf("Hello, Linux Group - 2%d", printf("")));
 }
 int diff = ptr0 - ptr1;
 printf("Pointer Difference: %d\n", diff);
}

考点:printf的返回值
if (*ptr0 == *ptr1) 这个条件判断的是 ptr0 和 ptr1 所指向的字符串的第一个字符是否相同。由于两个字符串完全相同,因此条件为真。
printf(“%d\n”, printf(“Hello, Linux Group - 2%d”, printf(“”)));内层的 printf(“”) 调用返回0,由于格式化字符串中的 %d 被0替换,第二个 printf 实际上会打印 “Hello, Linux Group - 20”,并返回打印的字符数,然后,外层的 printf 会打印这个返回的字符数(即23)
打印

Hello, Linux Group - 2023

int diff = ptr0 - ptr1; 这行代码计算两个指针之间的差值,结果为随机值

3.一切都翻倍了吗

① 请尝试解释一下程序的输出。
② 请谈谈对 sizeof()和 strlen()的理解吧。
③ 什么是 sprintf(),它的参数以及返回值又是什么呢?

int main(void) {
   
 char arr[] = {
   'L', 'i', 'n', 'u', 'x', '\0', '!'}, str[20];
 short num = 520;
 int num2 = 1314;
 printf("%zu\t%zu\t%zu\n", sizeof(*&arr), sizeof(arr + 0),
 sizeof(num = num2 + 4));
 printf("%d\n", sprintf(str, "0x%x", num) == num);
 printf("%zu\t%zu\n", strlen(&str[0] + 1), strlen(arr + 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值