锐捷网络2021秋招笔试题

2021-05-28 10:40:45 浏览数 (1)

来源于读者投稿。

笔试时间:2020.09.24

时长:90分钟

题目:25道题,全是C语言代码题,问输出结果。

总结:时间紧,任务重,硬核。

本文大家可以先收藏,后面再做一做看,锐捷网络出的题目考察知识点很全面。

本系列持续更新,欢迎大家关注并星标我的微信公众号,有求职或者跳槽需要的即可回来复习。

题目

答案在题目开头

1、

代码语言:javascript复制
str1:
str2:str2
str3:null

第一个,函数内部定义的变量在函数结束时候释放掉了,所以返回会出错,

第二个是str2,

第三个定义是void,没有返回值,打印空,内存非法访问。

代码语言:javascript复制
#include<stdio.h>

char *getstr1()
{
 char s[]="str1";  //static char s[]="str1";
 return s;
}
char *getstr2()
{
 char *s="str2";
 return s;
}
void getstr3(char *s)
{
 s="str3";
 return;
}

int main()
{
 char *s1,*s2,*s3;
 s1=getstr1();
 s2=getstr2();
 getstr3(s3);
 printf("str1:%srn",s1);
 printf("str2:%srn",s2);
 printf("str3:%srn",s3);
}

2、4 6 1

代码语言:javascript复制
#include<stdio.h>
#include<string.h>

int main()
{
 char *str="Ruijie";
 
 printf("str1:%drn",sizeof(str));
 printf("str2:%drn",strlen(str));
 printf("str3:%drn",sizeof(*str));
}

3、8 20

代码语言:javascript复制
#include<stdio.h>

