华为经典C语言面试题(二)

转载 2017年01月03日 23:11:36

2、找错

  DSN get_SRM_no()
{
  static int SRM_no;
  int I;
  for(I=0;I<MAX_SRM;I++)
    {
       SRM_no %= MAX_SRM;
       if(MY_SRM.state==IDLE)
       {
         break;
       }
    }
    if(I>=MAX_SRM)
       return (NULL_SRM);
    else
       return SRM_no;
}


 
   
这里for循环的判断语句是后来我加上的,估计在网上流传的时候被人给弄丢了,根据对程序的分析,给补上了。估计错误应该不是这儿。

    简单的阅读一下这个函数,可以大概的可以猜测出这个函数的功能是分配一个空闲的SRAM块。方法:从上次分配的RAM块后的RAM块开始检测SRAM每个RAM块,看是否是IDLE状态,如果是IDLE则返回当前的RAM块的号SRM_no.如果所有的RAM块都不是IDLE状态,则意味着无法分配一个RAM给函数调用者,返回一个表示没有RAM可分配的标志(NULL_SRM)。

    经过上面的分析,则这里可以知道,这个函数的错误是for循环里面没有给SRM_no这个变量累加1.

    3、写出程序运行结果

  int sum(int a)
{
    auto int c=0;
    static int b=3;
    c+=1;
    b+=2;
    return(a+b+c);
}
void main()
{
    int I;
    int a=2;
    for(I=0;I<5;I++)
    {
       printf("%d,", sum(a));
    }
}



    运行结果是:8,10,12,14,16,

    在求和函数sum里面c是auto变量,根据auto变量特性知每次调用sum函数时变量c都会自动赋值为0.b是static变量,根据static变量特性知每次调用sum函数时变量b都会使用上次调用sum函数时b保存的值。

    简单的分析一下函数,可以知道,若传入的参数不变,则每次调用sum函数返回的结果,都比上次多2.所以答案是:8,10,12,14,16,

  4、func(1) = ?
int func(int a)
{
    int b;
    switch(a)
    {
        case 1: 30;
        case 2: 20;
        case 3: 16;
        default: 0;
    }
    return b;
}



    在 case 语句中可能忘记了对变量b赋值。如果改为下面的代码:

  int func(int a)
{
    int b;
    switch(a)
    {
        case 1:      b = 30;
        case 2:      b = 20;
        case 3:      b = 16;
        default:     b = 0;
    }
    return b;
}


 
    
因为case语句中漏掉了break语句,所以无论传给函数的参数是多少,运行结果均为0.

C++面试题(摘之网络)

1.是不是一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态? virtual修饰符会被隐形继承的。private 也被集成,只事派生类没有访问权限而已vir...
  • paobo
  • paobo
  • 2006年02月24日 16:13
  • 711

C语言中volatile关键字的作用

一.前言1.编译器优化介绍:由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相...
  • tigerjb
  • tigerjb
  • 2012年04月05日 10:04
  • 102378

内存的存储方式 static关键字的作用

内存的存储方式 1.从静态存储区域分配 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。静态分配的区域的生命期是整个软件运行期,就是说从软件运行...
  • a6ds5s
  • a6ds5s
  • 2016年04月17日 21:48
  • 738

几道经典C语言面试题(华为)

  • 2011年11月12日 15:12
  • 28KB
  • 下载

重解几道华为经典C语言面试题

重解几道华为经典C语言面试题          1、找错     1、找错   void test1() {     char str...
  • Li_soso
  • Li_soso
  • 2013年01月14日 12:30
  • 429

C语言面试题之华为篇

  • 2007年11月04日 15:13
  • 44KB
  • 下载

华为面试题:开放的书名检索库 c语言源码

开放的书名检索库 实现一个开放的书名检索库。库中存储了若干个书名。用户可以:指定搜索条件,搜索库中符合条件的书名 重要格式说明 单词 由小写英文字母组成,不含其它字符。 书名 由一个或多个...

华为面试题:识别有效的ip地址和子网掩码并分类 C语言源码

识别有效的ip地址和子网掩码并分类: 按行输入多组数据 10.8.9.2~255.0.0.0 180.8.9.2~255.254.0.0 打印:A B C D E 错误的ip或掩码 私有ip 的个...

华为面试题:扑克牌大小 C语言源码

扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A、2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王): 3 4 5 ...

C语言面试题之华为篇

1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些...
  • memewry
  • memewry
  • 2012年08月29日 22:28
  • 782
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:华为经典C语言面试题(二)
举报原因:
原因补充:

(最多只允许输入30个字)