我要投稿 投诉建议

华为面试题 c语言

时间:2021-02-06 13:17:23 面试问题 我要投稿

华为面试题 c语言

  华为面试题 c语言(一)

  题目:输入一个正整数 X,在下面的等式左边的数字之间添加+号或者-号,使得等

华为面试题 c语言

  式成立。

  1 2 3 4 5 6 7 8 9 = X

  比如:

  12-34+5-67+89 = 5

  1+23+4-5+6-7-8-9 = 5

  请编写程序,统计满足输入整数的所有整数个数。

  输入: 正整数,等式右边的数字

  输出: 使该等式成立的个数

  样例输入: 5

  样例输出: 21【下面的代码只输出了所有的等式,没有输出个数】

  代码如下:

  #include

  void dfs(int layer, int currentResult, int lastOp, int lastSum);

  const char sym[3] = {'+' , '-' , ' '};

  int ops[21] = {0};

  int result , num;

  void main()

  {

  while (1)

  {

  printf("请输入等式右边的值\n");

  scanf("%c",&result);

  printf("\n以下是使等式成立的公式:\n");

  dfs(1,0,0,0);

  }

  return ;

  }

  void dfs(int layer, int currentResult, int lastOp, int lastSum)

  {

  int i;

  lastSum *= (layer > 9) ? 100 : 10;

  lastSum += layer;

  if(layer == 9)

  {

  currentResult += (lastOp) ? (-1 * lastSum) : lastSum;

  if(currentResult == result)

  {

  ++num;

  printf("1");

  for(i = 2 ; i <= 9 ; ++i)

  {

  if(sym[ops[i-1]] != ' ')

  printf(" %c ", sym[ops[i-1]]);

  printf("%d", i);

  }

  printf(" = %d\n" , result);

  }

  return;

  }

  ops[layer] = 2;

  dfs(layer + 1 , currentResult , lastOp , lastSum);

  currentResult += (lastOp)? (-1 * lastSum) : lastSum;

  ops[layer] = 0;

  dfs(layer + 1 , currentResult , 0 , 0);

  ops[layer] = 1;

  dfs(layer + 1 , currentResult , 1 , 0);

  }

  华为面试题 c语言(二)

  一面:

  介绍我的项目,针对我的项目中的点询问是如何实现的

  Activity生命周期?为什么Activity要这么设计?这样设计有什么好处?

  Android与iOS运行机制上有哪些不同?

  为什么Android用起来没有iOS流畅?为了让Android系统更流畅,应该从哪些方面做好?

  如何让Service不被杀死?

  Android系统分层?Library层起什么作用?

  如果一个应用要升级需要注意哪些方面?(我回答服务端api要兼容,如果只是小bug就通过补丁方式,但是貌似面试官不满意,就引导我说数据方面的,我才知道原来是想要我说本地数据的兼容)

  问我有什么要问他的?

  还有其他的一些问题,记不太清了….

  二面:

  二面是一个中年男人,一开始很严肃,聊了几句后它就笑嘻嘻了。

  首先叫我介绍自己

  本科在哪读的(普通二本)

  家里有多少人,是农村的还是城市的,家里生活水平怎么样?

  有没有女朋友、女朋友是哪里人、女朋友有没有工作?

  为什么不留武汉(我简历填杭州),不留武汉你女朋友同意吗?

  选一个你收获最大的项目来谈谈?(后面就是针对我的项目一直聊~)

  二面大概30分钟左右,后面说我的'性格测试没通过,让我重新再做一次。然而,第二次性格测试还是没通过,最终我还是因为性格测试没通过的原因,与华为无缘。。。。

  华为面试题 c语言(三)

  程序的局部变量存在于(堆栈)中,全局变量存 在于(静态区 )中,动态申请数据存在于( 堆)中。

  一点小总结:

  1、关于堆栈,印象最深的就是在做uboot移植,在你准备进入c代码时 ,你必须给c代码一个良好的运行环境,其中重要的一项就是设置堆栈。

  2、关于静态内存分配和动态内存分配的区别及过程

  1) 静态内存 分配是在编译时完成的,不需要占用CPU资源;动态分配内存是在运行时完成的 ,动态内存的分配与释放需要占用CPU资源;

  2) 静态内存分配是在栈上 分配的,动态内存是堆上分配的;

  3) 动态内存分配需要指针或引用数据 类型的支持,而静态内存分配不需要;

  4) 静态分配内存需要在编译前确 定内存块的大小,而动态分配内存不需要编译前确定内存大小,根据运行时环境 确定需要的内存块大小,按照需要分配内存即可。可以这么说,静态内存分配是 按计划分配,而动态内存分配是按需分配。

  5) 静态分配内存是把内存的 控制权交给了编译器,而动态内存是把内存的控制权交给了程序员;

  综 上所述,静态分配内存适合于编译时就已经可以确定需要占用内存多少的情况, 而在编译时不能确定内存需求量时可使用动态分配内存;但静态分配内存的运行 效率要比动态分配内存的效率要高,因为动态内存分配与释放需要额外的开销; 动态内存管理水平严重依赖于程序员的水平,如果处理不当容易造成内存泄漏。

  华为面试题 c语言(四)

  如何引用一个已经定义过的全局变量?

  答:extern

  可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变量写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。

  此外,extern修饰符可用于指示C或者C++函数的调用规范。比如在C++中调用C库函数,就需要在C++程序中用extern “C”声明要引用的函数。这是给链接器用的,告诉链接器在链接的时候用C函数规范来链接。主要原因是C++和C程序编译完成后在目标代码中命名规则不同

  1.extern用在变量声明中常常有这样一个作用,你在*.c文件中声明了一个全局的变量,这个全局的变量如果要被引用,就放在*.h中并用extern来声明。

  2.如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。即下述两个函数声明没有区别:

  extern void print_externifo(); 和voidprint_externifo();

  extern在 函数中的使用:

  如果定义函数的c/cpp文件在对应的头文件中声明了定义的函数,那么在其他c/cpp文件中要使用这些函数,只需要包含这个头文件即可。

  如果你不想包含头文件,那么在c/cpp中声明该函数。一般来说,声明定义在本文件的函数不用“extern”,声明定义在其他文件中的函数用“extern”,这样在本文件中调用别的文件定义的函数就不用包含头文件include“*.h”来声明函数,声明后直接使用即可。

  举个例子:

  #vimprint_extern.c #include extern void print_extern()//这里用不用extern都可以 { printf("helloextern test!!\n"); } #vim extern_test.c #include extern void print_extern();//其实这里用不用extern都是可以的 main() { print_extern(); }

  编译:

  #gcc –c print_extern.c –o print_extern.o #gcc print_extern.o extern_test.c –o extern_test #./extern_test

【华为面试题 c语言】相关文章:

华为公司面试题04-29

华为C++笔试题05-20

经典c++面试题06-03

华为的Java面试题及答案11-22

华为面试参考面试题答案11-12

有趣的C语言笔试题06-09

C语言的论文致谢词01-09

C语言论文致谢11-25

C语言学习社会实践报告12-09

关于C语言游戏开发笔试题06-19