int main()
{
 int x=0,y=0;`
 while(x<15){
         y  ;
         x =  y;
 }
 printf("%d %d",y,x);
}

4、48(考察宏定义的边界效应)

代码语言:javascript复制
#include<stdio.h>

#define N 3
#define Y(n) ((N 1)*n)

int main()
{
 int z;
 z=2*(N Y(5 1));
 printf("%d",z);
}

5、0 1

ptr[0]是等于&a[0][0],所以*ptr[0]=a[0][0]

所以最后这个二维数组是 000 100 200

代码语言:javascript复制
#include<stdio.h>
#include<string.h>

static int arr[3][3]={0};

void init(int (*ptr)[3])
{
 int i=0;
 for(i=0;i<3;i  ){
  *(ptr[i])=i;
 }
 return;
}

int main(int argc,char **argv)
{
 init(arr);
 printf("%d,%dn",arr[0][1],arr[1][0]);
 return 0;
}

6、%s 遇到才会截止输出,遇到才会截止计算

代码语言:javascript复制
#include<stdio.h>
#include<string.h>

int main()
{
 char str[]={'o','u','l','d'};
 printf("%d",strlen(str));
 return 0;
}
代码语言:javascript复制
#include<stdio.h>
#include<string.h>

int main()
{
 char str[]={'o','u','l','d',''};
 printf("%dn",strlen(str));
 printf("%sn",str);
 
 return 0;
}

7、如果用%s输出,需要注意打印字符串的时候,他认为’‘是结束符,所以你不加’‘的时候,他可能会打印其他乱七八糟的东西

ABC

ABCABC

4

3

代码语言:javascript复制
#include<stdio.h>
#include<string.h>

int main()
{
 char a[]="ABC";
 char b[]={'A','B','C'};
 printf("%sn",a);
 printf("%sn",b);
 printf("%dn",sizeof(a));
 printf("%dn",sizeof(b));
 
 return 0;
}

8、 -1,4294967295

代码语言:javascript复制
#include<stdio.h>
#include<string.h>

int main()
{
 char a=0xff;
 printf("%d,%un",a>>8,a>>8);  //这里的%d   让它变成了int
 return 0;
}

看下面。右移八位全部移走了,然后补了符号位,1111 1111。另外,在内存中,因为是有符号的,所以1111 1111是个负数,负数在内存中是补码的形式存在,所以11111111-1再取反就是真实的数,就是-1。

9、0

代码语言:javascript复制
#include<stdio.h>
#include<string.h>

int main()
{
 printf("%dn",~3&(2&(3^4)));  //按位取反  异或 
 return 0;
}

10、80

代码语言:javascript复制
#include<stdio.h>

int main()
{
 int a[3][4]={{10,20,30,40},{50,60,70,80},{90,91,92,93}};
 int (*p)[4];
 p=a 1;
 printf("%dn",p[1][-1]);
 return 0;
}

11、25

代码语言:javascript复制
#include<stdio.h>

int main()
{
 int a[2][3]={{1,3,5},{2,4,6}};
 int m,*ptr;
 
 ptr=&a[0][0];
 m=(*ptr)*(*(ptr 2))*(*(ptr 2));
 
 printf("%dn",m);
 return 0;
}

12、静态变量全局只初始化一次 m=1,n=1 m=2.n=1

代码语言:javascript复制
#include<stdio.h>
#include<string.h>

int test()
{
 static int m=0;
 int n=0;
 
 m  ;
 n  ;
 printf("m=%d,n=%dn",m,n);
 
 return 0;
}

int main()
{
 test();
 test();
 
 return 0;
}

13、4 2 2(没有break的话会一直向下执行)

代码语言:javascript复制
#include<stdio.h>

int main()
{
 int a=0,b=0,c=0;
 int i;
 
 for(i=0;i<5;i =2){
  switch(i){
   case 1:
    a  ;
    b  ;
    break;
   case 2:
    c  ;
    a  ;
   case 3:
    c  ;
   case 4:
    b  ;
   default:
   a  ;
   break;
  }
 }
 printf("%d,%d,%dn",a,b,c);
 
 return 0;
}

14、e

代码语言:javascript复制
#include<stdio.h>
#include<string.h>

int main()
{
 char a[7]="abcdef",b[4]="ABC";
 strcpy(a,b);
 printf("%cn",a[4]);
 return 0;
}

15、4 3(逗号运算符)

代码语言:javascript复制
#include<stdio.h>

int main()
{
 int y=3,x=3,z=1;
 printf("%d,%dn",(  x,  y),z 2);
 return 0;
}

4 1

代码语言:javascript复制
#include<stdio.h>
#include<string.h>

int main()
{
 int y=3,x=3,z=1;
 //printf("%d,%dn",(  x,  y),z 2);
 printf("%d,%dn",(  x,  y),z  );

 return 0;
}

16、b(ASCII)

代码语言:javascript复制
#include<stdio.h>
#include<string.h>

int main()
{
 char b='v';
 printf("%Cn",b-20);
 return 0;
}

17、99(ASCII)

代码语言:javascript复制
#include<stdio.h>
#include<string.h>

int main()
{
 char str[]="abcde";
 char *p;
 p=&str[2];
 printf("%dn",*p);
 return 0;
}

18、什么情况下会编译通过,运行出错

代码语言:javascript复制
A、gcc用-Werror选项,程序组译失败。

B、gcc使用-Werror选项,编译正常,程序运行时崩溃。

C、gcc使用-Werror选项,编译正常),程序正常运行,备份数据输出的为随机数,

D、程序正常运行,备份数据输出的为1.

19、以下哪些任务不可以放到中断的上半部执行?

代码语言:javascript复制
A、时间敏感的任务

B、硬件相关的任务

C、进程通信的任务

D、不可被中断的任务

20、线程

25、如下所示程序,LINE C 和LINE P将会输出什么?

代码语言:javascript复制
LINE C: value=
LINE P: value=

#indlude <stdio.h>
#indlude <pthread.h>
#include <unistd.h>
#include <sys/wait.h>

int value=0

void *runner(void *param) /* the thread */
{
  value=5;
  pthread_exit(0);
}

int main(void)
{
  pid_t pid;
  pthread_t tid;
  pthread_attr_t attr;

  pid=fork();
  if(pid==0)
  {
  pthread_attr_init(&attr);
  pthread_create(&tid,&attr,runner,NULL);
  pthread_join(tid,NULL);
  printf("LINE c: value=%dn",value); /*LINE C*/ 
  }
  else if(pid> 0)
  {
  wait(NUL);
  printf("LINE P: value=%dn",value); /*LINE P*/
  }
  return0;

更多问题请参看以下文章:

嵌入式笔试面试题目系列(汇总)

·················· END ··················

0 人点赞