您的位置:首页 > 其它

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

2014-12-21 17:07 387 查看

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: