1.请试着解释其输出

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

输出:a=127

b=-128

  • 对a:先将a看作int,就是 0000 0000 0000 0000 0000 0000 1111 1111 ,然后截取char类型的长度,就是1111 1111(补码),因为无符号,原码:1111 1111,就是255,减去128得127。

  • 对ch:char类型,8字节,128的原码就是1000 0000,这是个有符号型,所以输出,为-128.


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

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

输出:Xi You Linux Group 2021

主要考察知识点:printf函数返回值

详情可见:【无标题】西邮Linux兴趣小组2022纳新试题_一定.的博客-CSDN博客第一题


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;
}

关于变量的生命周期和定义域等,详见【无标题】西邮Linux兴趣小组2022纳新试题_一定.的博客-CSDN博客第三题


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

int main(int argc, char * argv[])
{  char ch = 'A'; int i = 65; unsigned int f = 33554433; //将f转化为二进制数 划重点!所有的逻辑运算都是对二进制数做的//f=0000 0010 0000 0000 0000 0000 0000 0001*(int *)&f >>= 24; //将f右移24位//f=0000 0000 0000 0000 0000 0000 0000 0010*(int *)&f = *(int *)&f + '?';//'?'=63,对照ASCII码表,所以f=0000 0000 0000 0000 0000 0000 0010 0001printf("ch = %c i = %c f = %c\n", ch, i, *(int *)&f); //%c均指输出类型为字符return 0;
}
//位运算和ASCII码表

输出:ch=A

i=A

f=A


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]); //%p用来表示地址的输出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;
}

输出:&a = 0x7ffcd238aaf0 &a[0] = 0x7ffcd238aaf0 &a0 = 0x7ffcd238aaf0

&a+1 = 0x7ffcd238ab00 &a[0]+1 = 0x7ffcd238aaf8 &a0+1= 0x7ffcd238aaf4

a是一个二维数组,&a指的是a0的地址,而地址值加1并非真正意义上的加一,而是使指针指向下一个元素


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

int* get_array()
{  int array[1121]; for (int i = 0; i < sizeof(array) / sizeof(int); i++){   array[i] = i; }  return array;//此处报错,返回局部变量时危险的
}
//函数一经调用之后空间自动释放,即array数组所做的改变不会被传回main函数
int main(int argc, char *argv[])
{  int *p = get_array();
}

功能:给数组array赋值

问题附在代码中,可见我的另一篇文章第12题西邮Linux兴趣小组2021纳新试题_一定.的博客-CSDN博客

int* get_array()
{  int  static 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();
}

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

int main(int argc, char *argv[])
{  char str[] = "XiyouLinuxGroup"; char *p = str; //指针p指向str的首地址 char x[] = "XiyouLinuxGroup\t\106F\bamily"; printf("%zu %zu %zu %zu\n", sizeof(str), sizeof(p), sizeof(x), strlen(x));//sizeof(str)占用内层的大小//sizeof(p)指针的大小//sizeof(x)指x的大小//strlen(x)指x的长度return 0;
}

输出:16 8 25 24


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;
} 

输出:XiyouLinuxGroup2021

Waiting for y0u!

位运算规则:

1."|" 或运算符 有1为1,全0为0.
2."&" 与运算符 有0为0,全1为1.
3.“^" 异或运算符 相同为0,不同为1.
4.“<<" 左移运算符 可以理解为去掉最左边的数,在最右边补0,往左移一位
5.“>>" 右移运算符 可以理解为去掉最右边的数,在最左边补0,往右移一位
6.“~” 非运算符 相当于取反
7.转化为二进制!二进制!二进制!(重要的事情说三遍)

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); //把c的地址里面存的值以int类型来解释,即将这个数字放到c地址中printf("a = %d\n", a);
}
//最终会输出随机输入的那个数字

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

详见我的另一篇文章第14题西邮Linux兴趣小组2021纳新试题_一定.的博客-CSDN博客

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

puts((char*)(int const[]){0X6F796958,0X6E694C75,0X72477875,0X3270756F,0X313230,0X00000A}
);//打印XiyouLinuxGroup2021
//大小端问题,详见我的另一篇文章第12题https://blog.csdn.net/weixin_74111699/article/details/127856194

大小端问题,详见我的另一篇文章第12题https://blog.csdn.net/weixin_74111699/article/details/127856194


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;
}

类似于简单选择排序,通过比较字符的ASCII码来比较大小


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

