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;
}