2015年嵌入式软件岗位笔试题目总结

来源:互联网 发布:手机怎么看淘宝总消费 编辑:程序博客网 时间:2024/06/04 21:33

2015年嵌入式软件试题

1、下面函数用于打印传入的参数,比如:

print_cpu_util(10000,"xx");

print_cpu_util(3333,"xy");

输出的效果是:

100.0 %  xx

33.33 %  xy

请完成下面代码空格部分

#define COL_MAX 81

void print_cpu_util(int util,char*task_name)

{

         charbuf[COL_MAX];

         snprintf(buf,COL_MAX,"%d.%d  %%  %s",util/100,util%100,task_name);

         printf("%s\n",buf);

}

 

2、小朋友被罚抄写““这句500遍,小朋友连复制黏贴都想免掉,于是写下了下面的代码,请补齐空格部分。

int main(){

         int i;

         for(i=-1;i<499;i++)

         {

                   printf("Iwill not throw paper airplanes in class. \n");

         }

         return 0;

}

 

3、以下程序运行后,输出的结果是:jim

char *id_to_name(int index)

{

         char names[][10]={"bob","bill","jim","karl"};

         return names[index];

}

int main(){

         printf(id_to_name(2));

         return 0;

}

 

4、以下程序运行后,输出的结果是:-9,请补齐空格处代码

int test(int arg)

{

         return 0-arg;

}

int callback(int func(int),int arg)

{

         return func(arg);

}

int main(){

         printf("%d",callback(test,9));

         return 0;

}

 

5、以下程序片段运行后,输出的结果是:1314

         char a[]="hello world\r\n";

         printf("%d%d\n",strlen(a),sizeof(a));

 

6、以下程序运行后,输出的结果是:12

#define INC(data) data++

int main(){

        

         int a[]={1,2};

         int *b;

         INC(*b);

         printf("%d%d",a[0],a[1]);

         return 0;

}

 

7、以下程序运行后,输出的结果是:4

int main(){

         struct xmsg_s

         {

                   int type;

                   int msg[];

         };

        

         printf("%d",sizeof(struct xmsg_s));

         return 0;

}

 

8、以下程序运行后,输出的结果是:123

#define printf_postfix(str) do{\

         char *name;\

         name= &str[3]; \

         printf("%s",name);\

}while(0)

int main(){

         char name1[]="abc123";

         printf_postfix(name1);

         return 0;

}

 

9、请补齐以下代码,使其输出34

#define PRINT_CLINE()printf("%d",__LINE__-6);

int main(){

         PRINT_CLINE();

         PRINT_CLINE();

         return 0;

}

 

10、下面代码输出: 71

printf("%d%d",sizeof("\x01\x0\x0\x0\x0\x0"),strlen("\x01\x0\x0\x0\x0\x0"));

 

11、枚举类型定义,多个标识符用  逗号 运算符间隔。

 

12、IEEE规定MAC地址的第一个bit(LSB)等于1,表示组播地址,否则为单播。

那么请写一个宏定义用于判断传入的6字节mac地址是否是组播地址:

#define IS_MCAST(mac) (mac[0]&1)==0?0:1

 并使下面测试代码输出:10

int main(){

         printf("%d%d",IS_MCAST("\x01\x0\x0\x0\x0\x0"),IS_MCAST("\xfe\xff\xff\xff\xff\xff"));

         return 0;

}

 

13、

#define BITS_PER_LONG (sizeof(long)*8)

#define BIT_WORD(nbits) (nbits/BITS_PER_LONG)

#define BITMAP_FIRST_WORD_MASK(start)(~0ul<<((start)%BITS_PER_LONG))

#define BITMAP_LAST_WORD_MASK(nbits) \

(((nbits)%BITS_PER_LONG) ?(1ul<<((nbits)%BITS_PER_LONG))-1:~0ul)

 

void bitmap_set(unsigned long *map,intstart,int nbits)

{

         unsigned long *p;

         const int size =start +nbits;

         int bits_to_set;

         unsigned long mask_to_set;

        

         p=map+BIT_WORD(start);

         bits_to_set=BITS_PER_LONG-start;

         mask_to_set=BITMAP_FIRST_WORD_MASK(start);

         while(nbits-bits_to_set>=0)

         {

                   printf("%x%x  %d %d\n",*p,mask_to_set,bits_to_set,nbits);

                   *p|=mask_to_set;

                   nbits-=bits_to_set;

                   bits_to_set=BITS_PER_LONG;

                   mask_to_set=~0ul;

                   p++;

         }

         if(nbits)

         {

                   mask_to_set=BITMAP_LAST_WORD_MASK(nbits);

                   *p|=mask_to_set;

         }

}

 

使下面测试代码,在32位x86机器上运行结果是:c0000000 000000ff 00000000

int main(){

         unsigned long bitmap[3];

         memset(bitmap,0,sizeof(bitmap));

         bitmap_set(bitmap,30,10);

         printf("%x%x %x",bitmap[0],bitmap[1],bitmap[2]);

         return 0;

}

 

1 0
原创粉丝点击