mkdir [选项] [目录名称] 创建目录
touch创建文件或者修改文件的时间属性
ls-l显示一个文件的属性以及文件所属的用户和组
ls*.Linux查看文件数量
rmdir删除子目录

Xiyou Linux兴趣小组2020纳新试题相关推荐

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

    西邮Linux兴趣小组2020纳新试题题解 1. 请试着解释其输出. int main(int argc , char *argv[]) {unsigned char a = 255;char ch ...

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

    第一题: 运行下面的代码,输出结果是什么,请解释说明: #include<stdio.h> int i; int main(int argc, char *argv[]) {i--;if ...

  3. 西邮Linux兴趣小组2021纳新试题

    1.大小和长度竟然不是一个意思, sizeof()和strlen()有什么异同之处? 他们对于不同参数的结果有什么不同?请试举例子说明. int main(void) { char s[] = &qu ...

  4. 西邮Linux兴趣小组2021纳新试题②

    1. 结果:127 -128 signed char的范围是-128~127 unsigned char的范围是0~256 计算a-ch是把ch转换成整数,而输出ch是进行了类型转换为char类型,1 ...

  5. [c语言]西邮Linux兴趣小组2020纳新面试题

    一.运行下面的代码,输出结果是什么,解释原因. int i; int main(int argc, char *argv[]) {i--;if (i > sizeof(i)){printf(&q ...

  6. 西邮Linux兴趣小组2019纳新试题总结

    1.下面代码段将打印出多少个'='?运用相关知识解释该输出. int main() {for(unsigned int i=3;i>=0;i--){putchar('=');} } 无数个'=' ...

  7. 西邮 Linux 兴趣小组 2021 纳新试题

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

  8. 西邮Linux兴趣小组2021纳新面试题

    #include<stdio.h> #include<string.h> int main(void) {char s[]="I love Linux\0\0\0&q ...

  9. 西邮Linux兴趣小组2022纳新面试题题解

    本题目只作为Xiyou Linux兴趣小组2022纳新面试的有限参考. 为节省版面,本试题的程序源码省去了#include指令. 本试题中的程序源码仅用于考察C语言基础,不应当作为C语言「代码风格」的 ...

最新文章

  1. 设计模式系列3-----C++实现命令模式(Command Pattern)
  2. 笔记-项目进度管理-控制进度
  3. 广搜最短路径变形,(POJ3414)
  4. Docker Compose安装以及入门
  5. STM32 Futaba SBUS协议解析
  6. freeradius mysql web_使用daloRADIUS Web程序管理FreeRADIUS服务
  7. 【计算机】数据结构-严蔚敏/清华大学P1
  8. 工程师结婚还要加班,都是鹿晗干的好事
  9. 空气质量提醒 BMI指数计算 Python123题解
  10. 到处excel表格的数据和页面的数据不一致
  11. lr背景虚化_LR调色教程,用LR把夏天的颜色以图片的样式呈现出来
  12. stm32f4红外传感器模块 和人体感应模块HCSR501
  13. 用Java给图片添加文字水印
  14. linux将php停了,Linux停PHP环境的搭建
  15. 【IoT】蓝牙 GAP 和 GATT 协议简析
  16. 电磁离合器线圈绕线机
  17. Raspberry/Ubuntu 20.04命令行连接eap-gtc企业wifi
  18. layui中的treeGrid 树形表格
  19. git 撤销更改_如何撤消Git中的更改
  20. 【Realtek】【杜比Dolby音效管理应用】DS1, DAX2, DAX3, DTSX【解锁驱动见说明】

热门文章

  1. 进入游戏后如何回到计算机界面,玩LOL胜利后点击“继续游戏”要等个将近10秒才能回到结算界面,请问是怎么回事?...
  2. 计算机错误1327,错误:错误 1327。 无效驱动器
  3. 亿图图示专家导出pdf并去除页面白边,可用于latex
  4. 运动耳机买什么样的好、最好用的运动耳机排行榜
  5. 哈希表实现通讯录的设计与实现
  6. 勒让德符号和雅可比符号
  7. 棋牌服务器选择指南:不只是要看带宽
  8. 真香预警!2021热门流程图Top7
  9. 新型冠状病毒肺炎预防宣传PPT模板-优页文档
  10. 游戏型计算机配置方案4000,高性价比游戏配置 4000元i5-7500配GTX1050Ti电脑配置推荐 (全文)...