摩托罗拉笔试题

2230阅读 0评论2011-02-22 dongfs_love
分类:C/C++

1.求fun(10)的输出结果
  1. void fun(int x)
  2. {
  3.     if(x/2>0)fun(x/2);
  4.     printf("%d",x);
  5. }
分析:注意这里函数层层嵌套, fun(1)为最内层,fun(10)为最外层,依次输出fun(1),fun(2),fun(5),fun(10),的得到结果1,2,5,10。注意并非10,5,2,1。
 
2.stack data (栈)存在于

A.rom, B .flash C .eeprom D.ram E .none of the above

分析:D.ram。ROM的全称是Read Only Memory,即只读存储器,flash ,eeprom都是ROM家族
的一员,RAM是Random Access Memory的简称,意为随机存取存储器,也就是内存了。不管
是堆还是栈都是放在内存里的。
 
3.在空格处填上合适的语句,顺序打印出a中的数字
  1. char a[2][2][3]={{{1,6,3},{5,4,15}},{{3,5,33},{23,12,7}}};
  2.     for(int i=0;i<12;i++)
  3.         printf("%d\t",a[i/6][i/3%2][i%3]);
又如下面:
  1. int a[3][4][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,
  2. 30,31,32,33,34,35,36,37,38,39,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60};
  3. for (int i=0;i<60;i++)
  4. cout<<a[i/20][i/5%4][i%5]<<";";
  5. }

 

3.以下代码实现什么功能?
  1. void fun(char s1[], char s2[])
  2. {
  3.        while(s1++=s2++);
  4. }

A.  比较   B.  连接   C.  复制    D.  反转

分析:面试题。首先检查有没有意义,题目对不对,看选项中有没有答案。代码中把s2的地址赋给s1,显得没有什么意义。修改后的代码如下:
  1. // test2.cpp : 定义控制台应用程序的入口点。

  2. //


  3. #include "stdafx.h"

  4. /*将s2中的字符赋给s1,以'\0'结束,跳出while循环*/
  5. void fun(char s1[], char s2[])
  6. {
  7.     while((*(s1++) = *(s2++)) != '\0')
  8.         NULL;
  9. }

  10. int _tmain(int argc, _TCHAR* argv[])
  11. {
  12.     char bufFrom[10] = "abcdefghi";
  13.     char bufTo[10];
  14.     fun(bufTo,bufFrom);

  15.     for (int i=0; i<10; i++)
  16.     {
  17.         printf("%c\t",bufTo[i]);
  18.     }
  19.     return 0;
  20. }
上一篇:打印如图菱形,只用一个for循环
下一篇:通信类笔试题