华为经典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、关键字static的作用是什么? 这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为静态的变量...

C语言面试宝典题目分析(一)

昨天从网上找到一份Java面试宝典。然后就去找C++的,结果找到的确实C语言的。在我的概念里,一向C和C++不分(对不起,我一直写面向对象,大一时候老师密授C大法已然搞不清楚了。。),所以决定以固定间...

C语言经典面试题

C语言经典面试题....

C语言终极面试宝典

第一部分:基本概念及其它问答题 3 1、关键字static的作用是什么? 3 2、“引用”与指针的区别是什么? 3 3、.h头文件中的ifndef/define/endif 的作用? 4 ...

C语言面试笔试常考 常识点

1、局部变量能否和全局变量重名?    答:能,局部会屏蔽全局。要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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