1. 程式人生 > >2015年嵌入式軟體崗位筆試題目總結

2015年嵌入式軟體崗位筆試題目總結

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;

}